From 941ba5ccdd351676de53e46ff7ce0bc8ed49ecdf Mon Sep 17 00:00:00 2001 From: pissang Date: Tue, 23 Jan 2018 15:14:35 +0800 Subject: [PATCH] Release 1.0.1 --- dist/claygl.es.js | 126 ++++++++----- dist/claygl.js | 399 +++++++++-------------------------------- dist/claygl.min.js | 28 +-- example/alchemyao.html | 1 + package.json | 2 +- src/version.js | 2 +- 6 files changed, 180 insertions(+), 378 deletions(-) diff --git a/dist/claygl.es.js b/dist/claygl.es.js index 798bed959..772ac07c3 100644 --- a/dist/claygl.es.js +++ b/dist/claygl.es.js @@ -1658,17 +1658,20 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -if(!GLMAT_EPSILON) { - var GLMAT_EPSILON = 0.000001; +var GLMAT_EPSILON = window.GLMAT_EPSILON; +if(GLMAT_EPSILON == null) { + GLMAT_EPSILON = 0.000001; } -if(!GLMAT_ARRAY_TYPE) { - var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array; -} +// Use Array instead of Float32Array. It seems to be much faster and higher precision. +var GLMAT_ARRAY_TYPE = window.GLMAT_ARRAY_TYPE || Array; +// if(!GLMAT_ARRAY_TYPE) { +// GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array; +// } +var GLMAT_RANDOM = window.GLMAT_RANDOM; if(!GLMAT_RANDOM) { - var GLMAT_RANDOM = Math.random; + GLMAT_RANDOM = Math.random; } /** @@ -12365,11 +12368,15 @@ var Material = Base.extend(function () { for (var u = 0; u < this._enabledUniforms.length; u++) { var symbol = this._enabledUniforms[u]; var uniformValue = this.uniforms[symbol].value; - if (uniformValue instanceof Texture) { + var uniformType = this.uniforms[symbol].type; + // Not use `instanceof` to determine if a value is texture in Material#bind. + // Use type instead, in some case texture may be in different namespaces. + // TODO Duck type validate. + if (uniformType === 't' && uniformValue) { // Reset slot uniformValue.__slot = -1; } - else if (Array.isArray(uniformValue)) { + else if (uniformType === 'tv') { for (var i = 0; i < uniformValue.length; i++) { if (uniformValue[i] instanceof Texture) { uniformValue[i].__slot = -1; @@ -12382,6 +12389,7 @@ var Material = Base.extend(function () { var symbol = this._enabledUniforms[u]; var uniform = this.uniforms[symbol]; var uniformValue = uniform.value; + var uniformType = uniform.type; // PENDING // When binding two materials with the same shader // Many uniforms will be be set twice even if they have the same value @@ -12406,7 +12414,7 @@ var Material = Base.extend(function () { } continue; } - else if (uniformValue instanceof Texture) { + else if (uniformType === 't') { if (uniformValue.__slot < 0) { var slot = program.currentTextureSlot(); var res = program.setUniform(_gl, '1i', symbol, slot); @@ -12426,9 +12434,7 @@ var Material = Base.extend(function () { continue; } // Texture Array - var exampleValue = uniformValue[0]; - - if (exampleValue instanceof Texture) { + if (uniformType === 'tv') { if (!program.hasUniform(symbol)) { continue; } @@ -12889,6 +12895,8 @@ function checkShaderErrorMsg(_gl, shader, shaderString) { } } +var tmpFloat32Array16 = new vendor.Float32Array(16); + var GLProgram = Base.extend({ uniformSemantics: {}, @@ -12951,9 +12959,16 @@ var GLProgram = Base.extend({ if (location === null || location === undefined) { return false; } + switch (type) { case 'm4': - // The matrix must be created by glmatrix and can pass it directly. + if (!(value instanceof Float32Array)) { + // Use Float32Array is much faster than array when uniformMatrix4fv. + for (var i = 0; i < value.length; i++) { + tmpFloat32Array16[i] = value[i]; + } + value = tmpFloat32Array16; + } _gl.uniformMatrix4fv(location, false, value); break; case '2i': @@ -13014,7 +13029,7 @@ var GLProgram = Base.extend({ break; case 'm4v': // Raw value - if (Array.isArray(value)) { + if (Array.isArray(value) && Array.isArray(value[0])) { var array = new vendor.Float32Array(value.length * 16); var cursor = 0; for (var i = 0; i < value.length; i++) { @@ -13025,7 +13040,7 @@ var GLProgram = Base.extend({ } _gl.uniformMatrix4fv(location, false, array); } - else if (value instanceof vendor.Float32Array) { // ArrayBufferView + else { // ArrayBufferView _gl.uniformMatrix4fv(location, false, value); } break; @@ -17319,10 +17334,8 @@ var Scene = Node.extend(function () { }, /** @lends clay.Scene.prototype. */ { - /** - * Add node to scene - * @param {Node} node - */ + + // Add node to scene addToScene: function (node) { if (node instanceof Camera) { if (this._cameraList.length > 0) { @@ -17335,10 +17348,7 @@ var Scene = Node.extend(function () { } }, - /** - * Remove node from scene - * @param {Node} node - */ + // Remove node from scene removeFromScene: function (node) { if (node instanceof Camera) { var idx = this._cameraList.indexOf(node); @@ -19223,6 +19233,9 @@ var Texture2D = Texture.extend(function () { mipmaps: [] }; }, { + + textureType: 'texture2D', + update: function (renderer) { var _gl = renderer.gl; @@ -19482,6 +19495,9 @@ var TextureCube = Texture.extend(function () { mipmaps: [] }; }, { + + textureType: 'textureCube', + update: function (renderer) { var _gl = renderer.gl; _gl.bindTexture(_gl.TEXTURE_CUBE_MAP, this._cache.get('webgl_texture')); @@ -20296,7 +20312,7 @@ var Perspective$1 = Camera.extend( /** @lends clay.camera.Perspective# */ { /** - * Vertical field of view in radians + * Vertical field of view in degrees * @type {number} */ fov: 50, @@ -21158,7 +21174,7 @@ var semanticAttributeMap = { 'TEXCOORD_1': 'texcoord1', 'WEIGHTS_0': 'weight', 'JOINTS_0': 'joint', - 'COLOR': 'color' + 'COLOR_0': 'color' }; var ARRAY_CTOR_MAP = { @@ -21857,6 +21873,8 @@ function () { material.define('fragment', 'ROUGHNESS_CHANNEL', 1); material.define('fragment', 'METALNESS_CHANNEL', 2); + material.define('fragment', 'DIFFUSEMAP_ALPHA_ALPHA'); + if (alphaTest) { material.define('fragment', 'ALPHA_TEST'); } @@ -21934,6 +21952,7 @@ function () { }); material.define('fragment', 'GLOSSINESS_CHANNEL', 3); + material.define('fragment', 'DIFFUSEMAP_ALPHA_ALPHA'); if (alphaTest) { material.define('fragment', 'ALPHA_TEST'); @@ -22011,9 +22030,21 @@ function () { } geometry.attributes[attributeName].value = weightArray; } + else if (semantic === 'COLOR_0' && size === 3) { + var colorArray = new attributeArray.constructor(attributeInfo.count * 4); + for (var i = 0; i < attributeInfo.count; i++) { + var i4 = i * 4, i3 = i * 3; + colorArray[i4] = attributeArray[i3]; + colorArray[i4 + 1] = attributeArray[i3 + 1]; + colorArray[i4 + 2] = attributeArray[i3 + 2]; + colorArray[i4 + 3] = 1; + } + geometry.attributes[attributeName].value = colorArray; + } else { geometry.attributes[attributeName].value = attributeArray; } + var attributeType = 'float'; if (attributeArray instanceof vendor.Uint16Array) { attributeType = 'ushort'; @@ -22080,6 +22111,9 @@ function () { mesh.geometry.generateTangents(); } } + if (mesh.geometry.attributes.color.value) { + mesh.material.define('VERTEX_COLOR'); + } mesh.name = GLTFLoader.generateMeshName(json.meshes, idx, pp); @@ -22710,7 +22744,7 @@ var FrameBuffer = Base.extend( // FIXME some texture format can't generate mipmap if (!texture.NPOT && texture.useMipmap && texture.minFilter === Texture.LINEAR_MIPMAP_LINEAR) { - var target = texture instanceof TextureCube ? glenum.TEXTURE_CUBE_MAP : glenum.TEXTURE_2D; + var target = texture.textureType === 'textureCube' ? glenum.TEXTURE_CUBE_MAP : glenum.TEXTURE_2D; _gl.bindTexture(target, texture.getWebGLTexture(renderer)); _gl.generateMipmap(target); _gl.bindTexture(target, null); @@ -24124,7 +24158,7 @@ cubemapUtil.prefilterEnvironmentMap = function ( var dummyScene = new Scene(); var skyEnv; - if (envMap instanceof Texture2D) { + if (envMap.textureType === 'texture2D') { // Convert panorama to cubemap var envCubemap = new TextureCube({ width: width, @@ -24788,7 +24822,7 @@ var ShadowMapPass = Base.extend(function () { // Create textures for shadow map for (var i = 0; i < this._lightsCastShadow.length; i++) { var light = this._lightsCastShadow[i]; - if (light instanceof DirectionalLight) { + if (light.type === 'DIRECTIONAL_LIGHT') { if (dirLightHasCascade) { console.warn('Only one direectional light supported with shadow cascade'); @@ -24813,7 +24847,7 @@ var ShadowMapPass = Base.extend(function () { directionalLightShadowMaps ); } - else if (light instanceof SpotLight) { + else if (light.type === 'SPOT_LIGHT') { this.renderSpotLightShadow( renderer, scene, @@ -24823,7 +24857,7 @@ var ShadowMapPass = Base.extend(function () { spotLightShadowMaps ); } - else if (light instanceof PointLight) { + else if (light.type === 'POINT_LIGHT') { this.renderPointLightShadow( renderer, scene, @@ -25939,8 +25973,8 @@ function getBeforeRenderHook2(gl, defaultDiffuseMap, defaultMetalnessMap) { gBufferMat.set('useMetalnessMap', +useMetalnessMap); gBufferMat.set('uvRepeat', uvRepeat); gBufferMat.set('uvOffset', uvOffset); - - gBufferMat.set('linear', +standardMaterial.linear); + // TODO + gBufferMat.set('linear', +standardMaterial.linear || 0); } else { program.setUniform(gl, '1f', 'metalness', metalness); @@ -25956,7 +25990,7 @@ function getBeforeRenderHook2(gl, defaultDiffuseMap, defaultMetalnessMap) { program.setUniform(gl, '2f', 'uvRepeat', uvRepeat); program.setUniform(gl, '2f', 'uvOffset', uvOffset); - program.setUniform(gl, '1i', 'linear', +standardMaterial.linear); + program.setUniform(gl, '1i', 'linear', +standardMaterial.linear || 0); } previousDiffuseMap = diffuseMap; @@ -27089,7 +27123,7 @@ sh.projectEnvironmentMap = function (renderer, envMap, opts) { var skybox; var dummyScene = new Scene(); var size = 64; - if (envMap instanceof Texture2D) { + if (envMap.textureType === 'texture2D') { skybox = new Skydome({ scene: dummyScene, environmentMap: envMap @@ -27536,15 +27570,16 @@ function collectResources(scene, textureResourceList, geometryResourceList) { for (var u = 0; u < textureUniforms.length; u++) { var uniformName = textureUniforms[u]; var val = material.uniforms[uniformName].value; + var uniformType = material.uniforms[uniformName].type; if (!val) { continue; } - if (val instanceof Texture) { + if (uniformType === 't' && val) { updateUsed(val, textureResourceList); } - else if (val instanceof Array) { + else if (uniformType === 'tv') { for (var k = 0; k < val.length; k++) { - if (val[k] instanceof Texture) { + if (val[k]) { updateUsed(val[k], textureResourceList); } } @@ -28152,7 +28187,7 @@ App3D.prototype.createAmbientCubemapLight = function (envImage, specIntensity, d var scene = this.scene; var loadPromise; - if (envImage instanceof TextureCube) { + if (envImage.textureType === 'textureCube') { loadPromise = envImage.isRenderable() ? Promise.resolve(envImage) : new Promise(function (resolve, reject) { @@ -34605,18 +34640,18 @@ var transferableUtil = { options.boundingBox = new BoundingBox(min, max); } + const geometry = new Geometry(options); + //attributes - var attributes = {}; for (var p in object.attributes) { if (object.attributes.hasOwnProperty(p)) { var attr = object.attributes[p]; - attributes[p] = new Geometry.Attribute(attr.name, attr.type, attr.size, attr.semantic); - attributes[p].value = attr.value; + geometry.attributes[p] = new Geometry.Attribute(attr.name, attr.type, attr.size, attr.semantic); + geometry.attributes[p].value = attr.value; } } - options.attributes = attributes; - return new Geometry(options); + return geometry; } }; @@ -34642,7 +34677,7 @@ function copyIfNecessary(arr, shallow) { /** * @name clay.version */ -var version = '1.0.0'; +var version = '1.0.1'; var outputEssl$1 = "@export clay.vr.disorter.output.vertex\nattribute vec2 texcoord: TEXCOORD_0;\nattribute vec3 position: POSITION;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n v_Texcoord = texcoord;\n gl_Position = vec4(position.xy, 0.5, 1.0);\n}\n@end\n@export clay.vr.disorter.output.fragment\nuniform sampler2D texture;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n gl_FragColor = texture2D(texture, v_Texcoord);\n}\n@end"; @@ -35101,3 +35136,4 @@ var vr = { }; export { animation, application, async, Camera, camera, canvas, compositor, core, deferred, dep, FrameBuffer, Geometry, geometry, gpu, Joint, Light, light, loader, Material, math, Mesh, Node, particle, picking, plugin, prePass, Renderable, Renderer, Scene, Shader, shader, Skeleton, StandardMaterial, StaticGeometry, Texture, Texture2D, TextureCube, util, version, vr }; +FydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HZXN0dXJlTWdyLmpzIiwiLi4vc3JjL3BsdWdpbi9JbmZpbml0ZVBsYW5lLmpzIiwiLi4vc3JjL3BsdWdpbi9PcmJpdENvbnRyb2wuanMiLCIuLi9zcmMvU3RhdGljR2VvbWV0cnkuanMiLCIuLi9zcmMvdXRpbC9tZXNoLmpzIiwiLi4vc3JjL3V0aWwvdHJhbnNmZXJhYmxlLmpzIiwiLi4vc3JjL3ZlcnNpb24uanMiLCIuLi9zcmMvdnIvb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvdnIvQ2FyZGJvYXJkRGlzdG9ydGVyLmpzIiwiLi4vc3JjL3ZyL1N0ZXJlb0NhbWVyYS5qcyIsIi4uL3NyYy9jbGF5Z2wuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8g57yT5Yqo5Ye95pWw5p2l6IeqIGh0dHBzOi8vZ2l0aHViLmNvbS9zb2xlL3R3ZWVuLmpzL2Jsb2IvbWFzdGVyL3NyYy9Ud2Vlbi5qc1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgY2xheS5hbmltYXRpb24uZWFzaW5nXG4gKi9cbnZhciBlYXNpbmcgPSB7XG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBsaW5lYXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGs7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY0luXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgKiBrO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNPdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBxdWFkcmF0aWNPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1YWRyYXRpY0luT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoLS1rICogKGsgLSAyKSAtIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jdWJpY0luXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gayAqIGsgKiBrO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jdWJpY091dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGN1YmljT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBjdWJpY0luT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiBrICsgMik7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YXJ0aWNJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogaztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY091dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1YXJ0aWNPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgcXVhcnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtIDAuNSAqICgoayAtPSAyKSAqIGsgKiBrICogayAtIDIpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWludGljSW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgKiBrICogayAqIGsgKiBrO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWludGljT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgcXVpbnRpY091dDogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1aW50aWNJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiBrICogayAqIGsgKyAyKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuc2ludXNvaWRhbEluXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHJldHVybiAxIC0gTWF0aC5jb3MoayAqIE1hdGguUEkgLyAyKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuc2ludXNvaWRhbE91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNpbnVzb2lkYWxPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNpbnVzb2lkYWxJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gMC41ICogKDEgLSBNYXRoLmNvcyhNYXRoLlBJICogaykpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5leHBvbmVudGlhbEluXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gayA9PT0gMCA/IDAgOiBNYXRoLnBvdygxMDI0LCBrIC0gMSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmV4cG9uZW50aWFsT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZXhwb25lbnRpYWxPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGV4cG9uZW50aWFsSW5PdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwLjUgKiAoLSBNYXRoLnBvdygyLCAtIDEwICogKGsgLSAxKSkgKyAyKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY2lyY3VsYXJJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIGsgKiBrKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY2lyY3VsYXJPdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBjaXJjdWxhck91dDogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgY2lyY3VsYXJJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gKGsgLT0gMikgKiBrKSArIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5lbGFzdGljSW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XG4gICAgICAgIGlmIChrID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoayA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0gKGEgKiBNYXRoLnBvdygyLCAxMCAqIChrIC09IDEpKSAqXG4gICAgICAgICAgICAgICAgICAgIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5lbGFzdGljT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcbiAgICAgICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhICogTWF0aC5wb3coMiwgLSAxMCAqIGspICpcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGVsYXN0aWNJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcbiAgICAgICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuIC0gMC41ICogKGEgKiBNYXRoLnBvdygyLCAxMCAqIChrIC09IDEpKVxuICAgICAgICAgICAgICAgICogTWF0aC5zaW4oKGsgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAoayAtPSAxKSlcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKiAwLjUgKyAxO1xuXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJhY2tJbjogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcyA9IDEuNzAxNTg7XG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgYmFja091dDogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcyA9IDEuNzAxNTg7XG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBiYWNrSW5PdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4ICogMS41MjU7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdW5jZUluOiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHJldHVybiAxIC0gZWFzaW5nLmJvdW5jZU91dCgxIC0gayk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZU91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xuICAgICAgICBpZiAoayA8ICgxIC8gMi43NSkpIHtcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiBrICogaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrIDwgKDIgLyAyLjc1KSkge1xuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgxLjUgLyAyLjc1KSkgKiBrICsgMC43NTtcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogKGsgLT0gKDIuMjUgLyAyLjc1KSkgKiBrICsgMC45Mzc1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdW5jZUluT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmIChrIDwgMC41KSB7XG4gICAgICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZUluKGsgKiAyKSAqIDAuNTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVhc2luZztcbiIsImltcG9ydCBFYXNpbmcgZnJvbSAnLi9lYXNpbmcnO1xuXG5mdW5jdGlvbiBub29wICgpIHt9XG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLkNsaXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubGlmZV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucGxheWJhY2tSYXRlXVxuICogQHBhcmFtIHtib29sZWFufG51bWJlcn0gW29wdHMubG9vcF0gSWYgbG9vcCBpcyBhIG51bWJlciwgaXQgaW5kaWNhdGUgdGhlIGxvb3AgY291bnQgb2YgYW5pbWF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9uZmluaXNoXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxuICovXG52YXIgQ2xpcCA9IGZ1bmN0aW9uIChvcHRzKSB7XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0O1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxpZmUgPSBvcHRzLmxpZmUgfHwgMTAwMDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5nYXAgPSBvcHRzLmdhcCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdHMucGxheWJhY2tSYXRlIHx8IDE7XG5cblxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XG5cbiAgICB0aGlzLl9sb29wID0gb3B0cy5sb29wID09IG51bGwgPyBmYWxzZSA6IG9wdHMubG9vcDtcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XG5cbiAgICBpZiAob3B0cy5lYXNpbmcgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25maW5pc2ggPSBvcHRzLm9uZmluaXNoIHx8IG5vb3A7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbnJlc3RhcnQgPSBvcHRzLm9ucmVzdGFydCB8fCBub29wO1xuXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG59O1xuXG5DbGlwLnByb3RvdHlwZSA9IHtcblxuICAgIGdhcDogMCxcblxuICAgIGxpZmU6IDAsXG5cbiAgICBkZWxheTogMCxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcbiAgICAgKi9cbiAgICBzZXRMb29wOiBmdW5jdGlvbiAobG9vcCkge1xuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcbiAgICAgICAgaWYgKGxvb3ApIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YobG9vcCkgPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gMWU4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcbiAgICAgKi9cbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZihlYXNpbmcpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZWFzaW5nID0gRWFzaW5nW2Vhc2luZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBzdGVwOiBmdW5jdGlvbiAodGltZSwgZGVsdGFUaW1lLCBzaWxlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGltZSArIHRoaXMuZGVsYXk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRlbHRhVGltZSA9IHRpbWUgLSB0aGlzLl9jdXJyZW50VGltZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IHRpbWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuICdwYXVzZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9zdGFydFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBFTkRJR04gU3luYyA/XG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xuXG4gICAgICAgIHZhciBwZXJjZW50ID0gTWF0aC5taW4odGhpcy5fZWxhcHNlZFRpbWUgLyB0aGlzLmxpZmUsIDEpO1xuXG4gICAgICAgIGlmIChwZXJjZW50IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNjaGVkdWxlO1xuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcbiAgICAgICAgICAgIHNjaGVkdWxlID0gdGhpcy5lYXNpbmcocGVyY2VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzY2hlZHVsZSA9IHBlcmNlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKCdmcmFtZScsIHNjaGVkdWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJjZW50ID09PSAxKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzdGFydEluTG9vcCh0aW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQtLTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxuICAgICAgICAgICAgICAgIC8vIEluIHRoZSBhbmltYXRpb24udXBkYXRlXG4gICAgICAgICAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmaW5pc2gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB0aW1lXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNldFRpbWU6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXAodGltZSArIHRoaXMuX3N0YXJ0VGltZSk7XG4gICAgfSxcblxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXG4gICAgICAgIC8vIEFsbCBjbGlwcyBtYXkgYmUgZXhwaXJlZCBhbmQgYWxsIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZyB2YWx1ZShwb3NpdGlvbilcbiAgICAgICAgLy8gSXQgaXMgY2xlYXJseSB3cm9uZywgc28gd2UgdXNlIHJlbWFpbmRlciB0byBhZGQgYSBvZmZzZXRcblxuICAgICAgICB2YXIgcmVtYWluZGVyID0gMDtcbiAgICAgICAgLy8gUmVtYWluZGVyIGlnbm9yZWQgaWYgcmVzdGFydCBpcyBpbnZva2VkIG1hbnVhbGx5XG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9lbGFwc2UodGltZSk7XG4gICAgICAgICAgICByZW1haW5kZXIgPSB0aGlzLl9lbGFwc2VkVGltZSAlIHRoaXMubGlmZTtcbiAgICAgICAgfVxuICAgICAgICB0aW1lID0gdGltZSB8fCBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XG5cbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgfSxcblxuICAgIGdldEVsYXBzZWRUaW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGFwc2VkVGltZTtcbiAgICB9LFxuXG4gICAgX3Jlc3RhcnRJbkxvb3A6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSAwO1xuICAgIH0sXG5cbiAgICBfZWxhcHNlOiBmdW5jdGlvbiAodGltZSwgZGVsdGFUaW1lKSB7XG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lICs9IGRlbHRhVGltZSAqIHRoaXMucGxheWJhY2tSYXRlO1xuICAgIH0sXG5cbiAgICBmaXJlOiBmdW5jdGlvbiAoZXZlbnRUeXBlLCBhcmcpIHtcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XG4gICAgICAgIGlmICh0aGlzW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgICAgIHRoaXNbZXZlbnROYW1lXSh0aGlzLnRhcmdldCwgYXJnKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2xpcCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNsaXAubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XG4gICAgICAgIGNsaXAuX2xvb3BSZW1haW5lZCA9IHRoaXMuX2xvb3BSZW1haW5lZDtcblxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XG4gICAgICAgIGNsaXAuZ2FwID0gdGhpcy5nYXA7XG4gICAgICAgIGNsaXAuZGVsYXkgPSB0aGlzLmRlbGF5O1xuXG4gICAgICAgIHJldHVybiBjbGlwO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUGF1c2UgdGhlIGNsaXAuXG4gICAgICovXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVzdW1lIHRoZSBjbGlwLlxuICAgICAqL1xuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB9XG59O1xuQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDbGlwO1xuXG5leHBvcnQgZGVmYXVsdCBDbGlwO1xuIiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XG5cbnZhciBhcnJheVNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5mdW5jdGlvbiBkZWZhdWx0R2V0dGVyKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIHRhcmdldFtrZXldO1xufVxuZnVuY3Rpb24gZGVmYXVsdFNldHRlcih0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZU51bWJlcihwMCwgcDEsIHBlcmNlbnQpIHtcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcbiAgICB2YXIgbGVuID0gcDAubGVuZ3RoO1xuICAgIGlmIChhcnJEaW0gPT0gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBpbnRlcnBvbGF0ZU51bWJlcihwMFtpXSwgcDFbaV0sIHBlcmNlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbGVuMiA9IHAwWzBdLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICBvdXRbaV1bal0gPSBpbnRlcnBvbGF0ZU51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoZGF0YSkge1xuICAgIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mKGRhdGEpID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mKGRhdGEubGVuZ3RoKSA9PSAnbnVtYmVyJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZVswXSkpIHtcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChhcnJheVNsaWNlLmNhbGwodmFsdWVbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxuICAgIHAwLCBwMSwgcDIsIHAzLCB0LCB0MiwgdDMsIG91dCwgYXJyRGltXG4pIHtcbiAgICB2YXIgbGVuID0gcDAubGVuZ3RoO1xuICAgIGlmIChhcnJEaW0gPT0gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBjYXRtdWxsUm9tSW50ZXJwb2xhdGUoXG4gICAgICAgICAgICAgICAgcDBbaV0sIHAxW2ldLCBwMltpXSwgcDNbaV0sIHQsIHQyLCB0M1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwMltpXVtqXSwgcDNbaV1bal0sXG4gICAgICAgICAgICAgICAgICAgIHQsIHQyLCB0M1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XG4gICAgdmFyIHYwID0gKHAyIC0gcDApICogMC41O1xuICAgIHZhciB2MSA9IChwMyAtIHAxKSAqIDAuNTtcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXG4gICAgICAgICAgICArICgtIDMgKiAocDEgLSBwMikgLSAyICogdjAgLSB2MSkgKiB0MlxuICAgICAgICAgICAgKyB2MCAqIHQgKyBwMTtcbn1cblxuLy8gYXJyMCBpcyBzb3VyY2UgYXJyYXksIGFycjEgaXMgdGFyZ2V0IGFycmF5LlxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxuZnVuY3Rpb24gZmlsbEFycihhcnIwLCBhcnIxLCBhcnJEaW0pIHtcbiAgICB2YXIgYXJyMExlbiA9IGFycjAubGVuZ3RoO1xuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XG4gICAgaWYgKGFycjBMZW4gIT09IGFycjFMZW4pIHtcbiAgICAgICAgLy8gRklYTUUgTm90IHdvcmsgZm9yIFR5cGVkQXJyYXlcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcbiAgICAgICAgaWYgKGlzUHJldmlvdXNMYXJnZXIpIHtcbiAgICAgICAgICAgIC8vIEN1dCB0aGUgcHJldmlvdXNcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gYXJyMExlbjsgaSA8IGFycjFMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGFycjAucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSGFuZGxpbmcgTmFOIHZhbHVlXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJyRGltID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcbiAgICAgICAgICAgICAgICBhcnIwW2ldID0gYXJyMVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycjBbaV1bal0gPSBhcnIxW2ldW2pdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBcnJheVNhbWUoYXJyMCwgYXJyMSwgYXJyRGltKSB7XG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcbiAgICBpZiAobGVuICE9PSBhcnIxLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcnJEaW0gPT09IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XG4gICAgdmFyIGdldHRlciA9IGFuaW1hdG9yLl9nZXR0ZXI7XG4gICAgdmFyIHNldHRlciA9IGFuaW1hdG9yLl9zZXR0ZXI7XG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XG5cbiAgICB2YXIgdHJhY2tMZW4gPSBrZXlmcmFtZXMubGVuZ3RoO1xuICAgIGlmICghdHJhY2tMZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcbiAgICB2YXIgZmlyc3RWYWwgPSBrZXlmcmFtZXNbMF0udmFsdWU7XG4gICAgdmFyIGlzVmFsdWVBcnJheSA9IGlzQXJyYXlMaWtlKGZpcnN0VmFsKTtcblxuICAgIC8vIEZvciB2ZXJ0aWNlcyBtb3JwaGluZ1xuICAgIHZhciBhcnJEaW0gPSAoXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcbiAgICAgICAgICAgICYmIGlzQXJyYXlMaWtlKGZpcnN0VmFsWzBdKVxuICAgICAgICApXG4gICAgICAgID8gMiA6IDE7XG4gICAgLy8gU29ydCBrZXlmcmFtZSBhcyBhc2NlbmRpbmdcbiAgICBrZXlmcmFtZXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XG4gICAgfSk7XG5cbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXG4gICAgdmFyIGtmUGVyY2VudHMgPSBbXTtcbiAgICAvLyBWYWx1ZSBvZiBlYWNoIGtleWZyYW1lXG4gICAgdmFyIGtmVmFsdWVzID0gW107XG4gICAgLy8gRWFzaW5nIGZ1bmNzIG9mIGVhY2gga2V5ZnJhbWUuXG4gICAgdmFyIGtmRWFzaW5ncyA9IFtdO1xuXG4gICAgdmFyIHByZXZWYWx1ZSA9IGtleWZyYW1lc1swXS52YWx1ZTtcbiAgICB2YXIgaXNBbGxWYWx1ZUVxdWFsID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcbiAgICAgICAga2ZQZXJjZW50cy5wdXNoKGtleWZyYW1lc1tpXS50aW1lIC8gbWF4VGltZSk7XG5cbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xuICAgICAgICB2YXIgdmFsdWUgPSBrZXlmcmFtZXNbaV0udmFsdWU7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgaWYgKCEoKGlzVmFsdWVBcnJheSAmJiBpc0FycmF5U2FtZSh2YWx1ZSwgcHJldlZhbHVlLCBhcnJEaW0pKVxuICAgICAgICAgICAgfHwgKCFpc1ZhbHVlQXJyYXkgJiYgdmFsdWUgPT09IHByZXZWYWx1ZSkpKSB7XG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBrZlZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAga2ZFYXNpbmdzLnB1c2goa2V5ZnJhbWVzW2ldLmVhc2luZyk7XG4gICAgfVxuICAgIGlmIChpc0FsbFZhbHVlRXF1YWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0VmFsdWUgPSBrZlZhbHVlc1t0cmFja0xlbiAtIDFdO1xuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBrZlZhbHVlc1tpXSA9IGxhc3RWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1ZhbHVlQXJyYXkgJiYgZmlsbEFycihnZXR0ZXIoYW5pbWF0b3IuX3RhcmdldCwgcHJvcE5hbWUpLCBsYXN0VmFsdWUsIGFyckRpbSk7XG5cbiAgICAvLyBDYWNoZSB0aGUga2V5IG9mIGxhc3QgZnJhbWUgdG8gc3BlZWQgdXAgd2hlblxuICAgIC8vIGFuaW1hdGlvbiBwbGF5YmFjayBpcyBzZXF1ZW5jeVxuICAgIHZhciBjYWNoZUtleSA9IDA7XG4gICAgdmFyIGNhY2hlUGVyY2VudCA9IDA7XG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBpLCB3O1xuICAgIHZhciBwMCwgcDEsIHAyLCBwMztcblxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHJhbmdlIGtleWZyYW1lc1xuICAgICAgICAvLyBrZjEtLS0tLWtmMi0tLS0tLS0tLWN1cnJlbnQtLS0tLS0tLWtmM1xuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxuICAgICAgICBpZiAocGVyY2VudCA8IGNhY2hlUGVyY2VudCkge1xuICAgICAgICAgICAgLy8gU3RhcnQgZnJvbSBuZXh0IGtleVxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XG4gICAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA8PSBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPiBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpIC0gMSwgdHJhY2tMZW4gLSAyKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZUtleSA9IGk7XG4gICAgICAgIGNhY2hlUGVyY2VudCA9IHBlcmNlbnQ7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gKGtmUGVyY2VudHNbaSArIDFdIC0ga2ZQZXJjZW50c1tpXSk7XG4gICAgICAgIGlmIChyYW5nZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcbiAgICAgICAgICAgIC8vIENsYW1wIDAgLSAxXG4gICAgICAgICAgICB3ID0gTWF0aC5tYXgoTWF0aC5taW4oMSwgdyksIDApO1xuICAgICAgICB9XG4gICAgICAgIHcgPSBrZkVhc2luZ3NbaSArIDFdKHcpO1xuXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcbiAgICAgICAgICAgIHAxID0ga2ZWYWx1ZXNbaV07XG4gICAgICAgICAgICBwMCA9IGtmVmFsdWVzW2kgPT09IDAgPyBpIDogaSAtIDFdO1xuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xuICAgICAgICAgICAgcDMgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAzID8gdHJhY2tMZW4gLSAxIDogaSArIDJdO1xuICAgICAgICAgICAgaWYgKGludGVycG9sYXRlcikge1xuICAgICAgICAgICAgICAgIHNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcDAsIHAxLCBwMiwgcDMsIHdcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjYXRtdWxsUm9tSW50ZXJwb2xhdGVBcnJheShcbiAgICAgICAgICAgICAgICAgICAgcDAsIHAxLCBwMiwgcDMsIHcsIHcqdywgdyp3KncsXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY2F0bXVsbFJvbUludGVycG9sYXRlKHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGVyKSB7XG4gICAgICAgICAgICAgICAgc2V0dGVyKFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2kgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVmFsdWVBcnJheSkge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLCBrZlZhbHVlc1tpKzFdLCB3LFxuICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRlTnVtYmVyKGtmVmFsdWVzW2ldLCBrZlZhbHVlc1tpKzFdLCB3KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGNsaXAgPSBuZXcgQ2xpcCh7XG4gICAgICAgIHRhcmdldDogYW5pbWF0b3IuX3RhcmdldCxcbiAgICAgICAgbGlmZTogbWF4VGltZSxcbiAgICAgICAgbG9vcDogYW5pbWF0b3IuX2xvb3AsXG4gICAgICAgIGRlbGF5OiBhbmltYXRvci5fZGVsYXksXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXG4gICAgICAgIG9uZmluaXNoOiBvbmVUcmFja0RvbmVcbiAgICB9KTtcblxuICAgIGlmIChnbG9iYWxFYXNpbmcgJiYgZ2xvYmFsRWFzaW5nICE9PSAnc3BsaW5lJykge1xuICAgICAgICBjbGlwLnNldEVhc2luZyhnbG9iYWxFYXNpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGlwO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxuICogQWZ0ZXIgY3JlYXRlZCwgd2UgY2FuIHVzZSB7QGxpbmsgY2xheS5hbmltYXRpb24uQW5pbWF0b3Ijd2hlbn0gdG8gYWRkIGFsbCBrZXlmcmFtZXMgYW5kIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciNzdGFydH0gaXQuXG4gKiBDbGlwcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIGFuaW1hdGlvbiBpbnN0YW5jZSB3aGljaCBjcmVhdGVkIHRoaXMgZGVmZXJyZWQgb2JqZWN0LlxuICpcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmFuaW1hdGlvbi5BbmltYXRvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9vcFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0dGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVycG9sYXRlclxuICovXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcbiAgICB0aGlzLl90cmFja3MgPSB7fTtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG5cbiAgICB0aGlzLl9sb29wID0gbG9vcCB8fCBmYWxzZTtcblxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xuICAgIHRoaXMuX3NldHRlciA9IHNldHRlciB8fCBkZWZhdWx0U2V0dGVyO1xuXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XG5cbiAgICB0aGlzLl9kZWxheSA9IDA7XG5cbiAgICB0aGlzLl9kb25lTGlzdCA9IFtdO1xuXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcblxuICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XG5cbiAgICB0aGlzLl9tYXhUaW1lID0gMDtcblxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xufVxuXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcbiAgICByZXR1cm4gdztcbn1cblxuQW5pbWF0b3IucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGtleS12YWx1ZSBvYmplY3QuIFZhbHVlIGNhbiBiZSBudW1iZXIsIDFkIGFuZCAyZCBhcnJheVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBbZWFzaW5nXVxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xuXG4gICAgICAgIHRoaXMuX21heFRpbWUgPSBNYXRoLm1heCh0aW1lLCB0aGlzLl9tYXhUaW1lKTtcblxuICAgICAgICBlYXNpbmcgPSAodHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJyA/IGVhc2luZyA6IGVhc2luZ0Z1bmNzW2Vhc2luZ10pIHx8IG5vb3BFYXNpbmc7XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGltZSBpcyAwXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIEVsc2VcbiAgICAgICAgICAgICAgICAvLyAgSW5pdGlhbGl6ZSB2YWx1ZSBmcm9tIGN1cnJlbnQgcHJvcCB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0dGVyKHRoaXMuX3RhcmdldCwgcHJvcE5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcbiAgICAgICAgICAgICAgICB0aW1lOiBwYXJzZUludCh0aW1lKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxuICAgICAgICAgICAgICAgIGVhc2luZzogZWFzaW5nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIEtleWZyYW1lIGVsYXBzZWQgdGltZSBzaW5jZSBsYXN0IGtleWZyYW1lXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtlYXNpbmddXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxuICAgICAqL1xuICAgIHRoZW46IGZ1bmN0aW9uIChkdXJpbmdUaW1lLCBwcm9wcywgZWFzaW5nKSB7XG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XG4gICAgICAgIHRoaXMuX2xhc3RLRlRpbWUgKz0gZHVyaW5nVGltZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBjYWxsYmFjayB3aGVuIHJ1bm5pbmcgYW5pbWF0aW9uXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBkdXJpbmc6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9vbmZyYW1lTGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQ2xlYXIgYWxsIHRyYWNrc1xuICAgICAgICB0aGlzLl90cmFja3MgPSB7fTtcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0Lmxlbmd0aCA9IDA7XG5cbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XG4gICAgICAgIHZhciBsZW4gPSBkb25lTGlzdC5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRoZSBhbmltYXRpb25cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xuXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XG5cbiAgICAgICAgdmFyIG9uZVRyYWNrRG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2xpcENvdW50LS07XG4gICAgICAgICAgICBpZiAoY2xpcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZG9uZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGxhc3RDbGlwO1xuICAgICAgICB2YXIgY2xpcE1heFRpbWUgPSAwO1xuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiB0aGlzLl90cmFja3MpIHtcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxuICAgICAgICAgICAgICAgIHRoaXMsIGdsb2JhbEVhc2luZywgb25lVHJhY2tEb25lLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0sIHByb3BOYW1lLCBzZWxmLl9pbnRlcnBvbGF0ZXIsIHNlbGYuX21heFRpbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY2xpcCkge1xuICAgICAgICAgICAgICAgIGNsaXBNYXhUaW1lID0gTWF0aC5tYXgoY2xpcE1heFRpbWUsIGNsaXAubGlmZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcbiAgICAgICAgICAgICAgICBjbGlwQ291bnQrKztcblxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5hZGRDbGlwKGNsaXApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxhc3RDbGlwID0gY2xpcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxuICAgICAgICBpZiAobGFzdENsaXApIHtcbiAgICAgICAgICAgIHZhciBvbGRPbkZyYW1lID0gbGFzdENsaXAub25mcmFtZTtcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgb2xkT25GcmFtZSh0YXJnZXQsIHBlcmNlbnQpO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbmZyYW1lTGlzdFtpXSh0YXJnZXQsIHBlcmNlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fZG9uZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgdGhlIGFuaW1hdGlvblxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2xpcExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5yZW1vdmVDbGlwKGNsaXApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXG4gICAgICovXG4gICAgZGVsYXk6IGZ1bmN0aW9uICh0aW1lKXtcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGFmdGVyIGFuaW1hdGlvbiBmaW5pc2hlZFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXG4gICAgICovXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvbmVMaXN0LnB1c2goZnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGNsaXBzIGNyZWF0ZWQgaW4gc3RhcnQgbWV0aG9kLlxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkNsaXBbXX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXG4gICAgICovXG4gICAgZ2V0Q2xpcHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdG9yO1xuIiwiLy8gMUQgQmxlbmQgY2xpcCBvZiBibGVuZCB0cmVlXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcblxuaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcblxudmFyIGNsaXBTb3J0RnVuYyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEucG9zaXRpb24gPCBiLnBvc2l0aW9uO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XG4gKiBAcHJvcGVydHkge251bWJlcn0gcG9zaXRpb25cbiAqIEBwcm9wZXJ0eSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxuICovXG5cbi8qKlxuICogMWQgYmxlbmRpbmcgbm9kZSBpbiBhbmltYXRpb24gYmxlbmQgdHJlZS5cbiAqIG91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQmxlbmQxRENsaXBcbiAqIEBleHRlbmRzIGNsYXkuYW5pbWF0aW9uLkNsaXBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubGlmZV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucGxheWJhY2tSYXRpb11cbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9uZnJhbWVdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cbiAqIEBwYXJhbSB7b2JqZWN0W119IFtvcHRzLmlucHV0c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wb3NpdGlvbl1cbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxuICovXG52YXIgQmxlbmQxRENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XG4gICAgLyoqXG4gICAgICogT3V0cHV0IGNsaXAgbXVzdCBoYXZlIGJsZW5kMUQgYW5kIGNvcHkgbWV0aG9kXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XG4gICAgICovXG4gICAgdGhpcy5vdXRwdXQgPSBvcHRzLm91dHB1dCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0W119XG4gICAgICovXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xuICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSAtSW5maW5pdHk7XG5cbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XG59O1xuXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xuQmxlbmQxRENsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmQxRENsaXA7XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0fVxuICovXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0IHx8IDBcbiAgICB9O1xuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xuXG4gICAgaWYgKCF0aGlzLmlucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLmlucHV0c1swXS5wb3NpdGlvbiA+IHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzLnVuc2hpZnQob2JqKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzLnB1c2gob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuaW5wdXRzLnNwbGljZShrZXksIG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKHRpbWUsIGRUaW1lLCBzaWxlbnQpIHtcblxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XG5cbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcbiAgICB9XG5cbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXG4gICAgaWYgKCFzaWxlbnQgJiYgcmV0ICE9PSAncGF1c2VkJykge1xuICAgICAgICB0aGlzLmZpcmUoJ2ZyYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XG4gICAgdmFyIGxlbiA9IGlucHV0cy5sZW5ndGg7XG4gICAgdmFyIG1pbiA9IGlucHV0c1swXS5wb3NpdGlvbjtcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcblxuICAgIGlmIChwb3NpdGlvbiA8PSBtaW4gfHwgcG9zaXRpb24gPj0gbWF4KSB7XG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xuICAgICAgICB2YXIgY2xpcCA9IGluMC5jbGlwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gaW4wLm9mZnNldDtcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XG4gICAgICAgIC8vIElucHV0IGNsaXAgaXMgYSBibGVuZCBjbGlwXG4gICAgICAgIC8vIFBFTkRJTkdcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29weShjbGlwLm91dHB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xuICAgICAgICB2YXIgaW4xID0gaW5wdXRzW2tleV07XG4gICAgICAgIHZhciBpbjIgPSBpbnB1dHNba2V5ICsgMV07XG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xuICAgICAgICB2YXIgY2xpcDIgPSBpbjIuY2xpcDtcbiAgICAgICAgLy8gU2V0IHRpbWUgb24gaW5wdXQgY2xpcHNcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XG4gICAgICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xuXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XG5cbiAgICAgICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XG4gICAgICAgIHRoaXMub3V0cHV0LmJsZW5kMUQoYzEsIGMyLCB3KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxuICogQHBhcmFtIHtib29sZWFufSBjbG9uZUlucHV0cyBUcnVlIGlmIGNsb25lIHRoZSBpbnB1dCBjbGlwc1xuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQxRENsaXB9XG4gKi9cbkJsZW5kMURDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIChjbG9uZUlucHV0cykge1xuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gY2xpcDtcbn07XG5cbi8vIEZpbmQgdGhlIGtleSB3aGVyZSBwb3NpdGlvbiBpbiByYW5nZSBbaW5wdXRzW2tleV0ucG9zaXRpb24sIGlucHV0c1trZXkrMV0ucG9zaXRpb24pXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcbiAgICB2YXIga2V5ID0gLTE7XG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzO1xuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLl9jYWNoZVBvc2l0aW9uIDwgcG9zaXRpb24pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NhY2hlS2V5OyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzID0gTWF0aC5taW4obGVuLTIsIHRoaXMuX2NhY2hlS2V5KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXRzW2ldLnBvc2l0aW9uICYmIHBvc2l0aW9uIDwgaW5wdXRzW2krMV0ucG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChrZXkgPj0gMCkge1xuICAgICAgICB0aGlzLl9jYWNoZUtleSA9IGtleTtcbiAgICAgICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBrZXk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDFEQ2xpcDsiLCIvLyBEZWxhdW5heSBUcmlhbmd1bGF0aW9uXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxudmFyIEVQU0lMT04gPSAxLjAgLyAxMDQ4NTc2LjA7XG5cbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcbiAgICB2YXIgeG1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB2YXIgeW1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgeW1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgaSwgZHgsIGR5LCBkbWF4LCB4bWlkLCB5bWlkO1xuXG4gICAgZm9yIChpID0gdmVydGljZXMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPCB4bWluKSB7IHhtaW4gPSB2ZXJ0aWNlc1tpXVswXTsgfVxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxuICAgICAgICBpZiAodmVydGljZXNbaV1bMV0gPCB5bWluKSB7IHltaW4gPSB2ZXJ0aWNlc1tpXVsxXTsgfVxuICAgICAgICBpZiAodmVydGljZXNbaV1bMV0gPiB5bWF4KSB7IHltYXggPSB2ZXJ0aWNlc1tpXVsxXTsgfVxuICAgIH1cblxuICAgIGR4ID0geG1heCAtIHhtaW47XG4gICAgZHkgPSB5bWF4IC0geW1pbjtcbiAgICBkbWF4ID0gTWF0aC5tYXgoZHgsIGR5KTtcbiAgICB4bWlkID0geG1pbiArIGR4ICogMC41O1xuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXG4gICAgICAgIFt4bWlkICAgICAgICAgICAgLCB5bWlkICsgMjAgKiBkbWF4XSxcbiAgICAgICAgW3htaWQgKyAyMCAqIGRtYXgsIHltaWQgLSAgICAgIGRtYXhdXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XG4gICAgdmFyIHgxID0gdmVydGljZXNbaV1bMF0sXG4gICAgICAgICAgICB5MSA9IHZlcnRpY2VzW2ldWzFdLFxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcbiAgICAgICAgICAgIHkyID0gdmVydGljZXNbal1bMV0sXG4gICAgICAgICAgICB4MyA9IHZlcnRpY2VzW2tdWzBdLFxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcbiAgICAgICAgICAgIGZhYnN5MXkyID0gTWF0aC5hYnMoeTEgLSB5MiksXG4gICAgICAgICAgICBmYWJzeTJ5MyA9IE1hdGguYWJzKHkyIC0geTMpLFxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xuXG4gICAgLyogQ2hlY2sgZm9yIGNvaW5jaWRlbnQgcG9pbnRzICovXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZWshIENvaW5jaWRlbnQgcG9pbnRzIScpO1xuICAgIH1cblxuICAgIGlmIChmYWJzeTF5MiA8IEVQU0lMT04pIHtcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcbiAgICAgICAgeGMgID0gKHgyICsgeDEpIC8gMi4wO1xuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XG4gICAgICAgIG0xICA9IC0oKHgyIC0geDEpIC8gKHkyIC0geTEpKTtcbiAgICAgICAgbXgxID0gKHgxICsgeDIpIC8gMi4wO1xuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XG4gICAgICAgIHhjICA9ICh4MyArIHgyKSAvIDIuMDtcbiAgICAgICAgeWMgID0gbTEgKiAoeGMgLSBteDEpICsgbXkxO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcbiAgICAgICAgbXgxID0gKHgxICsgeDIpIC8gMi4wO1xuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XG4gICAgICAgIG15MSA9ICh5MSArIHkyKSAvIDIuMDtcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XG4gICAgICAgIHljICA9IChmYWJzeTF5MiA+IGZhYnN5MnkzKSA/XG4gICAgICAgICAgICBtMSAqICh4YyAtIG14MSkgKyBteTEgOlxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xuICAgIH1cblxuICAgIGR4ID0geDIgLSB4YztcbiAgICBkeSA9IHkyIC0geWM7XG4gICAgcmV0dXJuIHtpOiBpLCBqOiBqLCBrOiBrLCB4OiB4YywgeTogeWMsIHI6IGR4ICogZHggKyBkeSAqIGR5fTtcbn1cblxuZnVuY3Rpb24gZGVkdXAoZWRnZXMpIHtcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcblxuICAgIGZvciAoaiA9IGVkZ2VzLmxlbmd0aDsgajsgKSB7XG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xuICAgICAgICBhID0gZWRnZXNbLS1qXTtcblxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcbiAgICAgICAgICAgIG4gPSBlZGdlc1stLWldO1xuICAgICAgICAgICAgbSA9IGVkZ2VzWy0taV07XG5cbiAgICAgICAgICAgIGlmICgoYSA9PT0gbSAmJiBiID09PSBuKSB8fCAoYSA9PT0gbiAmJiBiID09PSBtKSkge1xuICAgICAgICAgICAgICAgIGVkZ2VzLnNwbGljZShqLCAyKTtcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBkZWxhdW5heSA9IHtcbiAgICB0cmlhbmd1bGF0ZTogZnVuY3Rpb24odmVydGljZXMsIGtleSkge1xuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgdmFyIGksIGosIGluZGljZXMsIHN0LCBvcGVuLCBjbG9zZWQsIGVkZ2VzLCBkeCwgZHksIGEsIGIsIGM7XG5cbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cbiAgICAgICAgaWYgKG4gPCAzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICAvKiBTbGljZSBvdXQgdGhlIGFjdHVhbCB2ZXJ0aWNlcyBmcm9tIHRoZSBwYXNzZWQgb2JqZWN0cy4gKER1cGxpY2F0ZSB0aGVcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXG4gICAgICAgICAgICAqIGxhdGVyIG9uISkgKi9cbiAgICAgICAgdmVydGljZXMgPSB2ZXJ0aWNlcy5zbGljZSgwKTtcblxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBmb3IgKGkgPSBuOyBpLS07ICkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIE1ha2UgYW4gYXJyYXkgb2YgaW5kaWNlcyBpbnRvIHRoZSB2ZXJ0ZXggYXJyYXksIHNvcnRlZCBieSB0aGVcbiAgICAgICAgICAgICogdmVydGljZXMnIHgtcG9zaXRpb24uIEZvcmNlIHN0YWJsZSBzb3J0aW5nIGJ5IGNvbXBhcmluZyBpbmRpY2VzIGlmXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXG4gICAgICAgIGluZGljZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5zb3J0KGZ1bmN0aW9uKGksIGopIHtcbiAgICAgICAgICAgIHZhciBkaWZmID0gdmVydGljZXNbal1bMF0gLSB2ZXJ0aWNlc1tpXVswXTtcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXG4gICAgICAgICAgICAqIHRyaWFuZ2xlcyksIGFuZCBhcHBlbmQgdGhlbSBvbnRvIHRoZSBlbmQgb2YgYSAoY29weSBvZikgdGhlIHZlcnRleFxuICAgICAgICAgICAgKiBhcnJheS4gKi9cbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcbiAgICAgICAgdmVydGljZXMucHVzaChzdFswXSwgc3RbMV0sIHN0WzJdKTtcblxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcbiAgICAgICAgICAgICogZWxzZSkgYW5kIHRoZSBjbG9zZWQgbGlzdCAod2hpY2ggaXMgZW1wdHkgc2luY2Ugd2UgaGF2bid0IHByb2Nlc3NlZFxuICAgICAgICAgICAgKiBhbnkgdHJpYW5nbGVzIHlldCkuICovXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcbiAgICAgICAgY2xvc2VkID0gW107XG4gICAgICAgIGVkZ2VzICA9IFtdO1xuXG4gICAgICAgIC8qIEluY3JlbWVudGFsbHkgYWRkIGVhY2ggdmVydGV4IHRvIHRoZSBtZXNoLiAqL1xuICAgICAgICBmb3IgKGkgPSBpbmRpY2VzLmxlbmd0aDsgaS0tOyBlZGdlcy5sZW5ndGggPSAwKSB7XG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcblxuICAgICAgICAgICAgLyogRm9yIGVhY2ggb3BlbiB0cmlhbmdsZSwgY2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHBvaW50IGlzXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcbiAgICAgICAgICAgICAgICAqIGl0J3MgZWRnZXMgdG8gYW4gZWRnZSBsaXN0LiAqL1xuICAgICAgICAgICAgZm9yIChqID0gb3Blbi5sZW5ndGg7IGotLTsgKSB7XG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcbiAgICAgICAgICAgICAgICAgICAgKiB0aGVuIHRoaXMgdHJpYW5nbGUgc2hvdWxkIG5ldmVyIGdldCBjaGVja2VkIGFnYWluLiBSZW1vdmUgaXRcbiAgICAgICAgICAgICAgICAgICAgKiBmcm9tIHRoZSBvcGVuIGxpc3QsIGFkZCBpdCB0byB0aGUgY2xvc2VkIGxpc3QsIGFuZCBza2lwLiAqL1xuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XG4gICAgICAgICAgICAgICAgaWYgKGR4ID4gMC4wICYmIGR4ICogZHggPiBvcGVuW2pdLnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltqXSk7XG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBvdXRzaWRlIHRoZSBjaXJjdW1jaXJjbGUsIHNraXAgdGhpcyB0cmlhbmdsZS4gKi9cbiAgICAgICAgICAgICAgICBkeSA9IHZlcnRpY2VzW2NdWzFdIC0gb3BlbltqXS55O1xuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSB0cmlhbmdsZSBhbmQgYWRkIGl0J3MgZWRnZXMgdG8gdGhlIGVkZ2UgbGlzdC4gKi9cbiAgICAgICAgICAgICAgICBlZGdlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcbiAgICAgICAgICAgICAgICAgICAgb3BlbltqXS5qLCBvcGVuW2pdLmssXG4gICAgICAgICAgICAgICAgICAgIG9wZW5bal0uaywgb3BlbltqXS5pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBvcGVuLnNwbGljZShqLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBkb3VibGVkIGVkZ2VzLiAqL1xuICAgICAgICAgICAgZGVkdXAoZWRnZXMpO1xuXG4gICAgICAgICAgICAvKiBBZGQgYSBuZXcgdHJpYW5nbGUgZm9yIGVhY2ggZWRnZS4gKi9cbiAgICAgICAgICAgIGZvciAoaiA9IGVkZ2VzLmxlbmd0aDsgajsgKSB7XG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XG4gICAgICAgICAgICAgICAgYSA9IGVkZ2VzWy0tal07XG4gICAgICAgICAgICAgICAgb3Blbi5wdXNoKGNpcmN1bWNpcmNsZSh2ZXJ0aWNlcywgYSwgYiwgYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cbiAgICAgICAgICAgICogcmVtb3ZlIGFueSB0cmlhbmdsZXMgdGhhdCBzaGFyZSBhIHZlcnRleCB3aXRoIHRoZSBzdXBlcnRyaWFuZ2xlLFxuICAgICAgICAgICAgKiBidWlsZGluZyBhIGxpc3Qgb2YgdHJpcGxldHMgdGhhdCByZXByZXNlbnQgdHJpYW5nbGVzLiAqL1xuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5baV0pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcblxuICAgICAgICBmb3IgKGkgPSBjbG9zZWQubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XG4gICAgICAgICAgICAgICAgb3Blbi5wdXNoKGNsb3NlZFtpXS5pLCBjbG9zZWRbaV0uaiwgY2xvc2VkW2ldLmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogWWF5LCB3ZSdyZSBkb25lISAqL1xuICAgICAgICByZXR1cm4gb3BlbjtcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbih0cmksIHApIHtcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xuICAgICAgICBpZiAoKHBbMF0gPCB0cmlbMF1bMF0gJiYgcFswXSA8IHRyaVsxXVswXSAmJiBwWzBdIDwgdHJpWzJdWzBdKSB8fFxuICAgICAgICAgICAgICAgIChwWzBdID4gdHJpWzBdWzBdICYmIHBbMF0gPiB0cmlbMV1bMF0gJiYgcFswXSA+IHRyaVsyXVswXSkgfHxcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XG4gICAgICAgICAgICAgICAgKHBbMV0gPiB0cmlbMF1bMV0gJiYgcFsxXSA+IHRyaVsxXVsxXSAmJiBwWzFdID4gdHJpWzJdWzFdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYSA9IHRyaVsxXVswXSAtIHRyaVswXVswXTtcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XG4gICAgICAgIHZhciBjID0gdHJpWzFdWzFdIC0gdHJpWzBdWzFdO1xuICAgICAgICB2YXIgZCA9IHRyaVsyXVsxXSAtIHRyaVswXVsxXTtcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xuXG4gICAgICAgIC8qIERlZ2VuZXJhdGUgdHJpLiAqL1xuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB1ID0gKGQgKiAocFswXSAtIHRyaVswXVswXSkgLSBiICogKHBbMV0gLSB0cmlbMF1bMV0pKSAvIGksXG4gICAgICAgICAgICAgICAgdiA9IChhICogKHBbMV0gLSB0cmlbMF1bMV0pIC0gYyAqIChwWzBdIC0gdHJpWzBdWzBdKSkgLyBpO1xuXG4gICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIHRyaSwgZmFpbC4gKi9cbiAgICAgICAgaWYgKHUgPCAwLjAgfHwgdiA8IDAuMCB8fCAodSArIHYpID4gMS4wKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbdSwgdl07XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZGVsYXVuYXk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgZ2wtbWF0cml4IC0gSGlnaCBwZXJmb3JtYW5jZSBtYXRyaXggYW5kIHZlY3RvciBvcGVyYXRpb25zXG4gKiBAYXV0aG9yIEJyYW5kb24gSm9uZXNcbiAqIEBhdXRob3IgQ29saW4gTWFjS2VuemllIElWXG4gKiBAdmVyc2lvbiAyLjIuMlxuICovXG5cbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG5cbihmdW5jdGlvbihfZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBzaGltID0ge307XG4gIGlmICh0eXBlb2YoZXhwb3J0cykgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcbiAgICAgIHNoaW0uZXhwb3J0cyA9IHt9O1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2hpbS5leHBvcnRzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdsLW1hdHJpeCBsaXZlcyBpbiBhIGJyb3dzZXIsIGRlZmluZSBpdHMgbmFtZXNwYWNlcyBpbiBnbG9iYWxcbiAgICAgIHNoaW0uZXhwb3J0cyA9IHR5cGVvZih3aW5kb3cpICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IF9nbG9iYWw7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIGdsLW1hdHJpeCBsaXZlcyBpbiBjb21tb25qcywgZGVmaW5lIGl0cyBuYW1lc3BhY2VzIGluIGV4cG9ydHNcbiAgICBzaGltLmV4cG9ydHMgPSBleHBvcnRzO1xuICB9XG5cbiAgKGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiAgICAvKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cblxudmFyIEdMTUFUX0VQU0lMT04gPSB3aW5kb3cuR0xNQVRfRVBTSUxPTjtcbmlmKEdMTUFUX0VQU0lMT04gPT0gbnVsbCkge1xuICAgIEdMTUFUX0VQU0lMT04gPSAwLjAwMDAwMTtcbn1cblxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cbnZhciBHTE1BVF9BUlJBWV9UWVBFID0gd2luZG93LkdMTUFUX0FSUkFZX1RZUEUgfHwgQXJyYXk7XG4vLyBpZighR0xNQVRfQVJSQVlfVFlQRSkge1xuLy8gICAgIEdMTUFUX0FSUkFZX1RZUEUgPSAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpID8gRmxvYXQzMkFycmF5IDogQXJyYXk7XG4vLyB9XG5cbnZhciBHTE1BVF9SQU5ET00gPSB3aW5kb3cuR0xNQVRfUkFORE9NO1xuaWYoIUdMTUFUX1JBTkRPTSkge1xuICAgIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xufVxuXG4vKipcbiAqIEBjbGFzcyBDb21tb24gdXRpbGl0aWVzXG4gKiBAbmFtZSBnbE1hdHJpeFxuICovXG52YXIgZ2xNYXRyaXggPSB7fTtcblxuLyoqXG4gKiBTZXRzIHRoZSB0eXBlIG9mIGFycmF5IHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgdmVjdG9ycyBhbmQgbWF0cmljZXNcbiAqXG4gKiBAcGFyYW0ge1R5cGV9IHR5cGUgQXJyYXkgdHlwZSwgc3VjaCBhcyBGbG9hdDMyQXJyYXkgb3IgQXJyYXlcbiAqL1xuZ2xNYXRyaXguc2V0TWF0cml4QXJyYXlUeXBlID0gZnVuY3Rpb24odHlwZSkge1xuICAgIEdMTUFUX0FSUkFZX1RZUEUgPSB0eXBlO1xufVxuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy5nbE1hdHJpeCA9IGdsTWF0cml4O1xufVxuXG52YXIgZGVncmVlID0gTWF0aC5QSSAvIDE4MDtcblxuLyoqXG4qIENvbnZlcnQgRGVncmVlIFRvIFJhZGlhblxuKlxuKiBAcGFyYW0ge051bWJlcn0gQW5nbGUgaW4gRGVncmVlc1xuKi9cbmdsTWF0cml4LnRvUmFkaWFuID0gZnVuY3Rpb24oYSl7XG4gICAgIHJldHVybiBhICogZGVncmVlO1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIDIgRGltZW5zaW9uYWwgVmVjdG9yXG4gKiBAbmFtZSB2ZWMyXG4gKi9cblxudmFyIHZlYzIgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMyXG4gKlxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxuICovXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgyKTtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjbG9uZVxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxuICovXG52ZWMyLmNsb25lID0gZnVuY3Rpb24oYSkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgyKTtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxuICovXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgdmVjMiB0byBhbm90aGVyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgc291cmNlIHZlY3RvclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSkge1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBZGRzIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gICAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcbiAqL1xudmVjMi5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG52ZWMyLm11bCA9IHZlYzIubXVsdGlwbHk7XG5cbi8qKlxuICogRGl2aWRlcyB0d28gdmVjMidzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5kaXZpZGV9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMi5kaXYgPSB2ZWMyLmRpdmlkZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gICAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyBhIHZlYzIgYnkgYSBzY2FsYXIgbnVtYmVyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSAqIGI7XG4gICAgb3V0WzFdID0gYVsxXSAqIGI7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gdmVjMidzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XG4gICAgb3V0WzBdID0gYVswXSArIChiWzBdICogc2NhbGUpO1xuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcbiAqL1xudmVjMi5kaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkpO1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGlzdGFuY2V9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMi5kaXN0ID0gdmVjMi5kaXN0YW5jZTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXG4gKi9cbnZlYzIuc3F1YXJlZERpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgICByZXR1cm4geCp4ICsgeSp5O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXG4gKi9cbnZlYzIubGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeCp4ICsgeSp5KTtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxuICpcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXG4gKi9cbnZlYzIuc3F1YXJlZExlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXTtcbiAgICByZXR1cm4geCp4ICsgeSp5O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcblxuLyoqXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IC1hWzBdO1xuICAgIG91dFsxXSA9IC1hWzFdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gaW52ZXJ0XG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICBvdXRbMF0gPSAxLjAgLyBhWzBdO1xuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xuICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgYSB2ZWMyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXTtcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5O1xuICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgICAgICAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzInc1xuICpcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxuICovXG52ZWMyLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV07XG59O1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcbiAqIE5vdGUgdGhhdCB0aGUgY3Jvc3MgcHJvZHVjdCBtdXN0IGJ5IGRlZmluaXRpb24gcHJvZHVjZSBhIDNEIHZlY3RvclxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcbiAgICBvdXRbMF0gPSBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IHo7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICB2YXIgYXggPSBhWzBdLFxuICAgICAgICBheSA9IGFbMV07XG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gICAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcbiAqL1xudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiBzY2FsZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHttYXQyfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnRyYW5zZm9ybU1hdDIgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHk7XG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyZFxuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0MmR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDNcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHttYXQzfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVszXSAqIHkgKyBtWzZdO1xuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs0XSAqIHkgKyBtWzddO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDRcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzAnXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcbiAqL1xudmVjMi50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXTtcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMycy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMyLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cbiAqIEByZXR1cm5zIHtBcnJheX0gYVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVjID0gdmVjMi5jcmVhdGUoKTtcblxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICAgICAgdmFyIGksIGw7XG4gICAgICAgIGlmKCFzdHJpZGUpIHtcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZighb2Zmc2V0KSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoY291bnQpIHtcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07XG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH07XG59KSgpO1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IHZlYyB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxuICovXG52ZWMyLnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICd2ZWMyKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnKSc7XG59O1xuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy52ZWMyID0gdmVjMjtcbn1cbjtcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG4vKipcbiAqIEBjbGFzcyAzIERpbWVuc2lvbmFsIFZlY3RvclxuICogQG5hbWUgdmVjM1xuICovXG5cbnZhciB2ZWMzID0ge307XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjM1xuICpcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcbiAqL1xudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjbG9uZVxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxuICovXG52ZWMzLmNsb25lID0gZnVuY3Rpb24oYSkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxuICovXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDMpO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICBvdXRbMl0gPSB6O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzMgdG8gdGhlIGdpdmVuIHZhbHVlc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6KSB7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gdmVjMydzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gICAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgICBvdXRbMl0gPSBhWzJdICogYlsyXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xuXG4vKipcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICAgIG91dFsyXSA9IE1hdGgubWluKGFbMl0sIGJbMl0pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKiBiO1xuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnNjYWxlQW5kQWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBzY2FsZSkge1xuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XG4gICAgb3V0WzJdID0gYVsyXSArIChiWzJdICogc2NhbGUpO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMzJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxuICovXG52ZWMzLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcbiAgICAgICAgeiA9IGJbMl0gLSBhWzJdO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeCp4ICsgeSp5ICsgeip6KTtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxuICovXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxuICAgICAgICB5ID0gYlsxXSAtIGFbMV0sXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcbiAgICByZXR1cm4geCp4ICsgeSp5ICsgeip6O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3F1YXJlZERpc3RhbmNlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuc3FyRGlzdCA9IHZlYzMuc3F1YXJlZERpc3RhbmNlO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXG4gKi9cbnZlYzMubGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdLFxuICAgICAgICB6ID0gYVsyXTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxuICovXG52ZWMzLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xuICAgIHZhciB4ID0gYVswXSxcbiAgICAgICAgeSA9IGFbMV0sXG4gICAgICAgIHogPSBhWzJdO1xuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zcXVhcmVkTGVuZ3RofVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuc3FyTGVuID0gdmVjMy5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbmVnYXRlXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gLWFbMF07XG4gICAgb3V0WzFdID0gLWFbMV07XG4gICAgb3V0WzJdID0gLWFbMl07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBub3JtYWxpemVcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5ub3JtYWxpemUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdLFxuICAgICAgICB6ID0gYVsyXTtcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xuICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgICAgICAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxuICovXG52ZWMzLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLFxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xuXG4gICAgb3V0WzBdID0gYXkgKiBieiAtIGF6ICogYnk7XG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XG4gICAgb3V0WzJdID0gYXggKiBieSAtIGF5ICogYng7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICB2YXIgYXggPSBhWzBdLFxuICAgICAgICBheSA9IGFbMV0sXG4gICAgICAgIGF6ID0gYVsyXTtcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJhbmRvbSA9IGZ1bmN0aW9uIChvdXQsIHNjYWxlKSB7XG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG5cbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcbiAgICB2YXIgeiA9IChHTE1BVF9SQU5ET00oKSAqIDIuMCkgLSAxLjA7XG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xuXG4gICAgb3V0WzBdID0gTWF0aC5jb3MocikgKiB6U2NhbGU7XG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XG4gICAgb3V0WzJdID0geiAqIHNjYWxlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXG4gICAgICAgIHcgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxMV0gKiB6ICsgbVsxNV07XG4gICAgdyA9IHcgfHwgMS4wO1xuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xuICAgIG91dFsxXSA9IChtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXSkgLyB3O1xuICAgIG91dFsyXSA9IChtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF0pIC8gdztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBtYXQzLlxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0NH0gbSB0aGUgM3gzIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcbiAgICBvdXRbMF0gPSB4ICogbVswXSArIHkgKiBtWzNdICsgeiAqIG1bNl07XG4gICAgb3V0WzFdID0geCAqIG1bMV0gKyB5ICogbVs0XSArIHogKiBtWzddO1xuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBxdWF0XG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XG4gICAgLy8gYmVuY2htYXJrczogaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi10cmFuc2Zvcm0tdmVjMy1pbXBsZW1lbnRhdGlvbnNcblxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxuICAgICAgICBxeCA9IHFbMF0sIHF5ID0gcVsxXSwgcXogPSBxWzJdLCBxdyA9IHFbM10sXG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcbiAgICAgICAgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHksXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcbiAgICAgICAgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxuICAgIG91dFswXSA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHgtYXhpc1xuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xuICAgdmFyIHAgPSBbXSwgcj1bXTtcbiAgICAgIC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgICAgIHBbMV0gPSBhWzFdIC0gYlsxXTtcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XG5cbiAgICAgIC8vcGVyZm9ybSByb3RhdGlvblxuICAgICAgclswXSA9IHBbMF07XG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XG4gICAgICByWzJdID0gcFsxXSpNYXRoLnNpbihjKSArIHBbMl0qTWF0aC5jb3MoYyk7XG5cbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cbiAgICAgIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICAgICAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJvdGF0ZVkgPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xuICAgIHZhciBwID0gW10sIHI9W107XG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xuXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xuICAgIHJbMV0gPSBwWzFdO1xuICAgIHJbMl0gPSBwWzJdKk1hdGguY29zKGMpIC0gcFswXSpNYXRoLnNpbihjKTtcblxuICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHotYXhpc1xuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJvdGF0ZVogPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xuICAgIHZhciBwID0gW10sIHI9W107XG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xuXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXG4gICAgclswXSA9IHBbMF0qTWF0aC5jb3MoYykgLSBwWzFdKk1hdGguc2luKGMpO1xuICAgIHJbMV0gPSBwWzBdKk1hdGguc2luKGMpICsgcFsxXSpNYXRoLmNvcyhjKTtcbiAgICByWzJdID0gcFsyXTtcblxuICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMzcy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMzLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjM3MgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cbiAqIEByZXR1cm5zIHtBcnJheX0gYVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVjID0gdmVjMy5jcmVhdGUoKTtcblxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICAgICAgdmFyIGksIGw7XG4gICAgICAgIGlmKCFzdHJpZGUpIHtcbiAgICAgICAgICAgIHN0cmlkZSA9IDM7XG4gICAgICAgIH1cblxuICAgICAgICBpZighb2Zmc2V0KSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoY291bnQpIHtcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdOyBhW2krMl0gPSB2ZWNbMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIDNEIHZlY3RvcnNcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAqL1xudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIHZhciB0ZW1wQSA9IHZlYzMuZnJvbVZhbHVlcyhhWzBdLCBhWzFdLCBhWzJdKTtcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XG5cbiAgICB2ZWMzLm5vcm1hbGl6ZSh0ZW1wQSwgdGVtcEEpO1xuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XG5cbiAgICB2YXIgY29zaW5lID0gdmVjMy5kb3QodGVtcEEsIHRlbXBCKTtcblxuICAgIGlmKGNvc2luZSA+IDEuMCl7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLmFjb3MoY29zaW5lKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IHZlYyB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxuICovXG52ZWMzLnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICd2ZWMzKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcpJztcbn07XG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLnZlYzMgPSB2ZWMzO1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIDQgRGltZW5zaW9uYWwgVmVjdG9yXG4gKiBAbmFtZSB2ZWM0XG4gKi9cblxudmFyIHZlYzQgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWM0XG4gKlxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxuICovXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxuICpcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcbiAqL1xudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcbiAqL1xudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgb3V0WzJdID0gejtcbiAgICBvdXRbM10gPSB3O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWM0IHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBzb3VyY2UgdmVjdG9yXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNCB0byB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgb3V0WzNdID0gdztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBZGRzIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gICAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xuICpcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xuICAgIG91dFszXSA9IGFbM10gKiBiWzNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG52ZWM0Lm11bCA9IHZlYzQubXVsdGlwbHk7XG5cbi8qKlxuICogRGl2aWRlcyB0d28gdmVjNCdzXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzR9IG91dFxuICovXG52ZWM0LmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXZpZGV9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5kaXYgPSB2ZWM0LmRpdmlkZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gICAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gICAgb3V0WzNdID0gTWF0aC5taW4oYVszXSwgYlszXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzR9IG91dFxuICovXG52ZWM0Lm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xuICAgIG91dFszXSA9IE1hdGgubWF4KGFbM10sIGJbM10pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyBhIHZlYzQgYnkgYSBzY2FsYXIgbnVtYmVyXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxuICogQHJldHVybnMge3ZlYzR9IG91dFxuICovXG52ZWM0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSAqIGI7XG4gICAgb3V0WzFdID0gYVsxXSAqIGI7XG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XG4gICAgb3V0WzNdID0gYVszXSAqIGI7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gdmVjNCdzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XG4gICAgb3V0WzBdID0gYVswXSArIChiWzBdICogc2NhbGUpO1xuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcbiAgICBvdXRbMl0gPSBhWzJdICsgKGJbMl0gKiBzY2FsZSk7XG4gICAgb3V0WzNdID0gYVszXSArIChiWzNdICogc2NhbGUpO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxuICovXG52ZWM0LmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcbiAgICAgICAgeiA9IGJbMl0gLSBhWzJdLFxuICAgICAgICB3ID0gYlszXSAtIGFbM107XG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGlzdGFuY2V9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5kaXN0ID0gdmVjNC5kaXN0YW5jZTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXG4gKi9cbnZlYzQuc3F1YXJlZERpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcbiAgICAgICAgeiA9IGJbMl0gLSBhWzJdLFxuICAgICAgICB3ID0gYlszXSAtIGFbM107XG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnNxdWFyZWREaXN0YW5jZX1cbiAqIEBmdW5jdGlvblxuICovXG52ZWM0LnNxckRpc3QgPSB2ZWM0LnNxdWFyZWREaXN0YW5jZTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWM0XG4gKlxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxuICovXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXSxcbiAgICAgICAgeiA9IGFbMl0sXG4gICAgICAgIHcgPSBhWzNdO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeCp4ICsgeSp5ICsgeip6ICsgdyp3KTtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxuICpcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXG4gKi9cbnZlYzQuc3F1YXJlZExlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXSxcbiAgICAgICAgeiA9IGFbMl0sXG4gICAgICAgIHcgPSBhWzNdO1xuICAgIHJldHVybiB4KnggKyB5KnkgKyB6KnogKyB3Knc7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkTGVuZ3RofVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzQuc3FyTGVuID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbmVnYXRlXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gLWFbMF07XG4gICAgb3V0WzFdID0gLWFbMV07XG4gICAgb3V0WzJdID0gLWFbMl07XG4gICAgb3V0WzNdID0gLWFbM107XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBpbnZlcnRcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIG91dFszXSA9IDEuMCAvIGFbM107XG4gIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHZlYzRcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBub3JtYWxpemVcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC5ub3JtYWxpemUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdLFxuICAgICAgICB6ID0gYVsyXSxcbiAgICAgICAgdyA9IGFbM107XG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeSArIHoqeiArIHcqdztcbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgICAgIG91dFswXSA9IGFbMF0gKiBsZW47XG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XG4gICAgICAgIG91dFszXSA9IGFbM10gKiBsZW47XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcbiAqL1xudmVjNC5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl0gKyBhWzNdICogYlszXTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICB2YXIgYXggPSBhWzBdLFxuICAgICAgICBheSA9IGFbMV0sXG4gICAgICAgIGF6ID0gYVsyXSxcbiAgICAgICAgYXcgPSBhWzNdO1xuICAgIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICAgIG91dFszXSA9IGF3ICsgdCAqIChiWzNdIC0gYXcpO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcbiAgICBzY2FsZSA9IHNjYWxlIHx8IDEuMDtcblxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxuICAgIG91dFswXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIG91dFsxXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIG91dFszXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIHZlYzQubm9ybWFsaXplKG91dCwgb3V0KTtcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgdmVjNCB3aXRoIGEgbWF0NC5cbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLCB3ID0gYVszXTtcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSAqIHc7XG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xuICAgIG91dFsyXSA9IG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzEwXSAqIHogKyBtWzE0XSAqIHc7XG4gICAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdICogdztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBxdWF0XG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcblxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcbiAgICAgICAgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHosXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XG5cbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcbiAgICBvdXRbMV0gPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzQuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWM0cyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxuICogQHJldHVybnMge0FycmF5fSBhXG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ZWMgPSB2ZWM0LmNyZWF0ZSgpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgICAgICB2YXIgaSwgbDtcbiAgICAgICAgaWYoIXN0cmlkZSkge1xuICAgICAgICAgICAgc3RyaWRlID0gNDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjb3VudCkge1xuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdOyBhW2krM10gPSB2ZWNbM107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXG4gKlxuICogQHBhcmFtIHt2ZWM0fSB2ZWMgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcbiAqL1xudmVjNC5zdHIgPSBmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiAndmVjNCgnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcpJztcbn07XG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLnZlYzQgPSB2ZWM0O1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIDJ4MiBNYXRyaXhcbiAqIEBuYW1lIG1hdDJcbiAqL1xuXG52YXIgbWF0MiA9IHt9O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MlxuICpcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XG4gKi9cbm1hdDIuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xuICAgIG91dFswXSA9IDE7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBtYXQyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcbiAqL1xubWF0Mi5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MiB0byBhbm90aGVyXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDJ9IG91dFxuICovXG5tYXQyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XG4gKi9cbm1hdDIuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0MlxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcbiAqL1xubWF0Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gICAgaWYgKG91dCA9PT0gYSkge1xuICAgICAgICB2YXIgYTEgPSBhWzFdO1xuICAgICAgICBvdXRbMV0gPSBhWzJdO1xuICAgICAgICBvdXRbMl0gPSBhMTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXRbMF0gPSBhWzBdO1xuICAgICAgICBvdXRbMV0gPSBhWzJdO1xuICAgICAgICBvdXRbMl0gPSBhWzFdO1xuICAgICAgICBvdXRbM10gPSBhWzNdO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEludmVydHMgYSBtYXQyXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDJ9IG91dFxuICovXG5tYXQyLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICAgICAgICBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcblxuICAgIGlmICghZGV0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBkZXQgPSAxLjAgLyBkZXQ7XG5cbiAgICBvdXRbMF0gPSAgYTMgKiBkZXQ7XG4gICAgb3V0WzFdID0gLWExICogZGV0O1xuICAgIG91dFsyXSA9IC1hMiAqIGRldDtcbiAgICBvdXRbM10gPSAgYTAgKiBkZXQ7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcbiAqXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XG4gKi9cbm1hdDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIC8vIENhY2hpbmcgdGhpcyB2YWx1ZSBpcyBuZXNzZWNhcnkgaWYgb3V0ID09IGFcbiAgICB2YXIgYTAgPSBhWzBdO1xuICAgIG91dFswXSA9ICBhWzNdO1xuICAgIG91dFsxXSA9IC1hWzFdO1xuICAgIG91dFsyXSA9IC1hWzJdO1xuICAgIG91dFszXSA9ICBhMDtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MlxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxuICovXG5tYXQyLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0MidzXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge21hdDJ9IG91dFxuICovXG5tYXQyLm11bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM107XG4gICAgdmFyIGIwID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXTtcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgICBvdXRbMl0gPSBhMCAqIGIyICsgYTIgKiBiMztcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIubXVsdGlwbHl9XG4gKiBAZnVuY3Rpb25cbiAqL1xubWF0Mi5tdWwgPSBtYXQyLm11bHRpcGx5O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXQyIGJ5IHRoZSBnaXZlbiBhbmdsZVxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XG4gKi9cbm1hdDIucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XG4gICAgb3V0WzFdID0gYTEgKiAgYyArIGEzICogcztcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcbiAqKi9cbm1hdDIuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xuICAgIG91dFsxXSA9IGExICogdjA7XG4gICAgb3V0WzJdID0gYTIgKiB2MTtcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyXG4gKlxuICogQHBhcmFtIHttYXQyfSBtYXQgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAqL1xubWF0Mi5zdHIgPSBmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiAnbWF0MignICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcpJztcbn07XG5cbi8qKlxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDJcbiAqXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXG4gKi9cbm1hdDIuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuKE1hdGguc3FydChNYXRoLnBvdyhhWzBdLCAyKSArIE1hdGgucG93KGFbMV0sIDIpICsgTWF0aC5wb3coYVsyXSwgMikgKyBNYXRoLnBvdyhhWzNdLCAyKSkpXG59O1xuXG4vKipcbiAqIFJldHVybnMgTCwgRCBhbmQgVSBtYXRyaWNlcyAoTG93ZXIgdHJpYW5ndWxhciwgRGlhZ29uYWwgYW5kIFVwcGVyIHRyaWFuZ3VsYXIpIGJ5IGZhY3Rvcml6aW5nIHRoZSBpbnB1dCBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gRCB0aGUgZGlhZ29uYWwgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IFUgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcbiAqL1xuXG5tYXQyLkxEVSA9IGZ1bmN0aW9uIChMLCBELCBVLCBhKSB7XG4gICAgTFsyXSA9IGFbMl0vYVswXTtcbiAgICBVWzBdID0gYVswXTtcbiAgICBVWzFdID0gYVsxXTtcbiAgICBVWzNdID0gYVszXSAtIExbMl0gKiBVWzFdO1xuICAgIHJldHVybiBbTCwgRCwgVV07XG59O1xuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy5tYXQyID0gbWF0Mjtcbn1cbjtcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG4vKipcbiAqIEBjbGFzcyAyeDMgTWF0cml4XG4gKiBAbmFtZSBtYXQyZFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQSBtYXQyZCBjb250YWlucyBzaXggZWxlbWVudHMgZGVmaW5lZCBhczpcbiAqIDxwcmU+XG4gKiBbYSwgYywgdHgsXG4gKiAgYiwgZCwgdHldXG4gKiA8L3ByZT5cbiAqIFRoaXMgaXMgYSBzaG9ydCBmb3JtIGZvciB0aGUgM3gzIG1hdHJpeDpcbiAqIDxwcmU+XG4gKiBbYSwgYywgdHgsXG4gKiAgYiwgZCwgdHksXG4gKiAgMCwgMCwgMV1cbiAqIDwvcHJlPlxuICogVGhlIGxhc3Qgcm93IGlzIGlnbm9yZWQgc28gdGhlIGFycmF5IGlzIHNob3J0ZXIgYW5kIG9wZXJhdGlvbnMgYXJlIGZhc3Rlci5cbiAqL1xuXG52YXIgbWF0MmQgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJkXG4gKlxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XG4gKi9cbm1hdDJkLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg2KTtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAxO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gMDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQyZH0gYSBtYXRyaXggdG8gY2xvbmVcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxuICovXG5tYXQyZC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNik7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDJkIHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XG4gKi9cbm1hdDJkLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxuICovXG5tYXQyZC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xuICAgIG91dFswXSA9IDE7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDE7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNV0gPSAwO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEludmVydHMgYSBtYXQyZFxuICpcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDJkfSBvdXRcbiAqL1xubWF0MmQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmFyIGFhID0gYVswXSwgYWIgPSBhWzFdLCBhYyA9IGFbMl0sIGFkID0gYVszXSxcbiAgICAgICAgYXR4ID0gYVs0XSwgYXR5ID0gYVs1XTtcblxuICAgIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcbiAgICBpZighZGV0KXtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGRldCA9IDEuMCAvIGRldDtcblxuICAgIG91dFswXSA9IGFkICogZGV0O1xuICAgIG91dFsxXSA9IC1hYiAqIGRldDtcbiAgICBvdXRbMl0gPSAtYWMgKiBkZXQ7XG4gICAgb3V0WzNdID0gYWEgKiBkZXQ7XG4gICAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xuICAgIG91dFs1XSA9IChhYiAqIGF0eCAtIGFhICogYXR5KSAqIGRldDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXG4gKlxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxuICovXG5tYXQyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDJkJ3NcbiAqXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxuICovXG5tYXQyZC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcbiAgICAgICAgYjAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdLCBiNCA9IGJbNF0sIGI1ID0gYls1XTtcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgICBvdXRbMl0gPSBhMCAqIGIyICsgYTIgKiBiMztcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xuICAgIG91dFs1XSA9IGExICogYjQgKyBhMyAqIGI1ICsgYTU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5tYXQyZC5tdWwgPSBtYXQyZC5tdWx0aXBseTtcblxuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXQyZCBieSB0aGUgZ2l2ZW4gYW5nbGVcbiAqXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxuICovXG5tYXQyZC5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XG4gICAgb3V0WzFdID0gYTEgKiAgYyArIGEzICogcztcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gICAgb3V0WzRdID0gYTQ7XG4gICAgb3V0WzVdID0gYTU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2NhbGVzIHRoZSBtYXQyZCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxuICpcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XG4gKiovXG5tYXQyZC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xuICAgIG91dFsxXSA9IGExICogdjA7XG4gICAgb3V0WzJdID0gYTIgKiB2MTtcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xuICAgIG91dFs0XSA9IGE0O1xuICAgIG91dFs1XSA9IGE1O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXG4gKlxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gdHJhbnNsYXRlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XG4gKiovXG5tYXQyZC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XG4gICAgb3V0WzBdID0gYTA7XG4gICAgb3V0WzFdID0gYTE7XG4gICAgb3V0WzJdID0gYTI7XG4gICAgb3V0WzNdID0gYTM7XG4gICAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcbiAgICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyZFxuICpcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAqL1xubWF0MmQuc3RyID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gJ21hdDJkKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcpJztcbn07XG5cbi8qKlxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDJkXG4gKlxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cbiAqL1xubWF0MmQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuKE1hdGguc3FydChNYXRoLnBvdyhhWzBdLCAyKSArIE1hdGgucG93KGFbMV0sIDIpICsgTWF0aC5wb3coYVsyXSwgMikgKyBNYXRoLnBvdyhhWzNdLCAyKSArIE1hdGgucG93KGFbNF0sIDIpICsgTWF0aC5wb3coYVs1XSwgMikgKyAxKSlcbn07XG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLm1hdDJkID0gbWF0MmQ7XG59XG47XG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cblxuLyoqXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxuICogQG5hbWUgbWF0M1xuICovXG5cbnZhciBtYXQzID0ge307XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQzXG4gKlxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcbiAqL1xubWF0My5jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XG4gICAgb3V0WzBdID0gMTtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAxO1xuICAgIG91dFs1XSA9IDA7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgaW50byB0aGUgZ2l2ZW4gbWF0My5cbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIDN4MyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSAgIHRoZSBzb3VyY2UgNHg0IG1hdHJpeFxuICogQHJldHVybnMge21hdDN9IG91dFxuICovXG5tYXQzLmZyb21NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVs0XTtcbiAgICBvdXRbNF0gPSBhWzVdO1xuICAgIG91dFs1XSA9IGFbNl07XG4gICAgb3V0WzZdID0gYVs4XTtcbiAgICBvdXRbN10gPSBhWzldO1xuICAgIG91dFs4XSA9IGFbMTBdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MyBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcbiAqIEByZXR1cm5zIHttYXQzfSBhIG5ldyAzeDMgbWF0cml4XG4gKi9cbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDkpO1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgb3V0WzRdID0gYVs0XTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbNl07XG4gICAgb3V0WzddID0gYVs3XTtcbiAgICBvdXRbOF0gPSBhWzhdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgb3V0WzRdID0gYVs0XTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbNl07XG4gICAgb3V0WzddID0gYVs3XTtcbiAgICBvdXRbOF0gPSBhWzhdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCBhIG1hdDMgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDE7XG4gICAgb3V0WzVdID0gMDtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xuICAgIGlmIChvdXQgPT09IGEpIHtcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XG4gICAgICAgIG91dFsxXSA9IGFbM107XG4gICAgICAgIG91dFsyXSA9IGFbNl07XG4gICAgICAgIG91dFszXSA9IGEwMTtcbiAgICAgICAgb3V0WzVdID0gYVs3XTtcbiAgICAgICAgb3V0WzZdID0gYTAyO1xuICAgICAgICBvdXRbN10gPSBhMTI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0WzBdID0gYVswXTtcbiAgICAgICAgb3V0WzFdID0gYVszXTtcbiAgICAgICAgb3V0WzJdID0gYVs2XTtcbiAgICAgICAgb3V0WzNdID0gYVsxXTtcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcbiAgICAgICAgb3V0WzVdID0gYVs3XTtcbiAgICAgICAgb3V0WzZdID0gYVsyXTtcbiAgICAgICAgb3V0WzddID0gYVs1XTtcbiAgICAgICAgb3V0WzhdID0gYVs4XTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIGEgbWF0M1xuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xubWF0My5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcbiAgICAgICAgYTEwID0gYVszXSwgYTExID0gYVs0XSwgYTEyID0gYVs1XSxcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcblxuICAgICAgICBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjEsXG4gICAgICAgIGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjAsXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcblxuICAgIGlmICghZGV0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBkZXQgPSAxLjAgLyBkZXQ7XG5cbiAgICBvdXRbMF0gPSBiMDEgKiBkZXQ7XG4gICAgb3V0WzFdID0gKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0O1xuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xuICAgIG91dFszXSA9IGIxMSAqIGRldDtcbiAgICBvdXRbNF0gPSAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldDtcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XG4gICAgb3V0WzZdID0gYjIxICogZGV0O1xuICAgIG91dFs3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxuICAgICAgICBhMjAgPSBhWzZdLCBhMjEgPSBhWzddLCBhMjIgPSBhWzhdO1xuXG4gICAgb3V0WzBdID0gKGExMSAqIGEyMiAtIGExMiAqIGEyMSk7XG4gICAgb3V0WzFdID0gKGEwMiAqIGEyMSAtIGEwMSAqIGEyMik7XG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XG4gICAgb3V0WzNdID0gKGExMiAqIGEyMCAtIGExMCAqIGEyMik7XG4gICAgb3V0WzRdID0gKGEwMCAqIGEyMiAtIGEwMiAqIGEyMCk7XG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XG4gICAgb3V0WzZdID0gKGExMCAqIGEyMSAtIGExMSAqIGEyMCk7XG4gICAgb3V0WzddID0gKGEwMSAqIGEyMCAtIGEwMCAqIGEyMSk7XG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQzXG4gKlxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXG4gKi9cbm1hdDMuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxuICAgICAgICBhMjAgPSBhWzZdLCBhMjEgPSBhWzddLCBhMjIgPSBhWzhdO1xuXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDMnc1xuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xubWF0My5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcbiAgICAgICAgYTEwID0gYVszXSwgYTExID0gYVs0XSwgYTEyID0gYVs1XSxcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcblxuICAgICAgICBiMDAgPSBiWzBdLCBiMDEgPSBiWzFdLCBiMDIgPSBiWzJdLFxuICAgICAgICBiMTAgPSBiWzNdLCBiMTEgPSBiWzRdLCBiMTIgPSBiWzVdLFxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xuXG4gICAgb3V0WzBdID0gYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwO1xuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcbiAgICBvdXRbMl0gPSBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjI7XG5cbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XG4gICAgb3V0WzRdID0gYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxO1xuICAgIG91dFs1XSA9IGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMjtcblxuICAgIG91dFs2XSA9IGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMDtcbiAgICBvdXRbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0My5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5tYXQzLm11bCA9IG1hdDMubXVsdGlwbHk7XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgbWF0MyBieSB0aGUgZ2l2ZW4gdmVjdG9yXG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcbiAgICAgICAgYTEwID0gYVszXSwgYTExID0gYVs0XSwgYTEyID0gYVs1XSxcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcbiAgICAgICAgeCA9IHZbMF0sIHkgPSB2WzFdO1xuXG4gICAgb3V0WzBdID0gYTAwO1xuICAgIG91dFsxXSA9IGEwMTtcbiAgICBvdXRbMl0gPSBhMDI7XG5cbiAgICBvdXRbM10gPSBhMTA7XG4gICAgb3V0WzRdID0gYTExO1xuICAgIG91dFs1XSA9IGExMjtcblxuICAgIG91dFs2XSA9IHggKiBhMDAgKyB5ICogYTEwICsgYTIwO1xuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xuICAgIG91dFs4XSA9IHggKiBhMDIgKyB5ICogYTEyICsgYTIyO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXG5cbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XG4gICAgb3V0WzFdID0gYyAqIGEwMSArIHMgKiBhMTE7XG4gICAgb3V0WzJdID0gYyAqIGEwMiArIHMgKiBhMTI7XG5cbiAgICBvdXRbM10gPSBjICogYTEwIC0gcyAqIGEwMDtcbiAgICBvdXRbNF0gPSBjICogYTExIC0gcyAqIGEwMTtcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcblxuICAgIG91dFs2XSA9IGEyMDtcbiAgICBvdXRbN10gPSBhMjE7XG4gICAgb3V0WzhdID0gYTIyO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKiovXG5tYXQzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXTtcblxuICAgIG91dFswXSA9IHggKiBhWzBdO1xuICAgIG91dFsxXSA9IHggKiBhWzFdO1xuICAgIG91dFsyXSA9IHggKiBhWzJdO1xuXG4gICAgb3V0WzNdID0geSAqIGFbM107XG4gICAgb3V0WzRdID0geSAqIGFbNF07XG4gICAgb3V0WzVdID0geSAqIGFbNV07XG5cbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBmcm9tIGEgbWF0MmQgaW50byBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNvcHlcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqKi9cbm1hdDMuZnJvbU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IDA7XG5cbiAgICBvdXRbM10gPSBhWzJdO1xuICAgIG91dFs0XSA9IGFbM107XG4gICAgb3V0WzVdID0gMDtcblxuICAgIG91dFs2XSA9IGFbNF07XG4gICAgb3V0WzddID0gYVs1XTtcbiAgICBvdXRbOF0gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyBhIDN4MyBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxuKlxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4qIEBwYXJhbSB7cXVhdH0gcSBRdWF0ZXJuaW9uIHRvIGNyZWF0ZSBtYXRyaXggZnJvbVxuKlxuKiBAcmV0dXJucyB7bWF0M30gb3V0XG4qL1xubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM10sXG4gICAgICAgIHgyID0geCArIHgsXG4gICAgICAgIHkyID0geSArIHksXG4gICAgICAgIHoyID0geiArIHosXG5cbiAgICAgICAgeHggPSB4ICogeDIsXG4gICAgICAgIHl4ID0geSAqIHgyLFxuICAgICAgICB5eSA9IHkgKiB5MixcbiAgICAgICAgenggPSB6ICogeDIsXG4gICAgICAgIHp5ID0geiAqIHkyLFxuICAgICAgICB6eiA9IHogKiB6MixcbiAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgIHd5ID0gdyAqIHkyLFxuICAgICAgICB3eiA9IHcgKiB6MjtcblxuICAgIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICAgIG91dFszXSA9IHl4IC0gd3o7XG4gICAgb3V0WzZdID0genggKyB3eTtcblxuICAgIG91dFsxXSA9IHl4ICsgd3o7XG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XG4gICAgb3V0WzddID0genkgLSB3eDtcblxuICAgIG91dFsyXSA9IHp4IC0gd3k7XG4gICAgb3V0WzVdID0genkgKyB3eDtcbiAgICBvdXRbOF0gPSAxIC0geHggLSB5eTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyBhIDN4MyBub3JtYWwgbWF0cml4ICh0cmFuc3Bvc2UgaW52ZXJzZSkgZnJvbSB0aGUgNHg0IG1hdHJpeFxuKlxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4qIEBwYXJhbSB7bWF0NH0gYSBNYXQ0IHRvIGRlcml2ZSB0aGUgbm9ybWFsIG1hdHJpeCBmcm9tXG4qXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcbiovXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxuXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgICBpZiAoIWRldCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gICAgb3V0WzFdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gICAgb3V0WzJdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG5cbiAgICBvdXRbM10gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcbiAgICBvdXRbNF0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcblxuICAgIG91dFs2XSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0O1xuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICAgIG91dFs4XSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG1hdCBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxuICovXG5tYXQzLnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICdtYXQzKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICsgYVs4XSArICcpJztcbn07XG5cbi8qKlxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXG4gKi9cbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuKE1hdGguc3FydChNYXRoLnBvdyhhWzBdLCAyKSArIE1hdGgucG93KGFbMV0sIDIpICsgTWF0aC5wb3coYVsyXSwgMikgKyBNYXRoLnBvdyhhWzNdLCAyKSArIE1hdGgucG93KGFbNF0sIDIpICsgTWF0aC5wb3coYVs1XSwgMikgKyBNYXRoLnBvdyhhWzZdLCAyKSArIE1hdGgucG93KGFbN10sIDIpICsgTWF0aC5wb3coYVs4XSwgMikpKVxufTtcblxuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy5tYXQzID0gbWF0Mztcbn1cbjtcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG4vKipcbiAqIEBjbGFzcyA0eDQgTWF0cml4XG4gKiBAbmFtZSBtYXQ0XG4gKi9cblxudmFyIG1hdDQgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcbiAqXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxuICovXG5tYXQ0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XG4gICAgb3V0WzBdID0gMTtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IDE7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTBdID0gMTtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gMDtcbiAgICBvdXRbMTNdID0gMDtcbiAgICBvdXRbMTRdID0gMDtcbiAgICBvdXRbMTVdID0gMTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcbiAqXG4gKiBAcGFyYW0ge21hdDR9IGEgbWF0cml4IHRvIGNsb25lXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxuICovXG5tYXQ0LmNsb25lID0gZnVuY3Rpb24oYSkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs2XTtcbiAgICBvdXRbN10gPSBhWzddO1xuICAgIG91dFs4XSA9IGFbOF07XG4gICAgb3V0WzldID0gYVs5XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTFdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgICBvdXRbOV0gPSBhWzldO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxMV07XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gMTtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMDtcbiAgICBvdXRbOV0gPSAwO1xuICAgIG91dFsxMF0gPSAxO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAwO1xuICAgIG91dFsxNV0gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0NFxuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gICAgaWYgKG91dCA9PT0gYSkge1xuICAgICAgICB2YXIgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcbiAgICAgICAgICAgIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXG4gICAgICAgICAgICBhMjMgPSBhWzExXTtcblxuICAgICAgICBvdXRbMV0gPSBhWzRdO1xuICAgICAgICBvdXRbMl0gPSBhWzhdO1xuICAgICAgICBvdXRbM10gPSBhWzEyXTtcbiAgICAgICAgb3V0WzRdID0gYTAxO1xuICAgICAgICBvdXRbNl0gPSBhWzldO1xuICAgICAgICBvdXRbN10gPSBhWzEzXTtcbiAgICAgICAgb3V0WzhdID0gYTAyO1xuICAgICAgICBvdXRbOV0gPSBhMTI7XG4gICAgICAgIG91dFsxMV0gPSBhWzE0XTtcbiAgICAgICAgb3V0WzEyXSA9IGEwMztcbiAgICAgICAgb3V0WzEzXSA9IGExMztcbiAgICAgICAgb3V0WzE0XSA9IGEyMztcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXRbMF0gPSBhWzBdO1xuICAgICAgICBvdXRbMV0gPSBhWzRdO1xuICAgICAgICBvdXRbMl0gPSBhWzhdO1xuICAgICAgICBvdXRbM10gPSBhWzEyXTtcbiAgICAgICAgb3V0WzRdID0gYVsxXTtcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcbiAgICAgICAgb3V0WzZdID0gYVs5XTtcbiAgICAgICAgb3V0WzddID0gYVsxM107XG4gICAgICAgIG91dFs4XSA9IGFbMl07XG4gICAgICAgIG91dFs5XSA9IGFbNl07XG4gICAgICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xuICAgICAgICBvdXRbMTJdID0gYVszXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbN107XG4gICAgICAgIG91dFsxNF0gPSBhWzExXTtcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEludmVydHMgYSBtYXQ0XG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxuXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgICBpZiAoIWRldCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gICAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gICAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gICAgb3V0WzNdID0gKGEyMiAqIGIwNCAtIGEyMSAqIGIwNSAtIGEyMyAqIGIwMykgKiBkZXQ7XG4gICAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gICAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XG4gICAgb3V0WzZdID0gKGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSkgKiBkZXQ7XG4gICAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XG4gICAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG4gICAgb3V0WzldID0gKGEwMSAqIGIwOCAtIGEwMCAqIGIxMCAtIGEwMyAqIGIwNikgKiBkZXQ7XG4gICAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuICAgIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcbiAgICBvdXRbMTJdID0gKGExMSAqIGIwNyAtIGExMCAqIGIwOSAtIGExMiAqIGIwNikgKiBkZXQ7XG4gICAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xuICAgIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcbiAgICBvdXRbMTVdID0gKGEyMCAqIGIwMyAtIGEyMSAqIGIwMSArIGEyMiAqIGIwMCkgKiBkZXQ7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDRcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xuXG4gICAgb3V0WzBdICA9ICAoYTExICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcbiAgICBvdXRbMV0gID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xuICAgIG91dFsyXSAgPSAgKGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gICAgb3V0WzNdICA9IC0oYTAxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgICBvdXRbNF0gID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xuICAgIG91dFs1XSAgPSAgKGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XG4gICAgb3V0WzZdICA9IC0oYTAwICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgICBvdXRbN10gID0gIChhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xuICAgIG91dFs4XSAgPSAgKGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSk7XG4gICAgb3V0WzldICA9IC0oYTAwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpKTtcbiAgICBvdXRbMTBdID0gIChhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xuICAgIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XG4gICAgb3V0WzEyXSA9IC0oYTEwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMyIC0gYTEyICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpKTtcbiAgICBvdXRbMTNdID0gIChhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkpO1xuICAgIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XG4gICAgb3V0WzE1XSA9ICAoYTAwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcbiAqXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcbiAqL1xubWF0NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXG5cbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXG4gICAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXG4gICAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXG4gICAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXG4gICAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcbiAgICByZXR1cm4gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0J3NcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV07XG5cbiAgICAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcbiAgICB2YXIgYjAgID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXTtcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xuICAgIG91dFsyXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcbiAgICBvdXRbM10gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG5cbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdOyBiMyA9IGJbN107XG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFs1XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbNl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XG4gICAgb3V0WzddID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xuXG4gICAgYjAgPSBiWzhdOyBiMSA9IGJbOV07IGIyID0gYlsxMF07IGIzID0gYlsxMV07XG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbMTBdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xuICAgIG91dFsxMV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG5cbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdOyBiMyA9IGJbMTVdO1xuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xuICAgIG91dFsxNV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gYWZmaW5lIG1hdDQnc1xuICogQWRkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQubXVsdGlwbHlBZmZpbmUgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLFxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdO1xuXG4gICAgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdO1xuICAgIG91dFswXSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xuICAgIC8vIG91dFszXSA9IDA7XG5cbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdO1xuICAgIG91dFs0XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcbiAgICBvdXRbNV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xuICAgIC8vIG91dFs3XSA9IDA7XG5cbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTtcbiAgICBvdXRbOF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XG4gICAgLy8gb3V0WzExXSA9IDA7XG5cbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdO1xuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBhMzA7XG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGEzMTtcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYTMyO1xuICAgIC8vIG91dFsxNV0gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5tYXQ0Lm11bCA9IG1hdDQubXVsdGlwbHk7XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5QWZmaW5lfVxuICogQGZ1bmN0aW9uXG4gKi9cbm1hdDQubXVsQWZmaW5lID0gbWF0NC5tdWx0aXBseUFmZmluZTtcbi8qKlxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXSwgeiA9IHZbMl0sXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxuICAgICAgICBhMjAsIGEyMSwgYTIyLCBhMjM7XG5cbiAgICBpZiAoYSA9PT0gb3V0KSB7XG4gICAgICAgIG91dFsxMl0gPSBhWzBdICogeCArIGFbNF0gKiB5ICsgYVs4XSAqIHogKyBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xuICAgICAgICBvdXRbMTVdID0gYVszXSAqIHggKyBhWzddICogeSArIGFbMTFdICogeiArIGFbMTVdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGEwMCA9IGFbMF07IGEwMSA9IGFbMV07IGEwMiA9IGFbMl07IGEwMyA9IGFbM107XG4gICAgICAgIGExMCA9IGFbNF07IGExMSA9IGFbNV07IGExMiA9IGFbNl07IGExMyA9IGFbN107XG4gICAgICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcblxuICAgICAgICBvdXRbMF0gPSBhMDA7IG91dFsxXSA9IGEwMTsgb3V0WzJdID0gYTAyOyBvdXRbM10gPSBhMDM7XG4gICAgICAgIG91dFs0XSA9IGExMDsgb3V0WzVdID0gYTExOyBvdXRbNl0gPSBhMTI7IG91dFs3XSA9IGExMztcbiAgICAgICAgb3V0WzhdID0gYTIwOyBvdXRbOV0gPSBhMjE7IG91dFsxMF0gPSBhMjI7IG91dFsxMV0gPSBhMjM7XG5cbiAgICAgICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xuICAgICAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XG4gICAgICAgIG91dFsxNF0gPSBhMDIgKiB4ICsgYTEyICogeSArIGEyMiAqIHogKyBhWzE0XTtcbiAgICAgICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjM1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxuICogQHBhcmFtIHt2ZWMzfSB2IHRoZSB2ZWMzIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqKi9cbm1hdDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXTtcblxuICAgIG91dFswXSA9IGFbMF0gKiB4O1xuICAgIG91dFsxXSA9IGFbMV0gKiB4O1xuICAgIG91dFsyXSA9IGFbMl0gKiB4O1xuICAgIG91dFszXSA9IGFbM10gKiB4O1xuICAgIG91dFs0XSA9IGFbNF0gKiB5O1xuICAgIG91dFs1XSA9IGFbNV0gKiB5O1xuICAgIG91dFs2XSA9IGFbNl0gKiB5O1xuICAgIG91dFs3XSA9IGFbN10gKiB5O1xuICAgIG91dFs4XSA9IGFbOF0gKiB6O1xuICAgIG91dFs5XSA9IGFbOV0gKiB6O1xuICAgIG91dFsxMF0gPSBhWzEwXSAqIHo7XG4gICAgb3V0WzExXSA9IGFbMTFdICogejtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkLCBheGlzKSB7XG4gICAgdmFyIHggPSBheGlzWzBdLCB5ID0gYXhpc1sxXSwgeiA9IGF4aXNbMl0sXG4gICAgICAgIGxlbiA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopLFxuICAgICAgICBzLCBjLCB0LFxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXG4gICAgICAgIGExMCwgYTExLCBhMTIsIGExMyxcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzLFxuICAgICAgICBiMDAsIGIwMSwgYjAyLFxuICAgICAgICBiMTAsIGIxMSwgYjEyLFxuICAgICAgICBiMjAsIGIyMSwgYjIyO1xuXG4gICAgaWYgKE1hdGguYWJzKGxlbikgPCBHTE1BVF9FUFNJTE9OKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHggKj0gbGVuO1xuICAgIHkgKj0gbGVuO1xuICAgIHogKj0gbGVuO1xuXG4gICAgcyA9IE1hdGguc2luKHJhZCk7XG4gICAgYyA9IE1hdGguY29zKHJhZCk7XG4gICAgdCA9IDEgLSBjO1xuXG4gICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcbiAgICBhMTAgPSBhWzRdOyBhMTEgPSBhWzVdOyBhMTIgPSBhWzZdOyBhMTMgPSBhWzddO1xuICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgZWxlbWVudHMgb2YgdGhlIHJvdGF0aW9uIG1hdHJpeFxuICAgIGIwMCA9IHggKiB4ICogdCArIGM7IGIwMSA9IHkgKiB4ICogdCArIHogKiBzOyBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcbiAgICBiMTAgPSB4ICogeSAqIHQgLSB6ICogczsgYjExID0geSAqIHkgKiB0ICsgYzsgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gICAgYjIwID0geCAqIHogKiB0ICsgeSAqIHM7IGIyMSA9IHkgKiB6ICogdCAtIHggKiBzOyBiMjIgPSB6ICogeiAqIHQgKyBjO1xuXG4gICAgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cbiAgICBvdXRbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XG4gICAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xuICAgIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcbiAgICBvdXRbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XG4gICAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xuICAgIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcbiAgICBvdXRbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XG4gICAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xuICAgIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcbiAgICBvdXRbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XG4gICAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcbiAgICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xuXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgICAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgICAgICBvdXRbMTVdID0gYVsxNV07XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcbiAgICAgICAgYTEwID0gYVs0XSxcbiAgICAgICAgYTExID0gYVs1XSxcbiAgICAgICAgYTEyID0gYVs2XSxcbiAgICAgICAgYTEzID0gYVs3XSxcbiAgICAgICAgYTIwID0gYVs4XSxcbiAgICAgICAgYTIxID0gYVs5XSxcbiAgICAgICAgYTIyID0gYVsxMF0sXG4gICAgICAgIGEyMyA9IGFbMTFdO1xuXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXG4gICAgICAgIG91dFswXSAgPSBhWzBdO1xuICAgICAgICBvdXRbMV0gID0gYVsxXTtcbiAgICAgICAgb3V0WzJdICA9IGFbMl07XG4gICAgICAgIG91dFszXSAgPSBhWzNdO1xuICAgICAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgICAgICBvdXRbMTVdID0gYVsxNV07XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuICAgIG91dFs0XSA9IGExMCAqIGMgKyBhMjAgKiBzO1xuICAgIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xuICAgIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xuICAgIG91dFs3XSA9IGExMyAqIGMgKyBhMjMgKiBzO1xuICAgIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xuICAgIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xuICAgIG91dFsxMF0gPSBhMjIgKiBjIC0gYTEyICogcztcbiAgICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0LnJvdGF0ZVkgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxuICAgICAgICBhMDAgPSBhWzBdLFxuICAgICAgICBhMDEgPSBhWzFdLFxuICAgICAgICBhMDIgPSBhWzJdLFxuICAgICAgICBhMDMgPSBhWzNdLFxuICAgICAgICBhMjAgPSBhWzhdLFxuICAgICAgICBhMjEgPSBhWzldLFxuICAgICAgICBhMjIgPSBhWzEwXSxcbiAgICAgICAgYTIzID0gYVsxMV07XG5cbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcbiAgICAgICAgb3V0WzRdICA9IGFbNF07XG4gICAgICAgIG91dFs1XSAgPSBhWzVdO1xuICAgICAgICBvdXRbNl0gID0gYVs2XTtcbiAgICAgICAgb3V0WzddICA9IGFbN107XG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG4gICAgb3V0WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XG4gICAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XG4gICAgb3V0WzJdID0gYTAyICogYyAtIGEyMiAqIHM7XG4gICAgb3V0WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XG4gICAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XG4gICAgb3V0WzldID0gYTAxICogcyArIGEyMSAqIGM7XG4gICAgb3V0WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xuICAgIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXG4gICAgICAgIGEwMCA9IGFbMF0sXG4gICAgICAgIGEwMSA9IGFbMV0sXG4gICAgICAgIGEwMiA9IGFbMl0sXG4gICAgICAgIGEwMyA9IGFbM10sXG4gICAgICAgIGExMCA9IGFbNF0sXG4gICAgICAgIGExMSA9IGFbNV0sXG4gICAgICAgIGExMiA9IGFbNl0sXG4gICAgICAgIGExMyA9IGFbN107XG5cbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgICAgIG91dFs4XSAgPSBhWzhdO1xuICAgICAgICBvdXRbOV0gID0gYVs5XTtcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xuICAgICAgICBvdXRbMTFdID0gYVsxMV07XG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG4gICAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XG4gICAgb3V0WzFdID0gYTAxICogYyArIGExMSAqIHM7XG4gICAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XG4gICAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XG4gICAgb3V0WzRdID0gYTEwICogYyAtIGEwMCAqIHM7XG4gICAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XG4gICAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XG4gICAgb3V0WzddID0gYTEzICogYyAtIGEwMyAqIHM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcbiAqXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xuICogICAgIHZhciBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uIChvdXQsIHEsIHYpIHtcbiAgICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM10sXG4gICAgICAgIHgyID0geCArIHgsXG4gICAgICAgIHkyID0geSArIHksXG4gICAgICAgIHoyID0geiArIHosXG5cbiAgICAgICAgeHggPSB4ICogeDIsXG4gICAgICAgIHh5ID0geCAqIHkyLFxuICAgICAgICB4eiA9IHggKiB6MixcbiAgICAgICAgeXkgPSB5ICogeTIsXG4gICAgICAgIHl6ID0geSAqIHoyLFxuICAgICAgICB6eiA9IHogKiB6MixcbiAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgIHd5ID0gdyAqIHkyLFxuICAgICAgICB3eiA9IHcgKiB6MjtcblxuICAgIG91dFswXSA9IDEgLSAoeXkgKyB6eik7XG4gICAgb3V0WzFdID0geHkgKyB3ejtcbiAgICBvdXRbMl0gPSB4eiAtIHd5O1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0geHkgLSB3ejtcbiAgICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xuICAgIG91dFs2XSA9IHl6ICsgd3g7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSB4eiArIHd5O1xuICAgIG91dFs5XSA9IHl6IC0gd3g7XG4gICAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XG4gICAgb3V0WzExXSA9IDA7XG4gICAgb3V0WzEyXSA9IHZbMF07XG4gICAgb3V0WzEzXSA9IHZbMV07XG4gICAgb3V0WzE0XSA9IHZbMl07XG4gICAgb3V0WzE1XSA9IDE7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxubWF0NC5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM10sXG4gICAgICAgIHgyID0geCArIHgsXG4gICAgICAgIHkyID0geSArIHksXG4gICAgICAgIHoyID0geiArIHosXG5cbiAgICAgICAgeHggPSB4ICogeDIsXG4gICAgICAgIHl4ID0geSAqIHgyLFxuICAgICAgICB5eSA9IHkgKiB5MixcbiAgICAgICAgenggPSB6ICogeDIsXG4gICAgICAgIHp5ID0geiAqIHkyLFxuICAgICAgICB6eiA9IHogKiB6MixcbiAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgIHd5ID0gdyAqIHkyLFxuICAgICAgICB3eiA9IHcgKiB6MjtcblxuICAgIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICAgIG91dFsxXSA9IHl4ICsgd3o7XG4gICAgb3V0WzJdID0genggLSB3eTtcbiAgICBvdXRbM10gPSAwO1xuXG4gICAgb3V0WzRdID0geXggLSB3ejtcbiAgICBvdXRbNV0gPSAxIC0geHggLSB6ejtcbiAgICBvdXRbNl0gPSB6eSArIHd4O1xuICAgIG91dFs3XSA9IDA7XG5cbiAgICBvdXRbOF0gPSB6eCArIHd5O1xuICAgIG91dFs5XSA9IHp5IC0gd3g7XG4gICAgb3V0WzEwXSA9IDEgLSB4eCAtIHl5O1xuICAgIG91dFsxMV0gPSAwO1xuXG4gICAgb3V0WzEyXSA9IDA7XG4gICAgb3V0WzEzXSA9IDA7XG4gICAgb3V0WzE0XSA9IDA7XG4gICAgb3V0WzE1XSA9IDE7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBmcnVzdHVtIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXG4gKiBAcGFyYW0ge051bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEBwYXJhbSB7TnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge051bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtOdW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5mcnVzdHVtID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgICB2YXIgcmwgPSAxIC8gKHJpZ2h0IC0gbGVmdCksXG4gICAgICAgIHRiID0gMSAvICh0b3AgLSBib3R0b20pLFxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzBdID0gKG5lYXIgKiAyKSAqIHJsO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gKG5lYXIgKiAyKSAqIHRiO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xuICAgIG91dFs5XSA9ICh0b3AgKyBib3R0b20pICogdGI7XG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICAgIG91dFsxMV0gPSAtMTtcbiAgICBvdXRbMTJdID0gMDtcbiAgICBvdXRbMTNdID0gMDtcbiAgICBvdXRbMTRdID0gKGZhciAqIG5lYXIgKiAyKSAqIG5mO1xuICAgIG91dFsxNV0gPSAwO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGFzcGVjdCBBc3BlY3QgcmF0aW8uIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aC9oZWlnaHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbiAob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICAgIHZhciBmID0gMS4wIC8gTWF0aC50YW4oZm92eSAvIDIpLFxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzBdID0gZiAvIGFzcGVjdDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IGY7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gICAgb3V0WzExXSA9IC0xO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAoMiAqIGZhciAqIG5lYXIpICogbmY7XG4gICAgb3V0WzE1XSA9IDA7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgb3J0aG9nb25hbCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXG4gKiBAcGFyYW0ge251bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5vcnRobyA9IGZ1bmN0aW9uIChvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gICAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpLFxuICAgICAgICBidCA9IDEgLyAoYm90dG9tIC0gdG9wKSxcbiAgICAgICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICAgIG91dFswXSA9IC0yICogbHI7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNV0gPSAtMiAqIGJ0O1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAwO1xuICAgIG91dFs5XSA9IDA7XG4gICAgb3V0WzEwXSA9IDIgKiBuZjtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcbiAgICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcbiAgICBvdXRbMTRdID0gKGZhciArIG5lYXIpICogbmY7XG4gICAgb3V0WzE1XSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbG9vay1hdCBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXG4gKiBAcGFyYW0ge3ZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0Lmxvb2tBdCA9IGZ1bmN0aW9uIChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICAgIHZhciB4MCwgeDEsIHgyLCB5MCwgeTEsIHkyLCB6MCwgejEsIHoyLCBsZW4sXG4gICAgICAgIGV5ZXggPSBleWVbMF0sXG4gICAgICAgIGV5ZXkgPSBleWVbMV0sXG4gICAgICAgIGV5ZXogPSBleWVbMl0sXG4gICAgICAgIHVweCA9IHVwWzBdLFxuICAgICAgICB1cHkgPSB1cFsxXSxcbiAgICAgICAgdXB6ID0gdXBbMl0sXG4gICAgICAgIGNlbnRlcnggPSBjZW50ZXJbMF0sXG4gICAgICAgIGNlbnRlcnkgPSBjZW50ZXJbMV0sXG4gICAgICAgIGNlbnRlcnogPSBjZW50ZXJbMl07XG5cbiAgICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgR0xNQVRfRVBTSUxPTiAmJlxuICAgICAgICBNYXRoLmFicyhleWV5IC0gY2VudGVyeSkgPCBHTE1BVF9FUFNJTE9OICYmXG4gICAgICAgIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IEdMTUFUX0VQU0lMT04pIHtcbiAgICAgICAgcmV0dXJuIG1hdDQuaWRlbnRpdHkob3V0KTtcbiAgICB9XG5cbiAgICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xuICAgIHoxID0gZXlleSAtIGNlbnRlcnk7XG4gICAgejIgPSBleWV6IC0gY2VudGVyejtcblxuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQoejAgKiB6MCArIHoxICogejEgKyB6MiAqIHoyKTtcbiAgICB6MCAqPSBsZW47XG4gICAgejEgKj0gbGVuO1xuICAgIHoyICo9IGxlbjtcblxuICAgIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcbiAgICB4MSA9IHVweiAqIHowIC0gdXB4ICogejI7XG4gICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xuICAgIGlmICghbGVuKSB7XG4gICAgICAgIHgwID0gMDtcbiAgICAgICAgeDEgPSAwO1xuICAgICAgICB4MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcbiAgICAgICAgeDAgKj0gbGVuO1xuICAgICAgICB4MSAqPSBsZW47XG4gICAgICAgIHgyICo9IGxlbjtcbiAgICB9XG5cbiAgICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xuICAgIHkxID0gejIgKiB4MCAtIHowICogeDI7XG4gICAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcblxuICAgIGxlbiA9IE1hdGguc3FydCh5MCAqIHkwICsgeTEgKiB5MSArIHkyICogeTIpO1xuICAgIGlmICghbGVuKSB7XG4gICAgICAgIHkwID0gMDtcbiAgICAgICAgeTEgPSAwO1xuICAgICAgICB5MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcbiAgICAgICAgeTAgKj0gbGVuO1xuICAgICAgICB5MSAqPSBsZW47XG4gICAgICAgIHkyICo9IGxlbjtcbiAgICB9XG5cbiAgICBvdXRbMF0gPSB4MDtcbiAgICBvdXRbMV0gPSB5MDtcbiAgICBvdXRbMl0gPSB6MDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IHgxO1xuICAgIG91dFs1XSA9IHkxO1xuICAgIG91dFs2XSA9IHoxO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0geDI7XG4gICAgb3V0WzldID0geTI7XG4gICAgb3V0WzEwXSA9IHoyO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAtKHgwICogZXlleCArIHgxICogZXlleSArIHgyICogZXlleik7XG4gICAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcbiAgICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xuICAgIG91dFsxNV0gPSAxO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDRcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG1hdCBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxuICovXG5tYXQ0LnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICdtYXQ0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArXG4gICAgICAgICAgICAgICAgICAgIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgKyBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICtcbiAgICAgICAgICAgICAgICAgICAgYVs4XSArICcsICcgKyBhWzldICsgJywgJyArIGFbMTBdICsgJywgJyArIGFbMTFdICsgJywgJyArXG4gICAgICAgICAgICAgICAgICAgIGFbMTJdICsgJywgJyArIGFbMTNdICsgJywgJyArIGFbMTRdICsgJywgJyArIGFbMTVdICsgJyknO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxuICpcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cbiAqL1xubWF0NC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSArIE1hdGgucG93KGFbOV0sIDIpICsgTWF0aC5wb3coYVsxMF0sIDIpICsgTWF0aC5wb3coYVsxMV0sIDIpICsgTWF0aC5wb3coYVsxMl0sIDIpICsgTWF0aC5wb3coYVsxM10sIDIpICsgTWF0aC5wb3coYVsxNF0sIDIpICsgTWF0aC5wb3coYVsxNV0sIDIpICkpXG59O1xuXG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLm1hdDQgPSBtYXQ0O1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIFF1YXRlcm5pb25cbiAqIEBuYW1lIHF1YXRcbiAqL1xuXG52YXIgcXVhdCA9IHt9O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxuICpcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXG4gKi9cbnF1YXQuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2V0cyBhIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIG9uZVxuICogdmVjdG9yIHRvIGFub3RoZXIuXG4gKlxuICogQm90aCB2ZWN0b3JzIGFyZSBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoLlxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvbi5cbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgaW5pdGlhbCB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdG1wdmVjMyA9IHZlYzMuY3JlYXRlKCk7XG4gICAgdmFyIHhVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygxLDAsMCk7XG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcbiAgICAgICAgaWYgKGRvdCA8IC0wLjk5OTk5OSkge1xuICAgICAgICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCB4VW5pdFZlYzMsIGEpO1xuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXG4gICAgICAgICAgICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCB5VW5pdFZlYzMsIGEpO1xuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wdmVjMywgdG1wdmVjMyk7XG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xuICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSBlbHNlIGlmIChkb3QgPiAwLjk5OTk5OSkge1xuICAgICAgICAgICAgb3V0WzBdID0gMDtcbiAgICAgICAgICAgIG91dFsxXSA9IDA7XG4gICAgICAgICAgICBvdXRbMl0gPSAwO1xuICAgICAgICAgICAgb3V0WzNdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xuICAgICAgICAgICAgb3V0WzBdID0gdG1wdmVjM1swXTtcbiAgICAgICAgICAgIG91dFsxXSA9IHRtcHZlYzNbMV07XG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xuICAgICAgICAgICAgb3V0WzNdID0gMSArIGRvdDtcbiAgICAgICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBzcGVjaWZpZWQgcXVhdGVybmlvbiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlblxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXG4gKiBwZXJwZW5kaWN1bGFyIHRvIGFsbCBvdGhlciBzcGVjaWZpZWQgYXhlcy5cbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxuICogQHBhcmFtIHt2ZWMzfSByaWdodCB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJyaWdodFwiIGRpcmVjdGlvblxuICogQHBhcmFtIHt2ZWMzfSB1cCAgICB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJ1cFwiIGRpcmVjdGlvblxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LnNldEF4ZXMgPSAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgdmlldywgcmlnaHQsIHVwKSB7XG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcbiAgICAgICAgbWF0clszXSA9IHJpZ2h0WzFdO1xuICAgICAgICBtYXRyWzZdID0gcmlnaHRbMl07XG5cbiAgICAgICAgbWF0clsxXSA9IHVwWzBdO1xuICAgICAgICBtYXRyWzRdID0gdXBbMV07XG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcblxuICAgICAgICBtYXRyWzJdID0gLXZpZXdbMF07XG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcbiAgICAgICAgbWF0cls4XSA9IC12aWV3WzJdO1xuXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XG4gICAgfTtcbn0pKCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgcXVhdGVybmlvblxuICpcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIGNsb25lXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuY2xvbmUgPSB2ZWM0LmNsb25lO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cbiAqIEBmdW5jdGlvblxuICovXG5xdWF0LmZyb21WYWx1ZXMgPSB2ZWM0LmZyb21WYWx1ZXM7XG5cbi8qKlxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHF1YXQgdG8gYW5vdGhlclxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBzb3VyY2UgcXVhdGVybmlvblxuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuY29weSA9IHZlYzQuY29weTtcblxuLyoqXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKiBAZnVuY3Rpb25cbiAqL1xucXVhdC5zZXQgPSB2ZWM0LnNldDtcblxuLyoqXG4gKiBTZXQgYSBxdWF0IHRvIHRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uXG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxuICogdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIGFyb3VuZCB3aGljaCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqKi9cbnF1YXQuc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24ob3V0LCBheGlzLCByYWQpIHtcbiAgICByYWQgPSByYWQgKiAwLjU7XG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICAgIG91dFswXSA9IHMgKiBheGlzWzBdO1xuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xuICAgIG91dFsyXSA9IHMgKiBheGlzWzJdO1xuICAgIG91dFszXSA9IE1hdGguY29zKHJhZCk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gcXVhdCdzXG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqIEBmdW5jdGlvblxuICovXG5xdWF0LmFkZCA9IHZlYzQuYWRkO1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XG5cbiAgICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5O1xuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcbiAgICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5xdWF0Lm11bCA9IHF1YXQubXVsdGlwbHk7XG5cbi8qKlxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKiBAZnVuY3Rpb25cbiAqL1xucXVhdC5zY2FsZSA9IHZlYzQuc2NhbGU7XG5cbi8qKlxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcbiAgICByYWQgKj0gMC41O1xuXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcbiAgICAgICAgYnggPSBNYXRoLnNpbihyYWQpLCBidyA9IE1hdGguY29zKHJhZCk7XG5cbiAgICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieDtcbiAgICBvdXRbMV0gPSBheSAqIGJ3ICsgYXogKiBieDtcbiAgICBvdXRbMl0gPSBheiAqIGJ3IC0gYXkgKiBieDtcbiAgICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xuICAgIHJhZCAqPSAwLjU7XG5cbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxuICAgICAgICBieSA9IE1hdGguc2luKHJhZCksIGJ3ID0gTWF0aC5jb3MocmFkKTtcblxuICAgIG91dFswXSA9IGF4ICogYncgLSBheiAqIGJ5O1xuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5O1xuICAgIG91dFsyXSA9IGF6ICogYncgKyBheCAqIGJ5O1xuICAgIG91dFszXSA9IGF3ICogYncgLSBheSAqIGJ5O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqL1xucXVhdC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcmFkICo9IDAuNTtcblxuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLCBhdyA9IGFbM10sXG4gICAgICAgIGJ6ID0gTWF0aC5zaW4ocmFkKSwgYncgPSBNYXRoLmNvcyhyYWQpO1xuXG4gICAgb3V0WzBdID0gYXggKiBidyArIGF5ICogYno7XG4gICAgb3V0WzFdID0gYXkgKiBidyAtIGF4ICogYno7XG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYno7XG4gICAgb3V0WzNdID0gYXcgKiBidyAtIGF6ICogYno7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgVyBjb21wb25lbnQgb2YgYSBxdWF0IGZyb20gdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMuXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LmNhbGN1bGF0ZVcgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl07XG5cbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgb3V0WzJdID0gejtcbiAgICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHF1YXQnc1xuICpcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuZG90ID0gdmVjNC5kb3Q7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQubGVycCA9IHZlYzQubGVycDtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0XG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50IGJldHdlZW4gdGhlIHR3byBpbnB1dHNcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqL1xucXVhdC5zbGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICAvLyBiZW5jaG1hcmtzOlxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXG5cbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XG5cbiAgICB2YXIgICAgICAgIG9tZWdhLCBjb3NvbSwgc2lub20sIHNjYWxlMCwgc2NhbGUxO1xuXG4gICAgLy8gY2FsYyBjb3NpbmVcbiAgICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7XG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXG4gICAgaWYgKCBjb3NvbSA8IDAuMCApIHtcbiAgICAgICAgY29zb20gPSAtY29zb207XG4gICAgICAgIGJ4ID0gLSBieDtcbiAgICAgICAgYnkgPSAtIGJ5O1xuICAgICAgICBieiA9IC0gYno7XG4gICAgICAgIGJ3ID0gLSBidztcbiAgICB9XG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xuICAgIGlmICggKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxICkge1xuICAgICAgICAvLyBzdGFuZGFyZCBjYXNlIChzbGVycClcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xuICAgICAgICBzY2FsZTAgPSBNYXRoLnNpbigoMS4wIC0gdCkgKiBvbWVnYSkgLyBzaW5vbTtcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwiZnJvbVwiIGFuZCBcInRvXCIgcXVhdGVybmlvbnMgYXJlIHZlcnkgY2xvc2VcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xuICAgICAgICBzY2FsZTEgPSB0O1xuICAgIH1cbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXG4gICAgb3V0WzBdID0gc2NhbGUwICogYXggKyBzY2FsZTEgKiBieDtcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XG4gICAgb3V0WzNdID0gc2NhbGUwICogYXcgKyBzY2FsZTEgKiBidztcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGludmVyc2Ugb2YgYSBxdWF0XG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgaW52ZXJzZSBvZlxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXG4gICAgICAgIGRvdCA9IGEwKmEwICsgYTEqYTEgKyBhMiphMiArIGEzKmEzLFxuICAgICAgICBpbnZEb3QgPSBkb3QgPyAxLjAvZG90IDogMDtcblxuICAgIC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXG5cbiAgICBvdXRbMF0gPSAtYTAqaW52RG90O1xuICAgIG91dFsxXSA9IC1hMSppbnZEb3Q7XG4gICAgb3V0WzJdID0gLWEyKmludkRvdDtcbiAgICBvdXRbM10gPSBhMyppbnZEb3Q7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIGEgcXVhdFxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqL1xucXVhdC5jb25qdWdhdGUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gLWFbMF07XG4gICAgb3V0WzFdID0gLWFbMV07XG4gICAgb3V0WzJdID0gLWFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XG4gKlxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQubGVuZ3RoID0gdmVjNC5sZW5ndGg7XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lmxlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG5xdWF0LmxlbiA9IHF1YXQubGVuZ3RoO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxuICpcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXG4gKiBAZnVuY3Rpb25cbiAqL1xucXVhdC5zcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuc3FyTGVuID0gcXVhdC5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQubm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cbiAqXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuZnJvbU1hdDMgPSBmdW5jdGlvbihvdXQsIG0pIHtcbiAgICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xuICAgIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxuICAgIHZhciBmVHJhY2UgPSBtWzBdICsgbVs0XSArIG1bOF07XG4gICAgdmFyIGZSb290O1xuXG4gICAgaWYgKCBmVHJhY2UgPiAwLjAgKSB7XG4gICAgICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgIC8vIDJ3XG4gICAgICAgIG91dFszXSA9IDAuNSAqIGZSb290O1xuICAgICAgICBmUm9vdCA9IDAuNS9mUm9vdDsgIC8vIDEvKDR3KVxuICAgICAgICBvdXRbMF0gPSAobVs1XS1tWzddKSpmUm9vdDtcbiAgICAgICAgb3V0WzFdID0gKG1bNl0tbVsyXSkqZlJvb3Q7XG4gICAgICAgIG91dFsyXSA9IChtWzFdLW1bM10pKmZSb290O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHx3fCA8PSAxLzJcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBpZiAoIG1bNF0gPiBtWzBdIClcbiAgICAgICAgICBpID0gMTtcbiAgICAgICAgaWYgKCBtWzhdID4gbVtpKjMraV0gKVxuICAgICAgICAgIGkgPSAyO1xuICAgICAgICB2YXIgaiA9IChpKzEpJTM7XG4gICAgICAgIHZhciBrID0gKGkrMiklMztcblxuICAgICAgICBmUm9vdCA9IE1hdGguc3FydChtW2kqMytpXS1tW2oqMytqXS1tW2sqMytrXSArIDEuMCk7XG4gICAgICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xuICAgICAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xuICAgICAgICBvdXRbM10gPSAobVtqKjMra10gLSBtW2sqMytqXSkgKiBmUm9vdDtcbiAgICAgICAgb3V0W2pdID0gKG1baiozK2ldICsgbVtpKjMral0pICogZlJvb3Q7XG4gICAgICAgIG91dFtrXSA9IChtW2sqMytpXSArIG1baSozK2tdKSAqIGZSb290O1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBxdWF0ZW5pb25cbiAqXG4gKiBAcGFyYW0ge3F1YXR9IHZlYyB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxuICovXG5xdWF0LnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICdxdWF0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufTtcblxuaWYodHlwZW9mKGV4cG9ydHMpICE9PSAndW5kZWZpbmVkJykge1xuICAgIGV4cG9ydHMucXVhdCA9IHF1YXQ7XG59XG47XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgfSkoc2hpbS5leHBvcnRzKTtcbn0pKHRoaXMpOyIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzIgPSBnbE1hdHJpeC52ZWMyO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkubWF0aC5WZWN0b3IyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqL1xudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XG5cbiAgICB4ID0geCB8fCAwO1xuICAgIHkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5IGNvbXBvbmVudHNcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3IyI1xuICAgICAqL1xuICAgIHRoaXMuYXJyYXkgPSB2ZWMyLmZyb21WYWx1ZXMoeCwgeSk7XG5cbiAgICAvKipcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxuICAgICAqIEBuYW1lIF9kaXJ0eVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yMiNcbiAgICAgKi9cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG59O1xuXG5WZWN0b3IyLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxuXG4gICAgLyoqXG4gICAgICogQWRkIGIgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IGFyclswXTtcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcblxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IHgsIHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3Jvc3MgcHJvZHVjdCBvZiBzZWxmIGFuZCBiLCB3cml0dGVuIHRvIGEgVmVjdG9yMyBvdXRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XG4gICAgICAgIHZlYzIuY3Jvc3Mob3V0LmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZGlzdGFuY2VcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLmRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLmRpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBkaXY6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjMi5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIGRpdmlkZTogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWMyLmRpdmlkZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGRvdDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIGxlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBsZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjMi5sZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLmxlbmd0aCh0aGlzLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBsZXJwOiBmdW5jdGlvbihhLCBiLCB0KSB7XG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBtaW46IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgbWF4OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIG11bDogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBOZWdhdGUgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIG5lZ2F0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XG4gICAgICAgIHZlYzIucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgc2VsZlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgdmVjMi5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uKGIsIHMpIHtcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjMi5zcXJMZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjMi5zdWJ0cmFjdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDIgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MjogZnVuY3Rpb24obSkge1xuICAgICAgICB2ZWMyLnRyYW5zZm9ybU1hdDIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyZCBtXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MmQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDMgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24obSkge1xuICAgICAgICB2ZWMyLnRyYW5zZm9ybU1hdDModGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIHRyYW5zZm9ybU1hdDQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbi8vIEdldHRlciBhbmQgU2V0dGVyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG5cbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IyLnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBAbmFtZSB4XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjJcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSB5XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjJcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMi5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB4XG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHkpIHtcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XG4gICAgdmVjMi5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzIuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjIuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMi5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLmRpdmlkZSA9IFZlY3RvcjIuZGl2O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIHZlYzIuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IyLmxlbiA9IGZ1bmN0aW9uKGIpIHtcbiAgICByZXR1cm4gdmVjMi5sZW5ndGgoYi5hcnJheSk7XG59O1xuXG4vLyBWZWN0b3IyLmxlbmd0aCA9IFZlY3RvcjIubGVuO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHBhcmFtICB7bnVtYmVyfSAgdFxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIubGVycCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgdCkge1xuICAgIHZlYzIubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMyLm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLm11bHRpcGx5ID0gVmVjdG9yMi5tdWw7XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2ZWMyLm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLnJhbmRvbSA9IGZ1bmN0aW9uKG91dCwgc2NhbGUpIHtcbiAgICB2ZWMyLnJhbmRvbShvdXQuYXJyYXksIHNjYWxlKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcbiAgICB2ZWMyLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMi5zcXJEaXN0ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWMyLnNxckRpc3QoYS5hcnJheSwgYi5hcnJheSk7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IyLnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjIuc3FyRGlzdDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IyLnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gdmVjMi5zcXJMZW4oYS5hcnJheSk7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjIuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjIuc3FyTGVuO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMi5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuc3VidHJhY3QgPSBWZWN0b3IyLnN1Yjtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi50cmFuc2Zvcm1NYXQyID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gbVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2ZWMyLnRyYW5zZm9ybU1hdDJkKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xuICAgIHZlYzIudHJhbnNmb3JtTWF0NChvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xuIiwiLy8gMkQgQmxlbmQgY2xpcCBvZiBibGVuZCB0cmVlXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8yREJsZW5kaW5nLmh0bWxcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XG5pbXBvcnQgZGVsYXVuYXkgZnJvbSAnLi4vdXRpbC9kZWxhdW5heSc7XG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRcbiAqIEBwcm9wZXJ0eSB7Y2xheS5tYXRoLlZlY3RvcjJ9IHBvc2l0aW9uXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvZmZzZXRcbiAqL1xuXG4vKipcbiAqIDJkIGJsZW5kaW5nIG5vZGUgaW4gYW5pbWF0aW9uIGJsZW5kIHRyZWUuXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMudGFyZ2V0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZ2FwXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBbb3B0cy5lYXNpbmddXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbnJlc3RhcnRdXG4gKiBAcGFyYW0ge29iamVjdFtdfSBbb3B0cy5pbnB1dHNdXG4gKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IyfSBbb3B0cy5wb3NpdGlvbl1cbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxuICovXG52YXIgQmxlbmQyRENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XG4gICAgLyoqXG4gICAgICogT3V0cHV0IGNsaXAgbXVzdCBoYXZlIGJsZW5kMkQgbWV0aG9kXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XG4gICAgICovXG4gICAgdGhpcy5vdXRwdXQgPSBvcHRzLm91dHB1dCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0W119XG4gICAgICovXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XG5cbiAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gbnVsbDtcblxuICAgIHRoaXMuX3RyaWFuZ2xlcyA9IFtdO1xuXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XG59O1xuXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xuQmxlbmQyRENsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmQyRENsaXA7XG4vKipcbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjJ9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0fVxuICovXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcbiAgICAgICAgY2xpcCA6IGlucHV0Q2xpcCxcbiAgICAgICAgb2Zmc2V0IDogb2Zmc2V0IHx8IDBcbiAgICB9O1xuICAgIHRoaXMuaW5wdXRzLnB1c2gob2JqKTtcbiAgICB0aGlzLmxpZmUgPSBNYXRoLm1heChpbnB1dENsaXAubGlmZSwgdGhpcy5saWZlKTtcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xuICAgIHRoaXMuX3VwZGF0ZVRyaWFuZ2xlcygpO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuX3VwZGF0ZVRyaWFuZ2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHMubWFwKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xuICAgIH0pO1xuICAgIHRoaXMuX3RyaWFuZ2xlcyA9IGRlbGF1bmF5LnRyaWFuZ3VsYXRlKGlucHV0cywgJ2FycmF5Jyk7XG59O1xuXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XG5cbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUpO1xuXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHRoaXMuZ2V0RWxhcHNlZFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gUEVORElORyBTY2hlZHVsZVxuICAgIGlmICghc2lsZW50ICYmIHJldCAhPT0gJ3BhdXNlZCcpIHtcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcblxuQmxlbmQyRENsaXAucHJvdG90eXBlLnNldFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbiBCYXJ5Y2VudHJpY1xuICAgIHZhciBhID0gcmVzWzFdOyAvLyBQZXJjZW50IG9mIGNsaXAyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcblxuICAgIHZhciB0cmkgPSByZXNbMF07XG5cbiAgICB2YXIgaW4xID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMF1dO1xuICAgIHZhciBpbjIgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1sxXV07XG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcbiAgICB2YXIgY2xpcDEgPSBpbjEuY2xpcDtcbiAgICB2YXIgY2xpcDIgPSBpbjIuY2xpcDtcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcblxuICAgIGNsaXAxLnNldFRpbWUoKHRpbWUgKyBpbjEub2Zmc2V0KSAlIGNsaXAxLmxpZmUpO1xuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xuICAgIGNsaXAzLnNldFRpbWUoKHRpbWUgKyBpbjMub2Zmc2V0KSAlIGNsaXAzLmxpZmUpO1xuXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xuICAgIHZhciBjMiA9IGNsaXAyLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMi5vdXRwdXQgOiBjbGlwMjtcbiAgICB2YXIgYzMgPSBjbGlwMy5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDMub3V0cHV0IDogY2xpcDM7XG5cbiAgICB0aGlzLm91dHB1dC5ibGVuZDJEKGMxLCBjMiwgYzMsIGEsIGIpO1xufTtcblxuLyoqXG4gKiBDbG9uZSBhIG5ldyBCbGVuZDJEIGNsaXBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwfVxuICovXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgY2xpcC5vdXRwdXQgPSB0aGlzLm91dHB1dC5jbG9uZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XG4gICAgICAgIGNsaXAuYWRkSW5wdXQodGhpcy5pbnB1dHNbaV0ucG9zaXRpb24sIGlucHV0Q2xpcCwgdGhpcy5pbnB1dHNbaV0ub2Zmc2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNsaXA7XG59O1xuXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuX2ZpbmRUcmlhbmdsZSA9IGZ1bmN0aW9uIChwb3NpdGlvbikge1xuICAgIGlmICh0aGlzLl9jYWNoZVRyaWFuZ2xlKSB7XG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5fY2FjaGVUcmlhbmdsZSwgcmVzWzBdLCByZXNbMV1dO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdHJpYW5nbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0cmkudmVydGljZXMsIHRoaXMucG9zaXRpb24uYXJyYXkpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xuICAgICAgICAgICAgcmV0dXJuIFt0cmksIHJlc1swXSwgcmVzWzFdXTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHF1YXQgPSBnbE1hdHJpeC5xdWF0O1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG5mdW5jdGlvbiBrZXlmcmFtZVNvcnQoYSwgYikge1xuICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XG59XG5cbnZhciBUcmFuc2Zvcm1UcmFjayA9IGZ1bmN0aW9uIChvcHRzKSB7XG5cbiAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWUgfHwgJyc7XG4gICAgLy9be1xuICAgIC8vICB0aW1lOiAvL21zXG4gICAgLy8gIHBvc2l0aW9uOiAgLy8gb3B0aW9uYWxcbiAgICAvLyAgcm90YXRpb246ICAvLyBvcHRpb25hbFxuICAgIC8vICBzY2FsZTogICAgIC8vIG9wdGlvbmFsXG4gICAgLy99XVxuICAgIHRoaXMua2V5RnJhbWVzID0gW107XG4gICAgaWYgKG9wdHMua2V5RnJhbWVzKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5RnJhbWVzKG9wdHMua2V5RnJhbWVzKTtcbiAgICB9XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gdmVjMy5jcmVhdGUoKTtcblxuICAgIHRoaXMucm90YXRpb24gPSBxdWF0LmNyZWF0ZSgpO1xuXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcblxuICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcbiAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGlwLnByb3RvdHlwZSk7XG5cblRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYW5zZm9ybVRyYWNrO1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XG5cbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUsIGRUaW1lLCB0cnVlKTtcblxuICAgIGlmIChyZXQgIT09ICdmaW5pc2gnKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh0aGlzLmdldEVsYXBzZWRUaW1lKCkpO1xuICAgIH1cblxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XG4gICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLnNldFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIHRoaXMuX2ludGVycG9sYXRlRmllbGQodGltZSwgJ3Bvc2l0aW9uJyk7XG4gICAgdGhpcy5faW50ZXJwb2xhdGVGaWVsZCh0aW1lLCAncm90YXRpb24nKTtcbiAgICB0aGlzLl9pbnRlcnBvbGF0ZUZpZWxkKHRpbWUsICdzY2FsZScpO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtmID0gdGhpcy5rZXlGcmFtZXNbdGhpcy5rZXlGcmFtZXMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIGtmID8ga2YudGltZSA6IDA7XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYWRkS2V5RnJhbWUgPSBmdW5jdGlvbiAoa2YpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMua2V5RnJhbWVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICB2YXIgcHJldkZyYW1lID0gdGhpcy5rZXlGcmFtZXNbaV07XG4gICAgICAgIHZhciBuZXh0RnJhbWUgPSB0aGlzLmtleUZyYW1lc1tpICsgMV07XG4gICAgICAgIGlmIChwcmV2RnJhbWUudGltZSA8PSBrZi50aW1lICYmIG5leHRGcmFtZS50aW1lID49IGtmLnRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMua2V5RnJhbWVzLnNwbGljZShpLCAwLCBrZik7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGlmZSA9IGtmLnRpbWU7XG4gICAgdGhpcy5rZXlGcmFtZXMucHVzaChrZik7XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYWRkS2V5RnJhbWVzID0gZnVuY3Rpb24gKGtmcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2ZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMua2V5RnJhbWVzLnB1c2goa2ZzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLmtleUZyYW1lcy5zb3J0KGtleWZyYW1lU29ydCk7XG5cbiAgICB0aGlzLmxpZmUgPSB0aGlzLmtleUZyYW1lc1t0aGlzLmtleUZyYW1lcy5sZW5ndGggLSAxXS50aW1lO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLl9pbnRlcnBvbGF0ZUZpZWxkID0gZnVuY3Rpb24gKHRpbWUsIGZpZWxkTmFtZSkge1xuICAgIHZhciBrZnMgPSB0aGlzLmtleUZyYW1lcztcbiAgICB2YXIgbGVuID0ga2ZzLmxlbmd0aDtcbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIGVuZDtcblxuICAgIGlmICgha2ZzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aW1lIDwga2ZzWzBdLnRpbWUgfHwgdGltZSA+IGtmc1trZnMubGVuZ3RoLTFdLnRpbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGltZSA8IHRoaXMuX2NhY2hlVGltZSkge1xuICAgICAgICB2YXIgcyA9IHRoaXMuX2NhY2hlS2V5ID49IGxlbi0xID8gbGVuLTEgOiB0aGlzLl9jYWNoZUtleSsxO1xuICAgICAgICBmb3IgKHZhciBpID0gczsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChrZnNbaV0udGltZSA8PSB0aW1lICYmIGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBrZnNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgZW5kID0ga2ZzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NhY2hlS2V5OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChrZnNbaV0udGltZSA8PSB0aW1lICYmIGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBrZnNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgZW5kID0ga2ZzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgICB2YXIgcGVyY2VudCA9ICh0aW1lIC0gc3RhcnQudGltZSkgLyAoZW5kLnRpbWUgLSBzdGFydC50aW1lKTtcbiAgICAgICAgcGVyY2VudCA9IE1hdGgubWF4KE1hdGgubWluKHBlcmNlbnQsIDEpLCAwKTtcbiAgICAgICAgaWYgKGZpZWxkTmFtZSA9PT0gJ3JvdGF0aW9uJykge1xuICAgICAgICAgICAgcXVhdC5zbGVycCh0aGlzW2ZpZWxkTmFtZV0sIHN0YXJ0W2ZpZWxkTmFtZV0sIGVuZFtmaWVsZE5hbWVdLCBwZXJjZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZlYzMubGVycCh0aGlzW2ZpZWxkTmFtZV0sIHN0YXJ0W2ZpZWxkTmFtZV0sIGVuZFtmaWVsZE5hbWVdLCBwZXJjZW50KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcbiAgICB9XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uICh0MSwgdDIsIHcpIHtcbiAgICB2ZWMzLmxlcnAodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uLCB3KTtcbiAgICB2ZWMzLmxlcnAodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlLCB3KTtcbiAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdyk7XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHExID0gcXVhdC5jcmVhdGUoKTtcbiAgICB2YXIgcTIgPSBxdWF0LmNyZWF0ZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyLCB0MywgZiwgZykge1xuICAgICAgICB2YXIgYSA9IDEgLSBmIC0gZztcblxuICAgICAgICB0aGlzLnBvc2l0aW9uWzBdID0gdDEucG9zaXRpb25bMF0gKiBhICsgdDIucG9zaXRpb25bMF0gKiBmICsgdDMucG9zaXRpb25bMF0gKiBnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uWzFdID0gdDEucG9zaXRpb25bMV0gKiBhICsgdDIucG9zaXRpb25bMV0gKiBmICsgdDMucG9zaXRpb25bMV0gKiBnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uWzJdID0gdDEucG9zaXRpb25bMl0gKiBhICsgdDIucG9zaXRpb25bMl0gKiBmICsgdDMucG9zaXRpb25bMl0gKiBnO1xuXG4gICAgICAgIHRoaXMuc2NhbGVbMF0gPSB0MS5zY2FsZVswXSAqIGEgKyB0Mi5zY2FsZVswXSAqIGYgKyB0My5zY2FsZVswXSAqIGc7XG4gICAgICAgIHRoaXMuc2NhbGVbMV0gPSB0MS5zY2FsZVsxXSAqIGEgKyB0Mi5zY2FsZVsxXSAqIGYgKyB0My5zY2FsZVsxXSAqIGc7XG4gICAgICAgIHRoaXMuc2NhbGVbMl0gPSB0MS5zY2FsZVsyXSAqIGEgKyB0Mi5zY2FsZVsyXSAqIGYgKyB0My5zY2FsZVsyXSAqIGc7XG5cbiAgICAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjIwNTQwMyh2PXZzLjg1KS5hc3B4XG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbWljcm9zb2Z0LmRpcmVjdHhfc2RrLnF1YXRlcm5pb24ueG1xdWF0ZXJuaW9uYmFyeWNlbnRyaWModj12cy44NSkuYXNweFxuICAgICAgICB2YXIgcyA9IGYgKyBnO1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgcXVhdC5jb3B5KHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTEsIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgcyk7XG4gICAgICAgICAgICBxdWF0LnNsZXJwKHEyLCB0MS5yb3RhdGlvbiwgYzMucm90YXRpb24sIHMpO1xuICAgICAgICAgICAgcXVhdC5zbGVycCh0aGlzLnJvdGF0aW9uLCBxMSwgcTIsIGcgLyBzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSgpO1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcbiAgICB2ZWMzLmFkZCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24pO1xuICAgIHZlYzMuYWRkKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSk7XG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdDEucm90YXRpb24pO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLnN1YnRyYWN0aXZlQmxlbmQgPSBmdW5jdGlvbiAodDEsIHQyKSB7XG4gICAgdmVjMy5zdWIodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uKTtcbiAgICB2ZWMzLnN1Yih0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xuICAgIHF1YXQuaW52ZXJ0KHRoaXMucm90YXRpb24sIHQyLnJvdGF0aW9uKTtcbiAgICBxdWF0Lm11bHRpcGx5KHRoaXMucm90YXRpb24sIHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcbn07XG5cblRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5nZXRTdWJDbGlwID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIC8vIFRPRE9cbiAgICBjb25zb2xlLndhcm4oJ1RPRE8nKTtcbn07XG5cblRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHJhY2sgPSBUcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICB0cmFjay5rZXlGcmFtZXMgPSB0aGlzLmtleUZyYW1lcztcblxuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XG4gICAgcXVhdC5jb3B5KHRyYWNrLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uKTtcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xuXG4gICAgcmV0dXJuIHRyYWNrO1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2Zvcm1UcmFjaztcbiIsIi8vIFNhbXBsZXIgY2xpcCBpcyBlc3BlY2lhbGx5IGZvciB0aGUgYW5pbWF0aW9uIHNhbXBsZXIgaW4gZ2xURlxuLy8gVXNlIFR5cGVkIEFycmF5IGNhbiByZWR1Y2UgYSBsb3Qgb2YgaGVhcCBtZW1vcnlcbi8vXG4vLyBUT0RPIFN5bmMgdGFyZ2V0IHRyYW5zZm9ybVxuXG5pbXBvcnQgVHJhbnNmb3JtVHJhY2sgZnJvbSAnLi9UcmFuc2Zvcm1UcmFjayc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHF1YXQgPSBnbE1hdHJpeC5xdWF0O1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG4vLyBsZXJwIGZ1bmN0aW9uIHdpdGggb2Zmc2V0IGluIGxhcmdlIGFycmF5XG5mdW5jdGlvbiB2ZWMzbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xuICAgIHZhciBheCA9IGFbb2FdO1xuICAgIHZhciBheSA9IGFbb2EgKyAxXTtcbiAgICB2YXIgYXogPSBhW29hICsgMl07XG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbb2JdIC0gYXgpO1xuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiW29iICsgMV0gLSBheSk7XG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbb2IgKyAyXSAtIGF6KTtcblxuICAgIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHF1YXRTbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xuICAgIC8vIGJlbmNobWFya3M6XG4gICAgLy8gICAgaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi1zbGVycC1pbXBsZW1lbnRhdGlvbnNcblxuICAgIHZhciBheCA9IGFbMCArIG9hXSwgYXkgPSBhWzEgKyBvYV0sIGF6ID0gYVsyICsgb2FdLCBhdyA9IGFbMyArIG9hXSxcbiAgICAgICAgYnggPSBiWzAgKyBvYl0sIGJ5ID0gYlsxICsgb2JdLCBieiA9IGJbMiArIG9iXSwgYncgPSBiWzMgKyBvYl07XG5cbiAgICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7XG5cbiAgICAvLyBjYWxjIGNvc2luZVxuICAgIGNvc29tID0gYXggKiBieCArIGF5ICogYnkgKyBheiAqIGJ6ICsgYXcgKiBidztcbiAgICAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcbiAgICBpZiAoY29zb20gPCAwLjApIHtcbiAgICAgICAgY29zb20gPSAtY29zb207XG4gICAgICAgIGJ4ID0gLSBieDtcbiAgICAgICAgYnkgPSAtIGJ5O1xuICAgICAgICBieiA9IC0gYno7XG4gICAgICAgIGJ3ID0gLSBidztcbiAgICB9XG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xuICAgIGlmICgoMS4wIC0gY29zb20pID4gMC4wMDAwMDEpIHtcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XG4gICAgICAgIHNpbm9tICA9IE1hdGguc2luKG9tZWdhKTtcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vICdmcm9tJyBhbmQgJ3RvJyBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxuICAgICAgICAvLyAgLi4uIHNvIHdlIGNhbiBkbyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XG4gICAgICAgIHNjYWxlMSA9IHQ7XG4gICAgfVxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xuICAgIG91dFsxXSA9IHNjYWxlMCAqIGF5ICsgc2NhbGUxICogYnk7XG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xuXG4gICAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBTYW1wbGVyVHJhY2sgbWFuYWdlcyBgcG9zaXRpb25gLCBgcm90YXRpb25gLCBgc2NhbGVgIHRyYWNrcyBpbiBhbmltYXRpb24gb2Ygc2luZ2xlIHNjZW5lIG5vZGUuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5uYW1lXSBUcmFjayBuYW1lXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW29wdHMudGFyZ2V0XSBUYXJnZXQgbm9kZSdzIHRyYW5zZm9ybSB3aWxsIHVwZGF0ZWQgYXV0b21hdGljYWxseVxuICovXG52YXIgU2FtcGxlclRyYWNrID0gZnVuY3Rpb24gKG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIHRoaXMubmFtZSA9IG9wdHMubmFtZSB8fCAnJztcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0IHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdmVjMy5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBSb3RhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucm90YXRpb24gPSBxdWF0LmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcblxuICAgIHRoaXMuY2hhbm5lbHMgPSB7XG4gICAgICAgIHRpbWU6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgICByb3RhdGlvbjogbnVsbCxcbiAgICAgICAgc2NhbGU6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xuICAgIHRoaXMuX2NhY2hlVGltZSA9IDA7XG59O1xuXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLnNldFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIGlmICghdGhpcy5jaGFubmVscy50aW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XG4gICAgdmFyIGtleSA9IC0xO1xuICAgIC8vIE9ubHkgb25lIGZyYW1lXG4gICAgaWYgKGxlbiA9PT0gMSkge1xuICAgICAgICBpZiAoY2hhbm5lbHMucm90YXRpb24pIHtcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5uZWxzLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIENsYW1wXG4gICAgZWxzZSBpZiAodGltZSA8PSBjaGFubmVscy50aW1lWzBdKSB7XG4gICAgICAgIHRpbWUgPSBjaGFubmVscy50aW1lWzBdO1xuICAgICAgICBrZXkgPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lID49IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV0pIHtcbiAgICAgICAgdGltZSA9IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV07XG4gICAgICAgIGtleSA9IGxlbiAtIDI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAodGltZSA8IHRoaXMuX2NhY2hlVGltZSkge1xuICAgICAgICAgICAgdmFyIHMgPSBNYXRoLm1pbihsZW4gLSAxLCB0aGlzLl9jYWNoZUtleSArIDEpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaSAtIDFdIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpXSA+IHRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpICsgMV0gPiB0aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoa2V5ID4gLTEpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XG4gICAgICAgIHZhciBzdGFydCA9IGtleTtcbiAgICAgICAgdmFyIGVuZCA9IGtleSArIDE7XG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcbiAgICAgICAgdmFyIGVuZFRpbWUgPSBjaGFubmVscy50aW1lW2VuZF07XG4gICAgICAgIHZhciByYW5nZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICAgIHZhciBwZXJjZW50ID0gcmFuZ2UgPT09IDAgPyAwIDogKHRpbWUgLSBzdGFydFRpbWUpIC8gcmFuZ2U7XG5cbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICBxdWF0U2xlcnAodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIGNoYW5uZWxzLnJvdGF0aW9uLCBwZXJjZW50LCBzdGFydCAqIDQsIGVuZCAqIDQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIExvb3AgaGFuZGxpbmdcbiAgICBpZiAoa2V5ID09IGxlbiAtIDIpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xuICAgICAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0cmFuc2Zvcm0gb2YgdGFyZ2V0IG5vZGUgbWFudWFsbHlcbiAqL1xuU2FtcGxlclRyYWNrLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcbiAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgLy8gT25seSB1cGRhdGUgdGFyZ2V0IHByb3AgaWYgaGF2ZSBkYXRhLlxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBvc2l0aW9uLnNldEFycmF5KHRoaXMucG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xuICAgICAgICAgICAgdGhpcy50YXJnZXQucm90YXRpb24uc2V0QXJyYXkodGhpcy5yb3RhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5zY2FsZS5zZXRBcnJheSh0aGlzLnNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbm5lbHMudGltZVt0aGlzLmNoYW5uZWxzLnRpbWUubGVuZ3RoIC0gMV07XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9XG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0U3ViVHJhY2sgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG5cbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBTYW1wbGVyVHJhY2soe1xuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9KTtcbiAgICB2YXIgbWluVGltZSA9IHRoaXMuY2hhbm5lbHMudGltZVswXTtcbiAgICBzdGFydFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xuICAgIGVuZFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChlbmRUaW1lLCBtaW5UaW1lKSwgdGhpcy5saWZlKTtcblxuICAgIHZhciByYW5nZVN0YXJ0ID0gdGhpcy5fZmluZFJhbmdlKHN0YXJ0VGltZSk7XG4gICAgdmFyIHJhbmdlRW5kID0gdGhpcy5fZmluZFJhbmdlKGVuZFRpbWUpO1xuXG4gICAgdmFyIGNvdW50ID0gcmFuZ2VFbmRbMF0gLSByYW5nZVN0YXJ0WzBdICsgMTtcbiAgICBpZiAocmFuZ2VTdGFydFsxXSA9PT0gMCAmJiByYW5nZUVuZFsxXSA9PT0gMCkge1xuICAgICAgICBjb3VudCAtPSAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy5yb3RhdGlvbikge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy5wb3NpdGlvbikge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy5zY2FsZSkge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy50aW1lKSB7XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpO1xuICAgIH1cbiAgICAvLyBDbGlwIGF0IHRoZSBzdGFydFxuICAgIHRoaXMuc2V0VGltZShzdGFydFRpbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baV0gPSB0aGlzLnJvdGF0aW9uW2ldO1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2ldID0gdGhpcy5wb3NpdGlvbltpXTtcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpXSA9IHRoaXMuc2NhbGVbaV07XG4gICAgfVxuICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVswXSA9IDA7XG4gICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblszXSA9IHRoaXMucm90YXRpb25bM107XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvdW50LTE7IGkrKykge1xuICAgICAgICB2YXIgaTI7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICAgICAgICBpMiA9IHJhbmdlU3RhcnRbMF0gKyBpO1xuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpICogNCArIGpdID0gdGhpcy5jaGFubmVscy5yb3RhdGlvbltpMiAqIDQgKyBqXTtcbiAgICAgICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucG9zaXRpb25baSAqIDMgKyBqXSA9IHRoaXMuY2hhbm5lbHMucG9zaXRpb25baTIgKiAzICsgal07XG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnNjYWxlW2kyICogMyArIGpdO1xuICAgICAgICB9XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVtpXSA9IHRoaXMuY2hhbm5lbHMudGltZVtpMl0gLSBzdGFydFRpbWU7XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baSAqIDQgKyAzXSA9IHRoaXMuY2hhbm5lbHMucm90YXRpb25baTIgKiA0ICsgM107XG4gICAgfVxuICAgIC8vIENsaXAgYXQgdGhlIGVuZFxuICAgIHRoaXMuc2V0VGltZShlbmRUaW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIGldID0gdGhpcy5yb3RhdGlvbltpXTtcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvblsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMucG9zaXRpb25baV07XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMuc2NhbGVbKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnNjYWxlW2ldO1xuICAgIH1cbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbKGNvdW50IC0gMSldID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIDNdID0gdGhpcy5yb3RhdGlvblszXTtcblxuICAgIC8vIFRPRE8gc2V0IGJhY2sgP1xuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgcmV0dXJuIHN1YkNsaXA7XG59O1xuXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLl9maW5kUmFuZ2UgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XG4gICAgdmFyIGxlbiA9IGNoYW5uZWxzLnRpbWUubGVuZ3RoO1xuICAgIHZhciBzdGFydCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpKzFdID4gdGltZSkge1xuICAgICAgICAgICAgc3RhcnQgPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBwZXJjZW50ID0gMDtcbiAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICB2YXIgc3RhcnRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydF07XG4gICAgICAgIHZhciBlbmRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydCsxXTtcbiAgICAgICAgdmFyIHBlcmNlbnQgPSAodGltZS1zdGFydFRpbWUpIC8gKGVuZFRpbWUtc3RhcnRUaW1lKTtcbiAgICB9XG4gICAgLy8gUGVyY2VudCBbMCwgMSlcbiAgICByZXR1cm4gW3N0YXJ0LCBwZXJjZW50XTtcbn07XG5cbi8qKlxuICogMUQgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxuICogQHBhcmFtICB7bnVtYmVyfSB3XG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5ibGVuZDFEO1xuLyoqXG4gKiAyRCBibGVuZGluZyBiZXR3ZWVuIHRocmVlIGNsaXBzXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzNcbiAqIEBwYXJhbSAge251bWJlcn0gZlxuICogQHBhcmFtICB7bnVtYmVyfSBnXG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5ibGVuZDJEO1xuLyoqXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5hZGRpdGl2ZUJsZW5kO1xuLyoqXG4gKiBTdWJ0cmFjdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kO1xuXG4vKipcbiAqIENsb25lIGEgbmV3IFNhbXBsZXJUcmFja1xuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxuICovXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0cmFjayA9IFNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICB0cmFjay5jaGFubmVscyA9IHtcbiAgICAgICAgdGltZTogdGhpcy5jaGFubmVscy50aW1lIHx8IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uIHx8IG51bGwsXG4gICAgICAgIHJvdGF0aW9uOiB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uIHx8IG51bGwsXG4gICAgICAgIHNjYWxlOiB0aGlzLmNoYW5uZWxzLnNjYWxlIHx8IG51bGxcbiAgICB9O1xuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XG4gICAgcXVhdC5jb3B5KHRyYWNrLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uKTtcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xuXG4gICAgdHJhY2sudGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgdHJhY2sudXBkYXRlVGFyZ2V0KCk7XG5cbiAgICByZXR1cm4gdHJhY2s7XG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXJUcmFjaztcbiIsIi8qKlxuICogRXh0ZW5kIGEgc3ViIGNsYXNzIGZyb20gYmFzZSBjbGFzc1xuICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG1ha2VEZWZhdWx0T3B0IGRlZmF1bHQgb3B0aW9uIG9mIHRoaXMgc3ViIGNsYXNzLCBtZXRob2Qgb2YgdGhlIHN1YiBjYW4gdXNlIHRoaXMueHh4IHRvIGFjY2VzcyB0aGlzIG9wdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVdIEluaXRpYWxpemUgYWZ0ZXIgdGhlIHN1YiBjbGFzcyBpcyBpbnN0YW50aWF0ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvdG9dIFByb3RvdHlwZSBtZXRob2RzL3Byb3BlcnRpZXMgb2YgdGhlIHN1YiBjbGFzc1xuICogQG1lbWJlck9mIGNsYXkuY29yZS5taXhpbi5leHRlbmRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBkZXJpdmUobWFrZURlZmF1bHRPcHQsIGluaXRpYWxpemUvKm9wdGlvbmFsKi8sIHByb3RvLypvcHRpb25hbCovKSB7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWxpemUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcHJvdG8gPSBpbml0aWFsaXplO1xuICAgICAgICBpbml0aWFsaXplID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3N1cGVyID0gdGhpcztcblxuICAgIHZhciBwcm9wTGlzdDtcbiAgICBpZiAoIShtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAvLyBPcHRpbWl6ZSB0aGUgcHJvcGVydHkgaXRlcmF0ZSBpZiBpdCBoYXZlIGJlZW4gZml4ZWRcbiAgICAgICAgcHJvcExpc3QgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gbWFrZURlZmF1bHRPcHQpIHtcbiAgICAgICAgICAgIGlmIChtYWtlRGVmYXVsdE9wdC5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wTGlzdC5wdXNoKHByb3BOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdWIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cbiAgICAgICAgLy8gY2FsbCBzdXBlciBjb25zdHJ1Y3RvclxuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gSW52b2tlIG1ha2VEZWZhdWx0T3B0IGVhY2ggdGltZSBpZiBpdCBpcyBhIGZ1bmN0aW9uLCBTbyB3ZSBjYW4gbWFrZSBzdXJlIGVhY2hcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGluIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgc2hhcmVkIGJ5IG11dGlwbGUgaW5zdGFuY2VzXG4gICAgICAgICAgICBleHRlbmQodGhpcywgbWFrZURlZmF1bHRPcHQuY2FsbCh0aGlzLCBvcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHRlbmRXaXRoUHJvcExpc3QodGhpcywgbWFrZURlZmF1bHRPcHQsIHByb3BMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBzdWIpIHtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIG9yZGVyIG9mIGluaGVyaXRcbiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnMgPSBzdWIuX19pbml0aWFsaXplcnNfXztcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIHNhdmUgc3VwZXIgY29uc3RydWN0b3JcbiAgICBzdWIuX19zdXBlcl9fID0gX3N1cGVyO1xuICAgIC8vIEluaXRpYWxpemUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHRoZSBzdXBlciBjb25zdHJ1Y3RvciBpcyBjYWxsZWRcbiAgICBpZiAoIV9zdXBlci5fX2luaXRpYWxpemVyc19fKSB7XG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBfc3VwZXIuX19pbml0aWFsaXplcnNfXy5zbGljZSgpO1xuICAgIH1cbiAgICBpZiAoaW5pdGlhbGl6ZSkge1xuICAgICAgICBzdWIuX19pbml0aWFsaXplcnNfXy5wdXNoKGluaXRpYWxpemUpO1xuICAgIH1cblxuICAgIHZhciBDdG9yID0gZnVuY3Rpb24oKSB7fTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IF9zdXBlci5wcm90b3R5cGU7XG4gICAgc3ViLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XG4gICAgc3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YjtcbiAgICBleHRlbmQoc3ViLnByb3RvdHlwZSwgcHJvdG8pO1xuXG4gICAgLy8gZXh0ZW5kIHRoZSBkZXJpdmUgbWV0aG9kIGFzIGEgc3RhdGljIG1ldGhvZDtcbiAgICBzdWIuZXh0ZW5kID0gX3N1cGVyLmV4dGVuZDtcblxuICAgIC8vIERFUENSQVRFRFxuICAgIHN1Yi5kZXJpdmUgPSBfc3VwZXIuZXh0ZW5kO1xuXG4gICAgcmV0dXJuIHN1Yjtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBzb3VyY2VbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4dGVuZFdpdGhQcm9wTGlzdCh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xuICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcbiAgICB9XG59XG5cbi8qKlxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5leHRlbmRcbiAqIEBtaXhpblxuICovXG5leHBvcnQgZGVmYXVsdCB7XG5cbiAgICBleHRlbmQ6IGRlcml2ZSxcblxuICAgIC8vIERFUENSQVRFRFxuICAgIGRlcml2ZTogZGVyaXZlXG59O1xuIiwiZnVuY3Rpb24gSGFuZGxlcihhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuLyoqXG4gKiBAbWl4aW5cbiAqIEBhbGlhcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcbiAqL1xudmFyIG5vdGlmaWVyID0ge1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgZXZlbnRcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKi9cbiAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19oYW5kbGVyc19fJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX19oYW5kbGVyc19fLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGRscyA9IHRoaXMuX19oYW5kbGVyc19fW25hbWVdO1xuICAgICAgICB2YXIgbCA9IGhkbHMubGVuZ3RoLCBpID0gLTEsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIC8vIE9wdGltaXplIGFkdmlzZSBmcm9tIGJhY2tib25lXG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uYXBwbHkoaGRsc1tpXS5jb250ZXh0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxuICAgICAqIEBjaGFpbmFibGVcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcbiAgICAgICAgaWYgKCFoYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lLCBhY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0IHx8IHRoaXMpO1xuICAgICAgICBoYW5kbGVyc1tuYW1lXS5wdXNoKGhhbmRsZXIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBldmVudCwgZXZlbnQgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBvbmNlIGFuZCB0aGVuIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cbiAgICAgKiBAY2hhaW5hYmxlXG4gICAgICovXG4gICAgb25jZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICAgICAgc2VsZi5vZmYobmFtZSwgd3JhcHBlcik7XG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCB3cmFwcGVyLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYmVmb3JlJyArIG5hbWUpXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXG4gICAgICogQGNoYWluYWJsZVxuICAgICAqL1xuICAgIGJlZm9yZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9ICdiZWZvcmUnICsgbmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYWZ0ZXInICsgbmFtZSlcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cbiAgICAgKiBAY2hhaW5hYmxlXG4gICAgICovXG4gICAgYWZ0ZXI6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSAnYWZ0ZXInICsgbmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2Ygb24oJ3N1Y2Nlc3MnKVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxuICAgICAqIEBjaGFpbmFibGVcbiAgICAgKi9cbiAgICBzdWNjZXNzOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnc3VjY2VzcycsIGFjdGlvbiwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIG9uKCdlcnJvcicpXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXG4gICAgICogQGNoYWluYWJsZVxuICAgICAqL1xuICAgIGVycm9yOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnZXJyb3InLCBhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cbiAgICAgKiBAY2hhaW5hYmxlXG4gICAgICovXG4gICAgb2ZmOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcblxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xuXG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgdmFyIGhkbHMgPSBoYW5kbGVyc1tuYW1lXTtcbiAgICAgICAgICAgIHZhciByZXRhaW5zID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhkbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uICYmIGhkbHNbaV0uYWN0aW9uICE9PSBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWlucy5wdXNoKGhkbHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZXJzW25hbWVdID0gcmV0YWlucztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiByZWdpc3RlcmVkIHRoZSBldmVudCBoYW5kbGVyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgYWN0aW9uXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBoYXM6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbikge1xuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXztcblxuICAgICAgICBpZiAoISBoYW5kbGVycyB8fFxuICAgICAgICAgICAgISBoYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoZGxzID0gaGFuZGxlcnNbbmFtZV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGRscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGhkbHNbaV0uYWN0aW9uID09PSBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5vdGlmaWVyOyIsInZhciBndWlkID0gMDtcblxudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgbmF0aXZlRm9yRWFjaCA9IEFycmF5UHJvdG8uZm9yRWFjaDtcblxuLyoqXG4gKiBVdGlsIGZ1bmN0aW9uc1xuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUudXRpbFxuICovXG52YXIgdXRpbCA9IHtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIEdVSURcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZ2VuR1VJRDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKytndWlkO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVsYXRpdmUgcGF0aCB0byBhYnNvbHV0ZSBwYXRoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBiYXNlUGF0aFxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcbiAgICAgKi9cbiAgICByZWxhdGl2ZTJhYnNvbHV0ZTogZnVuY3Rpb24gKHBhdGgsIGJhc2VQYXRoKSB7XG4gICAgICAgIGlmICghYmFzZVBhdGggfHwgcGF0aC5tYXRjaCgvXlxcLy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGF0aFBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICB2YXIgYmFzZVBhdGhQYXJ0cyA9IGJhc2VQYXRoLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgdmFyIGl0ZW0gPSBwYXRoUGFydHNbMF07XG4gICAgICAgIHdoaWxlKGl0ZW0gPT09ICcuJyB8fCBpdGVtID09PSAnLi4nKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoUGFydHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGl0ZW0gPSBwYXRoUGFydHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2VQYXRoUGFydHMuam9pbignLycpICsgJy8nICsgcGF0aFBhcnRzLmpvaW4oJy8nKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kIHRhcmdldCB3aXRoIHNvdXJjZVxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHNvdXJjZVtuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgdG8gdGFyZ2V0IGlmIG5vdCBleGlzdC5cbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxuICAgICAqL1xuICAgIGRlZmF1bHRzOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBsaXN0IHRvIGF2b2lkIGZvci4uaW4uLiBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxuICAgICAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwcm9wTGlzdFxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcbiAgICAgKi9cbiAgICBleHRlbmRXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB0byB0YXJnZXQgaWYgbm90IGV4aXN0LiBXaXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZGVmYXVsdHNXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IG9ialxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZWFjaDogZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKCEob2JqICYmIGl0ZXJhdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouZm9yRWFjaCAmJiBvYmouZm9yRWFjaCA9PT0gbmF0aXZlRm9yRWFjaCkge1xuICAgICAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9iai5sZW5ndGggPT09ICsgb2JqLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElzIG9iamVjdFxuICAgICAqIEBwYXJhbSAge30gIG9ialxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElzIGFycmF5ID9cbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxuICAgICAqL1xuICAgIGlzQXJyYXk6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSXMgYXJyYXkgbGlrZSwgd2hpY2ggaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSAge30gIG9ialxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgaXNBcnJheUxpa2U6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoubGVuZ3RoID09PSArIG9iai5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7fSBvYmpcbiAgICAgKiBAcmV0dXJuIHt9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouc2xpY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1dGlsLmlzQXJyYXlMaWtlKG9iaikpIHsgLy8gaXMgdHlwZWQgYXJyYXlcbiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKG9iai5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXRbaV0gPSBvYmpbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwuZXh0ZW5kKHt9LCBvYmopO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbDtcbiIsImltcG9ydCBleHRlbmRNaXhpbiBmcm9tICcuL21peGluL2V4dGVuZCc7XG5pbXBvcnQgbm90aWZpZXJNaXhpbiBmcm9tICcuL21peGluL25vdGlmaWVyJztcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBvZiBhbGwgb2JqZWN0c1xuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5jb3JlLkJhc2VcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcbiAqL1xudmFyIEJhc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9fdWlkX18gPSB1dGlsLmdlbkdVSUQoKTtcbn07XG5cbkJhc2UuX19pbml0aWFsaXplcnNfXyA9IFtcbiAgICBmdW5jdGlvbiAob3B0cykge1xuICAgICAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRzKTtcbiAgICB9XG5dO1xuXG51dGlsLmV4dGVuZChCYXNlLCBleHRlbmRNaXhpbik7XG51dGlsLmV4dGVuZChCYXNlLnByb3RvdHlwZSwgbm90aWZpZXJNaXhpbik7XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2U7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IEFuaW1hdG9yIGZyb20gJy4vQW5pbWF0b3InO1xuXG52YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZnVuY3Rpb24gKGZ1bmMpeyBzZXRUaW1lb3V0KGZ1bmMsIDE2KTsgfTtcblxuLyoqXG4gKiBBbmltYXRpb24gaXMgZ2xvYmFsIHRpbWVsaW5lIHRoYXQgc2NoZWR1bGUgYWxsIGNsaXBzLiBlYWNoIGZyYW1lIGFuaW1hdGlvbiB3aWxsIHNldCB0aGUgdGltZSBvZiBjbGlwcyB0byBjdXJyZW50IGFuZCB1cGRhdGUgdGhlIHN0YXRlcyBvZiBjbGlwc1xuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdGlvblxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGFuaW1hdGlvbiA9IG5ldyBjbGF5LmFuaW1hdGlvbi5BbmltYXRpb24oKTtcbiAqIHZhciBub2RlID0gbmV3IGNsYXkuTm9kZSgpO1xuICogYW5pbWF0aW9uLmFuaW1hdGUobm9kZS5wb3NpdGlvbilcbiAqICAgICAud2hlbigxMDAwLCB7XG4gKiAgICAgICAgIHg6IDUwMCxcbiAqICAgICAgICAgeTogNTAwXG4gKiAgICAgfSlcbiAqICAgICAud2hlbigyMDAwLCB7XG4gKiAgICAgICAgIHg6IDEwMCxcbiAqICAgICAgICAgeTogMTAwXG4gKiAgICAgfSlcbiAqICAgICAud2hlbigzMDAwLCB7XG4gKiAgICAgICAgIHo6IDEwXG4gKiAgICAgfSlcbiAqICAgICAuc3RhcnQoJ3NwbGluZScpO1xuICovXG52YXIgVGltZWxpbmUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5hbmltYXRpb24uVGltZWxpbmUjICove1xuICAgICAgICAvKipcbiAgICAgICAgICogc3RhZ2UgaXMgYW4gb2JqZWN0IHdpdGggcmVuZGVyIG1ldGhvZCwgZWFjaCBmcmFtZSBpZiB0aGVyZSBleGlzdHMgYW55IGFuaW1hdGluZyBjbGlwcywgc3RhZ2UucmVuZGVyIHdpbGwgYmUgY2FsbGVkXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBzdGFnZTogbnVsbCxcblxuICAgICAgICBfY2xpcHM6IFtdLFxuXG4gICAgICAgIF9ydW5uaW5nOiBmYWxzZSxcblxuICAgICAgICBfdGltZTogMCxcblxuICAgICAgICBfcGF1c2VkOiBmYWxzZSxcblxuICAgICAgICBfcGF1c2VkVGltZTogMFxuICAgIH07XG59LFxuLyoqIEBsZW5kcyBjbGF5LmFuaW1hdGlvbi5UaW1lbGluZS5wcm90b3R5cGUgKi9cbntcblxuICAgIC8qKlxuICAgICAqIEFkZCBhbmltYXRvclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxuICAgICAqL1xuICAgIGFkZEFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcbiAgICAgICAgdmFyIGNsaXBzID0gYW5pbWF0b3IuZ2V0Q2xpcHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hZGRDbGlwKGNsaXBzW2ldKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcbiAgICAgKi9cbiAgICBhZGRDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xuICAgICAgICBpZiAodGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnB1c2goY2xpcCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxuICAgICAqL1xuICAgIHJlbW92ZUNsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jbGlwcy5pbmRleE9mKGNsaXApO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbmltYXRvclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxuICAgICAqL1xuICAgIHJlbW92ZUFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcbiAgICAgICAgdmFyIGNsaXBzID0gYW5pbWF0b3IuZ2V0Q2xpcHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGlwKGNsaXBzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSBudWxsO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpIC0gdGhpcy5fcGF1c2VkVGltZTtcbiAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMuX3RpbWU7XG4gICAgICAgIHZhciBjbGlwcyA9IHRoaXMuX2NsaXBzO1xuICAgICAgICB2YXIgbGVuID0gY2xpcHMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBkZWZlcnJlZEV2ZW50cyA9IFtdO1xuICAgICAgICB2YXIgZGVmZXJyZWRDbGlwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2xpcCA9IGNsaXBzW2ldO1xuICAgICAgICAgICAgdmFyIGUgPSBjbGlwLnN0ZXAodGltZSwgZGVsdGEsIGZhbHNlKTtcbiAgICAgICAgICAgIC8vIFRocm93IG91dCB0aGUgZXZlbnRzIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyXG4gICAgICAgICAgICAvLyBzdGFnZS5yZW5kZXIsIGxpa2UgZmluaXNoXG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIGRlZmVycmVkRXZlbnRzLnB1c2goZSk7XG4gICAgICAgICAgICAgICAgZGVmZXJyZWRDbGlwcy5wdXNoKGNsaXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaW5pc2hlZCBjbGlwXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOykge1xuICAgICAgICAgICAgaWYgKGNsaXBzW2ldLl9uZWVkc1JlbW92ZSkge1xuICAgICAgICAgICAgICAgIGNsaXBzW2ldID0gY2xpcHNbbGVuLTFdO1xuICAgICAgICAgICAgICAgIGNsaXBzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGxlbi0tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZW4gPSBkZWZlcnJlZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGRlZmVycmVkQ2xpcHNbaV0uZmlyZShkZWZlcnJlZEV2ZW50c1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90aW1lID0gdGltZTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2ZyYW1lJywgZGVsdGEpO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YWdlICYmIHRoaXMuc3RhZ2UucmVuZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTdGFydCBydW5uaW5nIGFuaW1hdGlvblxuICAgICAqL1xuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fcGF1c2VkVGltZSA9IDA7XG5cbiAgICAgICAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9ydW5uaW5nKSB7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuX3BhdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG5cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0b3AgcnVubmluZyBhbmltYXRpb25cbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUGF1c2VcbiAgICAgKi9cbiAgICBwYXVzZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fcGF1c2VTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlc3VtZVxuICAgICAqL1xuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXVzZWRUaW1lICs9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZVN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xuICAgICAqL1xuICAgIHJlbW92ZUNsaXBzQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBhbmltYXRvclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9ucy5sb29wXVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZXR0ZXJdXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNldHRlcl1cbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuaW50ZXJwb2xhdGVyXVxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqL1xuICAgIGFuaW1hdGU6IGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHZhciBhbmltYXRvciA9IG5ldyBBbmltYXRvcihcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG9wdGlvbnMubG9vcCxcbiAgICAgICAgICAgIG9wdGlvbnMuZ2V0dGVyLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmludGVycG9sYXRlclxuICAgICAgICApO1xuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYW5pbWF0b3I7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lO1xuIiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgcXVhdCA9IGdsTWF0cml4LnF1YXQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbi8qKlxuICpcbiAqIEFuaW1hdGlvbiBjbGlwIHRoYXQgbWFuYWdlIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uVHJhY2tDbGlwXG4gKlxuICogQGV4dGVuZHMgY2xheS5hbmltYXRpb24uQ2xpcFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMudGFyZ2V0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZ2FwXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBbb3B0cy5lYXNpbmddXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbnJlc3RhcnRdXG4gKiBAcGFyYW0ge0FycmF5LjxjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2s+fSBbb3B0cy50cmFja3NdXG4gKi9cbnZhciBUcmFja0NsaXAgPSBmdW5jdGlvbiAob3B0cykge1xuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRyYWNrcyA9IG9wdHMudHJhY2tzIHx8IFtdO1xufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xpcC5wcm90b3R5cGUpO1xuXG5UcmFja0NsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhY2tDbGlwO1xuXG5UcmFja0NsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xuXG4gICAgdmFyIHJldCA9IENsaXAucHJvdG90eXBlLnN0ZXAuY2FsbCh0aGlzLCB0aW1lLCBkVGltZSwgdHJ1ZSk7XG5cbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcbiAgICAgICAgLy8gVE9ETyBsaWZlIG1heSBiZSBjaGFuZ2VkLlxuICAgICAgICBpZiAodGhpcy5fcmFuZ2UpIHtcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9yYW5nZVswXSArIHRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUaW1lKHRpbWUpO1xuICAgIH1cblxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XG4gICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByYW5nZVxuICovXG5UcmFja0NsaXAucHJvdG90eXBlLnNldFJhbmdlID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgICByYW5nZVsxXSA9IE1hdGgubWluKHJhbmdlWzFdLCB0aGlzLmxpZmUpO1xuICAgICAgICByYW5nZVswXSA9IE1hdGgubWluKHJhbmdlWzBdLCB0aGlzLmxpZmUpO1xuICAgICAgICB0aGlzLmxpZmUgPSAocmFuZ2VbMV0gLSByYW5nZVswXSk7XG4gICAgfVxufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMudHJhY2tzW2ldLnNldFRpbWUodGltZSk7XG4gICAgfVxufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZS5jYWxjTGlmZUZyb21UcmFja3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5saWZlID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KHRoaXMubGlmZSwgdGhpcy50cmFja3NbaV0uZ2V0TWF4VGltZSgpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfSBqb2ludENsaXBcbiAqL1xuVHJhY2tDbGlwLnByb3RvdHlwZS5hZGRUcmFjayA9IGZ1bmN0aW9uICh0cmFjaykge1xuICAgIHRoaXMudHJhY2tzLnB1c2godHJhY2spO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gam9pbnRDbGlwXG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUucmVtb3ZlVGFyY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcbiAgICB2YXIgaWR4ID0gdGhpcy50cmFja3MuaW5kZXhPZih0cmFjayk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHRoaXMudHJhY2tzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0VGltZVxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb29wXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9XG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUuZ2V0U3ViQ2xpcCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlzTG9vcCkge1xuICAgIHZhciBzdWJDbGlwID0gbmV3IFRyYWNrQ2xpcCh7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3ViVHJhY2sgPSB0aGlzLnRyYWNrc1tpXS5nZXRTdWJUcmFjayhzdGFydFRpbWUsIGVuZFRpbWUpO1xuICAgICAgICBzdWJDbGlwLmFkZFRyYWNrKHN1YlRyYWNrKTtcbiAgICB9XG5cbiAgICBpZiAoaXNMb29wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3ViQ2xpcC5zZXRMb29wKGlzTG9vcCk7XG4gICAgfVxuXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcblxuICAgIHJldHVybiBzdWJDbGlwO1xufTtcblxuLyoqXG4gKiAxZCBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxuICogQHBhcmFtICB7bnVtYmVyfSB3XG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIsIHcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcblxuICAgICAgICB0Q2xpcC5ibGVuZDFEKGMxLCBjMiwgdyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxuICovXG5UcmFja0NsaXAucHJvdG90eXBlLmFkZGl0aXZlQmxlbmQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XG5cbiAgICAgICAgdENsaXAuYWRkaXRpdmVCbGVuZChjMSwgYzIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcbiAqL1xuVHJhY2tDbGlwLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xuXG4gICAgICAgIHRDbGlwLnN1YnRyYWN0aXZlQmxlbmQoYzEsIGMyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIDJEIGJsZW5kaW5nIGZyb20gdGhyZWUgc2tpbm5pbmcgY2xpcHNcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDNcbiAqIEBwYXJhbSAge251bWJlcn0gZlxuICogQHBhcmFtICB7bnVtYmVyfSBnXG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUuYmxlbmQyRCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIsIGNsaXAzLCBmLCBnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIGMzID0gY2xpcDMudHJhY2tzW2ldO1xuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcblxuICAgICAgICB0Q2xpcC5ibGVuZDJEKGMxLCBjMiwgYzMsIGYsIGcpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29weSBTUlQgb2YgYWxsIGpvaW50cyBjbGlwcyBmcm9tIGFub3RoZXIgVHJhY2tDbGlwXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXBcbiAqL1xuVHJhY2tDbGlwLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGNsaXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzVHJhY2sgPSBjbGlwLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIHRUcmFjayA9IHRoaXMudHJhY2tzW2ldO1xuXG4gICAgICAgIHZlYzMuY29weSh0VHJhY2sucG9zaXRpb24sIHNUcmFjay5wb3NpdGlvbik7XG4gICAgICAgIHZlYzMuY29weSh0VHJhY2suc2NhbGUsIHNUcmFjay5zY2FsZSk7XG4gICAgICAgIHF1YXQuY29weSh0VHJhY2sucm90YXRpb24sIHNUcmFjay5yb3RhdGlvbik7XG4gICAgfVxufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjbGlwLmFkZFRyYWNrKHRoaXMudHJhY2tzW2ldLmNsb25lKCkpO1xuICAgIH1cbiAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XG4gICAgcmV0dXJuIGNsaXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUcmFja0NsaXA7XG4iLCJ2YXIgRVhURU5TSU9OX0xJU1QgPSBbXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0JyxcbiAgICAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcsXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicsXG4gICAgJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyxcbiAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcbiAgICAnT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnLFxuICAgICdPRVNfZWxlbWVudF9pbmRleF91aW50JyxcbiAgICAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnLFxuICAgICdXRUJHTF9kZXB0aF90ZXh0dXJlJyxcbiAgICAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyxcbiAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcsXG4gICAgJ1dFQkdMX2RyYXdfYnVmZmVycycsXG4gICAgJ0VYVF9mcmFnX2RlcHRoJyxcbiAgICAnRVhUX3NSR0InXG5dO1xuXG52YXIgUEFSQU1FVEVSX05BTUVTID0gW1xuICAgICdNQVhfVEVYVFVSRV9TSVpFJyxcbiAgICAnTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSdcbl07XG5cbmZ1bmN0aW9uIEdMSW5mbyhfZ2wpIHtcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9O1xuICAgIHZhciBwYXJhbWV0ZXJzID0ge307XG5cbiAgICAvLyBHZXQgd2ViZ2wgZXh0ZW5zaW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBFWFRFTlNJT05fTElTVC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXh0TmFtZSA9IEVYVEVOU0lPTl9MSVNUW2ldO1xuICAgICAgICBjcmVhdGVFeHRlbnNpb24oZXh0TmFtZSk7XG4gICAgfVxuICAgIC8vIEdldCBwYXJhbWV0ZXJzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBQQVJBTUVURVJfTkFNRVMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5hbWUgPSBQQVJBTUVURVJfTkFNRVNbaV07XG4gICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbFtuYW1lXSk7XG4gICAgfVxuXG4gICAgdGhpcy5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIShuYW1lIGluIGV4dGVuc2lvbnMpKSB7XG4gICAgICAgICAgICBjcmVhdGVFeHRlbnNpb24obmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnNbbmFtZV07XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNbbmFtZV07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbihuYW1lKSB7XG4gICAgICAgIHZhciBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKG5hbWUpO1xuICAgICAgICBpZiAoIWV4dCkge1xuICAgICAgICAgICAgZXh0ID0gX2dsLmdldEV4dGVuc2lvbignTU9aXycgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dCkge1xuICAgICAgICAgICAgZXh0ID0gX2dsLmdldEV4dGVuc2lvbignV0VCS0lUXycgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBleHRlbnNpb25zW25hbWVdID0gZXh0O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR0xJbmZvO1xuIiwiLyoqXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5nbGVudW1cbiAqIEBzZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvMS4wLyM1LjE0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICAvKiBDbGVhckJ1ZmZlck1hc2sgKi9cbiAgICBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDAwMTAwLFxuICAgIFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA6IDB4MDAwMDA0MDAsXG4gICAgQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDogMHgwMDAwNDAwMCxcblxuICAgIC8qIEJlZ2luTW9kZSAqL1xuICAgIFBPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDAwMCxcbiAgICBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDEsXG4gICAgTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAyLFxuICAgIExJTkVfU1RSSVAgICAgICAgICAgICAgICAgICAgICA6IDB4MDAwMyxcbiAgICBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDQsXG4gICAgVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDogMHgwMDA1LFxuICAgIFRSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA6IDB4MDAwNixcblxuICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi9cbiAgICAvKiAgICAgIE5FVkVSICovXG4gICAgLyogICAgICBMRVNTICovXG4gICAgLyogICAgICBFUVVBTCAqL1xuICAgIC8qICAgICAgTEVRVUFMICovXG4gICAgLyogICAgICBHUkVBVEVSICovXG4gICAgLyogICAgICBOT1RFUVVBTCAqL1xuICAgIC8qICAgICAgR0VRVUFMICovXG4gICAgLyogICAgICBBTFdBWVMgKi9cblxuICAgIC8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqL1xuICAgIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSxcbiAgICBTUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDAsXG4gICAgT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgIDogMHgwMzAxLFxuICAgIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMixcbiAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgOiAweDAzMDMsXG4gICAgRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA0LFxuICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA6IDB4MDMwNSxcblxuICAgIC8qIEJsZW5kaW5nRmFjdG9yU3JjICovXG4gICAgLyogICAgICBaRVJPICovXG4gICAgLyogICAgICBPTkUgKi9cbiAgICBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDYsXG4gICAgT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDogMHgwMzA3LFxuICAgIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICA6IDB4MDMwOCxcbiAgICAvKiAgICAgIFNSQ19BTFBIQSAqL1xuICAgIC8qICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAqL1xuICAgIC8qICAgICAgRFNUX0FMUEhBICovXG4gICAgLyogICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICovXG5cbiAgICAvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi9cbiAgICBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwMDYsXG4gICAgQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDogMHg4MDA5LFxuICAgIEJMRU5EX0VRVUFUSU9OX1JHQiAgICAgICAgICAgICA6IDB4ODAwOSwgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqL1xuICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA6IDB4ODgzRCxcblxuICAgIC8qIEJsZW5kU3VidHJhY3QgKi9cbiAgICBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgOiAweDgwMEEsXG4gICAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgIDogMHg4MDBCLFxuXG4gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovXG4gICAgQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM4LFxuICAgIEJMRU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICA6IDB4ODBDOSxcbiAgICBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0EsXG4gICAgQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENCLFxuICAgIENPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICA6IDB4ODAwMSxcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAgICAgOiAweDgwMDIsXG4gICAgQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDogMHg4MDAzLFxuICAgIE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA6IDB4ODAwNCxcbiAgICBCTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgOiAweDgwMDUsXG5cbiAgICAvKiBCdWZmZXIgT2JqZWN0cyAqL1xuICAgIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4ODg5MixcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgOiAweDg4OTMsXG4gICAgQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDogMHg4ODk0LFxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA6IDB4ODg5NSxcblxuICAgIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA6IDB4ODhFMCxcbiAgICBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTQsXG4gICAgRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDogMHg4OEU4LFxuXG4gICAgQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDogMHg4NzY0LFxuICAgIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA6IDB4ODc2NSxcblxuICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA6IDB4ODYyNixcblxuICAgIC8qIEN1bGxGYWNlTW9kZSAqL1xuICAgIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNCxcbiAgICBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDUsXG4gICAgRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgIDogMHgwNDA4LFxuXG4gICAgLyogRGVwdGhGdW5jdGlvbiAqL1xuICAgIC8qICAgICAgTkVWRVIgKi9cbiAgICAvKiAgICAgIExFU1MgKi9cbiAgICAvKiAgICAgIEVRVUFMICovXG4gICAgLyogICAgICBMRVFVQUwgKi9cbiAgICAvKiAgICAgIEdSRUFURVIgKi9cbiAgICAvKiAgICAgIE5PVEVRVUFMICovXG4gICAgLyogICAgICBHRVFVQUwgKi9cbiAgICAvKiAgICAgIEFMV0FZUyAqL1xuXG4gICAgLyogRW5hYmxlQ2FwICovXG4gICAgLyogVEVYVFVSRV8yRCAqL1xuICAgIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NCxcbiAgICBCTEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDBCRTIsXG4gICAgRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkQwLFxuICAgIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEI5MCxcbiAgICBERVBUSF9URVNUICAgICAgICAgICAgICAgICAgICAgOiAweDBCNzEsXG4gICAgU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQzExLFxuICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAgICA6IDB4ODAzNyxcbiAgICBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgOiAweDgwOUUsXG4gICAgU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgIDogMHg4MEEwLFxuXG4gICAgLyogRXJyb3JDb2RlICovXG4gICAgTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgOiAweDA1MDAsXG4gICAgSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgIDogMHgwNTAxLFxuICAgIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA6IDB4MDUwMixcbiAgICBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgOiAweDA1MDUsXG5cbiAgICAvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi9cbiAgICBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDAsXG4gICAgQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwOTAxLFxuXG4gICAgLyogR2V0UE5hbWUgKi9cbiAgICBMSU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOiAweDBCMjEsXG4gICAgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgIDogMHg4NDZELFxuICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA6IDB4ODQ2RSxcbiAgICBDVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgOiAweDBCNDUsXG4gICAgRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ2LFxuICAgIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MCxcbiAgICBERVBUSF9XUklURU1BU0sgICAgICAgICAgICAgICAgOiAweDBCNzIsXG4gICAgREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQjczLFxuICAgIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3NCxcbiAgICBTVEVOQ0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgOiAweDBCOTEsXG4gICAgU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDogMHgwQjkyLFxuICAgIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICA6IDB4MEI5NCxcbiAgICBTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgOiAweDBCOTUsXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDogMHgwQjk2LFxuICAgIFNURU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA6IDB4MEI5NyxcbiAgICBTVEVOQ0lMX1ZBTFVFX01BU0sgICAgICAgICAgICAgOiAweDBCOTMsXG4gICAgU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgIDogMHgwQjk4LFxuICAgIFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA6IDB4ODgwMCxcbiAgICBTVEVOQ0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgOiAweDg4MDEsXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDogMHg4ODAyLFxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA6IDB4ODgwMyxcbiAgICBTVEVOQ0lMX0JBQ0tfUkVGICAgICAgICAgICAgICAgOiAweDhDQTMsXG4gICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDogMHg4Q0E0LFxuICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA6IDB4OENBNSxcbiAgICBWSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgOiAweDBCQTIsXG4gICAgU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgIDogMHgwQzEwLFxuICAgIC8qICAgICAgU0NJU1NPUl9URVNUICovXG4gICAgQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQzIyLFxuICAgIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEMyMyxcbiAgICBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgOiAweDBDRjUsXG4gICAgUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgIDogMHgwRDA1LFxuICAgIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA6IDB4MEQzMyxcbiAgICBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgOiAweDBEM0EsXG4gICAgU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgIDogMHgwRDUwLFxuICAgIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MixcbiAgICBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTMsXG4gICAgQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgIDogMHgwRDU0LFxuICAgIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NSxcbiAgICBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTYsXG4gICAgU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgIDogMHgwRDU3LFxuICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA6IDB4MkEwMCxcbiAgICAvKiAgICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgKi9cbiAgICBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAgOiAweDgwMzgsXG4gICAgVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDogMHg4MDY5LFxuICAgIFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA6IDB4ODBBOCxcbiAgICBTQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwQTksXG4gICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgIDogMHg4MEFBLFxuICAgIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA6IDB4ODBBQixcblxuICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi9cbiAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqL1xuICAgIC8qICAgICAgVEVYVFVSRV9NSU5fRklMVEVSICovXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqL1xuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi9cblxuICAgIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA6IDB4ODZBMyxcblxuICAgIC8qIEhpbnRNb2RlICovXG4gICAgRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAwLFxuICAgIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMSxcbiAgICBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDExMDIsXG5cbiAgICAvKiBIaW50VGFyZ2V0ICovXG4gICAgR0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICA6IDB4ODE5MixcblxuICAgIC8qIERhdGFUeXBlICovXG4gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNDAwLFxuICAgIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA6IDB4MTQwMSxcbiAgICBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDIsXG4gICAgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgIDogMHgxNDAzLFxuICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNCxcbiAgICBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgOiAweDE0MDUsXG4gICAgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNDA2LFxuXG4gICAgLyogUGl4ZWxGb3JtYXQgKi9cbiAgICBERVBUSF9DT01QT05FTlQgICAgICAgICAgICAgICAgOiAweDE5MDIsXG4gICAgQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA2LFxuICAgIFJHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNyxcbiAgICBSR0JBICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE5MDgsXG4gICAgTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA5LFxuICAgIExVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICA6IDB4MTkwQSxcblxuICAgIC8qIFBpeGVsVHlwZSAqL1xuICAgIC8qICAgICAgVU5TSUdORURfQllURSAqL1xuICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICA6IDB4ODAzMyxcbiAgICBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgOiAweDgwMzQsXG4gICAgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgIDogMHg4MzYzLFxuXG4gICAgLyogU2hhZGVycyAqL1xuICAgIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDogMHg4QjMwLFxuICAgIFZFUlRFWF9TSEFERVIgICAgICAgICAgICAgICAgICAgIDogMHg4QjMxLFxuICAgIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDogMHg4ODY5LFxuICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgIDogMHg4REZCLFxuICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgIDogMHg4REZDLFxuICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDogMHg4QjRELFxuICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgIDogMHg4QjRDLFxuICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgIDogMHg4ODcyLFxuICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgIDogMHg4REZELFxuICAgIFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjRGLFxuICAgIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDogMHg4QjgwLFxuICAgIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjgyLFxuICAgIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDogMHg4QjgzLFxuICAgIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAgIDogMHg4Qjg1LFxuICAgIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDogMHg4Qjg2LFxuICAgIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDogMHg4Qjg5LFxuICAgIFNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiAgICAgICAgIDogMHg4QjhDLFxuICAgIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDogMHg4QjhELFxuXG4gICAgLyogU3RlbmNpbEZ1bmN0aW9uICovXG4gICAgTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAwLFxuICAgIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMSxcbiAgICBFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAyMDIsXG4gICAgTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAzLFxuICAgIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNCxcbiAgICBOT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgOiAweDAyMDUsXG4gICAgR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA2LFxuICAgIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNyxcblxuICAgIC8qIFN0ZW5jaWxPcCAqL1xuICAgIC8qICAgICAgWkVSTyAqL1xuICAgIEtFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUUwMCxcbiAgICBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDEsXG4gICAgSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAyLFxuICAgIERFQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUUwMyxcbiAgICBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE1MEEsXG4gICAgSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA3LFxuICAgIERFQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA6IDB4ODUwOCxcblxuICAgIC8qIFN0cmluZ05hbWUgKi9cbiAgICBWRU5ET1IgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFGMDAsXG4gICAgUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAxLFxuICAgIFZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMixcblxuICAgIC8qIFRleHR1cmVNYWdGaWx0ZXIgKi9cbiAgICBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDAsXG4gICAgTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgyNjAxLFxuXG4gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqL1xuICAgIC8qICAgICAgTkVBUkVTVCAqL1xuICAgIC8qICAgICAgTElORUFSICovXG4gICAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDogMHgyNzAwLFxuICAgIExJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA6IDB4MjcwMSxcbiAgICBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgOiAweDI3MDIsXG4gICAgTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDogMHgyNzAzLFxuXG4gICAgLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi9cbiAgICBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgOiAweDI4MDAsXG4gICAgVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgIDogMHgyODAxLFxuICAgIFRFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICA6IDB4MjgwMixcbiAgICBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgOiAweDI4MDMsXG5cbiAgICAvKiBUZXh0dXJlVGFyZ2V0ICovXG4gICAgVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgIDogMHgwREUxLFxuICAgIFRFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTcwMixcblxuICAgIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA6IDB4ODUxMyxcbiAgICBURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAgICAgICAgOiAweDg1MTQsXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDogMHg4NTE1LFxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA6IDB4ODUxNixcbiAgICBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgICAgOiAweDg1MTcsXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgIDogMHg4NTE4LFxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA6IDB4ODUxOSxcbiAgICBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogICAgOiAweDg1MUEsXG4gICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgIDogMHg4NTFDLFxuXG4gICAgLyogVGV4dHVyZVVuaXQgKi9cbiAgICBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzAsXG4gICAgVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMxLFxuICAgIFRFWFRVUkUyICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDMixcbiAgICBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzMsXG4gICAgVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM0LFxuICAgIFRFWFRVUkU1ICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDNSxcbiAgICBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzYsXG4gICAgVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM3LFxuICAgIFRFWFRVUkU4ICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDOCxcbiAgICBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzksXG4gICAgVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENBLFxuICAgIFRFWFRVUkUxMSAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDQixcbiAgICBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0MsXG4gICAgVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENELFxuICAgIFRFWFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDRSxcbiAgICBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0YsXG4gICAgVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQwLFxuICAgIFRFWFRVUkUxNyAgICAgICAgICAgICAgICAgICAgICA6IDB4ODREMSxcbiAgICBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDIsXG4gICAgVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQzLFxuICAgIFRFWFRVUkUyMCAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRENCxcbiAgICBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDUsXG4gICAgVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ2LFxuICAgIFRFWFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRENyxcbiAgICBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDgsXG4gICAgVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ5LFxuICAgIFRFWFRVUkUyNiAgICAgICAgICAgICAgICAgICAgICA6IDB4ODREQSxcbiAgICBURVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REIsXG4gICAgVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERDLFxuICAgIFRFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRERCxcbiAgICBURVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REUsXG4gICAgVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERGLFxuICAgIEFDVElWRV9URVhUVVJFICAgICAgICAgICAgICAgICA6IDB4ODRFMCxcblxuICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqL1xuICAgIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjkwMSxcbiAgICBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgOiAweDgxMkYsXG4gICAgTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgIDogMHg4MzcwLFxuXG4gICAgLyogVW5pZm9ybSBUeXBlcyAqL1xuICAgIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MCxcbiAgICBGTE9BVF9WRUMzICAgICAgICAgICAgICAgICAgICAgOiAweDhCNTEsXG4gICAgRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUyLFxuICAgIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MyxcbiAgICBJTlRfVkVDMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNTQsXG4gICAgSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU1LFxuICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NixcbiAgICBCT09MX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNTcsXG4gICAgQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU4LFxuICAgIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OSxcbiAgICBGTE9BVF9NQVQyICAgICAgICAgICAgICAgICAgICAgOiAweDhCNUEsXG4gICAgRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVCLFxuICAgIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QyxcbiAgICBTQU1QTEVSXzJEICAgICAgICAgICAgICAgICAgICAgOiAweDhCNUUsXG4gICAgU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDogMHg4QjYwLFxuXG4gICAgLyogVmVydGV4IEFycmF5cyAqL1xuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgOiAweDg2MjIsXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA6IDB4ODYyMyxcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgIDogMHg4NjI0LFxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgOiAweDg2MjUsXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA6IDB4ODg2QSxcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgIDogMHg4NjQ1LFxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgOiAweDg4OUYsXG5cbiAgICAvKiBTaGFkZXIgU291cmNlICovXG4gICAgQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDogMHg4QjgxLFxuXG4gICAgLyogU2hhZGVyIFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi9cbiAgICBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjAsXG4gICAgTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDogMHg4REYxLFxuICAgIEhJR0hfRkxPQVQgICAgICAgICAgICAgICAgICAgICA6IDB4OERGMixcbiAgICBMT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjMsXG4gICAgTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REY0LFxuICAgIEhJR0hfSU5UICAgICAgICAgICAgICAgICAgICAgICA6IDB4OERGNSxcblxuICAgIC8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi9cbiAgICBGUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgOiAweDhENDAsXG4gICAgUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDogMHg4RDQxLFxuXG4gICAgUkdCQTQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MDU2LFxuICAgIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NyxcbiAgICBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhENjIsXG4gICAgREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgIDogMHg4MUE1LFxuICAgIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA6IDB4MTkwMSxcbiAgICBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgOiAweDhENDgsXG4gICAgREVQVEhfU1RFTkNJTCAgICAgICAgICAgICAgICAgIDogMHg4NEY5LFxuXG4gICAgUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDogMHg4RDQyLFxuICAgIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA6IDB4OEQ0MyxcbiAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgOiAweDhENDQsXG4gICAgUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDogMHg4RDUwLFxuICAgIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA6IDB4OEQ1MSxcbiAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgOiAweDhENTIsXG4gICAgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgIDogMHg4RDUzLFxuICAgIFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAgICA6IDB4OEQ1NCxcbiAgICBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgOiAweDhENTUsXG5cbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAgICA6IDB4OENEMCxcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA6IDB4OENEMSxcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA6IDB4OENEMixcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSA6IDB4OENEMyxcblxuICAgIENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA6IDB4OENFMCxcbiAgICBERVBUSF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgOiAweDhEMDAsXG4gICAgU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgIDogMHg4RDIwLFxuICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA6IDB4ODIxQSxcblxuICAgIE5PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG5cbiAgICBGUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICA6IDB4OENENSxcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA6IDB4OENENixcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA6IDB4OENENyxcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAgICAgICA6IDB4OENEOSxcbiAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA6IDB4OENERCxcblxuICAgIEZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICA6IDB4OENBNixcbiAgICBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDhDQTcsXG4gICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDogMHg4NEU4LFxuXG4gICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gIDogMHgwNTA2LFxuXG4gICAgLyogV2ViR0wtc3BlY2lmaWMgZW51bXMgKi9cbiAgICBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgOiAweDkyNDAsXG4gICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIDogMHg5MjQxLFxuICAgIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICA6IDB4OTI0MixcbiAgICBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIDogMHg5MjQzLFxuICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICA6IDB4OTI0NCxcbn07XG4iLCJ2YXIgc3VwcG9ydFdlYkdMID0gdHJ1ZTtcbnRyeSB7XG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcbiAgICBpZiAoIWdsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cbn0gY2F0Y2ggKGUpIHtcbiAgICBzdXBwb3J0V2ViR0wgPSBmYWxzZTtcbn1cblxudmFyIHZlbmRvciA9IHt9O1xuXG4vKipcbiAqIElmIHN1cHBvcnQgV2ViR0xcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnZlbmRvci5zdXBwb3J0V2ViR0wgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN1cHBvcnRXZWJHTDtcbn07XG5cblxudmVuZG9yLkludDhBcnJheSA9IHR5cGVvZiBJbnQ4QXJyYXkgPT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDhBcnJheTtcblxudmVuZG9yLlVpbnQ4QXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PSAndW5kZWZpbmVkJyA/IEFycmF5IDogVWludDhBcnJheTtcblxudmVuZG9yLlVpbnQxNkFycmF5ID0gdHlwZW9mIFVpbnQxNkFycmF5ID09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MTZBcnJheTtcblxudmVuZG9yLlVpbnQzMkFycmF5ID0gdHlwZW9mIFVpbnQzMkFycmF5ID09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MzJBcnJheTtcblxudmVuZG9yLkludDE2QXJyYXkgPSB0eXBlb2YgSW50MTZBcnJheSA9PSAndW5kZWZpbmVkJyA/IEFycmF5IDogSW50MTZBcnJheTtcblxudmVuZG9yLkZsb2F0MzJBcnJheSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0MzJBcnJheTtcblxudmVuZG9yLkZsb2F0NjRBcnJheSA9IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0NjRBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgdmVuZG9yO1xuIiwiaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLlZlY3RvcjNcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHpcbiAqL1xudmFyIFZlY3RvcjMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XG5cbiAgICB4ID0geCB8fCAwO1xuICAgIHkgPSB5IHx8IDA7XG4gICAgeiA9IHogfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yMywgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHogY29tcG9uZW50c1xuICAgICAqIEBuYW1lIGFycmF5XG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjMjXG4gICAgICovXG4gICAgdGhpcy5hcnJheSA9IHZlYzMuZnJvbVZhbHVlcyh4LCB5LCB6KTtcblxuICAgIC8qKlxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XG4gICAgICogQG5hbWUgX2RpcnR5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3IzI1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3IgOiBWZWN0b3IzLFxuXG4gICAgLyoqXG4gICAgICogQWRkIGIgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xuICAgICAgICB2ZWMzLmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHopIHtcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50cyBmcm9tIGFycmF5XG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xuICAgICAgICB0aGlzLmFycmF5WzFdID0gYXJyWzFdO1xuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xuXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjNcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnksIHRoaXMueik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xuICAgICAgICB2ZWMzLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyb3NzIHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYiwgd3JpdHRlbiB0byBhIFZlY3RvcjMgb3V0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGNyb3NzOiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB2ZWMzLmNyb3NzKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZGlzdGFuY2VcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0OiBmdW5jdGlvbiAoYikge1xuICAgICAgICByZXR1cm4gdmVjMy5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBkaXZpZGVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGRpdjogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGRpdmlkZTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHJldHVybiB2ZWMzLmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5sZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5sZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGxlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XG4gICAgICAgIHZlYzMubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBtaW46IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHZlYzMubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIG1heDogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xuICAgICAgICB2ZWMzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTmVnYXRlIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBuZWdhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmVjMy5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZlYzMubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSwgeiBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICByYW5kb206IGZ1bmN0aW9uIChzY2FsZSkge1xuICAgICAgICB2ZWMzLnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNjYWxlIHNlbGZcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHNjYWxlOiBmdW5jdGlvbiAocykge1xuICAgICAgICB2ZWMzLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTY2FsZSBiIGFuZCBhZGQgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBzY2FsZUFuZEFkZDogZnVuY3Rpb24gKGIsIHMpIHtcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckRpc3Q6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHJldHVybiB2ZWMzLnNxckRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbiAoYikge1xuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkRGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckxlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5zcXJMZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkTGVuZ3RoKHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHN1YjogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5zdWIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0IGIgZnJvbSBzZWxmXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5zdWJ0cmFjdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDMgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1cbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobSkge1xuICAgICAgICB2ZWMzLnRyYW5zZm9ybU1hdDQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm1RdWF0OiBmdW5jdGlvbiAocSkge1xuICAgICAgICB2ZWMzLnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYXNuZm9ybSBzZWxmIGludG8gcHJvamVjdGlvbiBzcGFjZSB3aXRoIG1cbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgdmFyIHYgPSB0aGlzLmFycmF5O1xuICAgICAgICBtID0gbS5hcnJheTtcblxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXG4gICAgICAgIGlmIChtWzE1XSA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHZbMl07XG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKiB3O1xuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICogdztcbiAgICAgICAgICAgIHZbMl0gPSAobVsxMF0gKiB2WzJdICsgbVsxNF0pICogdztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSArIG1bMTJdO1xuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICsgbVsxM107XG4gICAgICAgICAgICB2WzJdID0gbVsxMF0gKiB2WzJdICsgbVsxNF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBldWxlckZyb21RdWF0OiBmdW5jdGlvbihxLCBvcmRlcikge1xuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbVF1YXQodGhpcywgcSwgb3JkZXIpO1xuICAgIH0sXG5cbiAgICBldWxlckZyb21NYXQzOiBmdW5jdGlvbiAobSwgb3JkZXIpIHtcbiAgICAgICAgVmVjdG9yMy5ldWxlckZyb21NYXQzKHRoaXMsIG0sIG9yZGVyKTtcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xuICAgIH0sXG5cbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcbiAgICB9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBHZXR0ZXIgYW5kIFNldHRlclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XG5cbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IzLnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBAbmFtZSB4XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMF07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5WzBdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHlcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yM1xuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsxXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgelxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3IzXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzJdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsyXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cblxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gIHhcbiAqIEBwYXJhbSAge251bWJlcn0gIHlcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSwgeikge1xuICAgIHZlYzMuc2V0KG91dC5hcnJheSwgeCwgeSwgeik7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XG4gICAgdmVjMy5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzMuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IzLmRpc3RhbmNlID0gVmVjdG9yMy5kaXN0O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMy5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuZGl2aWRlID0gVmVjdG9yMy5kaXY7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjMuZG90ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWMzLmRvdChhLmFycmF5LCBiLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5sZW4gPSBmdW5jdGlvbihiKSB7XG4gICAgcmV0dXJuIHZlYzMubGVuZ3RoKGIuYXJyYXkpO1xufTtcblxuLy8gVmVjdG9yMy5sZW5ndGggPSBWZWN0b3IzLmxlbjtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcbiAgICB2ZWMzLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLm1pbihvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMy5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLm11bHRpcGx5KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5tdWx0aXBseSA9IFZlY3RvcjMubXVsO1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmVjMy5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZlYzMubm9ybWFsaXplKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XG4gICAgdmVjMy5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHNjYWxlKSB7XG4gICAgdmVjMy5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XG4gICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHNjYWxlKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjMuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gdmVjMy5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xufTtcbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IzLnNxckRpc3Q7XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjMuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiB2ZWMzLnNxckxlbihhLmFycmF5KTtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yMy5zcXJMZW47XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5zdWJ0cmFjdCA9IFZlY3RvcjMuc3ViO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMy50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMy50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gcVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xuICAgIHZlYzMudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5mdW5jdGlvbiBjbGFtcCh2YWwsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIHZhbCA8IG1pbiA/IG1pbiA6ICh2YWwgPiBtYXggPyBtYXggOiB2YWwpO1xufVxudmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbnZhciBhc2luID0gTWF0aC5hc2luO1xudmFyIGFicyA9IE1hdGguYWJzO1xuLyoqXG4gKiBDb252ZXJ0IHF1YXRlcm5pb24gdG8gZXVsZXIgYW5nbGVcbiAqIFF1YXRlcm5pb24gbXVzdCBiZSBub3JtYWxpemVkXG4gKiBGcm9tIHRocmVlLmpzXG4gKi9cblZlY3RvcjMuZXVsZXJGcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEsIG9yZGVyKSB7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcSA9IHEuYXJyYXk7XG5cbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXTtcbiAgICB2YXIgeDIgPSB4ICogeDtcbiAgICB2YXIgeTIgPSB5ICogeTtcbiAgICB2YXIgejIgPSB6ICogejtcbiAgICB2YXIgdzIgPSB3ICogdztcblxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcblxuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICAgICAgY2FzZSAnWFlaJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgLSB5ICogeiksICh3MiAtIHgyIC0geTIgKyB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcCgyICogKHggKiB6ICsgeSAqIHcpLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeiAqIHcgLSB4ICogeSksICh3MiArIHgyIC0geTIgLSB6MikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1lYWic6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgLSB5ICogeiksIC0gMSwgMSkpO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHggKiB5ICsgeiAqIHcpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaWFknOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcCgyICogKHggKiB3ICsgeSAqIHopLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB6ICogeCksICh3MiAtIHgyIC0geTIgKyB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh6ICogdyAtIHggKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWllYJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB6ICogeSksICh3MiAtIHgyIC0geTIgKyB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcCgyICogKHkgKiB3IC0geCAqIHopLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiArIHgyIC0geTIgLSB6MikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1laWCc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3IC0geiAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB4ICogeiksICh3MiArIHgyIC0geTIgLSB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbihjbGFtcCgyICogKHggKiB5ICsgeiAqIHcpLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdYWlknOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyArIHkgKiB6KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh6ICogdyAtIHggKiB5KSwgLSAxLCAxKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIG9yZGVyOiAnICsgb3JkZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHJvdGF0aW9uIG1hdHJpeCB0byBldWxlciBhbmdsZVxuICogZnJvbSB0aHJlZS5qc1xuICovXG5WZWN0b3IzLmV1bGVyRnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtLCBvcmRlcikge1xuICAgIC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGkuZSwgdW5zY2FsZWQpXG4gICAgdmFyIHRlID0gbS5hcnJheTtcbiAgICB2YXIgbTExID0gdGVbMF0sIG0xMiA9IHRlWzNdLCBtMTMgPSB0ZVs2XTtcbiAgICB2YXIgbTIxID0gdGVbMV0sIG0yMiA9IHRlWzRdLCBtMjMgPSB0ZVs3XTtcbiAgICB2YXIgbTMxID0gdGVbMl0sIG0zMiA9IHRlWzVdLCBtMzMgPSB0ZVs4XTtcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xuXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgICAgICBjYXNlICdYWVonOlxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcChtMTMsIC0xLCAxKSk7XG4gICAgICAgICAgICBpZiAoYWJzKG0xMykgPCAwLjk5OTk5KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWVhaJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oLWNsYW1wKG0yMywgLTEsIDEpKTtcbiAgICAgICAgICAgIGlmIChhYnMobTIzKSA8IDAuOTk5OTkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0zMyk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIobTIxLCBtMjIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1pYWSc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKG0zMiwgLTEsIDEpKTtcbiAgICAgICAgICAgIGlmIChhYnMobTMyKSA8IDAuOTk5OTkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigtbTMxLCBtMzMpO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0yMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSAwO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaWVgnOlxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbigtY2xhbXAobTMxLCAtMSwgMSkpO1xuICAgICAgICAgICAgaWYgKGFicyhtMzEpIDwgMC45OTk5OSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKG0zMiwgbTMzKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0yMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWVpYJzpcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAobTIxLCAtMSwgMSkpO1xuICAgICAgICAgICAgaWYgKGFicyhtMjEpIDwgMC45OTk5OSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0yMik7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1haWSc6XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKC1jbGFtcChtMTIsIC0xLCAxKSk7XG4gICAgICAgICAgICBpZiAoYWJzKG0xMikgPCAwLjk5OTk5KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKG0xMywgbTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0zMyk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XG4gICAgfVxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8vIFRPRE8gcmV0dXJuIG5ldy5cbi8qKlxuICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLlBPU0lUSVZFX1ggPSBuZXcgVmVjdG9yMygxLCAwLCAwKTtcbi8qKlxuICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLk5FR0FUSVZFX1ggPSBuZXcgVmVjdG9yMygtMSwgMCwgMCk7XG4vKipcbiAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5QT1NJVElWRV9ZID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG4vKipcbiAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5ORUdBVElWRV9ZID0gbmV3IFZlY3RvcjMoMCwgLTEsIDApO1xuLyoqXG4gKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuUE9TSVRJVkVfWiA9IG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xuLyoqXG4gKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuTkVHQVRJVkVfWiA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcbi8qKlxuICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLlVQID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG4vKipcbiAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5aRVJPID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG5cbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjM7XG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XG5cbi8qKlxuICogQXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveFxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLkJvdW5kaW5nQm94XG4gKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBbbWluXVxuICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW21heF1cbiAqL1xudmFyIEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKG1pbiwgbWF4KSB7XG5cbiAgICAvKipcbiAgICAgKiBNaW5pbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5taW4gPSBtaW4gfHwgbmV3IFZlY3RvcjMoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5tYXggPSBtYXggfHwgbmV3IFZlY3RvcjMoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XG59O1xuXG5Cb3VuZGluZ0JveC5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogQm91bmRpbmdCb3gsXG4gICAgLyoqXG4gICAgICogVXBkYXRlIG1pbiBhbmQgbWF4IGNvb3JkcyBmcm9tIGEgdmVydGljZXMgYXJyYXlcbiAgICAgKiBAcGFyYW0gIHthcnJheX0gdmVydGljZXNcbiAgICAgKi9cbiAgICB1cGRhdGVGcm9tVmVydGljZXM6IGZ1bmN0aW9uICh2ZXJ0aWNlcykge1xuICAgICAgICBpZiAodmVydGljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xuICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHZlcnRpY2VzWzBdKTtcbiAgICAgICAgICAgIHZlYzNDb3B5KG1heEFyciwgdmVydGljZXNbMF0pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcblxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMF0gPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0gdmVydGV4WzBdOyB9XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA8IG1pbkFyclsxXSkgeyBtaW5BcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzJdIDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHZlcnRleFsyXTsgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFswXSA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB2ZXJ0ZXhbMF07IH1cbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzFdID4gbWF4QXJyWzFdKSB7IG1heEFyclsxXSA9IHZlcnRleFsxXTsgfVxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gdmVydGV4WzJdOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVuaW9uIG9wZXJhdGlvbiB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLkJvdW5kaW5nQm94fSBiYm94XG4gICAgICovXG4gICAgdW5pb246IGZ1bmN0aW9uIChiYm94KSB7XG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgICAgICB2ZWMzLm1pbihtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xuICAgICAgICB2ZWMzLm1heChtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnRlcnNlY3Rpb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9IGJib3hcbiAgICAgKi9cbiAgICBpbnRlcnNlY3Rpb246IGZ1bmN0aW9uIChiYm94KSB7XG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgICAgICB2ZWMzLm1heChtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xuICAgICAgICB2ZWMzLm1pbihtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiBpbnRlcnNlY3Qgd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5Cb3VuZGluZ0JveH0gYmJveFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XG5cbiAgICAgICAgdmFyIF9taW4yID0gYmJveC5taW4uYXJyYXk7XG4gICAgICAgIHZhciBfbWF4MiA9IGJib3gubWF4LmFycmF5O1xuXG4gICAgICAgIHJldHVybiAhIChfbWluWzBdID4gX21heDJbMF0gfHwgX21pblsxXSA+IF9tYXgyWzFdIHx8IF9taW5bMl0gPiBfbWF4MlsyXVxuICAgICAgICAgICAgfHwgX21heFswXSA8IF9taW4yWzBdIHx8IF9tYXhbMV0gPCBfbWluMlsxXSB8fCBfbWF4WzJdIDwgX21pbjJbMl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiBjb250YWluIGFub3RoZXIgYm91bmRpbmcgYm94IGVudGlyZWx5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLkJvdW5kaW5nQm94fSBiYm94XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBjb250YWluQm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XG5cbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcblxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcbiAgICAgICAgdmFyIF9tYXgyID0gYmJveC5tYXguYXJyYXk7XG5cbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX21pbjJbMF0gJiYgX21pblsxXSA8PSBfbWluMlsxXSAmJiBfbWluWzJdIDw9IF9taW4yWzJdXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9tYXgyWzBdICYmIF9tYXhbMV0gPj0gX21heDJbMV0gJiYgX21heFsyXSA+PSBfbWF4MlsyXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSWYgY29udGFpbiBwb2ludCBlbnRpcmVseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBwb2ludFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgY29udGFpblBvaW50OiBmdW5jdGlvbiAocCkge1xuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xuXG4gICAgICAgIHZhciBfcCA9IHAuYXJyYXk7XG5cbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX3BbMF0gJiYgX21pblsxXSA8PSBfcFsxXSAmJiBfbWluWzJdIDw9IF9wWzJdXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9wWzBdICYmIF9tYXhbMV0gPj0gX3BbMV0gJiYgX21heFsyXSA+PSBfcFsyXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSWYgYm91bmRpbmcgYm94IGlzIGZpbml0ZVxuICAgICAqL1xuICAgIGlzRmluaXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XG4gICAgICAgIHJldHVybiBpc0Zpbml0ZShfbWluWzBdKSAmJiBpc0Zpbml0ZShfbWluWzFdKSAmJiBpc0Zpbml0ZShfbWluWzJdKVxuICAgICAgICAgICAgJiYgaXNGaW5pdGUoX21heFswXSkgJiYgaXNGaW5pdGUoX21heFsxXSkgJiYgaXNGaW5pdGUoX21heFsyXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IGFuIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRvIHRoZSBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbWF0cml4XG4gICAgICovXG4gICAgYXBwbHlUcmFuc2Zvcm06IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9kZXYudGhlb21hZGVyLmNvbS90cmFuc2Zvcm0tYm91bmRpbmctYm94ZXMvXG4gICAgICAgIHZhciB4YSA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB4YiA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB5YSA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB5YiA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB6YSA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB6YiA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtYXRyaXgpIHtcbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcblxuICAgICAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XG5cbiAgICAgICAgICAgIHhhWzBdID0gbVswXSAqIG1pblswXTsgeGFbMV0gPSBtWzFdICogbWluWzBdOyB4YVsyXSA9IG1bMl0gKiBtaW5bMF07XG4gICAgICAgICAgICB4YlswXSA9IG1bMF0gKiBtYXhbMF07IHhiWzFdID0gbVsxXSAqIG1heFswXTsgeGJbMl0gPSBtWzJdICogbWF4WzBdO1xuXG4gICAgICAgICAgICB5YVswXSA9IG1bNF0gKiBtaW5bMV07IHlhWzFdID0gbVs1XSAqIG1pblsxXTsgeWFbMl0gPSBtWzZdICogbWluWzFdO1xuICAgICAgICAgICAgeWJbMF0gPSBtWzRdICogbWF4WzFdOyB5YlsxXSA9IG1bNV0gKiBtYXhbMV07IHliWzJdID0gbVs2XSAqIG1heFsxXTtcblxuICAgICAgICAgICAgemFbMF0gPSBtWzhdICogbWluWzJdOyB6YVsxXSA9IG1bOV0gKiBtaW5bMl07IHphWzJdID0gbVsxMF0gKiBtaW5bMl07XG4gICAgICAgICAgICB6YlswXSA9IG1bOF0gKiBtYXhbMl07IHpiWzFdID0gbVs5XSAqIG1heFsyXTsgemJbMl0gPSBtWzEwXSAqIG1heFsyXTtcblxuICAgICAgICAgICAgbWluWzBdID0gTWF0aC5taW4oeGFbMF0sIHhiWzBdKSArIE1hdGgubWluKHlhWzBdLCB5YlswXSkgKyBNYXRoLm1pbih6YVswXSwgemJbMF0pICsgbVsxMl07XG4gICAgICAgICAgICBtaW5bMV0gPSBNYXRoLm1pbih4YVsxXSwgeGJbMV0pICsgTWF0aC5taW4oeWFbMV0sIHliWzFdKSArIE1hdGgubWluKHphWzFdLCB6YlsxXSkgKyBtWzEzXTtcbiAgICAgICAgICAgIG1pblsyXSA9IE1hdGgubWluKHhhWzJdLCB4YlsyXSkgKyBNYXRoLm1pbih5YVsyXSwgeWJbMl0pICsgTWF0aC5taW4oemFbMl0sIHpiWzJdKSArIG1bMTRdO1xuXG4gICAgICAgICAgICBtYXhbMF0gPSBNYXRoLm1heCh4YVswXSwgeGJbMF0pICsgTWF0aC5tYXgoeWFbMF0sIHliWzBdKSArIE1hdGgubWF4KHphWzBdLCB6YlswXSkgKyBtWzEyXTtcbiAgICAgICAgICAgIG1heFsxXSA9IE1hdGgubWF4KHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1heCh5YVsxXSwgeWJbMV0pICsgTWF0aC5tYXgoemFbMV0sIHpiWzFdKSArIG1bMTNdO1xuICAgICAgICAgICAgbWF4WzJdID0gTWF0aC5tYXgoeGFbMl0sIHhiWzJdKSArIE1hdGgubWF4KHlhWzJdLCB5YlsyXSkgKyBNYXRoLm1heCh6YVsyXSwgemJbMl0pICsgbVsxNF07XG5cbiAgICAgICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBwcm9qZWN0aW9uIG1hdHJpeCB0byB0aGUgYm91bmRpbmcgYm94XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1hdHJpeFxuICAgICAqL1xuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG1hdHJpeCkge1xuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcblxuICAgICAgICB2YXIgbSA9IG1hdHJpeC5hcnJheTtcbiAgICAgICAgLy8gbWluIGluIG1pbiB6XG4gICAgICAgIHZhciB2MTAgPSBtaW5bMF07XG4gICAgICAgIHZhciB2MTEgPSBtaW5bMV07XG4gICAgICAgIHZhciB2MTIgPSBtaW5bMl07XG4gICAgICAgIC8vIG1heCBpbiBtaW4gelxuICAgICAgICB2YXIgdjIwID0gbWF4WzBdO1xuICAgICAgICB2YXIgdjIxID0gbWF4WzFdO1xuICAgICAgICB2YXIgdjIyID0gbWluWzJdO1xuICAgICAgICAvLyBtYXggaW4gbWF4IHpcbiAgICAgICAgdmFyIHYzMCA9IG1heFswXTtcbiAgICAgICAgdmFyIHYzMSA9IG1heFsxXTtcbiAgICAgICAgdmFyIHYzMiA9IG1heFsyXTtcblxuICAgICAgICBpZiAobVsxNV0gPT09IDEpIHsgIC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXG4gICAgICAgICAgICBtaW5bMF0gPSBtWzBdICogdjEwICsgbVsxMl07XG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICsgbVsxM107XG4gICAgICAgICAgICBtYXhbMl0gPSBtWzEwXSAqIHYxMiArIG1bMTRdO1xuXG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjMwICsgbVsxMl07XG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjMxICsgbVsxM107XG4gICAgICAgICAgICBtaW5bMl0gPSBtWzEwXSAqIHYzMiArIG1bMTRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHYxMjtcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKiB3O1xuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSAqIHc7XG4gICAgICAgICAgICBtYXhbMl0gPSAobVsxMF0gKiB2MTIgKyBtWzE0XSkgKiB3O1xuXG4gICAgICAgICAgICB3ID0gLTEgLyB2MjI7XG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjIwICogdztcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MjEgKiB3O1xuXG4gICAgICAgICAgICB3ID0gLTEgLyB2MzI7XG4gICAgICAgICAgICBtaW5bMl0gPSAobVsxMF0gKiB2MzIgKyBtWzE0XSkgKiB3O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHVwZGF0ZVZlcnRpY2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGlmICghdmVydGljZXMpIHtcbiAgICAgICAgICAgIC8vIEN1YmUgdmVydGljZXNcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBFaWdodCBjb29yZHMgb2YgYm91bmRpbmcgYm94XG4gICAgICAgICAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5W119XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcbiAgICAgICAgLy8tLS0gbWluIHpcbiAgICAgICAgLy8gbWluIHhcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIG1pblswXSwgbWF4WzFdLCBtaW5bMl0pO1xuICAgICAgICAvLyBtYXggeFxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1szXSwgbWF4WzBdLCBtYXhbMV0sIG1pblsyXSk7XG5cbiAgICAgICAgLy8tLSBtYXggelxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzRdLCBtaW5bMF0sIG1pblsxXSwgbWF4WzJdKTtcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s1XSwgbWluWzBdLCBtYXhbMV0sIG1heFsyXSk7XG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzddLCBtYXhbMF0sIG1heFsxXSwgbWF4WzJdKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9IGJib3hcbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbiAoYmJveCkge1xuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heDtcbiAgICAgICAgdmVjM0NvcHkobWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XG4gICAgICAgIHZlYzNDb3B5KG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBib3VuZGluZyBib3hcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmNvcHkodGhpcyk7XG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCb3VuZGluZ0JveDtcbiIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciBtYXQzID0gZ2xNYXRyaXgubWF0MztcbnZhciBxdWF0ID0gZ2xNYXRyaXgucXVhdDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguTWF0cml4NFxuICovXG52YXIgTWF0cml4NCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5fYXhpc1ggPSBuZXcgVmVjdG9yMygpO1xuICAgIHRoaXMuX2F4aXNZID0gbmV3IFZlY3RvcjMoKTtcbiAgICB0aGlzLl9heGlzWiA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDRcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXg0I1xuICAgICAqL1xuICAgIHRoaXMuYXJyYXkgPSBtYXQ0LmNyZWF0ZSgpO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgX2RpcnR5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXg0I1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDQsXG5cbiAgICAvKipcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcbiAgICAgKi9cbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgYWRqdWdhdGUgb2Ygc2VsZiwgaW4tcGxhY2VcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBhZGpvaW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgbWF0NC5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXg0XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXg0KCkpLmNvcHkodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIG1hdDQuY29weSh0aGlzLmFycmF5LCBhLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBtYXQ0LmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdXBwZXIgM3gzIHBhcnQgZnJvbSBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBmcm9tUXVhdDogZnVuY3Rpb24ocSkge1xuICAgICAgICBtYXQ0LmZyb21RdWF0KHRoaXMuYXJyYXksIHEuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgZnJvbSBhIHF1YXRlcm5pb24gcm90YXRpb24gYW5kIGEgdmVjdG9yIHRyYW5zbGF0aW9uXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOiBmdW5jdGlvbihxLCB2KSB7XG4gICAgICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odGhpcy5hcnJheSwgcS5hcnJheSwgdi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBmcm9tIE1hdHJpeDJkLCBpdCBpcyB1c2VkIHdoZW4gY29udmVydGluZyBhIDJkIHNoYXBlIHRvIDNkIHNwYWNlLlxuICAgICAqIEluIDNkIHNwYWNlIGl0IGlzIGVxdWl2YWxlbnQgdG8gcmFuc2xhdGUgb24geHkgcGxhbmUgYW5kIHJvdGF0ZSBhYm91dCB6IGF4aXNcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG0yZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGZyb21NYXQyZDogZnVuY3Rpb24obTJkKSB7XG4gICAgICAgIE1hdHJpeDQuZnJvbU1hdDJkKHRoaXMsIG0yZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgZnJvbSBmcnVzdHVtIGJvdW5kc1xuICAgICAqIEBwYXJhbSAge251bWJlcn0gbGVmdFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdHRvbVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdG9wXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBmcnVzdHVtOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgICAgICAgbWF0NC5mcnVzdHVtKHRoaXMuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQ0LmlkZW50aXR5KHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnZlcnQgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGludmVydDogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgYXMgYSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXNcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gZXllXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGNlbnRlclxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSB1cFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGxvb2tBdDogZnVuY3Rpb24oZXllLCBjZW50ZXIsIHVwKSB7XG4gICAgICAgIG1hdDQubG9va0F0KHRoaXMuYXJyYXksIGV5ZS5hcnJheSwgY2VudGVyLmFycmF5LCB1cC5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgbWF0NC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIG11bExlZnQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgbWF0NC5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIG11bHRpcGx5TGVmdDogZnVuY3Rpb24oYSkge1xuICAgICAgICBtYXQ0Lm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgYXMgYSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJpZ2h0XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBib3R0b21cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgb3J0aG86IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gICAgICAgIG1hdDQub3J0aG8odGhpcy5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0IGFzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZvdnlcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGFzcGVjdFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgcGVyc3BlY3RpdmU6IGZ1bmN0aW9uKGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XG4gICAgICAgIG1hdDQucGVyc3BlY3RpdmUodGhpcy5hcnJheSwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSByYWQgYWJvdXQgYXhpcy5cbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBheGlzXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQsIGF4aXMpIHtcbiAgICAgICAgbWF0NC5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzLlxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgcm90YWlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgcm90YXRlWDogZnVuY3Rpb24ocmFkKSB7XG4gICAgICAgIG1hdDQucm90YXRlWCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXMuXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICByb3RhdGVZOiBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgbWF0NC5yb3RhdGVZKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFogYXhpcy5cbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uKHJhZCkge1xuICAgICAgICBtYXQ0LnJvdGF0ZVoodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgc2VsZiBieSBzXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSBzY2FsZSBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gIHNcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xuICAgICAgICBtYXQ0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2xhdGUgc2VsZiBieSB2LlxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgdHJhbnNsYXRlIG1hdHJpeFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSAgdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24odikge1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICAgICAqL1xuICAgIHRyYW5zcG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDQudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZWNvbXBvc2UgYSBtYXRyaXggdG8gU1JUXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW3NjYWxlXVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHJvdGF0aW9uXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yfSBwb3NpdGlvblxuICAgICAqIEBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21pY3Jvc29mdC54bmEuZnJhbWV3b3JrLm1hdHJpeC5kZWNvbXBvc2UuYXNweFxuICAgICAqL1xuICAgIGRlY29tcG9zZU1hdHJpeDogKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciB4ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHkgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICB2YXIgeiA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NhbGUsIHJvdGF0aW9uLCBwb3NpdGlvbikge1xuXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdmVjMy5zZXQoeCwgZWxbMF0sIGVsWzFdLCBlbFsyXSk7XG4gICAgICAgICAgICB2ZWMzLnNldCh5LCBlbFs0XSwgZWxbNV0sIGVsWzZdKTtcbiAgICAgICAgICAgIHZlYzMuc2V0KHosIGVsWzhdLCBlbFs5XSwgZWxbMTBdKTtcblxuICAgICAgICAgICAgdmFyIHN4ID0gdmVjMy5sZW5ndGgoeCk7XG4gICAgICAgICAgICB2YXIgc3kgPSB2ZWMzLmxlbmd0aCh5KTtcbiAgICAgICAgICAgIHZhciBzeiA9IHZlYzMubGVuZ3RoKHopO1xuXG4gICAgICAgICAgICAvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxuICAgICAgICAgICAgdmFyIGRldCA9IHRoaXMuZGV0ZXJtaW5hbnQoKTtcbiAgICAgICAgICAgIGlmIChkZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgc3ggPSAtc3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY2FsZSkge1xuICAgICAgICAgICAgICAgIHNjYWxlLnNldChzeCwgc3ksIHN6KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb24uc2V0KGVsWzEyXSwgZWxbMTNdLCBlbFsxNF0pO1xuXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBlbCk7XG4gICAgICAgICAgICAvLyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxuICAgICAgICAgICAgLy8gU2VlbXMgZml4ZWQgaW4gZ2wtbWF0cml4IDIuMi4yXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgvaXNzdWVzLzExNFxuICAgICAgICAgICAgLy8gbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcblxuICAgICAgICAgICAgbTNbMF0gLz0gc3g7XG4gICAgICAgICAgICBtM1sxXSAvPSBzeDtcbiAgICAgICAgICAgIG0zWzJdIC89IHN4O1xuXG4gICAgICAgICAgICBtM1szXSAvPSBzeTtcbiAgICAgICAgICAgIG0zWzRdIC89IHN5O1xuICAgICAgICAgICAgbTNbNV0gLz0gc3k7XG5cbiAgICAgICAgICAgIG0zWzZdIC89IHN6O1xuICAgICAgICAgICAgbTNbN10gLz0gc3o7XG4gICAgICAgICAgICBtM1s4XSAvPSBzejtcblxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myhyb3RhdGlvbi5hcnJheSwgbTMpO1xuICAgICAgICAgICAgcXVhdC5ub3JtYWxpemUocm90YXRpb24uYXJyYXksIHJvdGF0aW9uLmFycmF5KTtcblxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHBvc2l0aW9uLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcbiAgICB9LFxuXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XG4gICAgfVxufTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcbiAgICB2YXIgcHJvdG8gPSBNYXRyaXg0LnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBaIEF4aXMgb2YgbG9jYWwgdHJhbnNmb3JtXG4gICAgICogQG5hbWUgelxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDRcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcbiAgICAgICAgICAgIHRoaXMuX2F4aXNaLnNldChlbFs4XSwgZWxbOV0sIGVsWzEwXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1o7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gSGVyZSBoYXMgYSBwcm9ibGVtXG4gICAgICAgICAgICAvLyBJZiBvbmx5IHNldCBhbiBpdGVtIG9mIHZlY3RvciB3aWxsIG5vdCB3b3JrXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XG4gICAgICAgICAgICBlbFs4XSA9IHZbMF07XG4gICAgICAgICAgICBlbFs5XSA9IHZbMV07XG4gICAgICAgICAgICBlbFsxMF0gPSB2WzJdO1xuXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFkgQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cbiAgICAgKiBAbmFtZSB5XG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguTWF0cml4NFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdGhpcy5fYXhpc1kuc2V0KGVsWzRdLCBlbFs1XSwgZWxbNl0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XG4gICAgICAgICAgICBlbFs0XSA9IHZbMF07XG4gICAgICAgICAgICBlbFs1XSA9IHZbMV07XG4gICAgICAgICAgICBlbFs2XSA9IHZbMl07XG5cbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogWCBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxuICAgICAqIEBuYW1lIHhcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXg0XG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XG4gICAgICAgICAgICB0aGlzLl9heGlzWC5zZXQoZWxbMF0sIGVsWzFdLCBlbFsyXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1g7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcbiAgICAgICAgICAgIGVsWzBdID0gdlswXTtcbiAgICAgICAgICAgIGVsWzFdID0gdlsxXTtcbiAgICAgICAgICAgIGVsWzJdID0gdlsyXTtcblxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG1hdDQuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0NC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuTWF0cml4NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gbWF0NC5kZXRlcm1pbmFudChhLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBtYXQ0LmlkZW50aXR5KG91dC5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgbGVmdFxuICogQHBhcmFtICB7bnVtYmVyfSAgcmlnaHRcbiAqIEBwYXJhbSAge251bWJlcn0gIGJvdHRvbVxuICogQHBhcmFtICB7bnVtYmVyfSAgdG9wXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmYXJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0Lm9ydGhvID0gZnVuY3Rpb24ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xuICAgIG1hdDQub3J0aG8ob3V0LmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgZm92eVxuICogQHBhcmFtICB7bnVtYmVyfSAgYXNwZWN0XG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmYXJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnBlcnNwZWN0aXZlID0gZnVuY3Rpb24ob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICAgIG1hdDQucGVyc3BlY3RpdmUob3V0LmFycmF5LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcik7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGV5ZVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGNlbnRlclxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHVwXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC5sb29rQXQgPSBmdW5jdGlvbihvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICAgIG1hdDQubG9va0F0KG91dC5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0NC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG1hdDQubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0Lm11bHRpcGx5ID0gTWF0cml4NC5tdWw7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9ICAgIG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LmZyb21RdWF0ID0gZnVuY3Rpb24ob3V0LCBxKSB7XG4gICAgbWF0NC5mcm9tUXVhdChvdXQuYXJyYXksIHEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSAgICBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBxXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgdlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbihvdXQsIHEsIHYpIHtcbiAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dC5hcnJheSwgcS5hcnJheSwgdi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG00XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG0yZFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuZnJvbU1hdDJkID0gZnVuY3Rpb24obTQsIG0yZCkge1xuICAgIG00Ll9kaXJ0eSA9IHRydWU7XG4gICAgdmFyIG0yZCA9IG0yZC5hcnJheTtcbiAgICB2YXIgbTQgPSBtNC5hcnJheTtcblxuICAgIG00WzBdID0gbTJkWzBdO1xuICAgIG00WzRdID0gbTJkWzJdO1xuICAgIG00WzEyXSA9IG0yZFs0XTtcblxuICAgIG00WzFdID0gbTJkWzFdO1xuICAgIG00WzVdID0gbTJkWzNdO1xuICAgIG00WzEzXSA9IG0yZFs1XTtcblxuICAgIHJldHVybiBtNDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGF4aXNcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkLCBheGlzKSB7XG4gICAgbWF0NC5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQsIGF4aXMuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xuICAgIG1hdDQucm90YXRlWChvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XG4gICAgbWF0NC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcbiAgICBtYXQ0LnJvdGF0ZVoob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gdlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQ0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG1hdDQudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSB2XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQ0LnRyYW5zbGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xuIiwidmFyIERJUlRZX1BSRUZJWCA9ICdfX2R0X18nO1xuXG52YXIgQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICB0aGlzLl9jb250ZXh0SWQgPSAwO1xuXG4gICAgdGhpcy5fY2FjaGVzID0gW107XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge307XG59O1xuXG5DYWNoZS5wcm90b3R5cGUgPSB7XG5cbiAgICB1c2U6IGZ1bmN0aW9uIChjb250ZXh0SWQsIGRvY3VtZW50U2NoZW1hKSB7XG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XG4gICAgICAgIGlmICghY2FjaGVzW2NvbnRleHRJZF0pIHtcbiAgICAgICAgICAgIGNhY2hlc1tjb250ZXh0SWRdID0ge307XG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNhY2hlc1tjb250ZXh0SWRdID0gZG9jdW1lbnRTY2hlbWEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG5cbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNhY2hlc1tjb250ZXh0SWRdO1xuICAgIH0sXG5cbiAgICBwdXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRba2V5XSA9IHZhbHVlO1xuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHRba2V5XTtcbiAgICB9LFxuXG4gICAgZGlydHk6IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XG4gICAgICAgIHRoaXMucHV0KGtleSwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIGRpcnR5QWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBmcmVzaDogZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcbiAgICAgICAgdGhpcy5wdXQoa2V5LCBmYWxzZSk7XG4gICAgfSxcblxuICAgIGZyZXNoQWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgICByZXR1cm4gICFjb250ZXh0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICAgICAgICAgIHx8IGNvbnRleHRba2V5XSA9PT0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgZGVsZXRlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHRJZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVzW2NvbnRleHRJZF07XG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSB7fTtcbiAgICB9LFxuXG4gICAgZGVsZXRlOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0W2tleV07XG4gICAgfSxcblxuICAgIGNsZWFyQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NhY2hlcyA9IHt9O1xuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICAgIH0sXG5cbiAgICBlYWNoQ29udGV4dCA6IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlcyk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBjYiAmJiBjYi5jYWxsKGNvbnRleHQsIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBtaXNzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIHRoaXMuX2NvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KTtcbiAgICB9XG59O1xuXG5DYWNoZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYWNoZTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FjaGU7XG4iLCIvKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB0ZXh0dXJlcyBsaWtlIGNvbXByZXNzZWQgdGV4dHVyZSwgdGV4dHVyZTJkLCB0ZXh0dXJlY3ViZVxuICogVE9ETyBtYXBwaW5nXG4gKi9cbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LlRleHR1cmVcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBUZXh0dXJlID0gQmFzZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuVGV4dHVyZSMgKi9cbntcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIHdpZHRoLCByZWFkb25seSB3aGVuIHRoZSB0ZXh0dXJlIHNvdXJjZSBpcyBpbWFnZVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgd2lkdGg6IDUxMixcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIGhlaWdodCwgcmVhZG9ubHkgd2hlbiB0aGUgdGV4dHVyZSBzb3VyY2UgaXMgaW1hZ2VcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGhlaWdodDogNTEyLFxuICAgIC8qKlxuICAgICAqIFRleGVsIGRhdGEgdHlwZS5cbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9CWVRFfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuSEFMRl9GTE9BVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkZMT0FUfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0x9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9JTlR9XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0eXBlOiBnbGVudW0uVU5TSUdORURfQllURSxcbiAgICAvKipcbiAgICAgKiBGb3JtYXQgb2YgdGV4ZWwgZGF0YVxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJHQkF9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9DT01QT05FTlR9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMfVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZm9ybWF0OiBnbGVudW0uUkdCQSxcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVR9XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB3cmFwUzogZ2xlbnVtLlJFUEVBVCxcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVR9XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB3cmFwVDogZ2xlbnVtLlJFUEVBVCxcbiAgICAvKipcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUn1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSfVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXG4gICAgLyoqXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUn1cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIG1hZ0ZpbHRlcjogZ2xlbnVtLkxJTkVBUixcbiAgICAvKipcbiAgICAgKiBJZiBlbmFibGUgbWltYXAuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgICogQW5pc290cm9waWMgZmlsdGVyaW5nLCBlbmFibGVkIGlmIHZhbHVlIGlzIGxhcmdlciB0aGFuIDFcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGFuaXNvdHJvcGljOiAxLFxuICAgIC8vIHBpeGVsU3RvcmVpIHBhcmFtZXRlcnMsIG5vdCBhdmFpbGFibGUgd2hlbiB0ZXh0dXJlIGlzIHVzZWQgYXMgcmVuZGVyIHRhcmdldFxuICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sXG4gICAgLyoqXG4gICAgICogSWYgZmxpcCBpbiB5IGF4aXMgZm9yIGdpdmVuIGltYWdlIHNvdXJjZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBmbGlwWTogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIEEgZmxhZyB0byBpbmRpY2F0ZSBpZiB0ZXh0dXJlIHNvdXJjZSBpcyBzUkdCXG4gICAgICovXG4gICAgc1JHQjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDRcbiAgICAgKi9cbiAgICB1bnBhY2tBbGlnbm1lbnQ6IDQsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIER5bmFtaWMgb3B0aW9uIGZvciB0ZXh0dXJlIGxpa2UgdmlkZW9cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBkeW5hbWljOiBmYWxzZSxcblxuICAgIE5QT1Q6IGZhbHNlXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuVGV4dHVyZS5wcm90b3R5cGUgKi9cbntcblxuICAgIGdldFdlYkdMVGV4dHVyZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgICAgICBpZiAoY2FjaGUubWlzcygnd2ViZ2xfdGV4dHVyZScpKSB7XG4gICAgICAgICAgICAvLyBJbiBhIG5ldyBnbCBjb250ZXh0LCBjcmVhdGUgbmV3IHRleHR1cmUgYW5kIHNldCBkaXJ0eSB0cnVlXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ3dlYmdsX3RleHR1cmUnLCBfZ2wuY3JlYXRlVGV4dHVyZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5keW5hbWljKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FjaGUuaXNEaXJ0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xuICAgIH0sXG5cbiAgICBiaW5kOiBmdW5jdGlvbiAoKSB7fSxcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uICgpIHt9LFxuXG4gICAgLyoqXG4gICAgICogTWFyayB0ZXh0dXJlIGlzIGRpcnR5IGFuZCB1cGRhdGUgaW4gdGhlIG5leHQgZnJhbWVcbiAgICAgKi9cbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHt9LFxuXG4gICAgLy8gVXBkYXRlIHRoZSBjb21tb24gcGFyYW1ldGVycyBvZiB0ZXh0dXJlXG4gICAgdXBkYXRlQ29tbW9uOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRoaXMuZmxpcFkpO1xuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICAgICAgX2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfQUxJR05NRU5ULCB0aGlzLnVucGFja0FsaWdubWVudCk7XG5cbiAgICAgICAgLy8gVXNlIG9mIG5vbmUtcG93ZXIgb2YgdHdvIHRleHR1cmVcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL1dlYkdMX2FuZF9PcGVuR0xfRGlmZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XG4gICAgICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNSR0JFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3NSR0InKTtcbiAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0IgJiYgIXNSR0JFeHQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0JfQUxQSEEgJiYgIXNSR0JFeHQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0JBO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5OUE9UID0gIXRoaXMuaXNQb3dlck9mVHdvKCk7XG4gICAgfSxcblxuICAgIGdldEF2YWlsYWJsZVdyYXBTOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53cmFwUztcbiAgICB9LFxuICAgIGdldEF2YWlsYWJsZVdyYXBUOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53cmFwVDtcbiAgICB9LFxuICAgIGdldEF2YWlsYWJsZU1pbkZpbHRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbWluRmlsdGVyID0gdGhpcy5taW5GaWx0ZXI7XG4gICAgICAgIGlmICh0aGlzLk5QT1QgfHwgIXRoaXMudXNlTWlwbWFwKSB7XG4gICAgICAgICAgICBpZiAobWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XG4gICAgICAgICAgICAgICAgbWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnbGVudW0uTkVBUkVTVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsZW51bS5MSU5FQVI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWluRmlsdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0QXZhaWxhYmxlTWFnRmlsdGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hZ0ZpbHRlcjtcbiAgICB9LFxuXG4gICAgbmV4dEhpZ2hlc3RQb3dlck9mVHdvOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAtLXg7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzI7IGkgPDw9IDEpIHtcbiAgICAgICAgICAgIHggPSB4IHwgeCA+PiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ICsgMTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG5cbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG5cbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xuXG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSBjYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKTtcbiAgICAgICAgaWYgKHdlYmdsVGV4dHVyZSl7XG4gICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVUZXh0dXJlKHdlYmdsVGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGVzdCBpZiBpbWFnZSBvZiB0ZXh0dXJlIGlzIHZhbGlkIGFuZCBsb2FkZWQuXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHt9LFxuXG4gICAgLyoqXG4gICAgICogVGVzdCBpZiB0ZXh0dXJlIHNpemUgaXMgcG93ZXIgb2YgdHdvXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHt9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICdoZWlnaHQnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICB9XG59KTtcblxuLyogRGF0YVR5cGUgKi9cblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkJZVEUgPSBnbGVudW0uQllURTtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5VTlNJR05FRF9CWVRFID0gZ2xlbnVtLlVOU0lHTkVEX0JZVEU7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuU0hPUlQgPSBnbGVudW0uU0hPUlQ7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuVU5TSUdORURfU0hPUlQgPSBnbGVudW0uVU5TSUdORURfU0hPUlQ7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuSU5UID0gZ2xlbnVtLklOVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5VTlNJR05FRF9JTlQgPSBnbGVudW0uVU5TSUdORURfSU5UO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkZMT0FUID0gZ2xlbnVtLkZMT0FUO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkhBTEZfRkxPQVQgPSAweDhENjE7XG5cbi8qKlxuICogVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgZm9yIFdFQkdMX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMID0gMzQwNDI7XG5cbi8qIFBpeGVsRm9ybWF0ICovXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuREVQVEhfQ09NUE9ORU5UID0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMID0gZ2xlbnVtLkRFUFRIX1NURU5DSUw7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuQUxQSEEgPSBnbGVudW0uQUxQSEE7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuUkdCID0gZ2xlbnVtLlJHQjtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5SR0JBID0gZ2xlbnVtLlJHQkE7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTFVNSU5BTkNFID0gZ2xlbnVtLkxVTUlOQU5DRTtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5MVU1JTkFOQ0VfQUxQSEEgPSBnbGVudW0uTFVNSU5BTkNFX0FMUEhBO1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuU1JHQiA9IDB4OEM0MDtcbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNpb25zL0VYVF9zUkdCL1xuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5TUkdCX0FMUEhBID0gMHg4QzQyO1xuXG4vKiBDb21wcmVzc2VkIFRleHR1cmUgKi9cblRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMDtcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAweDgzRjE7XG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyO1xuVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCA9IDB4ODNGMztcblxuLyogVGV4dHVyZU1hZ0ZpbHRlciAqL1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLk5FQVJFU1QgPSBnbGVudW0uTkVBUkVTVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5MSU5FQVIgPSBnbGVudW0uTElORUFSO1xuXG4vKiBUZXh0dXJlTWluRmlsdGVyICovXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTElORUFSID0gZ2xlbnVtLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtcblxuLyogVGV4dHVyZVdyYXBNb2RlICovXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuUkVQRUFUID0gZ2xlbnVtLlJFUEVBVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5DTEFNUF9UT19FREdFID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTUlSUk9SRURfUkVQRUFUID0gZ2xlbnVtLk1JUlJPUkVEX1JFUEVBVDtcblxuXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlO1xuIiwiLyoqXG4gKiBTaW1wbGUgZG91YmxlIGxpbmtlZCBsaXN0LiBDb21wYXJlZCB3aXRoIGFycmF5LCBpdCBoYXMgTygxKSByZW1vdmUgb3BlcmF0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5jb3JlLkxpbmtlZExpc3RcbiAqL1xudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XG4gICAgICovXG4gICAgdGhpcy5oZWFkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cbiAgICAgKi9cbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuXG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IHRoZSB0YWlsXG4gKiBAcGFyYW0gIHt9IHZhbFxuICogQHJldHVybiB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xuICAgIHRoaXMuaW5zZXJ0RW50cnkoZW50cnkpO1xuICAgIHJldHVybiBlbnRyeTtcbn07XG5cbi8qKlxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IGlkeFxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICogQHBhcmFtICB7fSB2YWxcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnRBdCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xuICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5leHQgPSB0aGlzLmhlYWQ7XG4gICAgdmFyIGN1cnNvciA9IDA7XG4gICAgd2hpbGUgKG5leHQgJiYgY3Vyc29yICE9IGlkeCkge1xuICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICBjdXJzb3IrKztcbiAgICB9XG4gICAgaWYgKG5leHQpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcbiAgICAgICAgdmFyIHByZXYgPSBuZXh0LnByZXY7XG4gICAgICAgIGlmICghcHJldikgeyAvL25leHQgaXMgaGVhZFxuICAgICAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5LnByZXYgPSBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xuICAgICAgICBuZXh0LnByZXYgPSBlbnRyeTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuaW5zZXJ0KHZhbCk7XG4gICAgfVxufTtcblxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlRW50cnkgPSBmdW5jdGlvbiAodmFsLCBuZXh0KSB7XG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcbiAgICB2YXIgcHJldiA9IG5leHQucHJldjtcbiAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcbiAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcbiAgICAgICAgZW50cnkucHJldiA9IHByZXY7XG4gICAgfVxuICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xuICAgIG5leHQucHJldiA9IGVudHJ5O1xuXG4gICAgdGhpcy5fbGVuZ3RoKys7XG59O1xuXG4vKipcbiAqIEluc2VydCBhbiBlbnRyeSBhdCB0aGUgdGFpbFxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgaWYgKCF0aGlzLmhlYWQpIHtcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gZW50cnk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O1xuICAgICAgICBlbnRyeS5wcmV2ID0gdGhpcy50YWlsO1xuICAgICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICB9XG4gICAgdGhpcy5fbGVuZ3RoKys7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBlbnRyeS5cbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICB2YXIgcHJldiA9IGVudHJ5LnByZXY7XG4gICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBJcyBoZWFkXG4gICAgICAgIHRoaXMuaGVhZCA9IG5leHQ7XG4gICAgfVxuICAgIGlmIChuZXh0KSB7XG4gICAgICAgIG5leHQucHJldiA9IHByZXY7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBJcyB0YWlsXG4gICAgICAgIHRoaXMudGFpbCA9IHByZXY7XG4gICAgfVxuICAgIGVudHJ5Lm5leHQgPSBlbnRyeS5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLl9sZW5ndGgtLTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGVudHJ5IGF0IGluZGV4LlxuICogQHBhcmFtICB7bnVtYmVyfSBpZHhcbiAqIEByZXR1cm4ge31cbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUucmVtb3ZlQXQgPSBmdW5jdGlvbiAoaWR4KSB7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcbiAgICB2YXIgY3Vyc29yID0gMDtcbiAgICB3aGlsZSAoY3VyciAmJiBjdXJzb3IgIT0gaWR4KSB7XG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XG4gICAgICAgIGN1cnNvcisrO1xuICAgIH1cbiAgICBpZiAoY3Vycikge1xuICAgICAgICB0aGlzLnJlbW92ZShjdXJyKTtcbiAgICAgICAgcmV0dXJuIGN1cnIudmFsdWU7XG4gICAgfVxufTtcbi8qKlxuICogR2V0IGhlYWQgdmFsdWVcbiAqIEByZXR1cm4ge31cbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0SGVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5oZWFkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWQudmFsdWU7XG4gICAgfVxufTtcbi8qKlxuICogR2V0IHRhaWwgdmFsdWVcbiAqIEByZXR1cm4ge31cbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0VGFpbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy50YWlsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhaWwudmFsdWU7XG4gICAgfVxufTtcbi8qKlxuICogR2V0IHZhbHVlIGF0IGlkeFxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICogQHJldHVybiB7fVxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5nZXRBdCA9IGZ1bmN0aW9uIChpZHgpIHtcbiAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xuICAgIHZhciBjdXJzb3IgPSAwO1xuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICAgICAgY3Vyc29yKys7XG4gICAgfVxuICAgIHJldHVybiBjdXJyLnZhbHVlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHt9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcbiAgICB2YXIgY3Vyc29yID0gMDtcbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgICBpZiAoY3Vyci52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJzb3I7XG4gICAgICAgIH1cbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICAgICAgY3Vyc29yKys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xufTtcblxuLyoqXG4gKiBJZiBsaXN0IGlzIGVtcHR5XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGNiXG4gKiBAcGFyYW0gIHt9IGNvbnRleHRcbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xuICAgIHZhciBpZHggPSAwO1xuICAgIHZhciBoYXZlQ29udGV4dCA9IHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJztcbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgICBpZiAoaGF2ZUNvbnRleHQpIHtcbiAgICAgICAgICAgIGNiLmNhbGwoY29udGV4dCwgY3Vyci52YWx1ZSwgaWR4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKGN1cnIudmFsdWUsIGlkeCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICAgICAgaWR4Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhciB0aGUgbGlzdFxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMuX2xlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHt9IHZhbFxuICovXG5MaW5rZWRMaXN0LkVudHJ5ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHt9XG4gICAgICovXG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxuICAgICAqL1xuICAgIHRoaXMucHJldiA9IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMaW5rZWRMaXN0O1xuIiwiaW1wb3J0IExpbmtlZExpc3QgZnJvbSAnLi9MaW5rZWRMaXN0JztcblxuLyoqXG4gKiBMUlUgQ2FjaGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuY29yZS5MUlVcbiAqL1xudmFyIExSVSA9IGZ1bmN0aW9uKG1heFNpemUpIHtcblxuICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuXG4gICAgdGhpcy5fbWFwID0ge307XG5cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZSB8fCAxMDtcbn07XG5cbi8qKlxuICogU2V0IGNhY2hlIG1heCBzaXplXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxuICovXG5MUlUucHJvdG90eXBlLnNldE1heFNpemUgPSBmdW5jdGlvbihzaXplKSB7XG4gICAgdGhpcy5fbWF4U2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0gIHt9IHZhbHVlXG4gKi9cbkxSVS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YodGhpcy5fbWFwW2tleV0pID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9saXN0Lmxlbmd0aCgpO1xuICAgICAgICBpZiAobGVuID49IHRoaXMuX21heFNpemUgJiYgbGVuID4gMCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkXG4gICAgICAgICAgICB2YXIgbGVhc3RVc2VkRW50cnkgPSB0aGlzLl9saXN0LmhlYWQ7XG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShsZWFzdFVzZWRFbnRyeSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2xlYXN0VXNlZEVudHJ5LmtleV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9saXN0Lmluc2VydCh2YWx1ZSk7XG4gICAgICAgIGVudHJ5LmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5fbWFwW2tleV0gPSBlbnRyeTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHt9XG4gKi9cbkxSVS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XG4gICAgaWYgKHR5cGVvZihlbnRyeSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gUHV0IHRoZSBsYXRlc3QgdXNlZCBlbnRyeSBpbiB0aGUgdGFpbFxuICAgICAgICBpZiAoZW50cnkgIT09IHRoaXMuX2xpc3QudGFpbCkge1xuICAgICAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUoZW50cnkpO1xuICAgICAgICAgICAgdGhpcy5fbGlzdC5pbnNlcnRFbnRyeShlbnRyeSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbkxSVS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XG4gICAgaWYgKHR5cGVvZihlbnRyeSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX21hcFtrZXldO1xuICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhciB0aGUgY2FjaGVcbiAqL1xuTFJVLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpc3QuY2xlYXIoKTtcbiAgICB0aGlzLl9tYXAgPSB7fTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IExSVTtcbiIsIi8qKlxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUuY29sb3JcbiAqL1xuaW1wb3J0IExSVSBmcm9tICcuLi9jb3JlL0xSVSc7XG5cbnZhciBjb2xvclV0aWwgPSB7fTtcblxudmFyIGtDU1NDb2xvclRhYmxlID0ge1xuICAgICd0cmFuc3BhcmVudCc6IFswLDAsMCwwXSwgJ2FsaWNlYmx1ZSc6IFsyNDAsMjQ4LDI1NSwxXSxcbiAgICAnYW50aXF1ZXdoaXRlJzogWzI1MCwyMzUsMjE1LDFdLCAnYXF1YSc6IFswLDI1NSwyNTUsMV0sXG4gICAgJ2FxdWFtYXJpbmUnOiBbMTI3LDI1NSwyMTIsMV0sICdhenVyZSc6IFsyNDAsMjU1LDI1NSwxXSxcbiAgICAnYmVpZ2UnOiBbMjQ1LDI0NSwyMjAsMV0sICdiaXNxdWUnOiBbMjU1LDIyOCwxOTYsMV0sXG4gICAgJ2JsYWNrJzogWzAsMCwwLDFdLCAnYmxhbmNoZWRhbG1vbmQnOiBbMjU1LDIzNSwyMDUsMV0sXG4gICAgJ2JsdWUnOiBbMCwwLDI1NSwxXSwgJ2JsdWV2aW9sZXQnOiBbMTM4LDQzLDIyNiwxXSxcbiAgICAnYnJvd24nOiBbMTY1LDQyLDQyLDFdLCAnYnVybHl3b29kJzogWzIyMiwxODQsMTM1LDFdLFxuICAgICdjYWRldGJsdWUnOiBbOTUsMTU4LDE2MCwxXSwgJ2NoYXJ0cmV1c2UnOiBbMTI3LDI1NSwwLDFdLFxuICAgICdjaG9jb2xhdGUnOiBbMjEwLDEwNSwzMCwxXSwgJ2NvcmFsJzogWzI1NSwxMjcsODAsMV0sXG4gICAgJ2Nvcm5mbG93ZXJibHVlJzogWzEwMCwxNDksMjM3LDFdLCAnY29ybnNpbGsnOiBbMjU1LDI0OCwyMjAsMV0sXG4gICAgJ2NyaW1zb24nOiBbMjIwLDIwLDYwLDFdLCAnY3lhbic6IFswLDI1NSwyNTUsMV0sXG4gICAgJ2RhcmtibHVlJzogWzAsMCwxMzksMV0sICdkYXJrY3lhbic6IFswLDEzOSwxMzksMV0sXG4gICAgJ2Rhcmtnb2xkZW5yb2QnOiBbMTg0LDEzNCwxMSwxXSwgJ2RhcmtncmF5JzogWzE2OSwxNjksMTY5LDFdLFxuICAgICdkYXJrZ3JlZW4nOiBbMCwxMDAsMCwxXSwgJ2RhcmtncmV5JzogWzE2OSwxNjksMTY5LDFdLFxuICAgICdkYXJra2hha2knOiBbMTg5LDE4MywxMDcsMV0sICdkYXJrbWFnZW50YSc6IFsxMzksMCwxMzksMV0sXG4gICAgJ2RhcmtvbGl2ZWdyZWVuJzogWzg1LDEwNyw0NywxXSwgJ2RhcmtvcmFuZ2UnOiBbMjU1LDE0MCwwLDFdLFxuICAgICdkYXJrb3JjaGlkJzogWzE1Myw1MCwyMDQsMV0sICdkYXJrcmVkJzogWzEzOSwwLDAsMV0sXG4gICAgJ2RhcmtzYWxtb24nOiBbMjMzLDE1MCwxMjIsMV0sICdkYXJrc2VhZ3JlZW4nOiBbMTQzLDE4OCwxNDMsMV0sXG4gICAgJ2RhcmtzbGF0ZWJsdWUnOiBbNzIsNjEsMTM5LDFdLCAnZGFya3NsYXRlZ3JheSc6IFs0Nyw3OSw3OSwxXSxcbiAgICAnZGFya3NsYXRlZ3JleSc6IFs0Nyw3OSw3OSwxXSwgJ2Rhcmt0dXJxdW9pc2UnOiBbMCwyMDYsMjA5LDFdLFxuICAgICdkYXJrdmlvbGV0JzogWzE0OCwwLDIxMSwxXSwgJ2RlZXBwaW5rJzogWzI1NSwyMCwxNDcsMV0sXG4gICAgJ2RlZXBza3libHVlJzogWzAsMTkxLDI1NSwxXSwgJ2RpbWdyYXknOiBbMTA1LDEwNSwxMDUsMV0sXG4gICAgJ2RpbWdyZXknOiBbMTA1LDEwNSwxMDUsMV0sICdkb2RnZXJibHVlJzogWzMwLDE0NCwyNTUsMV0sXG4gICAgJ2ZpcmVicmljayc6IFsxNzgsMzQsMzQsMV0sICdmbG9yYWx3aGl0ZSc6IFsyNTUsMjUwLDI0MCwxXSxcbiAgICAnZm9yZXN0Z3JlZW4nOiBbMzQsMTM5LDM0LDFdLCAnZnVjaHNpYSc6IFsyNTUsMCwyNTUsMV0sXG4gICAgJ2dhaW5zYm9ybyc6IFsyMjAsMjIwLDIyMCwxXSwgJ2dob3N0d2hpdGUnOiBbMjQ4LDI0OCwyNTUsMV0sXG4gICAgJ2dvbGQnOiBbMjU1LDIxNSwwLDFdLCAnZ29sZGVucm9kJzogWzIxOCwxNjUsMzIsMV0sXG4gICAgJ2dyYXknOiBbMTI4LDEyOCwxMjgsMV0sICdncmVlbic6IFswLDEyOCwwLDFdLFxuICAgICdncmVlbnllbGxvdyc6IFsxNzMsMjU1LDQ3LDFdLCAnZ3JleSc6IFsxMjgsMTI4LDEyOCwxXSxcbiAgICAnaG9uZXlkZXcnOiBbMjQwLDI1NSwyNDAsMV0sICdob3RwaW5rJzogWzI1NSwxMDUsMTgwLDFdLFxuICAgICdpbmRpYW5yZWQnOiBbMjA1LDkyLDkyLDFdLCAnaW5kaWdvJzogWzc1LDAsMTMwLDFdLFxuICAgICdpdm9yeSc6IFsyNTUsMjU1LDI0MCwxXSwgJ2toYWtpJzogWzI0MCwyMzAsMTQwLDFdLFxuICAgICdsYXZlbmRlcic6IFsyMzAsMjMwLDI1MCwxXSwgJ2xhdmVuZGVyYmx1c2gnOiBbMjU1LDI0MCwyNDUsMV0sXG4gICAgJ2xhd25ncmVlbic6IFsxMjQsMjUyLDAsMV0sICdsZW1vbmNoaWZmb24nOiBbMjU1LDI1MCwyMDUsMV0sXG4gICAgJ2xpZ2h0Ymx1ZSc6IFsxNzMsMjE2LDIzMCwxXSwgJ2xpZ2h0Y29yYWwnOiBbMjQwLDEyOCwxMjgsMV0sXG4gICAgJ2xpZ2h0Y3lhbic6IFsyMjQsMjU1LDI1NSwxXSwgJ2xpZ2h0Z29sZGVucm9keWVsbG93JzogWzI1MCwyNTAsMjEwLDFdLFxuICAgICdsaWdodGdyYXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodGdyZWVuJzogWzE0NCwyMzgsMTQ0LDFdLFxuICAgICdsaWdodGdyZXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodHBpbmsnOiBbMjU1LDE4MiwxOTMsMV0sXG4gICAgJ2xpZ2h0c2FsbW9uJzogWzI1NSwxNjAsMTIyLDFdLCAnbGlnaHRzZWFncmVlbic6IFszMiwxNzgsMTcwLDFdLFxuICAgICdsaWdodHNreWJsdWUnOiBbMTM1LDIwNiwyNTAsMV0sICdsaWdodHNsYXRlZ3JheSc6IFsxMTksMTM2LDE1MywxXSxcbiAgICAnbGlnaHRzbGF0ZWdyZXknOiBbMTE5LDEzNiwxNTMsMV0sICdsaWdodHN0ZWVsYmx1ZSc6IFsxNzYsMTk2LDIyMiwxXSxcbiAgICAnbGlnaHR5ZWxsb3cnOiBbMjU1LDI1NSwyMjQsMV0sICdsaW1lJzogWzAsMjU1LDAsMV0sXG4gICAgJ2xpbWVncmVlbic6IFs1MCwyMDUsNTAsMV0sICdsaW5lbic6IFsyNTAsMjQwLDIzMCwxXSxcbiAgICAnbWFnZW50YSc6IFsyNTUsMCwyNTUsMV0sICdtYXJvb24nOiBbMTI4LDAsMCwxXSxcbiAgICAnbWVkaXVtYXF1YW1hcmluZSc6IFsxMDIsMjA1LDE3MCwxXSwgJ21lZGl1bWJsdWUnOiBbMCwwLDIwNSwxXSxcbiAgICAnbWVkaXVtb3JjaGlkJzogWzE4Niw4NSwyMTEsMV0sICdtZWRpdW1wdXJwbGUnOiBbMTQ3LDExMiwyMTksMV0sXG4gICAgJ21lZGl1bXNlYWdyZWVuJzogWzYwLDE3OSwxMTMsMV0sICdtZWRpdW1zbGF0ZWJsdWUnOiBbMTIzLDEwNCwyMzgsMV0sXG4gICAgJ21lZGl1bXNwcmluZ2dyZWVuJzogWzAsMjUwLDE1NCwxXSwgJ21lZGl1bXR1cnF1b2lzZSc6IFs3MiwyMDksMjA0LDFdLFxuICAgICdtZWRpdW12aW9sZXRyZWQnOiBbMTk5LDIxLDEzMywxXSwgJ21pZG5pZ2h0Ymx1ZSc6IFsyNSwyNSwxMTIsMV0sXG4gICAgJ21pbnRjcmVhbSc6IFsyNDUsMjU1LDI1MCwxXSwgJ21pc3R5cm9zZSc6IFsyNTUsMjI4LDIyNSwxXSxcbiAgICAnbW9jY2FzaW4nOiBbMjU1LDIyOCwxODEsMV0sICduYXZham93aGl0ZSc6IFsyNTUsMjIyLDE3MywxXSxcbiAgICAnbmF2eSc6IFswLDAsMTI4LDFdLCAnb2xkbGFjZSc6IFsyNTMsMjQ1LDIzMCwxXSxcbiAgICAnb2xpdmUnOiBbMTI4LDEyOCwwLDFdLCAnb2xpdmVkcmFiJzogWzEwNywxNDIsMzUsMV0sXG4gICAgJ29yYW5nZSc6IFsyNTUsMTY1LDAsMV0sICdvcmFuZ2VyZWQnOiBbMjU1LDY5LDAsMV0sXG4gICAgJ29yY2hpZCc6IFsyMTgsMTEyLDIxNCwxXSwgJ3BhbGVnb2xkZW5yb2QnOiBbMjM4LDIzMiwxNzAsMV0sXG4gICAgJ3BhbGVncmVlbic6IFsxNTIsMjUxLDE1MiwxXSwgJ3BhbGV0dXJxdW9pc2UnOiBbMTc1LDIzOCwyMzgsMV0sXG4gICAgJ3BhbGV2aW9sZXRyZWQnOiBbMjE5LDExMiwxNDcsMV0sICdwYXBheWF3aGlwJzogWzI1NSwyMzksMjEzLDFdLFxuICAgICdwZWFjaHB1ZmYnOiBbMjU1LDIxOCwxODUsMV0sICdwZXJ1JzogWzIwNSwxMzMsNjMsMV0sXG4gICAgJ3BpbmsnOiBbMjU1LDE5MiwyMDMsMV0sICdwbHVtJzogWzIyMSwxNjAsMjIxLDFdLFxuICAgICdwb3dkZXJibHVlJzogWzE3NiwyMjQsMjMwLDFdLCAncHVycGxlJzogWzEyOCwwLDEyOCwxXSxcbiAgICAncmVkJzogWzI1NSwwLDAsMV0sICdyb3N5YnJvd24nOiBbMTg4LDE0MywxNDMsMV0sXG4gICAgJ3JveWFsYmx1ZSc6IFs2NSwxMDUsMjI1LDFdLCAnc2FkZGxlYnJvd24nOiBbMTM5LDY5LDE5LDFdLFxuICAgICdzYWxtb24nOiBbMjUwLDEyOCwxMTQsMV0sICdzYW5keWJyb3duJzogWzI0NCwxNjQsOTYsMV0sXG4gICAgJ3NlYWdyZWVuJzogWzQ2LDEzOSw4NywxXSwgJ3NlYXNoZWxsJzogWzI1NSwyNDUsMjM4LDFdLFxuICAgICdzaWVubmEnOiBbMTYwLDgyLDQ1LDFdLCAnc2lsdmVyJzogWzE5MiwxOTIsMTkyLDFdLFxuICAgICdza3libHVlJzogWzEzNSwyMDYsMjM1LDFdLCAnc2xhdGVibHVlJzogWzEwNiw5MCwyMDUsMV0sXG4gICAgJ3NsYXRlZ3JheSc6IFsxMTIsMTI4LDE0NCwxXSwgJ3NsYXRlZ3JleSc6IFsxMTIsMTI4LDE0NCwxXSxcbiAgICAnc25vdyc6IFsyNTUsMjUwLDI1MCwxXSwgJ3NwcmluZ2dyZWVuJzogWzAsMjU1LDEyNywxXSxcbiAgICAnc3RlZWxibHVlJzogWzcwLDEzMCwxODAsMV0sICd0YW4nOiBbMjEwLDE4MCwxNDAsMV0sXG4gICAgJ3RlYWwnOiBbMCwxMjgsMTI4LDFdLCAndGhpc3RsZSc6IFsyMTYsMTkxLDIxNiwxXSxcbiAgICAndG9tYXRvJzogWzI1NSw5OSw3MSwxXSwgJ3R1cnF1b2lzZSc6IFs2NCwyMjQsMjA4LDFdLFxuICAgICd2aW9sZXQnOiBbMjM4LDEzMCwyMzgsMV0sICd3aGVhdCc6IFsyNDUsMjIyLDE3OSwxXSxcbiAgICAnd2hpdGUnOiBbMjU1LDI1NSwyNTUsMV0sICd3aGl0ZXNtb2tlJzogWzI0NSwyNDUsMjQ1LDFdLFxuICAgICd5ZWxsb3cnOiBbMjU1LDI1NSwwLDFdLCAneWVsbG93Z3JlZW4nOiBbMTU0LDIwNSw1MCwxXVxufTtcblxuZnVuY3Rpb24gY2xhbXBDc3NCeXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cbiAgICByZXR1cm4gaSA8IDAgPyAwIDogaSA+IDI1NSA/IDI1NSA6IGk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wQ3NzQW5nbGUoaSkgeyAgLy8gQ2xhbXAgdG8gaW50ZWdlciAwIC4uIDM2MC5cbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMzYwID8gMzYwIDogaTtcbn1cblxuZnVuY3Rpb24gY2xhbXBDc3NGbG9hdChmKSB7ICAvLyBDbGFtcCB0byBmbG9hdCAwLjAgLi4gMS4wLlxuICAgIHJldHVybiBmIDwgMCA/IDAgOiBmID4gMSA/IDEgOiBmO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNzc0ludChzdHIpIHsgIC8vIGludCBvciBwZXJjZW50YWdlLlxuICAgIGlmIChzdHIubGVuZ3RoICYmIHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpID09PSAnJScpIHtcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUZsb2F0KHN0cikgLyAxMDAgKiAyNTUpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlSW50KHN0ciwgMTApKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDc3NGbG9hdChzdHIpIHsgIC8vIGZsb2F0IG9yIHBlcmNlbnRhZ2UuXG4gICAgaWYgKHN0ci5sZW5ndGggJiYgc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gMSkgPT09ICclJykge1xuICAgICAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikgLyAxMDApO1xuICAgIH1cbiAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikpO1xufVxuXG5mdW5jdGlvbiBjc3NIdWVUb1JnYihtMSwgbTIsIGgpIHtcbiAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChoID4gMSkge1xuICAgICAgICBoIC09IDE7XG4gICAgfVxuXG4gICAgaWYgKGggKiA2IDwgMSkge1xuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiBoICogNjtcbiAgICB9XG4gICAgaWYgKGggKiAyIDwgMSkge1xuICAgICAgICByZXR1cm4gbTI7XG4gICAgfVxuICAgIGlmIChoICogMyA8IDIpIHtcbiAgICAgICAgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcbiAgICB9XG4gICAgcmV0dXJuIG0xO1xufVxuXG5mdW5jdGlvbiBsZXJwTnVtYmVyKGEsIGIsIHApIHtcbiAgICByZXR1cm4gYSArIChiIC0gYSkgKiBwO1xufVxuXG5mdW5jdGlvbiBzZXRSZ2JhKG91dCwgciwgZywgYiwgYSkge1xuICAgIG91dFswXSA9IHI7IG91dFsxXSA9IGc7IG91dFsyXSA9IGI7IG91dFszXSA9IGE7XG4gICAgcmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIGNvcHlSZ2JhKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07IG91dFsxXSA9IGFbMV07IG91dFsyXSA9IGFbMl07IG91dFszXSA9IGFbM107XG4gICAgcmV0dXJuIG91dDtcbn1cblxudmFyIGNvbG9yQ2FjaGUgPSBuZXcgTFJVKDIwKTtcbnZhciBsYXN0UmVtb3ZlZEFyciA9IG51bGw7XG5cbmZ1bmN0aW9uIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpIHtcbiAgICAvLyBSZXVzZSByZW1vdmVkIGFycmF5XG4gICAgaWYgKGxhc3RSZW1vdmVkQXJyKSB7XG4gICAgICAgIGNvcHlSZ2JhKGxhc3RSZW1vdmVkQXJyLCByZ2JhQXJyKTtcbiAgICB9XG4gICAgbGFzdFJlbW92ZWRBcnIgPSBjb2xvckNhY2hlLnB1dChjb2xvclN0ciwgbGFzdFJlbW92ZWRBcnIgfHwgKHJnYmFBcnIuc2xpY2UoKSkpO1xufVxuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5wYXJzZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yU3RyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvdXRcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxuICovXG5jb2xvclV0aWwucGFyc2UgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcbiAgICBpZiAoIWNvbG9yU3RyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmdiYUFyciA9IHJnYmFBcnIgfHwgW107XG5cbiAgICB2YXIgY2FjaGVkID0gY29sb3JDYWNoZS5nZXQoY29sb3JTdHIpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvcHlSZ2JhKHJnYmFBcnIsIGNhY2hlZCk7XG4gICAgfVxuXG4gICAgLy8gY29sb3JTdHIgbWF5IGJlIG5vdCBzdHJpbmdcbiAgICBjb2xvclN0ciA9IGNvbG9yU3RyICsgJyc7XG4gICAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXG4gICAgdmFyIHN0ciA9IGNvbG9yU3RyLnJlcGxhY2UoLyAvZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBDb2xvciBrZXl3b3JkcyAoYW5kIHRyYW5zcGFyZW50KSBsb29rdXAuXG4gICAgaWYgKHN0ciBpbiBrQ1NTQ29sb3JUYWJsZSkge1xuICAgICAgICBjb3B5UmdiYShyZ2JhQXJyLCBrQ1NTQ29sb3JUYWJsZVtzdHJdKTtcbiAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XG4gICAgICAgIHJldHVybiByZ2JhQXJyO1xuICAgIH1cblxuICAgIC8vICNhYmMgYW5kICNhYmMxMjMgc3ludGF4LlxuICAgIGlmIChzdHIuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHtcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgIC8vIENvdmVycyBOYU4uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXG4gICAgICAgICAgICAgICAgKChpdiAmIDB4ZjAwKSA+PiA0KSB8ICgoaXYgJiAweGYwMCkgPj4gOCksXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmKSB8ICgoaXYgJiAweGYpIDw8IDQpLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcbiAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0ci5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZmZmZikpIHtcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgIC8vIENvdmVycyBOYU4uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmZjAwMDApID4+IDE2LFxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcbiAgICAgICAgICAgICAgICBpdiAmIDB4ZmYsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xuICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcbiAgICBpZiAob3AgIT09IC0xICYmIGVwICsgMSA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHN0ci5zdWJzdHIob3AgKyAxLCBlcCAtIChvcCArIDEpKS5zcGxpdCgnLCcpO1xuICAgICAgICB2YXIgYWxwaGEgPSAxOyAgLy8gVG8gYWxsb3cgY2FzZSBmYWxsdGhyb3VnaC5cbiAgICAgICAgc3dpdGNoIChmbmFtZSkge1xuICAgICAgICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbHBoYSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zLnBvcCgpKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guXG4gICAgICAgICAgICBjYXNlICdyZ2InOlxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMF0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMV0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMl0pLFxuICAgICAgICAgICAgICAgICAgICBhbHBoYVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XG4gICAgICAgICAgICBjYXNlICdoc2xhJzpcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmFtc1szXSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zWzNdKTtcbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcbiAgICAgICAgICAgIGNhc2UgJ2hzbCc6XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcbiAgICByZXR1cm47XG59O1xuXG5jb2xvclV0aWwucGFyc2VUb0Zsb2F0ID0gZnVuY3Rpb24gKGNvbG9yU3RyLCByZ2JhQXJyKSB7XG4gICAgcmdiYUFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvclN0ciwgcmdiYUFycik7XG4gICAgaWYgKCFyZ2JhQXJyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmdiYUFyclswXSAvPSAyNTU7XG4gICAgcmdiYUFyclsxXSAvPSAyNTU7XG4gICAgcmdiYUFyclsyXSAvPSAyNTU7XG4gICAgcmV0dXJuIHJnYmFBcnI7XG59XG5cbi8qKlxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLmhzbGEycmdiYVxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaHNsYVxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IHJnYmFcbiAqL1xuZnVuY3Rpb24gaHNsYTJyZ2JhKGhzbGEsIHJnYmEpIHtcbiAgICB2YXIgaCA9ICgoKHBhcnNlRmxvYXQoaHNsYVswXSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjA7ICAvLyAwIC4uIDFcbiAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcbiAgICAvLyBwZXJjZW50YWdlcywgYnV0IHdlIGRvbid0IGJvdGhlciBhbmQgbGV0IGZsb2F0IG9yIHBlcmNlbnRhZ2UuXG4gICAgdmFyIHMgPSBwYXJzZUNzc0Zsb2F0KGhzbGFbMV0pO1xuICAgIHZhciBsID0gcGFyc2VDc3NGbG9hdChoc2xhWzJdKTtcbiAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcbiAgICB2YXIgbTEgPSBsICogMiAtIG0yO1xuXG4gICAgcmdiYSA9IHJnYmEgfHwgW107XG4gICAgc2V0UmdiYShyZ2JhLFxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoICsgMSAvIDMpICogMjU1KSxcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoIC0gMSAvIDMpICogMjU1KSxcbiAgICAgICAgMVxuICAgICk7XG5cbiAgICBpZiAoaHNsYS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgcmdiYVszXSA9IGhzbGFbM107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJnYmE7XG59XG5cbi8qKlxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLnJnYmEyaHNsYVxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IGhzbGFcbiAqL1xuZnVuY3Rpb24gcmdiYTJoc2xhKHJnYmEpIHtcbiAgICBpZiAoIXJnYmEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJHQiBmcm9tIDAgdG8gMjU1XG4gICAgdmFyIFIgPSByZ2JhWzBdIC8gMjU1O1xuICAgIHZhciBHID0gcmdiYVsxXSAvIDI1NTtcbiAgICB2YXIgQiA9IHJnYmFbMl0gLyAyNTU7XG5cbiAgICB2YXIgdk1pbiA9IE1hdGgubWluKFIsIEcsIEIpOyAvLyBNaW4uIHZhbHVlIG9mIFJHQlxuICAgIHZhciB2TWF4ID0gTWF0aC5tYXgoUiwgRywgQik7IC8vIE1heC4gdmFsdWUgb2YgUkdCXG4gICAgdmFyIGRlbHRhID0gdk1heCAtIHZNaW47IC8vIERlbHRhIFJHQiB2YWx1ZVxuXG4gICAgdmFyIEwgPSAodk1heCArIHZNaW4pIC8gMjtcbiAgICB2YXIgSDtcbiAgICB2YXIgUztcbiAgICAvLyBIU0wgcmVzdWx0cyBmcm9tIDAgdG8gMVxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgICBIID0gMDtcbiAgICAgICAgUyA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoTCA8IDAuNSkge1xuICAgICAgICAgICAgUyA9IGRlbHRhIC8gKHZNYXggKyB2TWluKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICgyIC0gdk1heCAtIHZNaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlbHRhUiA9ICgoKHZNYXggLSBSKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XG4gICAgICAgIHZhciBkZWx0YUcgPSAoKCh2TWF4IC0gRykgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xuICAgICAgICB2YXIgZGVsdGFCID0gKCgodk1heCAtIEIpIC8gNikgKyAoZGVsdGEgLyAyKSkgLyBkZWx0YTtcblxuICAgICAgICBpZiAoUiA9PT0gdk1heCkge1xuICAgICAgICAgICAgSCA9IGRlbHRhQiAtIGRlbHRhRztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChHID09PSB2TWF4KSB7XG4gICAgICAgICAgICBIID0gKDEgLyAzKSArIGRlbHRhUiAtIGRlbHRhQjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChCID09PSB2TWF4KSB7XG4gICAgICAgICAgICBIID0gKDIgLyAzKSArIGRlbHRhRyAtIGRlbHRhUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChIIDwgMCkge1xuICAgICAgICAgICAgSCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEggPiAxKSB7XG4gICAgICAgICAgICBIIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaHNsYSA9IFtIICogMzYwLCBTLCBMXTtcblxuICAgIGlmIChyZ2JhWzNdICE9IG51bGwpIHtcbiAgICAgICAgaHNsYS5wdXNoKHJnYmFbM10pO1xuICAgIH1cblxuICAgIHJldHVybiBoc2xhO1xufVxuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5saWZ0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5jb2xvclV0aWwubGlmdCA9IGZ1bmN0aW9uIChjb2xvciwgbGV2ZWwpIHtcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xuICAgIGlmIChjb2xvckFycikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxldmVsIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gY29sb3JBcnJbaV0gKiAoMSAtIGxldmVsKSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvckFycltpXSA9ICgoMjU1IC0gY29sb3JBcnJbaV0pICogbGV2ZWwgKyBjb2xvckFycltpXSkgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGNvbG9yQXJyLCBjb2xvckFyci5sZW5ndGggPT09IDQgPyAncmdiYScgOiAncmdiJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci50b0hleFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmNvbG9yVXRpbC50b0hleCA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgIHZhciBjb2xvckFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcik7XG4gICAgaWYgKGNvbG9yQXJyKSB7XG4gICAgICAgIHJldHVybiAoKDEgPDwgMjQpICsgKGNvbG9yQXJyWzBdIDw8IDE2KSArIChjb2xvckFyclsxXSA8PCA4KSArICgrY29sb3JBcnJbMl0pKS50b1N0cmluZygxNikuc2xpY2UoMSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXAgdmFsdWUgdG8gY29sb3IuIEZhc3RlciB0aGFuIGxlcnAgbWV0aG9kcyBiZWNhdXNlIGNvbG9yIGlzIHJlcHJlc2VudGVkIGJ5IHJnYmEgYXJyYXkuXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3JtYWxpemVkVmFsdWUgQSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEuXG4gKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IGNvbG9ycyBMaXN0IG9mIHJnYmEgY29sb3IgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvdXRdIE1hcHBlZCBnYmEgY29sb3IgYXJyYXlcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fSB3aWxsIGJlIG51bGwvdW5kZWZpbmVkIGlmIGlucHV0IGlsbGVnYWwuXG4gKi9cbmNvbG9yVXRpbC5mYXN0TGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgb3V0KSB7XG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXG4gICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xuICAgIHZhciBsZWZ0SW5kZXggPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yc1tsZWZ0SW5kZXhdO1xuICAgIHZhciByaWdodENvbG9yID0gY29sb3JzW3JpZ2h0SW5kZXhdO1xuICAgIHZhciBkdiA9IHZhbHVlIC0gbGVmdEluZGV4O1xuICAgIG91dFswXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKTtcbiAgICBvdXRbMV0gPSBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMV0sIHJpZ2h0Q29sb3JbMV0sIGR2KSk7XG4gICAgb3V0WzJdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzJdLCByaWdodENvbG9yWzJdLCBkdikpO1xuICAgIG91dFszXSA9IGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSk7XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG5jb2xvclV0aWwuZmFzdE1hcFRvQ29sb3IgPSBjb2xvclV0aWwuZmFzdExlcnA7XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNvbG9ycyBDb2xvciBsaXN0LlxuICogQHBhcmFtIHtib29sZWFuPX0gZnVsbE91dHB1dCBEZWZhdWx0IGZhbHNlLlxuICogQHJldHVybiB7KHN0cmluZ3xPYmplY3QpfSBSZXN1bHQgY29sb3IuIElmIGZ1bGxPdXRwdXQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IC4uLiwgbGVmdEluZGV4OiAuLi4sIHJpZ2h0SW5kZXg6IC4uLiwgdmFsdWU6IC4uLn0sXG4gKi9cbmNvbG9yVXRpbC5sZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBmdWxsT3V0cHV0KSB7XG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXG4gICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xuICAgIHZhciBsZWZ0SW5kZXggPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbbGVmdEluZGV4XSk7XG4gICAgdmFyIHJpZ2h0Q29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3JzW3JpZ2h0SW5kZXhdKTtcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcblxuICAgIHZhciBjb2xvciA9IGNvbG9yVXRpbC5zdHJpbmdpZnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKSxcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsxXSwgcmlnaHRDb2xvclsxXSwgZHYpKSxcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKSxcbiAgICAgICAgICAgIGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSlcbiAgICAgICAgXSxcbiAgICAgICAgJ3JnYmEnXG4gICAgKTtcblxuICAgIHJldHVybiBmdWxsT3V0cHV0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgbGVmdEluZGV4OiBsZWZ0SW5kZXgsXG4gICAgICAgICAgICByaWdodEluZGV4OiByaWdodEluZGV4LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgOiBjb2xvcjtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG5jb2xvclV0aWwubWFwVG9Db2xvciA9IGNvbG9yVXRpbC5sZXJwO1xuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcj19IGggMCB+IDM2MCwgaWdub3JlIHdoZW4gbnVsbC5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gcyAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gbCAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxuICovXG5jb2xvclV0aWwubW9kaWZ5SFNMID0gZnVuY3Rpb24gKGNvbG9yLCBoLCBzLCBsKSB7XG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIGNvbG9yID0gcmdiYTJoc2xhKGNvbG9yKTtcbiAgICAgICAgaCAhPSBudWxsICYmIChjb2xvclswXSA9IGNsYW1wQ3NzQW5nbGUoaCkpO1xuICAgICAgICBzICE9IG51bGwgJiYgKGNvbG9yWzFdID0gcGFyc2VDc3NGbG9hdChzKSk7XG4gICAgICAgIGwgIT0gbnVsbCAmJiAoY29sb3JbMl0gPSBwYXJzZUNzc0Zsb2F0KGwpKTtcblxuICAgICAgICByZXR1cm4gY29sb3JVdGlsLnN0cmluZ2lmeShoc2xhMnJnYmEoY29sb3IpLCAncmdiYScpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAqIEBwYXJhbSB7bnVtYmVyPX0gYWxwaGEgMCB+IDFcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxuICovXG5jb2xvclV0aWwubW9kaWZ5QWxwaGEgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKSB7XG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xuXG4gICAgaWYgKGNvbG9yICYmIGFscGhhICE9IG51bGwpIHtcbiAgICAgICAgY29sb3JbM10gPSBjbGFtcENzc0Zsb2F0KGFscGhhKTtcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3IsICdyZ2JhJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyckNvbG9yIGxpa2UgWzEyLDMzLDQ0LDAuNF1cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICdyZ2JhJywgJ2hzdmEnLCAuLi5cbiAqIEByZXR1cm4ge3N0cmluZ30gUmVzdWx0IGNvbG9yLiAoSWYgaW5wdXQgaWxsZWdhbCwgcmV0dXJuIHVuZGVmaW5lZCkuXG4gKi9cbmNvbG9yVXRpbC5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoYXJyQ29sb3IsIHR5cGUpIHtcbiAgICBpZiAoIWFyckNvbG9yIHx8ICFhcnJDb2xvci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY29sb3JTdHIgPSBhcnJDb2xvclswXSArICcsJyArIGFyckNvbG9yWzFdICsgJywnICsgYXJyQ29sb3JbMl07XG4gICAgaWYgKHR5cGUgPT09ICdyZ2JhJyB8fCB0eXBlID09PSAnaHN2YScgfHwgdHlwZSA9PT0gJ2hzbGEnKSB7XG4gICAgICAgIGNvbG9yU3RyICs9ICcsJyArIGFyckNvbG9yWzNdO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZSArICcoJyArIGNvbG9yU3RyICsgJyknO1xufTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9yVXRpbDsiLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IGNvbG9yVXRpbCBmcm9tICcuL2NvcmUvY29sb3InO1xudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xuXG52YXIgcHJvZ3JhbUtleUNhY2hlID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmluZUNvZGUoZGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKSB7XG4gICAgdmFyIGRlZmluZUtleXMgPSBPYmplY3Qua2V5cyhkZWZpbmVzKTtcbiAgICBkZWZpbmVLZXlzLnNvcnQoKTtcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XG4gICAgLy8gQ3VzdG9tIERlZmluZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmluZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGRlZmluZUtleXNbaV07XG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluZXNba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkgKyAnICcgKyB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KHZlcnRleERlZmluZXMsIGZyYWdtZW50RGVmaW5lcywgZW5hYmxlZFRleHR1cmVzKSB7XG4gICAgZW5hYmxlZFRleHR1cmVzLnNvcnQoKTtcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgZGVmaW5lU3RyLnB1c2goc3ltYm9sKTtcbiAgICB9XG4gICAgdmFyIGtleSA9IGdldERlZmluZUNvZGUodmVydGV4RGVmaW5lcykgKyAnXFxuJ1xuICAgICAgICArIGdldERlZmluZUNvZGUoZnJhZ21lbnREZWZpbmVzKSArICdcXG4nXG4gICAgICAgICsgZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xuXG4gICAgaWYgKHByb2dyYW1LZXlDYWNoZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBwcm9ncmFtS2V5Q2FjaGVba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgaWQgPSB1dGlsLmdlbkdVSUQoKTtcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xuICAgIHJldHVybiBpZDtcbn1cblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5NYXRlcmlhbFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIE1hdGVyaWFsID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIC8vIHVuaWZvcm1zOiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TaGFkZXJ9XG4gICAgICAgICAqL1xuICAgICAgICAvLyBzaGFkZXI6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZGVwdGhUZXN0OiB0cnVlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGRlcHRoTWFzazogdHJ1ZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCbGVuZCBmdW5jIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgbWF0ZXJpYWxcbiAgICAgICAgICogaGF2ZSBjdXN0b20gYmxlbmRpbmdcbiAgICAgICAgICogVGhlIGdsIGNvbnRleHQgd2lsbCBiZSB0aGUgb25seSBhcmd1bWVudCBwYXNzZWQgaW4gdGhvIHRoZVxuICAgICAgICAgKiBibGVuZCBmdW5jdGlvblxuICAgICAgICAgKiBEZXRhaWwgb2YgYmxlbmQgZnVuY3Rpb24gaW4gV2ViR0w6XG4gICAgICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZ2xlcy9zcGVjcy8yLjAvZXNfZnVsbF9zcGVjXzIuMC4yNS5wZGZcbiAgICAgICAgICpcbiAgICAgICAgICogRXhhbXBsZSA6XG4gICAgICAgICAqIGZ1bmN0aW9uKF9nbCkge1xuICAgICAgICAgKiAgX2dsLmJsZW5kRXF1YXRpb24oX2dsLkZVTkNfQUREKTtcbiAgICAgICAgICogIF9nbC5ibGVuZEZ1bmMoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqL1xuICAgICAgICBibGVuZDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdXBkYXRlIHRleHR1cmUgc3RhdHVzIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvVXBkYXRlVGV4dHVyZVN0YXR1czogdHJ1ZSxcblxuICAgICAgICB1bmlmb3Jtczoge30sXG4gICAgICAgIHZlcnRleERlZmluZXM6IHt9LFxuICAgICAgICBmcmFnbWVudERlZmluZXM6IHt9LFxuICAgICAgICBfdGV4dHVyZVN0YXR1czoge30sXG5cbiAgICAgICAgLy8gc2hhZG93VHJhbnNwYXJlbnRNYXAgOiBudWxsXG5cbiAgICAgICAgLy8gUEVORElORyBlbmFibGUgdGhlIHVuaWZvcm0gdGhhdCBvbmx5IHVzZWQgaW4gc2hhZGVyLlxuICAgICAgICBfZW5hYmxlZFVuaWZvcm1zOiBudWxsLFxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gJ01BVEVSSUFMXycgKyB0aGlzLl9fdWlkX187XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hhZGVyKSB7XG4gICAgICAgIC8vIEtlZXAgc3RhdHVzLCBtYWlubHkgcHJlc2V0IHVuaWZvcm1zLCB2ZXJ0ZXhEZWZpbmVzIGFuZCBmcmFnbWVudERlZmluZXNcbiAgICAgICAgdGhpcy5hdHRhY2hTaGFkZXIodGhpcy5zaGFkZXIsIHRydWUpO1xuICAgIH1cbn0sXG4vKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwucHJvdG90eXBlICovXG57XG4gICAgcHJlY2lzaW9uOiAnaGlnaHAnLFxuXG4gICAgYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIHByb2dyYW0sIHByZXZNYXRlcmlhbCwgcHJldlByb2dyYW0pIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAvLyBQRU5ESU5HIFNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWwgdGFrZSBkaWZmZXJlbnQgc2xvdD9cblxuICAgICAgICAvLyBNYXkgdXNlIHNoYWRlciBvZiBvdGhlciBtYXRlcmlhbCBpZiBzaGFkZXIgY29kZSBhcmUgc2FtZVxuXG4gICAgICAgIC8vIHZhciBzYW1lUHJvZ3JhbSA9IHByZXZQcm9ncmFtID09PSBwcm9ncmFtO1xuXG4gICAgICAgIHZhciBjdXJyZW50VGV4dHVyZVNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xuXG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zW3VdO1xuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS50eXBlO1xuICAgICAgICAgICAgLy8gTm90IHVzZSBgaW5zdGFuY2VvZmAgdG8gZGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdGV4dHVyZSBpbiBNYXRlcmlhbCNiaW5kLlxuICAgICAgICAgICAgLy8gVXNlIHR5cGUgaW5zdGVhZCwgaW4gc29tZSBjYXNlIHRleHR1cmUgbWF5IGJlIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxuICAgICAgICAgICAgLy8gVE9ETyBEdWNrIHR5cGUgdmFsaWRhdGUuXG4gICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0JyAmJiB1bmlmb3JtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBzbG90XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlLl9fc2xvdCA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlW2ldIGluc3RhbmNlb2YgVGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlW2ldLl9fc2xvdCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB1bmlmb3Jtc1xuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHRoaXMuX2VuYWJsZWRVbmlmb3Jtc1t1XTtcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IHVuaWZvcm0udmFsdWU7XG4gICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSB1bmlmb3JtLnR5cGU7XG4gICAgICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgICAgICAvLyBXaGVuIGJpbmRpbmcgdHdvIG1hdGVyaWFscyB3aXRoIHRoZSBzYW1lIHNoYWRlclxuICAgICAgICAgICAgLy8gTWFueSB1bmlmb3JtcyB3aWxsIGJlIGJlIHNldCB0d2ljZSBldmVuIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZVxuICAgICAgICAgICAgLy8gU28gYWRkIGEgZXZhbHVhdGlvbiB0byBzZWUgaWYgdGhlIHVuaWZvcm0gaXMgcmVhbGx5IG5lZWRlZCB0byBiZSBzZXRcbiAgICAgICAgICAgIC8vIGlmIChwcmV2TWF0ZXJpYWwgJiYgc2FtZVNoYWRlcikge1xuICAgICAgICAgICAgLy8gICAgIGlmIChwcmV2TWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9PT0gdW5pZm9ybVZhbHVlKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIEZJWE1FIEFzc3VtZSBtYXRlcmlhbCB3aXRoIHNhbWUgc2hhZGVyIGhhdmUgc2FtZSBvcmRlciB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIC8vIE9yIGlmIGRpZmZlcmVudCBtYXRlcmlhbCB1c2Ugc2FtZSB0ZXh0dXJlcyxcbiAgICAgICAgICAgICAgICAvLyB0aGUgc2xvdCB3aWxsIGJlIGRpZmZlcmVudCBhbmQgc3RpbGwgc2tpcHBlZCBiZWNhdXNlIG9wdGltaXphdGlvblxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtLnR5cGUgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHNsb3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7IC8vIFRleHR1cmUgaXMgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RpbGwgb2NjdXB5IHRoZSBzbG90IHRvIG1ha2Ugc3VyZSBzYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFscyBoYXZlIHNhbWUgc2xvdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gcHJvZ3JhbS5jdXJyZW50VGV4dHVyZVNsb3QoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxaScsIHN5bWJvbCwgc2xvdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzKSB7IC8vIFRleHR1cmUgdW5pZm9ybSBpcyBub3QgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHJlbmRlcmVyLCB1bmlmb3JtVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gc2xvdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgdW5pZm9ybSB1c2Ugc2FtZSB0ZXh0dXJlLi5cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCB1bmlmb3JtVmFsdWUuX19zbG90KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBBcnJheVxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uaGFzVW5pZm9ybShzeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdW5pZm9ybVZhbHVlW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fX3Nsb3QgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHNsb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5fX3Nsb3QgPSBzbG90O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGV4dHVyZS5fX3Nsb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpdicsIHN5bWJvbCwgYXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHVuaWZvcm0udHlwZSwgc3ltYm9sLCB1bmlmb3JtVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgdW5pZm9ybS50eXBlLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGV4dHVyZSBzbG90IG1heWJlIHVzZWQgb3V0IG9mIG1hdGVyaWFsLlxuICAgICAgICBwcm9ncmFtLnJlc2V0VGV4dHVyZVNsb3QoY3VycmVudFRleHR1cmVTbG90KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IG1hdGVyaWFsIHVuaWZvcm1cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBtYXQuc2V0VW5pZm9ybSgnY29sb3InLCBbMSwgMSwgMSwgMV0pO1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSB2YWx1ZVxuICAgICAqL1xuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wsIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuaWZvcm0gdmFsdWUgXCInICsgc3ltYm9sICsgJ1wiIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xuICAgICAgICBpZiAodW5pZm9ybSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGNvbG9yLiBJbnZhbGlkIGNvbG9yIHN0cmluZyB3aWxsIHJldHVybiBudWxsLlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VDb2xvcih2YWx1ZSkgfHwgdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVuaWZvcm0udmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXMgJiYgdW5pZm9ybS50eXBlID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAgICAgKi9cbiAgICBzZXRVbmlmb3JtczogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gLyoqXG4gICAgLy8gICogRW5hYmxlIGEgdW5pZm9ybVxuICAgIC8vICAqIEl0IG9ubHkgaGF2ZSBlZmZlY3Qgb24gdGhlIHVuaWZvcm0gZXhpc3RzIGluIHNoYWRlci5cbiAgICAvLyAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxuICAgIC8vICAqL1xuICAgIC8vIGVuYWJsZVVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMudW5pZm9ybXNbc3ltYm9sXSAmJiAhdGhpcy5pc1VuaWZvcm1FbmFibGVkKHN5bWJvbCkpIHtcbiAgICAvLyAgICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5wdXNoKHN5bWJvbCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gLyoqXG4gICAgLy8gICogRGlzYWJsZSBhIHVuaWZvcm1cbiAgICAvLyAgKiBJdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHVuaWZvcm0gc3RhdGUgaW4gdGhlIHNoYWRlci4gQmVjYXVzZSB0aGUgc2hhZGVyIHVuaWZvcm1zIGlzIHBhcnNlZCBmcm9tIHNoYWRlciBjb2RlIHdpdGggbmFpdmUgcmVnZXguIFdoZW4gdXNpbmcgbWljcm8gdG8gZGlzYWJsZSBzb21lIHVuaWZvcm1zIGluIHRoZSBzaGFkZXIuIEl0IHdpbGwgc3RpbGwgdHJ5IHRvIHNldCB0aGVzZSB1bmlmb3JtcyBpbiBlYWNoIHJlbmRlcmluZyBwYXNzLiBXZSBjYW4gZGlzYWJsZSB0aGVzZSB1bmlmb3JtcyBtYW51YWxseSBpZiB3ZSBuZWVkIHRoaXMgYml0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBNb3N0bHkgd2UgY2FuIHNpbXBseSBpZ25vcmUgaXQuXG4gICAgLy8gICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAvLyAgKi9cbiAgICAvLyBkaXNhYmxlVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCkge1xuICAgIC8vICAgICB2YXIgaWR4ID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmluZGV4T2Yoc3ltYm9sKTtcbiAgICAvLyAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgLy8gICAgICAgICB0aGlzLl9lbmFibGVkVW5pZm9ybXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgc3ltYm9sXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1VuaWZvcm1FbmFibGVkOiBmdW5jdGlvbiAoc3ltYm9sKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXMuaW5kZXhPZihzeW1ib2wpID49IDA7XG4gICAgfSxcblxuICAgIGdldEVuYWJsZWRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zO1xuICAgIH0sXG4gICAgZ2V0VGV4dHVyZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlVW5pZm9ybXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIHNldFVuaWZvcm0gYW5kIHNldFVuaWZvcm1zXG4gICAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSBbdmFsdWVdXG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mKHN5bWJvbCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHN5bWJvbFtrZXldO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oc3ltYm9sLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldCB1bmlmb3JtIHZhbHVlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ8YXJyYXl8Y2xheS5UZXh0dXJlfEFycmF5QnVmZmVyVmlld31cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdmFyIHVuaWZvcm0gPSB0aGlzLnVuaWZvcm1zW3N5bWJvbF07XG4gICAgICAgIGlmICh1bmlmb3JtKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgc2hhZGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtICB7Y2xheS5TaGFkZXJ9IHNoYWRlclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGtlZXBTdGF0dXMgSWYgdHJ5IHRvIGtlZXAgdW5pZm9ybSBhbmQgdGV4dHVyZVxuICAgICAqL1xuICAgIGF0dGFjaFNoYWRlcjogZnVuY3Rpb24oc2hhZGVyLCBrZWVwU3RhdHVzKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFVuaWZvcm1zID0gdGhpcy51bmlmb3JtcztcblxuICAgICAgICAvLyBJZ25vcmUgaWYgdW5pZm9ybSBjYW4gdXNlIGluIHNoYWRlci5cbiAgICAgICAgdGhpcy51bmlmb3JtcyA9IHNoYWRlci5jcmVhdGVVbmlmb3JtcygpO1xuICAgICAgICB0aGlzLnNoYWRlciA9IHNoYWRlcjtcblxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xuICAgICAgICB0aGlzLl9lbmFibGVkVW5pZm9ybXMgPSBPYmplY3Qua2V5cyh1bmlmb3Jtcyk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB1bmlmb3JtcyBhcmUgc2V0IGluIHNhbWUgb3JkZXIgdG8gYXZvaWQgdGV4dHVyZSBzbG90IHdyb25nXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5zb3J0KCk7XG4gICAgICAgIHRoaXMuX3RleHR1cmVVbmlmb3JtcyA9IHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5maWx0ZXIoZnVuY3Rpb24gKHVuaWZvcm1OYW1lKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3QnIHx8IHR5cGUgPT09ICd0dic7XG4gICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgIHZhciBvcmlnaW5hbFZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XG4gICAgICAgIHZhciBvcmlnaW5hbEZyYWdtZW50RGVmaW5lcyA9IHRoaXMuZnJhZ21lbnREZWZpbmVzO1xuXG4gICAgICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLnZlcnRleERlZmluZXMpO1xuICAgICAgICB0aGlzLmZyYWdtZW50RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLmZyYWdtZW50RGVmaW5lcyk7XG5cbiAgICAgICAgaWYgKGtlZXBTdGF0dXMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBvcmlnaW5hbFVuaWZvcm1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1zW3N5bWJvbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IG9yaWdpbmFsVW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHModGhpcy52ZXJ0ZXhEZWZpbmVzLCBvcmlnaW5hbFZlcnRleERlZmluZXMpO1xuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLmZyYWdtZW50RGVmaW5lcywgb3JpZ2luYWxGcmFnbWVudERlZmluZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNoYWRlci50ZXh0dXJlcykge1xuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1trZXldID0ge1xuICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlci50ZXh0dXJlc1trZXldLnNoYWRlclR5cGUsXG4gICAgICAgICAgICAgICAgdHlwZTogc2hhZGVyLnRleHR1cmVzW2tleV0udHlwZSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiAoa2VlcFN0YXR1cyAmJiB0aGlzLl90ZXh0dXJlU3RhdHVzW2tleV0pID8gdGhpcy5fdGV4dHVyZVN0YXR1c1trZXldLmVuYWJsZWQgOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RleHR1cmVTdGF0dXMgPSB0ZXh0dXJlU3RhdHVzO1xuXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgbWF0ZXJpYWwgYW5kIGtlZXAgdW5pZm9ybXMsIHNoYWRlciB3aWxsIG5vdCBiZSBjbG9uZWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdGVyaWFsfVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5zaGFkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0aGlzLnVuaWZvcm1zKSB7XG4gICAgICAgICAgICBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRoaXMuZGVwdGhUZXN0O1xuICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSB0aGlzLmRlcHRoTWFzaztcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xuICAgICAgICBtYXRlcmlhbC5ibGVuZCA9IHRoaXMuYmxlbmQ7XG5cbiAgICAgICAgbWF0ZXJpYWwudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy52ZXJ0ZXhEZWZpbmVzKTtcbiAgICAgICAgbWF0ZXJpYWwuZnJhZ21lbnREZWZpbmVzID0gdXRpbC5jbG9uZSh0aGlzLmZyYWdtZW50RGVmaW5lcyk7XG4gICAgICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUodGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKSk7XG4gICAgICAgIG1hdGVyaWFsLnByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xuXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXG4gICAgICovXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sLCB2YWwpIHtcbiAgICAgICAgdmFyIHZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XG4gICAgICAgIHZhciBmcmFnbWVudERlZmluZXMgPSB0aGlzLmZyYWdtZW50RGVmaW5lcztcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXG4gICAgICAgICAgICAmJiBhcmd1bWVudHMubGVuZ3RoIDwgM1xuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcbiAgICAgICAgICAgIHZhbCA9IHN5bWJvbDtcbiAgICAgICAgICAgIHN5bWJvbCA9IHNoYWRlclR5cGU7XG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IHZhbCAhPSBudWxsID8gdmFsIDogbnVsbDtcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xuICAgICAgICAgICAgaWYgKHZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdmVydGV4RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgICAgICBpZiAoZnJhZ21lbnREZWZpbmVzW3N5bWJvbF0gIT09IHZhbCkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xuICAgICAgICAgICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAnYm90aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxuICAgICAqL1xuICAgIHVuZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sKSB7XG4gICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAndmVydGV4JyAmJiBzaGFkZXJUeXBlICE9PSAnZnJhZ21lbnQnICYmIHNoYWRlclR5cGUgIT09ICdib3RoJ1xuICAgICAgICAgICAgJiYgYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBzaGFkZXJUeXBlIGRlZmF1bHQgdG8gYmUgJ2JvdGgnXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ3ZlcnRleCcsIHN5bWJvbCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XG4gICAgICAgICAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCBzeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIG1hY3JvIGlzIGRlZmluZWQgaW4gc2hhZGVyLlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKi9cbiAgICBpc0RlZmluZWQ6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcbiAgICAgICAgLy8gUEVORElORyBoYXNPd25Qcm9wZXJ0eSA/XG4gICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgbWFjcm8gdmFsdWUgZGVmaW5lZCBpbiBzaGFkZXIuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxuICAgICAqL1xuICAgIGdldERlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xuICAgICAgICBzd2l0Y2goc2hhZGVyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBhIHRleHR1cmUsIGFjdHVhbGx5IGl0IHdpbGwgYWRkIGEgI2RlZmluZSBtYWNybyBpbiB0aGUgc2hhZGVyIGNvZGVcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGV4dHVyZSBzeW1ib2wgaXMgZGlmZnVzZU1hcCwgaXQgd2lsbCBhZGQgYSBsaW5lIGAjZGVmaW5lIERJRkZVU0VNQVBfRU5BQkxFRGAgaW4gdGhlIHNoYWRlciBjb2RlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKi9cbiAgICBlbmFibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN5bWJvbCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICB2YXIgaXNFbmFibGVkID0gc3RhdHVzLmVuYWJsZWQ7XG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXG4gICAgICovXG4gICAgZW5hYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGV4dHVyZVN0YXR1cykge1xuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBhIHRleHR1cmUsIGl0IHJlbW92ZSBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXG4gICAgICovXG4gICAgZGlzYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICB2YXIgaXNEaXNhYmxlZCA9ICEgc3RhdHVzLmVuYWJsZWQ7XG4gICAgICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXG4gICAgICovXG4gICAgZGlzYWJsZVRleHR1cmVzQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1cztcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBJZiB0ZXh0dXJlIG9mIGdpdmVuIHR5cGUgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzVGV4dHVyZUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xuICAgICAgICByZXR1cm4gISF0ZXh0dXJlU3RhdHVzW3N5bWJvbF1cbiAgICAgICAgICAgICYmIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGVuYWJsZWQgdGV4dHVyZXNcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBnZXRFbmFibGVkVGV4dHVyZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmFibGVkVGV4dHVyZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hcmsgZGVmaW5lcyBhcmUgdXBkYXRlZC5cbiAgICAgKi9cbiAgICBkaXJ0eURlZmluZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xuICAgIH1cbn0pO1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsLnByb3RvdHlwZSwgJ3NoYWRlcicsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVyIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oJ1lvdSBuZWVkIHRvIHVzZSBhdHRhY2hTaGFkZXIgdG8gc2V0IHRoZSBzaGFkZXIuJyk7XG4gICAgICAgICAgICB0aGlzLl9zaGFkZXIgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90b3R5cGUsICdwcm9ncmFtS2V5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJvZ3JhbUtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSBnZXRQcm9ncmFtS2V5KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRleERlZmluZXMsIHRoaXMuZnJhZ21lbnREZWZpbmVzLCB0aGlzLmdldEVuYWJsZWRUZXh0dXJlcygpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtS2V5O1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGVyaWFsO1xuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuXG52YXIgU0hBREVSX1NUQVRFX1RPX0VOQUJMRSA9IDE7XG52YXIgU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFID0gMjtcbnZhciBTSEFERVJfU1RBVEVfUEVORElORyA9IDM7XG5cbi8vIEVuYWJsZSBhdHRyaWJ1dGUgb3BlcmF0aW9uIGlzIGdsb2JhbCB0byBhbGwgcHJvZ3JhbXNcbi8vIEhlcmUgc2F2ZWQgdGhlIGxpc3Qgb2YgYWxsIGVuYWJsZWQgYXR0cmlidXRlIGluZGV4XG4vLyBodHRwOi8vd3d3Lm1qYnNoYXcuY29tLzIwMTMvMDMvd2ViZ2wtZml4aW5nLWludmFsaWRvcGVyYXRpb24uaHRtbFxudmFyIGVuYWJsZWRBdHRyaWJ1dGVMaXN0ID0ge307XG5cbi8vIHNvbWUgdXRpbCBmdW5jdGlvbnNcbmZ1bmN0aW9uIGFkZExpbmVOdW1iZXJzKHN0cmluZykge1xuICAgIHZhciBjaHVua3MgPSBzdHJpbmcuc3BsaXQoJ1xcbicpO1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBpbDsgaSArKykge1xuICAgICAgICAvLyBDaHJvbWUgcmVwb3J0cyBzaGFkZXIgZXJyb3JzIG9uIGxpbmVzXG4gICAgICAgIC8vIHN0YXJ0aW5nIGNvdW50aW5nIGZyb20gMVxuICAgICAgICBjaHVua3NbaV0gPSAoaSArIDEpICsgJzogJyArIGNodW5rc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGNodW5rcy5qb2luKCdcXG4nKTtcbn1cblxuLy8gUmV0dXJuIHRydWUgb3IgZXJyb3IgbXNnIGlmIGVycm9yIGhhcHBlbmVkXG5mdW5jdGlvbiBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgc2hhZGVyLCBzaGFkZXJTdHJpbmcpIHtcbiAgICBpZiAoIV9nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBfZ2wuQ09NUElMRV9TVEFUVVMpKSB7XG4gICAgICAgIHJldHVybiBbX2dsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSwgYWRkTGluZU51bWJlcnMoc2hhZGVyU3RyaW5nKV0uam9pbignXFxuJyk7XG4gICAgfVxufVxuXG52YXIgdG1wRmxvYXQzMkFycmF5MTYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSgxNik7XG5cbnZhciBHTFByb2dyYW0gPSBCYXNlLmV4dGVuZCh7XG5cbiAgICB1bmlmb3JtU2VtYW50aWNzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fVxuXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fbG9jYXRpb25zID0ge307XG5cbiAgICB0aGlzLl90ZXh0dXJlU2xvdCA9IDA7XG5cbiAgICB0aGlzLl9wcm9ncmFtID0gbnVsbDtcbn0sIHtcblxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLl90ZXh0dXJlU2xvdCA9IDA7XG4gICAgICAgIHJlbmRlcmVyLmdsLnVzZVByb2dyYW0odGhpcy5fcHJvZ3JhbSk7XG4gICAgfSxcblxuICAgIGhhc1VuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fbG9jYXRpb25zW3N5bWJvbF07XG4gICAgICAgIHJldHVybiBsb2NhdGlvbiAhPT0gbnVsbCAmJiBsb2NhdGlvbiAhPT0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICB1c2VUZXh0dXJlU2xvdDogZnVuY3Rpb24gKHJlbmRlcmVyLCB0ZXh0dXJlLCBzbG90KSB7XG4gICAgICAgIGlmICh0ZXh0dXJlKSB7XG4gICAgICAgICAgICByZW5kZXJlci5nbC5hY3RpdmVUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkUwICsgc2xvdCk7XG4gICAgICAgICAgICAvLyBNYXliZSB0ZXh0dXJlIGlzIG5vdCBsb2FkZWQgeWV0O1xuICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnVuYmluZChyZW5kZXJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlU2xvdDtcbiAgICB9LFxuXG4gICAgcmVzZXRUZXh0dXJlU2xvdDogZnVuY3Rpb24gKHNsb3QpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSBzbG90IHx8IDA7XG4gICAgfSxcblxuICAgIHRha2VDdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSkge1xuICAgICAgICB2YXIgdGV4dHVyZVNsb3QgPSB0aGlzLl90ZXh0dXJlU2xvdDtcblxuICAgICAgICB0aGlzLnVzZVRleHR1cmVTbG90KHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlU2xvdCk7XG5cbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QrKztcblxuICAgICAgICByZXR1cm4gdGV4dHVyZVNsb3Q7XG4gICAgfSxcblxuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChfZ2wsIHR5cGUsIHN5bWJvbCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTWFwID0gdGhpcy5fbG9jYXRpb25zO1xuICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xuICAgICAgICAvLyBVbmlmb3JtIGlzIG5vdCBleGlzdGVkIGluIHRoZSBzaGFkZXJcbiAgICAgICAgaWYgKGxvY2F0aW9uID09PSBudWxsIHx8IGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRmxvYXQzMkFycmF5IGlzIG11Y2ggZmFzdGVyIHRoYW4gYXJyYXkgd2hlbiB1bmlmb3JtTWF0cml4NGZ2LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBGbG9hdDMyQXJyYXkxNltpXSA9IHZhbHVlW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wRmxvYXQzMkFycmF5MTY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnMmknOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzNpJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzRpJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcyZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtMic6XG4gICAgICAgICAgICBjYXNlICdtMnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICAgICAgY2FzZSAnbTN2JzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ200dic6XG4gICAgICAgICAgICAgICAgLy8gUmF3IHZhbHVlXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHZhbHVlLmxlbmd0aCAqIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdmFsdWVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IrK10gPSBpdGVtW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgYXJyYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgICAvLyBBcnJheUJ1ZmZlclZpZXdcbiAgICAgICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBzZXRVbmlmb3JtT2ZTZW1hbnRpYzogZnVuY3Rpb24gKF9nbCwgc2VtYW50aWMsIHZhbCkge1xuICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gdGhpcy51bmlmb3JtU2VtYW50aWNzW3NlbWFudGljXTtcbiAgICAgICAgaWYgKHNlbWFudGljSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLy8gVXNlZCBmb3IgY3JlYXRpbmcgVkFPXG4gICAgLy8gRW5hYmxlIHRoZSBhdHRyaWJ1dGVzIHBhc3NlZCBpbiBhbmQgZGlzYWJsZSB0aGUgcmVzdFxuICAgIC8vIEV4YW1wbGUgVXNhZ2U6XG4gICAgLy8gZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgW1wicG9zaXRpb25cIiwgXCJ0ZXhjb29yZHNcIl0pXG4gICAgZW5hYmxlQXR0cmlidXRlczogZnVuY3Rpb24gKHJlbmRlcmVyLCBhdHRyaWJMaXN0LCB2YW8pIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX3Byb2dyYW07XG5cbiAgICAgICAgdmFyIGxvY2F0aW9uTWFwID0gdGhpcy5fbG9jYXRpb25zO1xuXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dDtcbiAgICAgICAgaWYgKHZhbykge1xuICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQgPSB2YW8uX19lbmFibGVkQXR0cmlidXRlTGlzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gZW5hYmxlZEF0dHJpYnV0ZUxpc3RbcmVuZGVyZXIuX191aWRfX107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gSW4gdmVydGV4IGFycmF5IG9iamVjdCBjb250ZXh0XG4gICAgICAgICAgICAvLyBQRU5ESU5HIEVhY2ggdmFvIG9iamVjdCBuZWVkcyB0byBlbmFibGUgYXR0cmlidXRlcyBhZ2Fpbj9cbiAgICAgICAgICAgIGlmICh2YW8pIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxuICAgICAgICAgICAgICAgICAgICA9IHZhby5fX2VuYWJsZWRBdHRyaWJ1dGVMaXN0XG4gICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxuICAgICAgICAgICAgICAgICAgICA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dXG4gICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYkxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBhdHRyaWJMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uTGlzdFtpXSA9IC0xO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25NYXBbc3ltYm9sXTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBfZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgc3ltYm9sKTtcbiAgICAgICAgICAgICAgICAvLyBBdHRyaWIgbG9jYXRpb24gaXMgYSBudW1iZXIgZnJvbSAwIHRvIC4uLlxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhdGlvbk1hcFtzeW1ib2xdID0gbG9jYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSBsb2NhdGlvbjtcblxuICAgICAgICAgICAgaWYgKCFlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0gPSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoKGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldKXtcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9UT19FTkFCTEU6XG4gICAgICAgICAgICAgICAgICAgIF9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0gPSBTSEFERVJfU1RBVEVfUEVORElORztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEU6XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gU0hBREVSX1NUQVRFX1BFTkRJTkc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vIEV4cGlyZWRcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9QRU5ESU5HOlxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uTGlzdDtcbiAgICB9LFxuXG4gICAgYnVpbGRQcm9ncmFtOiBmdW5jdGlvbiAoX2dsLCBzaGFkZXIsIHZlcnRleFNoYWRlckNvZGUsIGZyYWdtZW50U2hhZGVyQ29kZSkge1xuICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIHZhciBwcm9ncmFtID0gX2dsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XG4gICAgICAgIF9nbC5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7XG5cbiAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICAgICAgX2dsLnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJDb2RlKTtcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuXG4gICAgICAgIHZhciBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgdmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlKTtcbiAgICAgICAgaWYgKG1zZykge1xuICAgICAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgICAgfVxuICAgICAgICBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XG4gICAgICAgIGlmIChtc2cpIHtcbiAgICAgICAgICAgIHJldHVybiBtc2c7XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7XG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpO1xuICAgICAgICAvLyBGb3JjZSB0aGUgcG9zaXRpb24gYmluZCB0byBsb2NhdGlvbiAwO1xuICAgICAgICBpZiAoc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1snUE9TSVRJT04nXSkge1xuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddLnN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFbHNlIGNob29zZSBhbiBhdHRyaWJ1dGUgYW5kIGJpbmQgdG8gbG9jYXRpb24gMDtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIF9nbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwga2V5c1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAgICAgaWYgKCFfZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBfZ2wuTElOS19TVEFUVVMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBsaW5rIHByb2dyYW1cXG4nICsgJ1ZBTElEQVRFX1NUQVRVUzogJyArIF9nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIF9nbC5WQUxJREFURV9TVEFUVVMpICsgJywgZ2wgZXJyb3IgWycgKyBfZ2wuZ2V0RXJyb3IoKSArICddJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIHVuaWZvcm0gbG9jYXRpb25zXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVyLnVuaWZvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdW5pZm9ybVN5bWJvbCA9IHNoYWRlci51bmlmb3Jtc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX2xvY2F0aW9uc1t1bmlmb3JtU3ltYm9sXSA9IF9nbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybVN5bWJvbCk7XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7XG4gICAgICAgIF9nbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuXG4gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtO1xuXG4gICAgICAgIC8vIFNhdmUgY29kZS5cbiAgICAgICAgdGhpcy52ZXJ0ZXhDb2RlID0gdmVydGV4U2hhZGVyQ29kZTtcbiAgICAgICAgdGhpcy5mcmFnbWVudENvZGUgPSBmcmFnbWVudFNoYWRlckNvZGU7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEdMUHJvZ3JhbTsiLCJpbXBvcnQgR0xQcm9ncmFtIGZyb20gJy4vR0xQcm9ncmFtJztcblxudmFyIGxvb3BSZWdleCA9IC9mb3JcXHMqP1xcKGludFxccyo/X2lkeF9cXHMqXFw9XFxzKihbXFx3LV0rKVxcO1xccypfaWR4X1xccyo8XFxzKihbXFx3LV0rKTtcXHMqX2lkeF9cXHMqXFwrXFwrXFxzKlxcKVxccypcXHtcXHsoW1xcc1xcU10rPykoPz1cXH1cXH0pXFx9XFx9L2c7XG5cbmZ1bmN0aW9uIHVucm9sbExvb3Aoc2hhZGVyU3RyLCBkZWZpbmVzLCBsaWdodHNOdW1iZXJzKSB7XG4gICAgLy8gTG9vcCB1bnJvbGwgZnJvbSB0aHJlZS5qcywgaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9ibG9iL21hc3Rlci9zcmMvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUHJvZ3JhbS5qcyNMMTc1XG4gICAgLy8gSW4gc29tZSBjYXNlIGxpa2Ugc2hhZG93TWFwIGluIGxvb3AgdXNlICdpJyB0byBpbmRleCB2YWx1ZSBtdWNoIHNsb3dlci5cblxuICAgIC8vIExvb3AgdXNlIF9pZHhfIGFuZCBpbmNyZWFzZWQgd2l0aCBfaWR4XysrIHdpbGwgYmUgdW5yb2xsZWRcbiAgICAvLyBVc2Uge3sgfX0gdG8gbWF0Y2ggdGhlIHBhaXIgc28gdGhlIGlmIHN0YXRlbWVudCB3aWxsIG5vdCBiZSBhZmZlY3RlZFxuICAgIC8vIFdyaXRlIGxpa2UgZm9sbG93aW5nXG4gICAgLy8gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IDQ7IF9pZHhfKyspIHt7XG4gICAgLy8gICAgIHZlYzMgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbX2lkeF9dLCB1dikucmdiO1xuICAgIC8vIH19XG4gICAgZnVuY3Rpb24gcmVwbGFjZShtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xuICAgICAgICB2YXIgdW5yb2xsID0gJyc7XG4gICAgICAgIC8vIFRyeSB0byB0cmVhdCBhcyBkZWZpbmVcbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIGRlZmluZXMpIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IGRlZmluZXNbc3RhcnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBsaWdodE51bWJlckRlZmluZXNbc3RhcnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihlbmQpKSB7XG4gICAgICAgICAgICBpZiAoZW5kIGluIGRlZmluZXMpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSBkZWZpbmVzW2VuZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbmQgPSBsaWdodE51bWJlckRlZmluZXNbZW5kXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIEVycm9yIGNoZWNraW5nXG5cbiAgICAgICAgZm9yICh2YXIgaWR4ID0gcGFyc2VJbnQoc3RhcnQpOyBpZHggPCBwYXJzZUludChlbmQpOyBpZHgrKykge1xuICAgICAgICAgICAgLy8gUEVORElORyBBZGQgc2NvcGU/XG4gICAgICAgICAgICB1bnJvbGwgKz0gJ3snXG4gICAgICAgICAgICAgICAgKyBzbmlwcGV0XG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9mbG9hdFxccypcXChcXHMqX2lkeF9cXHMqXFwpL2csIGlkeC50b0ZpeGVkKDEpKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvX2lkeF8vZywgaWR4KVxuICAgICAgICAgICAgKyAnfSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5yb2xsO1xuICAgIH1cblxuICAgIHZhciBsaWdodE51bWJlckRlZmluZXMgPSB7fTtcbiAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xuICAgICAgICBsaWdodE51bWJlckRlZmluZXNbbGlnaHRUeXBlICsgJ19DT1VOVCddID0gbGlnaHRzTnVtYmVyc1tsaWdodFR5cGVdO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZGVyU3RyLnJlcGxhY2UobG9vcFJlZ2V4LCByZXBsYWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpIHtcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XG4gICAgaWYgKGxpZ2h0c051bWJlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIGxpZ2h0c051bWJlcnMpIHtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IGxpZ2h0c051bWJlcnNbbGlnaHRUeXBlXTtcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgbGlnaHRUeXBlLnRvVXBwZXJDYXNlKCkgKyAnX0NPVU5UICcgKyBjb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuYWJsZWRUZXh0dXJlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRUZXh0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wudG9VcHBlckNhc2UoKSArICdfRU5BQkxFRCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEN1c3RvbSBEZWZpbmVzXG4gICAgZm9yICh2YXIgc3ltYm9sIGluIGRlZmluZXMpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1tzeW1ib2xdO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29kZShleHRzKSB7XG4gICAgLy8gRXh0ZW5zaW9uIGRlY2xhcmF0aW9uIG11c3QgYmVmb3JlIGFsbCBub24tcHJlcHJvY2Vzc29yIGNvZGVzXG4gICAgLy8gVE9ETyB2ZXJ0ZXggPyBleHRlbnNpb24gZW51bSA/XG4gICAgdmFyIGV4dGVuc2lvblN0ciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBleHRlbnNpb25TdHIucHVzaCgnI2V4dGVuc2lvbiBHTF8nICsgZXh0c1tpXSArICcgOiBlbmFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblN0ci5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlY2lzaW9uQ29kZShwcmVjaXNpb24pIHtcbiAgICByZXR1cm4gWydwcmVjaXNpb24nLCBwcmVjaXNpb24sICdmbG9hdCddLmpvaW4oJyAnKSArICc7XFxuJ1xuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnaW50J10uam9pbignICcpICsgJztcXG4nXG4gICAgICAgIC8vIGRlcHRoIHRleHR1cmUgbWF5IGhhdmUgcHJlY2lzaW9uIHByb2JsZW0gb24gaU9TIGRldmljZS5cbiAgICAgICAgKyBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ3NhbXBsZXIyRCddLmpvaW4oJyAnKSArICc7XFxuJztcbn1cblxuZnVuY3Rpb24gUHJvZ3JhbU1hbmFnZXIocmVuZGVyZXIpIHtcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHRoaXMuX2NhY2hlID0ge307XG59XG5cblByb2dyYW1NYW5hZ2VyLnByb3RvdHlwZS5nZXRQcm9ncmFtID0gZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzY2VuZSkge1xuICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXG4gICAgdmFyIGtleSA9ICdzJyArIG1hdGVyaWFsLnNoYWRlci5zaGFkZXJJRCArICdtJyArIG1hdGVyaWFsLnByb2dyYW1LZXk7XG4gICAgaWYgKHNjZW5lKSB7XG4gICAgICAgIGtleSArPSAnc2UnICsgc2NlbmUuZ2V0UHJvZ3JhbUtleShyZW5kZXJhYmxlLmxpZ2h0R3JvdXApO1xuICAgIH1cbiAgICBpZiAocmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkpIHtcbiAgICAgICAga2V5ICs9ICcsJyArIHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgdmFyIHByb2dyYW0gPSBjYWNoZVtrZXldO1xuXG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgfVxuXG4gICAgdmFyIGxpZ2h0c051bWJlcnMgPSBzY2VuZSA/IHNjZW5lLmdldExpZ2h0c051bWJlcnMocmVuZGVyYWJsZS5saWdodEdyb3VwKSA6IHt9O1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gbWF0ZXJpYWwuZ2V0RW5hYmxlZFRleHR1cmVzKCk7XG4gICAgdmFyIHNraW5EZWZpbmVDb2RlID0gJyc7XG4gICAgaWYgKHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpKSB7XG4gICAgICAgIC8vIFRPRE8gQWRkIHNraW5uaW5nIGNvZGU/XG4gICAgICAgIHNraW5EZWZpbmVDb2RlID0gJ1xcbicgKyBnZXREZWZpbmVDb2RlKHtcbiAgICAgICAgICAgIFNLSU5OSU5HOiBudWxsLFxuICAgICAgICAgICAgSk9JTlRfQ09VTlQ6IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aFxuICAgICAgICB9KSArICdcXG4nO1xuICAgIH1cbiAgICAvLyBUT0RPIE9wdGltaXplIGtleSBnZW5lcmF0aW9uXG4gICAgLy8gVkVSVEVYXG4gICAgdmFyIHZlcnRleERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpO1xuICAgIC8vIEZSQUdNRU5UXG4gICAgdmFyIGZyYWdtZW50RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKTtcblxuICAgIHZhciB2ZXJ0ZXhDb2RlID0gdmVydGV4RGVmaW5lU3RyICsgJ1xcbicgKyBtYXRlcmlhbC5zaGFkZXIudmVydGV4O1xuICAgIHZhciBmcmFnbWVudENvZGUgPSBnZXRFeHRlbnNpb25Db2RlKFtcbiAgICAgICAgICAgIC8vIFRPRE8gTm90IGhhcmQgY29kZWRcbiAgICAgICAgICAgICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnLFxuICAgICAgICAgICAgJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnXG4gICAgICAgIF0pICsgJ1xcbidcbiAgICAgICAgICAgICsgZ2V0UHJlY2lzaW9uQ29kZShtYXRlcmlhbC5wcmVjaXNpb24pICsgJ1xcbidcbiAgICAgICAgICAgICsgZnJhZ21lbnREZWZpbmVTdHIgKyAnXFxuJyArIG1hdGVyaWFsLnNoYWRlci5mcmFnbWVudDtcblxuICAgIHZhciBmaW5hbFZlcnRleENvZGUgPSB1bnJvbGxMb29wKHZlcnRleENvZGUsIG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xuICAgIHZhciBmaW5hbEZyYWdtZW50Q29kZSA9IHVucm9sbExvb3AoZnJhZ21lbnRDb2RlLCBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBuZXcgR0xQcm9ncmFtKCk7XG4gICAgcHJvZ3JhbS51bmlmb3JtU2VtYW50aWNzID0gbWF0ZXJpYWwuc2hhZGVyLnVuaWZvcm1TZW1hbnRpY3M7XG4gICAgcHJvZ3JhbS5hdHRyaWJ1dGVzID0gbWF0ZXJpYWwuc2hhZGVyLmF0dHJpYnV0ZXM7XG4gICAgdmFyIGVycm9yTXNnID0gcHJvZ3JhbS5idWlsZFByb2dyYW0oX2dsLCBtYXRlcmlhbC5zaGFkZXIsIGZpbmFsVmVydGV4Q29kZSwgZmluYWxGcmFnbWVudENvZGUpO1xuICAgIHByb2dyYW0uX19lcnJvciA9IGVycm9yTXNnO1xuXG4gICAgY2FjaGVba2V5XSA9IHByb2dyYW07XG5cbiAgICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb2dyYW1NYW5hZ2VyOyIsIi8qKlxuICogTWFpbmx5IGRvIHRoZSBwYXJzZSBhbmQgY29tcGlsZSBvZiBzaGFkZXIgc3RyaW5nXG4gKiBTdXBwb3J0IHNoYWRlciBjb2RlIGNodW5rIGltcG9ydCBhbmQgZXhwb3J0XG4gKiBTdXBwb3J0IHNoYWRlciBzZW1hbnRpY3NcbiAqIGh0dHA6Ly93d3cubnZpZGlhLmNvbS9vYmplY3QvdXNpbmdfc2FzLmh0bWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvY29sbGFkYTJqc29uL2lzc3Vlcy80NVxuICpcbiAqIFRPRE86IFVzZSBldHBsIG9yIG90aGVyIHN0cmluZyB0ZW1wbGF0ZSBlbmdpbmVcbiAqL1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XG52YXIgbWF0MiA9IGdsTWF0cml4Lm1hdDI7XG52YXIgbWF0MyA9IGdsTWF0cml4Lm1hdDM7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG5cbnZhciB1bmlmb3JtUmVnZXggPSAvdW5pZm9ybVxccysoYm9vbHxmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzR8aXZlYzJ8aXZlYzN8aXZlYzR8bWF0MnxtYXQzfG1hdDR8c2FtcGxlcjJEfHNhbXBsZXJDdWJlKVxccysoW1xcd1xcLF0rKT8oXFxbLio/XFxdKT9cXHMqKDpcXHMqKFtcXFNcXHNdKz8pKT87L2c7XG52YXIgYXR0cmlidXRlUmVnZXggPSAvYXR0cmlidXRlXFxzKyhmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzQpXFxzKyhcXHcqKVxccyooOlxccyooXFx3KykpPzsvZztcbnZhciBkZWZpbmVSZWdleCA9IC8jZGVmaW5lXFxzKyhcXHcrKT8oXFxzK1tcXHctLl0rKT9cXHMqOz9cXHMqXFxuL2c7XG5cbnZhciB1bmlmb3JtVHlwZU1hcCA9IHtcbiAgICAnYm9vbCc6ICcxaScsXG4gICAgJ2ludCc6ICcxaScsXG4gICAgJ3NhbXBsZXIyRCc6ICd0JyxcbiAgICAnc2FtcGxlckN1YmUnOiAndCcsXG4gICAgJ2Zsb2F0JzogJzFmJyxcbiAgICAndmVjMic6ICcyZicsXG4gICAgJ3ZlYzMnOiAnM2YnLFxuICAgICd2ZWM0JzogJzRmJyxcbiAgICAnaXZlYzInOiAnMmknLFxuICAgICdpdmVjMyc6ICczaScsXG4gICAgJ2l2ZWM0JzogJzRpJyxcbiAgICAnbWF0Mic6ICdtMicsXG4gICAgJ21hdDMnOiAnbTMnLFxuICAgICdtYXQ0JzogJ200J1xufTtcblxudmFyIHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yID0ge1xuICAgICdib29sJzogZnVuY3Rpb24gKCkge3JldHVybiB0cnVlO30sXG4gICAgJ2ludCc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gMDt9LFxuICAgICdmbG9hdCc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gMDt9LFxuICAgICdzYW1wbGVyMkQnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIG51bGw7fSxcbiAgICAnc2FtcGxlckN1YmUnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIG51bGw7fSxcblxuICAgICd2ZWMyJzogZnVuY3Rpb24gKCkge3JldHVybiBbMCwgMF07fSxcbiAgICAndmVjMyc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gWzAsIDAsIDBdO30sXG4gICAgJ3ZlYzQnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIFswLCAwLCAwLCAwXTt9LFxuXG4gICAgJ2l2ZWMyJzogZnVuY3Rpb24gKCkge3JldHVybiBbMCwgMF07fSxcbiAgICAnaXZlYzMnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIFswLCAwLCAwXTt9LFxuICAgICdpdmVjNCc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gWzAsIDAsIDAsIDBdO30sXG5cbiAgICAnbWF0Mic6IGZ1bmN0aW9uICgpIHtyZXR1cm4gbWF0Mi5jcmVhdGUoKTt9LFxuICAgICdtYXQzJzogZnVuY3Rpb24gKCkge3JldHVybiBtYXQzLmNyZWF0ZSgpO30sXG4gICAgJ21hdDQnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIG1hdDQuY3JlYXRlKCk7fSxcblxuICAgICdhcnJheSc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gW107fVxufTtcblxudmFyIGF0dHJpYnV0ZVNlbWFudGljcyA9IFtcbiAgICAnUE9TSVRJT04nLFxuICAgICdOT1JNQUwnLFxuICAgICdCSU5PUk1BTCcsXG4gICAgJ1RBTkdFTlQnLFxuICAgICdURVhDT09SRCcsXG4gICAgJ1RFWENPT1JEXzAnLFxuICAgICdURVhDT09SRF8xJyxcbiAgICAnQ09MT1InLFxuICAgIC8vIFNraW5uaW5nXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2Jsb2IvbWFzdGVyL3NwZWNpZmljYXRpb24vUkVBRE1FLm1kI3NlbWFudGljc1xuICAgICdKT0lOVCcsXG4gICAgJ1dFSUdIVCdcbl07XG52YXIgdW5pZm9ybVNlbWFudGljcyA9IFtcbiAgICAnU0tJTl9NQVRSSVgnLFxuICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHZpZXdwb3J0XG4gICAgJ1ZJRVdQT1JUX1NJWkUnLFxuICAgICdWSUVXUE9SVCcsXG4gICAgJ0RFVklDRVBJWEVMUkFUSU8nLFxuICAgIC8vIFdpbmRvdyBzaXplIGZvciB3aW5kb3cgcmVsYXRpdmUgY29vcmRpbmF0ZVxuICAgIC8vIGh0dHBzOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuL2h0bWwvZ2xfRnJhZ0Nvb3JkLnhodG1sXG4gICAgJ1dJTkRPV19TSVpFJyxcbiAgICAvLyBJbmZvbWF0aW9uIGFib3V0IGNhbWVyYVxuICAgICdORUFSJyxcbiAgICAnRkFSJyxcbiAgICAvLyBUaW1lXG4gICAgJ1RJTUUnXG5dO1xudmFyIG1hdHJpeFNlbWFudGljcyA9IFtcbiAgICAnV09STEQnLFxuICAgICdWSUVXJyxcbiAgICAnUFJPSkVDVElPTicsXG4gICAgJ1dPUkxEVklFVycsXG4gICAgJ1ZJRVdQUk9KRUNUSU9OJyxcbiAgICAnV09STERWSUVXUFJPSkVDVElPTicsXG4gICAgJ1dPUkxESU5WRVJTRScsXG4gICAgJ1ZJRVdJTlZFUlNFJyxcbiAgICAnUFJPSkVDVElPTklOVkVSU0UnLFxuICAgICdXT1JMRFZJRVdJTlZFUlNFJyxcbiAgICAnVklFV1BST0pFQ1RJT05JTlZFUlNFJyxcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxuICAgICdXT1JMRFRSQU5TUE9TRScsXG4gICAgJ1ZJRVdUUkFOU1BPU0UnLFxuICAgICdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcbiAgICAnV09STERWSUVXVFJBTlNQT1NFJyxcbiAgICAnVklFV1BST0pFQ1RJT05UUkFOU1BPU0UnLFxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcbiAgICAnV09STERJTlZFUlNFVFJBTlNQT1NFJyxcbiAgICAnVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxuICAgICdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXG4gICAgJ1dPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxuICAgICdWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnLFxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSdcbl07XG5cblxudmFyIHNoYWRlcklEQ2FjaGUgPSB7fTtcbnZhciBzaGFkZXJDb2RlQ2FjaGUgPSB7fTtcblxuZnVuY3Rpb24gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCkge1xuICAgIHZhciBrZXkgPSAndmVydGV4OicgKyB2ZXJ0ZXggKyAnZnJhZ21lbnQ6JyArIGZyYWdtZW50O1xuICAgIGlmIChzaGFkZXJJRENhY2hlW2tleV0pIHtcbiAgICAgICAgcmV0dXJuIHNoYWRlcklEQ2FjaGVba2V5XTtcbiAgICB9XG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XG4gICAgc2hhZGVySURDYWNoZVtrZXldID0gaWQ7XG5cbiAgICBzaGFkZXJDb2RlQ2FjaGVbaWRdID0ge1xuICAgICAgICB2ZXJ0ZXg6IHZlcnRleCxcbiAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50XG4gICAgfTtcblxuICAgIHJldHVybiBpZDtcbn1cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKiBAYWxpYXMgY2xheS5TaGFkZXJcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBwaG9uZyBzaGFkZXJcbiAqIHZhciBzaGFkZXIgPSBuZXcgY2xheS5TaGFkZXIoXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSxcbiAqICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLmZyYWdtZW50JylcbiAqICk7XG4gKi9cbmZ1bmN0aW9uIFNoYWRlcih2ZXJ0ZXgsIGZyYWdtZW50KSB7XG4gICAgLy8gRmlyc3QgYXJndW1lbnQgY2FuIGJlIHsgdmVydGV4LCBmcmFnbWVudCB9XG4gICAgaWYgKHR5cGVvZiB2ZXJ0ZXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZyYWdtZW50ID0gdmVydGV4LmZyYWdtZW50O1xuICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgudmVydGV4O1xuICAgIH1cblxuICAgIHRoaXMuX3NoYWRlcklEID0gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCk7XG5cbiAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHZlcnRleCk7XG4gICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KGZyYWdtZW50KTtcblxuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzID0ge307XG4gICAgLyoqXG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY3MgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVuaWZvcm1TZW1hbnRpY3MgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm1hdHJpeFNlbWFudGljS2V5cyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybVRlbXBsYXRlcyA9IHt9O1xuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZXMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleERlZmluZXMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50RGVmaW5lcyA9IHt9O1xuXG4gICAgdGhpcy5fcGFyc2VBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5fcGFyc2VVbmlmb3JtcygpO1xuICAgIHRoaXMuX3BhcnNlRGVmaW5lcygpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IFNoYWRlcixcblxuICAgIC8vIENyZWF0ZSBhIG5ldyB1bmlmb3JtIGluc3RhbmNlIGZvciBtYXRlcmlhbFxuICAgIGNyZWF0ZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMpe1xuICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSB0aGlzLnVuaWZvcm1UZW1wbGF0ZXNbc3ltYm9sXTtcbiAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVRwbC50eXBlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtVHBsLnZhbHVlKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XG4gICAgfSxcblxuICAgIF9wYXJzZUltcG9ydDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMudmVydGV4KTtcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMuZnJhZ21lbnQpO1xuICAgIH0sXG5cbiAgICBfcGFyc2VVbmlmb3JtczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xuICAgICAgICB0aGlzLl91bmlmb3JtTGlzdCA9IFtdO1xuXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XG4gICAgICAgIHNoYWRlclR5cGUgPSAnZnJhZ21lbnQnO1xuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcblxuICAgICAgICBzZWxmLm1hdHJpeFNlbWFudGljS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubWF0cml4U2VtYW50aWNzKTtcblxuICAgICAgICBmdW5jdGlvbiBfdW5pZm9ybVBhcnNlcihzdHIsIHR5cGUsIHN5bWJvbCwgaXNBcnJheSwgc2VtYW50aWNXcmFwcGVyLCBzZW1hbnRpYykge1xuICAgICAgICAgICAgaWYgKHR5cGUgJiYgc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gdW5pZm9ybVR5cGVNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgdmFyIGlzQ29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFZhbHVlRnVuYztcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5pZm9ybUxpc3QucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NhbXBsZXIyRCcgfHwgdHlwZSA9PT0gJ3NhbXBsZXJDdWJlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBpcyBkZWZhdWx0IGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHR1cmVzW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZTogc2hhZGVyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVHlwZSArPSAndic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhc2UgaXMgb25seSBmb3IgU0tJTl9NQVRSSVhcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNUcmFuc3Bvc2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYy5tYXRjaCgvVFJBTlNQT1NFJC8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJhbnNwb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljLnNsaWNlKDAsIC05KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXRyaXhTZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJhbnNwb3NlOiBpc1RyYW5zcG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZTogc2VtYW50aWNOb1RyYW5zcG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25maWd1cmFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudW5pZm9ybVNlbWFudGljc1tzZW1hbnRpY10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25maWd1cmFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB1bmlmb3JtIGlzIG5vdCBjb25maWd1cmFibGUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgbm90IGFwcGVhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtYXRlcmlhbCB1bmlmb3JtIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICd1bmNvbmZpZ3VyYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25maWd1cmFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaWZvcm0gaGF2ZSBhIGRlZmFsdXQgdmFsdWUsIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5pZm9ybSB2ZWMzIGNvbG9yOiBbMSwgMSwgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZUZ1bmMgPSBzZWxmLl9wYXJzZURlZmF1bHRWYWx1ZSh0eXBlLCBzZW1hbnRpYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFZhbHVlRnVuYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtvd24gc2VtYW50aWMgXCInICsgc2VtYW50aWMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb25maWd1cmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlzQXJyYXkgPyB1bmlmb3JtVmFsdWVDb25zdHJ1Y3RvclsnYXJyYXknXSA6IChkZWZhdWx0VmFsdWVGdW5jIHx8IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yW3R5cGVdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpYzogc2VtYW50aWMgfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWyd1bmlmb3JtJywgdHlwZSwgc3ltYm9sLCBpc0FycmF5XS5qb2luKCcgJykgKyAnO1xcbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMgPSB1bmlmb3JtcztcbiAgICB9LFxuXG4gICAgX3BhcnNlRGVmYXVsdFZhbHVlOiBmdW5jdGlvbiAodHlwZSwgc3RyKSB7XG4gICAgICAgIHZhciBhcnJheVJlZ2V4ID0gL1xcW1xccyooLiopXFxzKlxcXS87XG4gICAgICAgIGlmICh0eXBlID09PSAndmVjMicgfHwgdHlwZSA9PT0gJ3ZlYzMnIHx8IHR5cGUgPT09ICd2ZWM0Jykge1xuICAgICAgICAgICAgdmFyIGFycmF5U3RyID0gYXJyYXlSZWdleC5leGVjKHN0cilbMV07XG4gICAgICAgICAgICBpZiAoYXJyYXlTdHIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gYXJyYXlTdHIuc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShhcnIpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdib29sJykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3BhcnNlQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UoYXR0cmlidXRlUmVnZXgsIF9hdHRyaWJ1dGVQYXJzZXIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIF9hdHRyaWJ1dGVQYXJzZXIoc3RyLCB0eXBlLCBzeW1ib2wsIHNlbWFudGljV3JhcHBlciwgc2VtYW50aWMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlICYmIHN5bWJvbCkge1xuICAgICAgICAgICAgICAgIHZhciBzaXplID0gMTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVjNCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2ZWMzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZlYzInOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhbiBvbmx5IGJlIGZsb2F0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgIHNlbWFudGljOiBzZW1hbnRpYyB8fCBudWxsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtvd24gc2VtYW50aWMgXCInICsgc2VtYW50aWMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gWydhdHRyaWJ1dGUnLCB0eXBlLCBzeW1ib2xdLmpvaW4oJyAnKSArICc7XFxuJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgfSxcblxuICAgIF9wYXJzZURlZmluZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XG4gICAgICAgIHRoaXMuX2ZyYWdtZW50Q29kZSA9IHRoaXMuX2ZyYWdtZW50Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcblxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUGFyc2VyKHN0ciwgc3ltYm9sLCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGRlZmluZXMgPSBzaGFkZXJUeXBlID09PSAndmVydGV4JyA/IHNlbGYudmVydGV4RGVmaW5lcyA6IHNlbGYuZnJhZ21lbnREZWZpbmVzO1xuICAgICAgICAgICAgaWYgKCFkZWZpbmVzW3N5bWJvbF0pIHsgLy8gSGF2ZW4ndCBiZWVuIGRlZmluZWQgYnkgdXNlclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW4gcGFyc2UgdG8gZmxvYXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSA/IHZhbHVlLnRyaW0oKSA6IHBhcnNlRmxvYXQodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBzaGFkZXJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29kZSA9IHNoYWRlckNvZGVDYWNoZVt0aGlzLl9zaGFkZXJJRF07XG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGNvZGUudmVydGV4LCBjb2RlLmZyYWdtZW50KTtcbiAgICAgICAgcmV0dXJuIHNoYWRlcjtcbiAgICB9XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdzaGFkZXJJRCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVySUQ7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3ZlcnRleCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmVydGV4Q29kZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAnZnJhZ21lbnQnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYWdtZW50Q29kZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAndW5pZm9ybXMnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaWZvcm1MaXN0O1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnZhciBpbXBvcnRSZWdleCA9IC8oQGltcG9ydClcXHMqKFswLTlhLXpBLVpfXFwtXFwuXSopL2c7XG5TaGFkZXIucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XG4gICAgc2hhZGVyU3RyID0gc2hhZGVyU3RyLnJlcGxhY2UoaW1wb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGltcG9ydFN5bWJvbCwgaW1wb3J0TmFtZSkge1xuICAgICAgICB2YXIgc3RyID0gU2hhZGVyLnNvdXJjZShpbXBvcnROYW1lKTtcbiAgICAgICAgaWYgKHN0cikge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcGFyc2VcbiAgICAgICAgICAgIHJldHVybiBTaGFkZXIucGFyc2VJbXBvcnQoc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBjaHVuayBcIicgKyBpbXBvcnROYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzaGFkZXJTdHI7XG59O1xuXG52YXIgZXhwb3J0UmVnZXggPSAvKEBleHBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKVxccypcXG4oW1xcc1xcU10qPylAZW5kL2c7XG5cbi8qKlxuICogSW1wb3J0IHNoYWRlciBzb3VyY2VcbiAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyU3RyXG4gKiBAbWVtYmVyT2YgY2xheS5TaGFkZXJcbiAqL1xuU2hhZGVyWydpbXBvcnQnXSA9IGZ1bmN0aW9uIChzaGFkZXJTdHIpIHtcbiAgICBzaGFkZXJTdHIucmVwbGFjZShleHBvcnRSZWdleCwgZnVuY3Rpb24gKHN0ciwgZXhwb3J0U3ltYm9sLCBleHBvcnROYW1lLCBjb2RlKSB7XG4gICAgICAgIHZhciBjb2RlID0gY29kZS5yZXBsYWNlKC8oXltcXHNcXHRcXHhhMFxcdTMwMDBdKyl8KFtcXHUzMDAwXFx4YTBcXHNcXHRdK1xceDI0KS9nLCAnJyk7XG4gICAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSBleHBvcnROYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xuICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgdmFyIGtleTtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgcGFydHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGtleSA9IHBhcnRzW2krK107XG4gICAgICAgICAgICAgICAgaWYgKCFvYmpba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmogPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgb2JqW2tleV0gPSBjb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBMaWJyYXJ5IHRvIHN0b3JlIGFsbCB0aGUgbG9hZGVkIHNoYWRlciBjb2Rlc1xuICogQHR5cGUge09iamVjdH1cbiAqIEByZWFkT25seVxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXG4gKi9cblNoYWRlci5jb2RlcyA9IHt9O1xuXG4vKipcbiAqIEdldCBzaGFkZXIgc291cmNlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuU2hhZGVyLnNvdXJjZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBvYmogPSBTaGFkZXIuY29kZXM7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChvYmogJiYgaSA8IHBhcnRzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcGFydHNbaSsrXTtcbiAgICAgICAgb2JqID0gb2JqW2tleV07XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBGSVhNRSBVc2UgZGVmYXVsdCBpbnN0ZWFkXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBcIicgKyBuYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hhZGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJ2ZWMzIGNhbGNBbWJpZW50U0hMaWdodChpbnQgaWR4LCB2ZWMzIE4pIHtcXG4gICAgaW50IG9mZnNldCA9IDkgKiBpZHg7XFxuICAgIHJldHVybiBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1swXVxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1sxXSAqIE4ueFxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1szXSAqIE4uelxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s0XSAqIE4ueCAqIE4uelxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s2XSAqIE4ueSAqIE4ueFxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s3XSAqICgzLjAgKiBOLnogKiBOLnogLSAxLjApXFxuICAgICAgICArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVwiO1xuIiwiaW1wb3J0IGNhbGNBbWJpZW50U0hMaWdodEVzc2wgZnJvbSAnLi9jYWxjQW1iaWVudFNITGlnaHQuZ2xzbC5qcyc7XG5cbnZhciB1bmlmb3JtVmVjM1ByZWZpeCA9ICd1bmlmb3JtIHZlYzMgJztcbnZhciB1bmlmb3JtRmxvYXRQcmVmaXggPSAndW5pZm9ybSBmbG9hdCAnO1xudmFyIGV4cG9ydEhlYWRlclByZWZpeCA9ICdAZXhwb3J0IGNsYXkuaGVhZGVyLic7XG52YXIgZXhwb3J0RW5kID0gJ0BlbmQnO1xudmFyIHVuY29uZmlndXJhYmxlID0gJzp1bmNvbmZpZ3VyYWJsZTsnO1xuZXhwb3J0IGRlZmF1bHQgW1xuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdkaXJlY3Rpb25hbF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodENvbG9yW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmQsXG5cbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnYW1iaWVudF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudExpZ2h0Q29sb3JbQU1CSUVOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgZXhwb3J0RW5kLFxuXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfc2hfbGlnaHQnLFxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29sb3JbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVCAqIDldJyArIHVuY29uZmlndXJhYmxlLFxuICAgIGNhbGNBbWJpZW50U0hMaWdodEVzc2wsXG4gICAgZXhwb3J0RW5kLFxuXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfY3ViZW1hcF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgJ3VuaWZvcm0gc2FtcGxlckN1YmUgYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmQsXG5cbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAncG9pbnRfbGlnaHQnLFxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRQb3NpdGlvbltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3BvaW50TGlnaHRSYW5nZVtQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodENvbG9yW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmQsXG5cbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnc3BvdF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0UG9zaXRpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0RGlyZWN0aW9uW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRSYW5nZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRDb2xvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmRcbl0uam9pbignXFxuJyk7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wcmV6LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnByZXouZnJhZ21lbnRcXG52b2lkIG1haW4oKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbn1cXG5AZW5kXCI7XG4iLCIvLyBUT0RPIFJlc291cmNlcyBsaWtlIHNoYWRlciwgdGV4dHVyZSwgZ2VvbWV0cnkgcmVmZXJlbmNlIG1hbmFnZW1lbnRcbi8vIFRyYWNlIGFuZCBmaW5kIG91dCB3aGljaCBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IGNhbiBiZSBkZXN0cm95ZWRcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcbmltcG9ydCBHTEluZm8gZnJvbSAnLi9jb3JlL0dMSW5mbyc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xuaW1wb3J0IFByb2dyYW1NYW5hZ2VyIGZyb20gJy4vZ3B1L1Byb2dyYW1NYW5hZ2VyJztcblxuLy8gTGlnaHQgaGVhZGVyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcblxuaW1wb3J0IGxpZ2h0U2hhZGVyIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xuaW1wb3J0IHByZXpFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xuU2hhZGVyWydpbXBvcnQnXShsaWdodFNoYWRlcik7XG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcblxudmFyIG1hdDRDcmVhdGUgPSBtYXQ0LmNyZWF0ZTtcblxudmFyIGVycm9yU2hhZGVyID0ge307XG5cbmZ1bmN0aW9uIGRlZmF1bHRHZXRNYXRlcmlhbChyZW5kZXJhYmxlKSB7XG4gICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWw7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlJlbmRlcmVyXG4gKi9cbnZhciBSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyIyAqLyB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgICAgICogQHJlYWRvbmx5XG4gICAgICAgICAqL1xuICAgICAgICBjYW52YXM6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF93aWR0aDogMTAwLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYW52YXMgd2lkdGgsIHNldCBieSByZXNpemUgbWV0aG9kXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfaGVpZ2h0OiAxMDAsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldmljZSBwaXhlbCByYXRpbywgc2V0IGJ5IHNldERldmljZVBpeGVsUmF0aW8gbWV0aG9kXG4gICAgICAgICAqIFNwZWNpYWxseSBmb3IgaGlnaCBkZWZpbmF0aW9uIGRpc3BsYXlcbiAgICAgICAgICogQHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3dlYmdsL3dpa2kvSGFuZGxpbmdIaWdoRFBJXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxLjAsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENsZWFyIGNvbG9yXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLjAsIDAuMCwgMC4wLCAwLjBdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZhdWx0OlxuICAgICAgICAgKiAgICAgX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCB8IF9nbC5TVEVOQ0lMX0JVRkZFUl9CSVRcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyQml0OiAxNzY2NCxcblxuICAgICAgICAvLyBTZXR0aW5ncyB3aGVuIGdldHRpbmcgY29udGV4dFxuICAgICAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8jMi40XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGVuYWJsZSBhbHBoYSwgZGVmYXVsdCB0cnVlXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBlbmFibGUgZGVwdGggYnVmZmVyLCBkZWZhdWx0IHRydWVcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBkZXB0aDogdHJ1ZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGVuYWJsZSBzdGVuY2lsIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHN0ZW5jaWw6IGZhbHNlLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgZW5hYmxlIGFudGlhbGlhcywgZGVmYXVsdCB0cnVlXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYW50aWFsaWFzOiB0cnVlLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgZW5hYmxlIHByZW11bHRpcGxpZWQgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdHJ1ZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHByZXNlcnZlIGRyYXdpbmcgYnVmZmVyLCBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRocm93IGNvbnRleHQgZXJyb3IsIHVzdWFsbHkgdHVybmVkIG9uIGluIGRlYnVnIG1vZGVcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aHJvd0Vycm9yOiB0cnVlLFxuICAgICAgICAvKipcbiAgICAgICAgICogV2ViR0wgQ29udGV4dCBjcmVhdGVkIGZyb20gZ2l2ZW4gY2FudmFzXG4gICAgICAgICAqIEB0eXBlIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICAgICAqL1xuICAgICAgICBnbDogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbmRlcmVyIHZpZXdwb3J0LCByZWFkLW9ubHksIGNhbiBiZSBzZXQgYnkgc2V0Vmlld3BvcnQgbWV0aG9kXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICB2aWV3cG9ydDoge30sXG5cbiAgICAgICAgLy8gU2V0IGJ5IEZyYW1lQnVmZmVyI2JpbmRcbiAgICAgICAgX19jdXJyZW50RnJhbWVCdWZmZXI6IG51bGwsXG5cbiAgICAgICAgX3ZpZXdwb3J0U3RhY2s6IFtdLFxuICAgICAgICBfY2xlYXJTdGFjazogW10sXG5cbiAgICAgICAgX3NjZW5lUmVuZGVyaW5nOiBudWxsXG4gICAgfTtcbn0sIGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICghdGhpcy5jYW52YXMpIHtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB9XG4gICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgYWxwaGE6IHRoaXMuYWxwaGEsXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcbiAgICAgICAgICAgIHN0ZW5jaWw6IHRoaXMuc3RlbmNpbCxcbiAgICAgICAgICAgIGFudGlhbGlhczogdGhpcy5hbnRpYWxpYXMsXG4gICAgICAgICAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IHRoaXMucHJlbXVsdGlwbGllZEFscGhhLFxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRzKVxuICAgICAgICAgICAgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdHMpO1xuXG4gICAgICAgIGlmICghdGhpcy5nbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nbGluZm8gPSBuZXcgR0xJbmZvKHRoaXMuZ2wpO1xuXG4gICAgICAgIGlmICh0aGlzLmdsLnRhcmdldFJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbHJlYWR5IGNyZWF0ZWQgYSByZW5kZXJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93ICdFcnJvciBjcmVhdGluZyBXZWJHTCBDb250ZXh0ICcgKyBlO1xuICAgIH1cblxuICAgIC8vIEluaXQgbWFuYWdlcnNcbiAgICB0aGlzLl9wcm9ncmFtTWdyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5SZW5kZXJlci5wcm90b3R5cGUuICoqL1xue1xuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgY2FudmFzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgICAqL1xuICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcbiAgICAgICAgLy8gc2V0IHRoZSBkaXNwbGF5IHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nQnVmZmVyXG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGRwcjtcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KDAsIDAsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgcmVuZGVyZXIgd2lkdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0V2lkdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgcmVuZGVyZXIgaGVpZ2h0XG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldEhlaWdodDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdmlld3BvcnQgYXNwZWN0LFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRWaWV3cG9ydEFzcGVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xuICAgICAgICByZXR1cm4gdmlld3BvcnQud2lkdGggLyB2aWV3cG9ydC5oZWlnaHQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBkZXZpY2VQaXhlbFJhdGlvXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cbiAgICAgKi9cbiAgICBzZXREZXZpY2VQaXhlbFJhdGlvOiBmdW5jdGlvbihkZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMucmVzaXplKHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZGV2aWNlUGl4ZWxSYXRpb1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXZpY2VQaXhlbFJhdGlvXG4gICAgICovXG4gICAgZ2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgV2ViR0wgZXh0ZW5zaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICovXG4gICAgZ2V0R0xFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0RXh0ZW5zaW9uKG5hbWUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgV2ViR0wgcGFyYW1ldGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHsqfVxuICAgICAqL1xuICAgIGdldEdMUGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldFBhcmFtZXRlcihuYW1lKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHJlbmRlcmluZyB2aWV3cG9ydFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0geFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cbiAgICAgKiAgICAgICAgRGVmYXVsdGx5IHVzZSB0aGUgcmVuZGVyZXJlIGRldmljZVBpeGVsUmF0aW9cbiAgICAgKiAgICAgICAgSXQgbmVlZHMgdG8gYmUgMSB3aGVuIHNldFZpZXdwb3J0IGlzIGNhbGxlZCBieSBmcmFtZUJ1ZmZlclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgc2V0Vmlld3BvcnQoMCwwLHdpZHRoLGhlaWdodCwxKVxuICAgICAqICBzZXRWaWV3cG9ydCh7XG4gICAgICogICAgICB4OiAwLFxuICAgICAqICAgICAgeTogMCxcbiAgICAgKiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgKiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAqICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxuICAgICAqICB9KVxuICAgICAqL1xuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XG5cbiAgICAgICAgICAgIHggPSBvYmoueDtcbiAgICAgICAgICAgIHkgPSBvYmoueTtcbiAgICAgICAgICAgIHdpZHRoID0gb2JqLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gb2JqLmhlaWdodDtcbiAgICAgICAgICAgIGRwciA9IG9iai5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB9XG4gICAgICAgIGRwciA9IGRwciB8fCB0aGlzLmRldmljZVBpeGVsUmF0aW87XG5cbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydChcbiAgICAgICAgICAgIHggKiBkcHIsIHkgKiBkcHIsIHdpZHRoICogZHByLCBoZWlnaHQgKiBkcHJcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVXNlIGEgZnJlc2ggbmV3IG9iamVjdCwgbm90IHdyaXRlIHByb3BlcnR5LlxuICAgICAgICB0aGlzLnZpZXdwb3J0ID0ge1xuICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgIHk6IHksXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwclxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQdXNoIGN1cnJlbnQgdmlld3BvcnQgaW50byBhIHN0YWNrXG4gICAgICovXG4gICAgc2F2ZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0U3RhY2sucHVzaCh0aGlzLnZpZXdwb3J0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUG9wIHZpZXdwb3J0IGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgcmVzdG9yZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydFN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fdmlld3BvcnRTdGFjay5wb3AoKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHVzaCBjdXJyZW50IGNsZWFyIGludG8gYSBzdGFja1xuICAgICAqL1xuICAgIHNhdmVDbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9jbGVhclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgY2xlYXJCaXQ6IHRoaXMuY2xlYXJCaXQsXG4gICAgICAgICAgICBjbGVhckNvbG9yOiB0aGlzLmNsZWFyQ29sb3JcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFBvcCBjbGVhciBmcm9tIHN0YWNrLCByZXN0b3JlIGluIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHJlc3RvcmVDbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fY2xlYXJTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgb3B0ID0gdGhpcy5fY2xlYXJTdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG9wdC5jbGVhckNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jbGVhckJpdCA9IG9wdC5jbGVhckJpdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBiaW5kU2NlbmVSZW5kZXJpbmc6IGZ1bmN0aW9uIChzY2VuZSkge1xuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgdGhlIHNjZW5lIGluIGNhbWVyYSB0byB0aGUgc2NyZWVuIG9yIGJpbmRlZCBvZmZsaW5lIGZyYW1lYnVmZmVyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gICAgICAgc2NlbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gICAgICBjYW1lcmFcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgW25vdFVwZGF0ZVNjZW5lXSBJZiBub3QgY2FsbCB0aGUgc2NlbmUudXBkYXRlIG1ldGhvZHMgaW4gdGhlIHJlbmRlcmluZywgZGVmYXVsdCB0cnVlXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtwcmVaXSAgICAgICAgICAgSWYgdXNlIHByZVogb3B0aW1pemF0aW9uLCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHJldHVybiB7SVJlbmRlckluZm99XG4gICAgICovXG4gICAgcmVuZGVyOiBmdW5jdGlvbihzY2VuZSwgY2FtZXJhLCBub3RVcGRhdGVTY2VuZSwgcHJlWikge1xuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcblxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcblxuICAgICAgICBpZiAodGhpcy5jbGVhckJpdCkge1xuXG4gICAgICAgICAgICAvLyBNdXN0IHNldCBkZXB0aCBhbmQgY29sb3IgbWFzayB0cnVlIGJlZm9yZSBjbGVhclxuICAgICAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xuICAgICAgICAgICAgdmFyIG5lZWRzU2Npc3NvciA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHZpZXdwb3J0RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydC53aWR0aCAhPT0gdGhpcy5fd2lkdGggfHwgdmlld3BvcnQuaGVpZ2h0ICE9PSB0aGlzLl9oZWlnaHRcbiAgICAgICAgICAgICAgICB8fCAodmlld3BvcnREcHIgJiYgdmlld3BvcnREcHIgIT09IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbylcbiAgICAgICAgICAgICAgICB8fCB2aWV3cG9ydC54IHx8IHZpZXdwb3J0LnlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5lZWRzU2Npc3NvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTU0NDYwOC9ob3ctdG8tY2xlYXItYS1yZWN0YW5nbGUtYXJlYS1pbi13ZWJnbFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgX2dsLmVuYWJsZShfZ2wuU0NJU1NPUl9URVNUKTtcbiAgICAgICAgICAgICAgICBfZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LnkgKiB2aWV3cG9ydERwciwgdmlld3BvcnQud2lkdGggKiB2aWV3cG9ydERwciwgdmlld3BvcnQuaGVpZ2h0ICogdmlld3BvcnREcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2dsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XG4gICAgICAgICAgICBfZ2wuY2xlYXIodGhpcy5jbGVhckJpdCk7XG4gICAgICAgICAgICBpZiAobmVlZHNTY2lzc29yKSB7XG4gICAgICAgICAgICAgICAgX2dsLmRpc2FibGUoX2dsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgc2NlbmUgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gdGhlIHByZXBhc3MgbGlrZSBzaGFkb3cgbWFwXG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGl0IGFnYWluXG4gICAgICAgIGlmICghbm90VXBkYXRlU2NlbmUpIHtcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FtZXJhID0gY2FtZXJhIHx8IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcbiAgICAgICAgaWYgKCFjYW1lcmEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhblxcJ3QgZmluZCBjYW1lcmEgaW4gdGhlIHNjZW5lLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSBpZiBjYW1lcmEgbm90IG1vdW50ZWQgb24gdGhlIHNjZW5lXG4gICAgICAgIGlmICghY2FtZXJhLmdldFNjZW5lKCkpIHtcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xuXG4gICAgICAgIC8vIFJlc2V0IHRoZSBzY2VuZSBib3VuZGluZyBib3g7XG4gICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xuICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnNldCgtSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5KTtcblxuICAgICAgICB2YXIgb3BhcXVlTGlzdCA9IHRoaXMuY3VsbFJlbmRlckxpc3Qoc2NlbmUub3BhcXVlTGlzdCwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIHZhciB0cmFuc3BhcmVudExpc3QgPSB0aGlzLmN1bGxSZW5kZXJMaXN0KHNjZW5lLnRyYW5zcGFyZW50TGlzdCwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIHZhciBzY2VuZU1hdGVyaWFsID0gc2NlbmUubWF0ZXJpYWw7XG5cbiAgICAgICAgc2NlbmUudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICAgICAgLy8gUmVuZGVyIHByZSB6XG4gICAgICAgIGlmIChwcmVaKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclByZVoob3BhcXVlTGlzdCwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgICAgICBfZ2wuZGVwdGhGdW5jKF9nbC5MRVFVQUwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVTUyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGRlcHRoIG9mIHRyYW5zcGFyZW50IGxpc3QuXG4gICAgICAgIHZhciB3b3JsZFZpZXdNYXQgPSBtYXQ0Q3JlYXRlKCk7XG4gICAgICAgIHZhciBwb3NWaWV3U3BhY2UgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSB0cmFuc3BhcmVudExpc3RbaV07XG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKHdvcmxkVmlld01hdCwgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXksIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHBvc1ZpZXdTcGFjZSwgcmVuZGVyYWJsZS5wb3NpdGlvbi5hcnJheSwgd29ybGRWaWV3TWF0KTtcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19kZXB0aCA9IHBvc1ZpZXdTcGFjZVsyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbmRlciBvcGFxdWUgbGlzdFxuICAgICAgICB2YXIgb3BhcXVlUmVuZGVySW5mbyA9IHRoaXMucmVuZGVyUGFzcyhvcGFxdWVMaXN0LCBjYW1lcmEsIHtcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29ydENvbXBhcmU6IHRoaXMub3BhcXVlU29ydENvbXBhcmVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHRyYW5zcGFyZW50UmVuZGVySW5mbyA9IHRoaXMucmVuZGVyUGFzcyh0cmFuc3BhcmVudExpc3QsIGNhbWVyYSwge1xuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjZW5lTWF0ZXJpYWwgfHwgcmVuZGVyYWJsZS5tYXRlcmlhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy50cmFuc3BhcmVudFNvcnRDb21wYXJlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZW5kZXJJbmZvID0ge307XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb3BhcXVlUmVuZGVySW5mbykge1xuICAgICAgICAgICAgcmVuZGVySW5mb1tuYW1lXSA9IG9wYXF1ZVJlbmRlckluZm9bbmFtZV0gKyB0cmFuc3BhcmVudFJlbmRlckluZm9bbmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICBzY2VuZS50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHNjZW5lLCBjYW1lcmEsIHJlbmRlckluZm8pO1xuXG4gICAgICAgIC8vIENsZWFudXBcbiAgICAgICAgdGhpcy5fc2NlbmVSZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICByZXR1cm4gcmVuZGVySW5mbztcbiAgICB9LFxuXG4gICAgZ2V0UHJvZ3JhbTogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSkge1xuICAgICAgICByZW5kZXJNYXRlcmlhbCA9IHJlbmRlck1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtTWdyLmdldFByb2dyYW0ocmVuZGVyYWJsZSwgcmVuZGVyTWF0ZXJpYWwsIHNjZW5lKTtcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVQcm9ncmFtOiBmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICBpZiAocHJvZ3JhbS5fX2Vycm9yKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBwcm9ncmFtLl9fZXJyb3I7XG4gICAgICAgICAgICBpZiAoZXJyb3JTaGFkZXJbcHJvZ3JhbS5fX3VpZF9fXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVycm9yU2hhZGVyW3Byb2dyYW0uX191aWRfX10gPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aHJvd0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCBlcnJvck1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICB1cGRhdGVQcm9ncmFtczogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBwYXNzQ29uZmlnKSB7XG4gICAgICAgIHZhciBnZXRNYXRlcmlhbCA9IChwYXNzQ29uZmlnICYmIHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwpIHx8IGRlZmF1bHRHZXRNYXRlcmlhbDtcbiAgICAgICAgc2NlbmUgPSBzY2VuZSB8fCBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gbGlzdFtpXTtcbiAgICAgICAgICAgIHZhciByZW5kZXJNYXRlcmlhbCA9IGdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJldlJlbmRlcmFibGUgPSBsaXN0W2kgLSAxXTtcbiAgICAgICAgICAgICAgICB2YXIgcHJldkpvaW50c0xlbiA9IHByZXZSZW5kZXJhYmxlLmpvaW50cyA/IHByZXZSZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIHZhciBqb2ludHNMZW4gPSByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggPyByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIC8vIEtlZXAgcHJvZ3JhbSBub3QgY2hhbmdlIGlmIGpvaW50cywgbWF0ZXJpYWwsIGxpZ2h0R3JvdXAgYXJlIHNhbWUgb2YgdHdvIHJlbmRlcmFibGVzLlxuICAgICAgICAgICAgICAgIGlmIChqb2ludHNMZW4gPT09IHByZXZKb2ludHNMZW5cbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5tYXRlcmlhbCA9PT0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWxcbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5saWdodEdyb3VwID09PSBwcmV2UmVuZGVyYWJsZS5saWdodEdyb3VwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcm9ncmFtID0gcHJldlJlbmRlcmFibGUuX19wcm9ncmFtO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XG5cbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJvZ3JhbSA9IHByb2dyYW07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRG8gZnJ1c3R1bSBjdWxsaW5nIG9uIHJlbmRlciBsaXN0XG4gICAgICovXG4gICAgY3VsbFJlbmRlckxpc3Q6IGZ1bmN0aW9uIChsaXN0LCBzY2VuZSwgY2FtZXJhKSB7XG4gICAgICAgIHZhciBjdWxsZWRSZW5kZXJMaXN0ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICB2YXIgd29ybGRNID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkgPyBtYXRyaWNlcy5JREVOVElUWSA6IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXk7XG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKG1hdHJpY2VzLldPUkxEVklFVywgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkgLCB3b3JsZE0pO1xuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGcnVzdHVtQ3VsbGVkKFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBzY2VuZSwgY2FtZXJhLCBtYXRyaWNlcy5XT1JMRFZJRVcsIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5XG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1bGxlZFJlbmRlckxpc3QucHVzaChyZW5kZXJhYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdWxsZWRSZW5kZXJMaXN0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgYSBzaW5nbGUgcmVuZGVyYWJsZSBsaXN0IGluIGNhbWVyYSBpbiBzZXF1ZW5jZVxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJhYmxlW119IGxpc3QgTGlzdCBvZiBhbGwgcmVuZGVyYWJsZXMuXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwYXNzQ29uZmlnXVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmdldE1hdGVyaWFsXSBHZXQgcmVuZGVyYWJsZSBtYXRlcmlhbC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5iZWZvcmVSZW5kZXJdIEJlZm9yZSByZW5kZXIgZWFjaCByZW5kZXJhYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmFmdGVyUmVuZGVyXSBBZnRlciByZW5kZXIgZWFjaCByZW5kZXJhYmxlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuaWZSZW5kZXJdIElmIHJlbmRlciB0aGUgcmVuZGVyYWJsZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5zb3J0Q29tcGFyZV0gU29ydCBjb21wYXJlIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm4ge0lSZW5kZXJJbmZvfVxuICAgICAqL1xuICAgIHJlbmRlclBhc3M6IGZ1bmN0aW9uKGxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZykge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xuXG4gICAgICAgIHZhciByZW5kZXJJbmZvID0ge1xuICAgICAgICAgICAgdHJpYW5nbGVDb3VudDogMCxcbiAgICAgICAgICAgIHZlcnRleENvdW50OiAwLFxuICAgICAgICAgICAgZHJhd0NhbGxDb3VudDogMCxcbiAgICAgICAgICAgIG1lc2hDb3VudDogbGlzdC5sZW5ndGgsXG4gICAgICAgICAgICByZW5kZXJlZE1lc2hDb3VudDogMFxuICAgICAgICB9O1xuICAgICAgICBwYXNzQ29uZmlnID0gcGFzc0NvbmZpZyB8fCB7fTtcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCA9IHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xuICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciA9IHBhc3NDb25maWcuYmVmb3JlUmVuZGVyIHx8IG5vb3A7XG4gICAgICAgIHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgPSBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyIHx8IG5vb3A7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmFtcyhsaXN0LCB0aGlzLl9zY2VuZVJlbmRlcmluZywgcGFzc0NvbmZpZyk7XG4gICAgICAgIGlmIChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKSB7XG4gICAgICAgICAgICBsaXN0LnNvcnQocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb21lIGNvbW1vbiBidWlsdGluIHVuaWZvcm1zXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gICAgICAgIHZhciB2RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgdmFyIHZpZXdwb3J0VW5pZm9ybSA9IFtcbiAgICAgICAgICAgIHZpZXdwb3J0LnggKiB2RHByLCB2aWV3cG9ydC55ICogdkRwcixcbiAgICAgICAgICAgIHZpZXdwb3J0LndpZHRoICogdkRwciwgdmlld3BvcnQuaGVpZ2h0ICogdkRwclxuICAgICAgICBdO1xuICAgICAgICB2YXIgd2luZG93RHByID0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyXG4gICAgICAgICAgICA/IFt0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVXaWR0aCgpLCB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVIZWlnaHQoKV1cbiAgICAgICAgICAgIDogW3RoaXMuX3dpZHRoICogd2luZG93RHByLCB0aGlzLl9oZWlnaHQgKiB3aW5kb3dEcHJdO1xuICAgICAgICAvLyBERVBSRUNBVEVEXG4gICAgICAgIHZhciB2aWV3cG9ydFNpemVVbmlmb3JtID0gW1xuICAgICAgICAgICAgdmlld3BvcnRVbmlmb3JtWzJdLCB2aWV3cG9ydFVuaWZvcm1bM11cbiAgICAgICAgXTtcbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuVklFVywgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkpO1xuICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuUFJPSkVDVElPTiwgY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXkpO1xuICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSwgbWF0cmljZXMuVklFVyk7XG4gICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXSU5WRVJTRSwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlBST0pFQ1RJT04pO1xuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5WSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OKTtcblxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmVSZW5kZXJpbmc7XG5cbiAgICAgICAgdmFyIHByZXZNYXRlcmlhbDtcbiAgICAgICAgdmFyIHByZXZQcm9ncmFtO1xuXG4gICAgICAgIC8vIFN0YXR1c1xuICAgICAgICB2YXIgZGVwdGhUZXN0LCBkZXB0aE1hc2s7XG4gICAgICAgIHZhciBjdWxsaW5nLCBjdWxsRmFjZSwgZnJvbnRGYWNlO1xuICAgICAgICB2YXIgdHJhbnNwYXJlbnQ7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XG4gICAgICAgICAgICBpZiAocGFzc0NvbmZpZy5pZlJlbmRlciAmJiAhcGFzc0NvbmZpZy5pZlJlbmRlcihyZW5kZXJhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCB0cmFuc2Zvcm1lZCB0byBqb2ludCBzcGFjZS4gSWdub3JlIHRoZSBtZXNoIHRyYW5zZm9ybVxuICAgICAgICAgICAgdmFyIHdvcmxkTSA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpID8gbWF0cmljZXMuSURFTlRJVFkgOiByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtLmFycmF5O1xuXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBwYXNzQ29uZmlnLmdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XG5cbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gcmVuZGVyYWJsZS5fX3Byb2dyYW07XG4gICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xuXG4gICAgICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuV09STEQsIHdvcmxkTSk7XG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OICwgd29ybGRNKTtcbiAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxESU5WRVJTRSB8fFxuICAgICAgICAgICAgICAgIHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERJTlZFUlNFVFJBTlNQT1NFKSB7XG4gICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERJTlZFUlNFLCB3b3JsZE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXSU5WRVJTRSB8fFxuICAgICAgICAgICAgICAgIHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRSkge1xuICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxEVklFV0lOVkVSU0UsIG1hdHJpY2VzLldPUkxEVklFVyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRSB8fFxuICAgICAgICAgICAgICAgIHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UpIHtcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRSwgbWF0cmljZXMuV09STERWSUVXUFJPSkVDVElPTik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJlZm9yZSByZW5kZXIgaG9va1xuICAgICAgICAgICAgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIodGhpcyk7XG4gICAgICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWwpO1xuXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbUNoYW5nZWQgPSBwcm9ncmFtICE9PSBwcmV2UHJvZ3JhbTtcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIFNldCBsaWdodHMgbnVtYmVyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlQnLCB2aWV3cG9ydFVuaWZvcm0pO1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnV0lORE9XX1NJWkUnLCB3aW5kb3dTaXplVW5pZm9ybSk7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdORUFSJywgY2FtZXJhLm5lYXIpO1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnRkFSJywgY2FtZXJhLmZhcik7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdERVZJQ0VQSVhFTFJBVElPJywgdkRwcik7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdUSU1FJywgdGltZSk7XG4gICAgICAgICAgICAgICAgLy8gREVQUkVDQVRFRFxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlRfU0laRScsIHZpZXdwb3J0U2l6ZVVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgb3B0aW1pemVkXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnNldExpZ2h0VW5pZm9ybXMocHJvZ3JhbSwgcmVuZGVyYWJsZS5saWdodEdyb3VwLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9ncmFtID0gcHJldlByb2dyYW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFByb2dyYW0gY2hhbmdlcyBhbHNvIG5lZWRzIHJlc2V0IHRoZSBtYXRlcmlhbHMuXG4gICAgICAgICAgICBpZiAocHJldk1hdGVyaWFsICE9PSBtYXRlcmlhbCB8fCBwcm9ncmFtQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kZXB0aFRlc3QgIT09IGRlcHRoVGVzdCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2dsLmVuYWJsZShfZ2wuREVQVEhfVEVTVClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2dsLmRpc2FibGUoX2dsLkRFUFRIX1RFU1QpO1xuICAgICAgICAgICAgICAgICAgICBkZXB0aFRlc3QgPSBtYXRlcmlhbC5kZXB0aFRlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kZXB0aE1hc2sgIT09IGRlcHRoTWFzaykge1xuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKG1hdGVyaWFsLmRlcHRoTWFzayk7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzayA9IG1hdGVyaWFsLmRlcHRoTWFzaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ICE9PSB0cmFuc3BhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfZ2wuZW5hYmxlKF9nbC5CTEVORClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjYWNoZSBibGVuZGluZ1xuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuYmxlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmJsZW5kKF9nbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGJsZW5kIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKF9nbC5GVU5DX0FERCwgX2dsLkZVTkNfQUREKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5ibGVuZEZ1bmNTZXBhcmF0ZShfZ2wuU1JDX0FMUEhBLCBfZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgX2dsLk9ORSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuYmluZCh0aGlzLCBwcm9ncmFtLCBwcmV2TWF0ZXJpYWwsIHByZXZQcm9ncmFtKTtcbiAgICAgICAgICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1hdHJpeFNlbWFudGljS2V5cyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY0tleXM7XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG1hdHJpeFNlbWFudGljS2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IG1hdHJpeFNlbWFudGljS2V5c1trXTtcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gc2hhZGVyLm1hdHJpeFNlbWFudGljc1tzZW1hbnRpY107XG4gICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IG1hdHJpY2VzW3NlbWFudGljXTtcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWNJbmZvLmlzVHJhbnNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXhOb1RyYW5zcG9zZSA9IG1hdHJpY2VzW3NlbWFudGljSW5mby5zZW1hbnRpY05vVHJhbnNwb3NlXTtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UobWF0cml4LCBtYXRyaXhOb1RyYW5zcG9zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCBtYXRyaXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5jdWxsRmFjZSAhPT0gY3VsbEZhY2UpIHtcbiAgICAgICAgICAgICAgICBjdWxsRmFjZSA9IHJlbmRlcmFibGUuY3VsbEZhY2U7XG4gICAgICAgICAgICAgICAgX2dsLmN1bGxGYWNlKGN1bGxGYWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgZnJvbnRGYWNlID0gcmVuZGVyYWJsZS5mcm9udEZhY2U7XG4gICAgICAgICAgICAgICAgX2dsLmZyb250RmFjZShmcm9udEZhY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbGluZyAhPT0gY3VsbGluZykge1xuICAgICAgICAgICAgICAgIGN1bGxpbmcgPSByZW5kZXJhYmxlLmN1bGxpbmc7XG4gICAgICAgICAgICAgICAgY3VsbGluZyA/IF9nbC5lbmFibGUoX2dsLkNVTExfRkFDRSkgOiBfZ2wuZGlzYWJsZShfZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG9iamVjdFJlbmRlckluZm8gPSByZW5kZXJhYmxlLnJlbmRlcih0aGlzLCBtYXRlcmlhbCwgcHJvZ3JhbSk7XG5cbiAgICAgICAgICAgIGlmIChvYmplY3RSZW5kZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby50cmlhbmdsZUNvdW50ICs9IG9iamVjdFJlbmRlckluZm8udHJpYW5nbGVDb3VudDtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnZlcnRleENvdW50ICs9IG9iamVjdFJlbmRlckluZm8udmVydGV4Q291bnQ7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kcmF3Q2FsbENvdW50ICs9IG9iamVjdFJlbmRlckluZm8uZHJhd0NhbGxDb3VudDtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnJlbmRlcmVkTWVzaENvdW50ICsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZnRlciByZW5kZXIgaG9va1xuICAgICAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG9iamVjdFJlbmRlckluZm8pO1xuICAgICAgICAgICAgcmVuZGVyYWJsZS5hZnRlclJlbmRlcih0aGlzLCBvYmplY3RSZW5kZXJJbmZvKTtcblxuICAgICAgICAgICAgcHJldlByb2dyYW0gPSBwcm9ncmFtO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHByb2dyYW1zIGluY2FzZSBpdCdzIG5vdCB1cGRhdGVkIGluIHRoZSBvdGhlciBwYXNzZXMuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGlzdFtpXS5fX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xuXG4gICAgICAgIHJldHVybiByZW5kZXJJbmZvO1xuICAgIH0sXG5cbiAgICByZW5kZXJQcmVaOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIGNhbWVyYSkge1xuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcbiAgICAgICAgdmFyIHByZVpQYXNzTWF0ZXJpYWwgPSB0aGlzLl9wcmV6TWF0ZXJpYWwgfHwgbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcHJlek1hdGVyaWFsID0gcHJlWlBhc3NNYXRlcmlhbDtcblxuICAgICAgICBfZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcblxuICAgICAgICAvLyBTdGF0dXNcbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzKGxpc3QsIGNhbWVyYSwge1xuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLmlnbm9yZVByZVo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlWlBhc3NNYXRlcmlhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0OiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIGFuIHNjZW5lIG9iamVjdCBpcyBjdWxsZWQgYnkgY2FtZXJhIGZydXN0dW1cbiAgICAgKlxuICAgICAqIE9iamVjdCBjYW4gYmUgYSByZW5kZXJhYmxlIG9yIGEgbGlnaHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBTY2VuZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB3b3JsZFZpZXdNYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHByb2plY3Rpb25NYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxuICAgICAqL1xuICAgIGlzRnJ1c3R1bUN1bGxlZDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuY3NlLmNoYWxtZXJzLnNlL351ZmZlL3ZmY19iYm94LnBkZlxuICAgICAgICB2YXIgY3VsbGluZ0JvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciBjdWxsaW5nTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmplY3QsIHNjZW5lLCBjYW1lcmEsIHdvcmxkVmlld01hdCwgcHJvamVjdGlvbk1hdCkge1xuICAgICAgICAgICAgLy8gQm91bmRpbmcgYm94IGNhbiBiZSBhIHByb3BlcnR5IG9mIG9iamVjdChsaWtlIGxpZ2h0KSBvciByZW5kZXJhYmxlLmdlb21ldHJ5XG4gICAgICAgICAgICB2YXIgZ2VvQkJveCA9IG9iamVjdC5ib3VuZGluZ0JveCB8fCBvYmplY3QuZ2VvbWV0cnkuYm91bmRpbmdCb3g7XG4gICAgICAgICAgICBjdWxsaW5nTWF0cml4LmFycmF5ID0gd29ybGRWaWV3TWF0O1xuICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LmNvcHkoZ2VvQkJveCk7XG4gICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3guYXBwbHlUcmFuc2Zvcm0oY3VsbGluZ01hdHJpeCk7XG5cbiAgICAgICAgICAgIC8vIFBhc3NpbmdseSB1cGRhdGUgdGhlIHNjZW5lIGJvdW5kaW5nIGJveFxuICAgICAgICAgICAgLy8gRklYTUUgZXhjbHVkZSB2ZXJ5IGxhcmdlIG1lc2ggbGlrZSBncm91bmQgcGxhbmUgb3IgdGVycmFpbiA/XG4gICAgICAgICAgICAvLyBGSVhNRSBPbmx5IHJlbmRlcmVyYWJsZSB3aGljaCBjYXN0IHNoYWRvdyA/XG5cbiAgICAgICAgICAgIC8vIEZJWE1FIGJvdW5kaW5nQm94IGJlY29tZXMgbXVjaCBsYXJnZXIgYWZ0ZXIgdHJhbnNmb3JtZC5cbiAgICAgICAgICAgIGlmIChzY2VuZSAmJiBvYmplY3QuaXNSZW5kZXJhYmxlKCkgJiYgb2JqZWN0LmNhc3RTaGFkb3cpIHtcbiAgICAgICAgICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUudW5pb24oY3VsbGluZ0JvdW5kaW5nQm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElnbm9yZSBmcnVzdHVtIGN1bGxpbmcgaWYgb2JqZWN0IGlzIHNraW5uZWQgbWVzaC5cbiAgICAgICAgICAgIGlmIChvYmplY3QuZnJ1c3R1bUN1bGxpbmcgJiYgIW9iamVjdC5pc1NraW5uZWRNZXNoKCkpICB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdWxsaW5nQm91bmRpbmdCb3guaW50ZXJzZWN0Qm91bmRpbmdCb3goY2FtZXJhLmZydXN0dW0uYm91bmRpbmdCb3gpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSBwcm9qZWN0aW9uTWF0O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheVsyXSA8IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xpcCBpbiB0aGUgbmVhciBwbGFuZVxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5WzJdID0gLTFlLTIwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5hcHBseVByb2plY3Rpb24oY3VsbGluZ01hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWluID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheTtcbiAgICAgICAgICAgICAgICB2YXIgbWF4ID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWF4WzBdIDwgLTEgfHwgbWluWzBdID4gMVxuICAgICAgICAgICAgICAgICAgICB8fCBtYXhbMV0gPCAtMSB8fCBtaW5bMV0gPiAxXG4gICAgICAgICAgICAgICAgICAgIHx8IG1heFsyXSA8IC0xIHx8IG1pblsyXSA+IDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gc2NlbmUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmlzLCB0ZXh0dXJlcyBhbmQgc2hhZGVycyBpbiB0aGUgc2NlbmVcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXG4gICAgICovXG4gICAgZGlzcG9zZVNjZW5lOiBmdW5jdGlvbihzY2VuZSkge1xuICAgICAgICB0aGlzLmRpc3Bvc2VOb2RlKHNjZW5lLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgc2NlbmUuZGlzcG9zZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmllcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgYXR0YWNoZWQgb24gaXQgb3IgaXRzIGRlc2NlbmRhbnRcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rpc3Bvc2VHZW9tZXRyeT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgZ2VvbWV0cmllcyB1c2VkIGluIHRoZSBkZXNjZW5kYW50IG1lc2hcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlVGV4dHVyZT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgdGV4dHVyZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXG4gICAgICovXG4gICAgZGlzcG9zZU5vZGU6IGZ1bmN0aW9uKHJvb3QsIGRpc3Bvc2VHZW9tZXRyeSwgZGlzcG9zZVRleHR1cmUpIHtcbiAgICAgICAgLy8gRGV0dGFjaGVkIGZyb20gcGFyZW50XG4gICAgICAgIGlmIChyb290LmdldFBhcmVudCgpKSB7XG4gICAgICAgICAgICByb290LmdldFBhcmVudCgpLnJlbW92ZShyb290KTtcbiAgICAgICAgfVxuICAgICAgICByb290LnRyYXZlcnNlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmdlb21ldHJ5ICYmIGRpc3Bvc2VHZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIG5vZGUuZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBhcnRpY2xlIHN5c3RlbSBhbmQgQW1iaWVudEN1YmVtYXAgbGlnaHQgbmVlZCB0byBkaXNwb3NlXG4gICAgICAgICAgICBpZiAobm9kZS5kaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5kaXNwb3NlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBnaXZlbiBnZW9tZXRyeVxuICAgICAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcbiAgICAgKi9cbiAgICBkaXNwb3NlR2VvbWV0cnk6IGZ1bmN0aW9uKGdlb21ldHJ5KSB7XG4gICAgICAgIGdlb21ldHJ5LmRpc3Bvc2UodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gdGV4dHVyZVxuICAgICAqIEBwYXJhbSB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXG4gICAgICovXG4gICAgZGlzcG9zZVRleHR1cmU6IGZ1bmN0aW9uKHRleHR1cmUpIHtcbiAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHRoaXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlIGdpdmVuIGZyYW1lIGJ1ZmZlclxuICAgICAqIEBwYXJhbSB7Y2xheS5GcmFtZUJ1ZmZlcn0gZnJhbWVCdWZmZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlRnJhbWVCdWZmZXI6IGZ1bmN0aW9uKGZyYW1lQnVmZmVyKSB7XG4gICAgICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2UgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7fSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgc2NyZWVuIGNvb3JkcyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyhOREMpXG4gICAgICogU2NyZWVuIGNvb3JkcyBjYW4gZ2V0IGZyb20gbW91c2UgZXZlbnQsIGl0IGlzIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gY2FudmFzIGVsZW1lbnRcbiAgICAgKiBOREMgY2FuIGJlIHVzZWQgaW4gcmF5IGNhc3Rpbmcgd2l0aCBDYW1lcmEucHJvdG90eXBlLmNhc3RSYXkgbWV0aG9kc1xuICAgICAqXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB4XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc2NyZWVuVG9OREM6IGZ1bmN0aW9uKHgsIHksIG91dCkge1xuICAgICAgICBpZiAoIW91dCkge1xuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbnZlcnQgeTtcbiAgICAgICAgeSA9IHRoaXMuX2hlaWdodCAtIHk7XG5cbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydDtcbiAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcbiAgICAgICAgYXJyWzBdID0gKHggLSB2aWV3cG9ydC54KSAvIHZpZXdwb3J0LndpZHRoO1xuICAgICAgICBhcnJbMF0gPSBhcnJbMF0gKiAyIC0gMTtcbiAgICAgICAgYXJyWzFdID0gKHkgLSB2aWV3cG9ydC55KSAvIHZpZXdwb3J0LmhlaWdodDtcbiAgICAgICAgYXJyWzFdID0gYXJyWzFdICogMiAtIDE7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBPcGFxdWUgcmVuZGVyYWJsZXMgY29tcGFyZSBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSB4XG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cblJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlID0gUmVuZGVyZXIucHJvdG90eXBlLm9wYXF1ZVNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xuICAgICAgICBpZiAoeC5fX3Byb2dyYW0gPT09IHkuX19wcm9ncmFtKSB7XG4gICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4Ll9fcHJvZ3JhbSAgJiYgeS5fX3Byb2dyYW0pIHtcbiAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHgucmVuZGVyT3JkZXIgLSB5LnJlbmRlck9yZGVyO1xufTtcblxuLyoqXG4gKiBUcmFuc3BhcmVudCByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGFcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0gYlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuUmVuZGVyZXIudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS50cmFuc3BhcmVudFNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IGRlcHRoIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcblxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XG4gICAgICAgIGlmICh4Ll9fZGVwdGggPT09IHkuX19kZXB0aCkge1xuICAgICAgICAgICAgaWYgKHguX19wcm9ncmFtID09PSB5Ll9fcHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgIGlmICh4Lm1hdGVyaWFsID09PSB5Lm1hdGVyaWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB4Lm1hdGVyaWFsLl9fdWlkX18gLSB5Lm1hdGVyaWFsLl9fdWlkX187XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeC5fX3Byb2dyYW0gICYmIHkuX19wcm9ncmFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVwdGggaXMgbmVnYXRpdmVcbiAgICAgICAgLy8gU28gZmFydGhlciBvYmplY3QgaGFzIHNtYWxsZXIgZGVwdGggdmFsdWVcbiAgICAgICAgcmV0dXJuIHguX19kZXB0aCAtIHkuX19kZXB0aDtcbiAgICB9XG4gICAgcmV0dXJuIHgucmVuZGVyT3JkZXIgLSB5LnJlbmRlck9yZGVyO1xufTtcblxuLy8gVGVtcG9yYXJ5IHZhcmlhYmxlc1xudmFyIG1hdHJpY2VzID0ge1xuICAgIElERU5USVRZOiBtYXQ0Q3JlYXRlKCksXG5cbiAgICBXT1JMRDogbWF0NENyZWF0ZSgpLFxuICAgIFZJRVc6IG1hdDRDcmVhdGUoKSxcbiAgICBQUk9KRUNUSU9OOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERWSUVXOiBtYXQ0Q3JlYXRlKCksXG4gICAgVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OOiBtYXQ0Q3JlYXRlKCksXG5cbiAgICBXT1JMRElOVkVSU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxuICAgIFBST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxuICAgIFZJRVdQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXG5cbiAgICBXT1JMRFRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxuICAgIFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERWSUVXVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxuICAgIFdPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpXG59O1xuXG4vKipcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuQ09MT1JfQlVGRkVSX0JJVFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuUmVuZGVyZXIuQ09MT1JfQlVGRkVSX0JJVCA9IGdsZW51bS5DT0xPUl9CVUZGRVJfQklUO1xuLyoqXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVDtcbi8qKlxuICogQG5hbWUgY2xheS5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmVyLlNURU5DSUxfQlVGRkVSX0JJVCA9IGdsZW51bS5TVEVOQ0lMX0JVRkZFUl9CSVQ7XG5cbmV4cG9ydCBkZWZhdWx0IFJlbmRlcmVyO1xuIiwiaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgcXVhdCA9IGdsTWF0cml4LnF1YXQ7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLlF1YXRlcm5pb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKi9cbnZhciBRdWF0ZXJuaW9uID0gZnVuY3Rpb24gKHgsIHksIHosIHcpIHtcblxuICAgIHggPSB4IHx8IDA7XG4gICAgeSA9IHkgfHwgMDtcbiAgICB6ID0geiB8fCAwO1xuICAgIHcgPSB3ID09PSB1bmRlZmluZWQgPyAxIDogdztcblxuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgUXVhdGVybmlvbiwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHosIHcgY29tcG9uZW50c1xuICAgICAqIEBuYW1lIGFycmF5XG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlF1YXRlcm5pb24jXG4gICAgICovXG4gICAgdGhpcy5hcnJheSA9IHF1YXQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcblxuICAgIC8qKlxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XG4gICAgICogQG5hbWUgX2RpcnR5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5RdWF0ZXJuaW9uI1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cblF1YXRlcm5pb24ucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IFF1YXRlcm5pb24sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgYiB0byBzZWxmXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBhZGQ6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHF1YXQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHcgY29tcG9uZW50IGZyb20geCwgeSwgeiBjb21wb25lbnRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBjYWxjdWxhdGVXOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1YXQuY2FsY3VsYXRlVyh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHdcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSB3O1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCwgeSwgeiBhbmQgdyBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XG5cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgUXVhdGVybmlvblxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2Ygc2VsZiBJZiB0aGUgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLFxuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gaW52ZXJ0IGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBjb25qdWdhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcXVhdC5jb25qdWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xuICAgICAgICBxdWF0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHJldHVybiBxdWF0LmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gbVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIGZyb21NYXQzOiBmdW5jdGlvbiAobSkge1xuICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0uYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgZnJvbSB0aGUgZ2l2ZW4gNHg0IHJvdGF0aW9uIG1hdHJpeFxuICAgICAqIFRoZSA0dGggY29sdW1uIGFuZCA0dGggcm93IHdpbGwgYmUgZHJvcGVkXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1cbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBmcm9tTWF0NDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1hdDMgPSBnbE1hdHJpeC5tYXQzO1xuICAgICAgICB2YXIgbTMgPSBtYXQzLmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIG1hdDMuZnJvbU1hdDQobTMsIG0uYXJyYXkpO1xuICAgICAgICAgICAgLy8gVE9ETyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxuICAgICAgICAgICAgbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcbiAgICAgICAgICAgIHF1YXQuZnJvbU1hdDModGhpcy5hcnJheSwgbTMpO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0byBpZGVudGl0eSBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcXVhdC5pZGVudGl0eSh0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEludmVydCBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1YXQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcXVhdC5sZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcXVhdC5sZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcbiAgICAgICAgcXVhdC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgcXVhdC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIG11bExlZnQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11dGlwbHkgYSBhbmQgc2VsZlxuICAgICAqIFF1YXRlcm5pb24gbXV0aXBseSBpcyBub3QgY29tbXV0YXRpdmUsIHNvIHRoZSByZXN1bHQgb2YgbXV0aXBseUxlZnQgaXMgZGlmZmVyZW50IHdpdGggbXVsdGlwbHkuXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1YXQubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBYIGF4aXNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgcm90YXRlWDogZnVuY3Rpb24gKHJhZCkge1xuICAgICAgICBxdWF0LnJvdGF0ZVgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWSBheGlzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHJvdGF0ZVk6IGZ1bmN0aW9uIChyYWQpIHtcbiAgICAgICAgcXVhdC5yb3RhdGVZKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFogYXhpc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICByb3RhdGVaOiBmdW5jdGlvbiAocmFkKSB7XG4gICAgICAgIHF1YXQucm90YXRlWih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHNlbGYgdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIFZlY3RvcjMgYSB0byBWZWN0b3IzIGIuXG4gICAgICogYSBhbmQgYiBuZWVkcyB0byBiZSBub3JtYWxpemVkXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHJvdGF0aW9uVG86IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHF1YXQucm90YXRpb25Ubyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgc2VsZiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBheGVzXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdmlld1xuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IHJpZ2h0XG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdXBcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzZXRBeGVzOiBmdW5jdGlvbiAodmlldywgcmlnaHQsIHVwKSB7XG4gICAgICAgIHF1YXQuc2V0QXhlcyh0aGlzLmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCBhIHJvdGF0aW9uIGF4aXMgYW5kIHJvdGF0aW9uIGFuZ2xlXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gYXhpc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzZXRBeGlzQW5nbGU6IGZ1bmN0aW9uIChheGlzLCByYWQpIHtcbiAgICAgICAgcXVhdC5zZXRBeGlzQW5nbGUodGhpcy5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcbiAgICAgICAgcXVhdC5zbGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBxdWF0LnNxckxlbih0aGlzLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3F1YXJlZCBsZW5ndGggb2Ygc2VsZlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXVhcmVkTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBxdWF0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBmcm9tIGV1bGVyXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxuICAgICAqL1xuICAgIGZyb21FdWxlcjogZnVuY3Rpb24gKHYsIG9yZGVyKSB7XG4gICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLmZyb21FdWxlcih0aGlzLCB2LCBvcmRlcik7XG4gICAgfSxcblxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIEdldHRlciBhbmQgU2V0dGVyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcblxuICAgIHZhciBwcm90byA9IFF1YXRlcm5pb24ucHJvdG90eXBlO1xuICAgIC8qKlxuICAgICAqIEBuYW1lIHhcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguUXVhdGVybmlvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgeVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5RdWF0ZXJuaW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSB6XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlF1YXRlcm5pb25cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHdcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguUXVhdGVybmlvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLmFkZCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICBxdWF0LmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHhcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHlcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHpcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHdcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLnNldCA9IGZ1bmN0aW9uIChvdXQsIHgsIHksIHosIHcpIHtcbiAgICBxdWF0LnNldChvdXQuYXJyYXksIHgsIHksIHosIHcpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uY29weSA9IGZ1bmN0aW9uIChvdXQsIGIpIHtcbiAgICBxdWF0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBxdWF0LmNhbGN1bGF0ZVcob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xuICAgIHF1YXQuY29uanVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgcXVhdC5pZGVudGl0eShvdXQuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgcXVhdC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuUXVhdGVybmlvbi5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBxdWF0LmRvdChhLmFycmF5LCBiLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuUXVhdGVybmlvbi5sZW4gPSBmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiBxdWF0Lmxlbmd0aChhLmFycmF5KTtcbn07XG5cbi8vIFF1YXRlcm5pb24ubGVuZ3RoID0gUXVhdGVybmlvbi5sZW47XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBiXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB0XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5sZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xuICAgIHF1YXQubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uc2xlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XG4gICAgcXVhdC5zbGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24ubXVsID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xuICAgIHF1YXQubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24ubXVsdGlwbHkgPSBRdWF0ZXJuaW9uLm11bDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcXVhdC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcXVhdC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcXVhdC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgYXhpc1xuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5zZXRBeGlzQW5nbGUgPSBmdW5jdGlvbiAob3V0LCBheGlzLCByYWQpIHtcbiAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQuYXJyYXksIGF4aXMuYXJyYXksIHJhZCk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBxdWF0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblF1YXRlcm5pb24uc3FyTGVuID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gcXVhdC5zcXJMZW4oYS5hcnJheSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuUXVhdGVybmlvbi5zcXVhcmVkTGVuZ3RoID0gUXVhdGVybmlvbi5zcXJMZW47XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9ICAgIG1cbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLmZyb21NYXQzID0gZnVuY3Rpb24gKG91dCwgbSkge1xuICAgIHF1YXQuZnJvbU1hdDMob3V0LmFycmF5LCBtLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgdmlld1xuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9ICAgIHJpZ2h0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgdXBcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLnNldEF4ZXMgPSBmdW5jdGlvbiAob3V0LCB2aWV3LCByaWdodCwgdXApIHtcbiAgICBxdWF0LnNldEF4ZXMob3V0LmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSAgICBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24ucm90YXRpb25UbyA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICBxdWF0LnJvdGF0aW9uVG8ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBTZXQgcXVhdGVybmlvbiBmcm9tIGV1bGVyXG4gKiBAcGFyYW0ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IHZcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxuICovXG5RdWF0ZXJuaW9uLmZyb21FdWxlciA9IGZ1bmN0aW9uIChvdXQsIHYsIG9yZGVyKSB7XG5cbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIHYgPSB2LmFycmF5O1xuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XG4gICAgdmFyIGMxID0gTWF0aC5jb3ModlswXSAvIDIpO1xuICAgIHZhciBjMiA9IE1hdGguY29zKHZbMV0gLyAyKTtcbiAgICB2YXIgYzMgPSBNYXRoLmNvcyh2WzJdIC8gMik7XG4gICAgdmFyIHMxID0gTWF0aC5zaW4odlswXSAvIDIpO1xuICAgIHZhciBzMiA9IE1hdGguc2luKHZbMV0gLyAyKTtcbiAgICB2YXIgczMgPSBNYXRoLnNpbih2WzJdIC8gMik7XG5cbiAgICB2YXIgb3JkZXIgPSAob3JkZXIgfHwgJ1hZWicpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXG4gICAgLy8gIDIwNjk2LWZ1bmN0aW9uLXRvLWNvbnZlcnQtYmV0d2Vlbi1kY20tZXVsZXItYW5nbGVzLXF1YXRlcm5pb25zLWFuZC1ldWxlci12ZWN0b3JzL1xuICAgIC8vICBjb250ZW50L1NwaW5DYWxjLm1cblxuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICAgICAgY2FzZSAnWFlaJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdZWFonOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1pYWSc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWllYJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdZWlgnOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1haWSc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBRdWF0ZXJuaW9uO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IFF1YXRlcm5pb24gZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xudmFyIG1hdDQgPSBnbE1hdHJpeC5tYXQ0O1xuXG52YXIgbmFtZUlkID0gMDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5Ob2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgTm9kZSA9IEJhc2UuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5Lk5vZGUjICovXG57XG4gICAgLyoqXG4gICAgICogU2NlbmUgbm9kZSBuYW1lXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBuYW1lOiAnJyxcblxuICAgIC8qKlxuICAgICAqIFBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gYWthIHRyYW5zbGF0aW9uLlxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBwb3NpdGlvbjogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gUmVwcmVzZW50ZWQgYnkgYSBxdWF0ZXJuaW9uXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHJvdGF0aW9uOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHNjYWxlOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHJvb3Qgc2NlbmUuXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIHdvcmxkVHJhbnNmb3JtOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlLlxuICAgICAqIENvbXBvc2l0ZWQgd2l0aCBwb3NpdGlvbiwgcm90YXRpb24gYW5kIHNjYWxlLlxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBsb2NhbFRyYW5zZm9ybTogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIElmIHRoZSBsb2NhbCB0cmFuc2Zvcm0gaXMgdXBkYXRlIGZyb20gU1JUKHNjYWxlLCByb3RhdGlvbiwgdHJhbnNsYXRpb24sIHdoaWNoIGlzIHBvc2l0aW9uIGhlcmUpIGVhY2ggZnJhbWVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBhdXRvVXBkYXRlTG9jYWxUcmFuc2Zvcm06IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBQYXJlbnQgb2YgY3VycmVudCBzY2VuZSBub2RlXG4gICAgICogQHR5cGUgez9jbGF5Lk5vZGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcGFyZW50OiBudWxsLFxuICAgIC8qKlxuICAgICAqIFRoZSByb290IHNjZW5lIG1vdW50ZWQuIE51bGwgaWYgaXQgaXMgYSBpc29sYXRlZCBub2RlXG4gICAgICogQHR5cGUgez9jbGF5LlNjZW5lfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3NjZW5lOiBudWxsLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm06IHRydWUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaW5JdGVyYXRpbmc6IGZhbHNlLFxuXG4gICAgLy8gRGVwdGggZm9yIHRyYW5zcGFyZW50IGxpc3Qgc29ydGluZ1xuICAgIF9fZGVwdGg6IDBcblxufSwgZnVuY3Rpb24gKCkge1xuXG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gKHRoaXMudHlwZSB8fCAnTk9ERScpICsgJ18nICsgKG5hbWVJZCsrKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5yb3RhdGlvbikge1xuICAgICAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjYWxlKSB7XG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcblxuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG5cbn0sXG4vKipAbGVuZHMgY2xheS5Ob2RlLnByb3RvdHlwZS4gKi9cbntcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHs/Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIC8qKlxuICAgICAqIElmIG5vZGUgYW5kIGl0cyBjaGlscmVuIGludmlzaWJsZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGludmlzaWJsZTogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBJZiBOb2RlIGlzIGEgc2tpbm5lZCBtZXNoXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIGl0IGlzIGEgcmVuZGVyYWJsZSBzY2VuZSBub2RlLCBsaWtlIE1lc2ggYW5kIFBhcnRpY2xlU3lzdGVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIG5vZGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqL1xuICAgIHNldE5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lO1xuICAgICAgICBpZiAoc2NlbmUpIHtcbiAgICAgICAgICAgIHZhciBub2RlUmVwb3NpdG9yeSA9IHNjZW5lLl9ub2RlUmVwb3NpdG9yeTtcbiAgICAgICAgICAgIGRlbGV0ZSBub2RlUmVwb3NpdG9yeVt0aGlzLm5hbWVdO1xuICAgICAgICAgICAgbm9kZVJlcG9zaXRvcnlbbmFtZV0gPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGNoaWxkIG5vZGVcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqL1xuICAgIGFkZDogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luSXRlcmF0aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0FkZCBvcGVyYXRpb24gY2FuIGNhdXNlIHVucHJlZGljdGFibGUgZXJyb3Igd2hlbiBpbiBpdGVyYXRpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3JpZ2luYWxQYXJlbnQgPSBub2RlLl9wYXJlbnQ7XG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCA9PT0gdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCkge1xuICAgICAgICAgICAgb3JpZ2luYWxQYXJlbnQucmVtb3ZlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuX3BhcmVudCA9IHRoaXM7XG4gICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XG4gICAgICAgIGlmIChzY2VuZSAmJiBzY2VuZSAhPT0gbm9kZS5zY2VuZSkge1xuICAgICAgICAgICAgbm9kZS50cmF2ZXJzZSh0aGlzLl9hZGRTZWxmVG9TY2VuZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBjaGlsZHJlbiBuZWVkcyB1cGRhdGUgdHJhbnNmb3JtXG4gICAgICAgIC8vIEluIGNhc2UgY2hpbGQgYXJlIHJlbW92ZSBhbmQgYWRkZWQgYWdhaW4gYWZ0ZXIgcGFyZW50IG1vdmVkXG4gICAgICAgIG5vZGUuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGdpdmVuIGNoaWxkIHNjZW5lIG5vZGVcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luSXRlcmF0aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbW92ZSBvcGVyYXRpb24gY2FuIGNhdXNlIHVucHJlZGljdGFibGUgZXJyb3Igd2hlbiBpbiBpdGVyYXRpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgdmFyIGlkeCA9IGNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBjaGlsZHJlblxuICAgICAqL1xuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcblxuICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjaGlsZHJlbltpZHhdLl9wYXJlbnQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpZHhdLnRyYXZlcnNlKHRoaXMuX3JlbW92ZVNlbGZGcm9tU2NlbmUsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzY2VuZSBtb3VudGVkXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZX1cbiAgICAgKi9cbiAgICBnZXRTY2VuZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJlbnQgbm9kZVxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XG4gICAgICovXG4gICAgZ2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gICAgfSxcblxuICAgIF9yZW1vdmVTZWxmRnJvbVNjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZS5yZW1vdmVGcm9tU2NlbmUoZGVzY2VuZGFudCk7XG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gbnVsbDtcbiAgICB9LFxuXG4gICAgX2FkZFNlbGZUb1NjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xuICAgICAgICB0aGlzLl9zY2VuZS5hZGRUb1NjZW5lKGRlc2NlbmRhbnQpO1xuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZSA9IHRoaXMuX3NjZW5lO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gc2NlbmUgbm9kZVxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXG4gICAgICovXG4gICAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUuX3BhcmVudDtcbiAgICAgICAgd2hpbGUocGFyZW50KSB7XG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBhIG5ldyBjcmVhdGVkIGFycmF5IG9mIGFsbCBjaGlsZHJlbiBub2Rlc1xuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZVtdfVxuICAgICAqL1xuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5zbGljZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2hpbGQgc2NlbmUgbm9kZSBhdCBnaXZlbiBpbmRleC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIGNoaWxkQXQ6IGZ1bmN0aW9uIChpZHgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2lkeF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBmaXJzdCBjaGlsZCB3aXRoIHRoZSBnaXZlbiBuYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XG4gICAgICovXG4gICAgZ2V0Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZmlyc3QgZGVzY2VuZGFudCBoYXZlIHRoZSBnaXZlbiBuYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XG4gICAgICovXG4gICAgZ2V0RGVzY2VuZGFudEJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjaGlsZC5nZXREZXNjZW5kYW50QnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUXVlcnkgZGVzY2VuZGFudCBub2RlIGJ5IHBhdGhcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBub2RlLnF1ZXJ5Tm9kZSgncm9vdC9wYXJlbnQvY2hpbGQnKTtcbiAgICAgKi9cbiAgICBxdWVyeU5vZGU6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gTmFtZSBoYXZlIHNsYXNoID9cbiAgICAgICAgdmFyIHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHBhdGhBcnJbaV07XG4gICAgICAgICAgICAvLyBTa2lwIGVtcHR5XG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY3VycmVudC5fY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bal07XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkO1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEVhcmx5IHJldHVybiBpZiBub3QgZm91bmRcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHF1ZXJ5IHBhdGgsIHJlbGF0aXZlIHRvIHJvb3ROb2RlKGRlZmF1bHQgaXMgc2NlbmUpXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtyb290Tm9kZV1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0UGF0aDogZnVuY3Rpb24gKHJvb3ROb2RlKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gJy8nO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9wYXJlbnQ7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5uYW1lO1xuICAgICAgICB3aGlsZSAoY3VycmVudC5fcGFyZW50KSB7XG4gICAgICAgICAgICBwYXRoID0gY3VycmVudC5uYW1lICsgJy8nICsgcGF0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Ll9wYXJlbnQgPT0gcm9vdE5vZGUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50Ll9wYXJlbnQgJiYgcm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXB0aCBmaXJzdCB0cmF2ZXJzZSBhbGwgaXRzIGRlc2NlbmRhbnQgc2NlbmUgbm9kZXMgYW5kXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge05vZGV9IFtjb250ZXh0XVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmaWx0ZXJdXG4gICAgICovXG4gICAgdHJhdmVyc2U6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgZmlsdGVyKSB7XG5cbiAgICAgICAgdGhpcy5faW5JdGVyYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlci5jYWxsKGNvbnRleHQsIHRoaXMpKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gX2NoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBfY2hpbGRyZW5baV0udHJhdmVyc2UoY2FsbGJhY2ssIGNvbnRleHQsIGZpbHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbkl0ZXJhdGluZyA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICBlYWNoQ2hpbGQ6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgY3Rvcikge1xuICAgICAgICB0aGlzLl9pbkl0ZXJhdGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xuICAgICAgICB2YXIgbm9DdG9yID0gY3RvciA9PSBudWxsO1xuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBfY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF9jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChub0N0b3IgfHwgY2hpbGQuY29uc3RydWN0b3IgPT09IGN0b3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIGNoaWxkLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2luSXRlcmF0aW5nID0gZmFsc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgbG9jYWwgdHJhbnNmb3JtIGFuZCBkZWNvbXBvc2UgdG8gU1JUXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguTWF0cml4NH0gbWF0cml4XG4gICAgICovXG4gICAgc2V0TG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcbiAgICAgICAgbWF0NC5jb3B5KHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXksIG1hdHJpeC5hcnJheSk7XG4gICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGVjb21wb3NlIHRoZSBsb2NhbCB0cmFuc2Zvcm0gdG8gU1JUXG4gICAgICovXG4gICAgZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChrZWVwU2NhbGUpIHtcbiAgICAgICAgdmFyIHNjYWxlID0gIWtlZXBTY2FsZSA/IHRoaXMuc2NhbGU6IG51bGw7XG4gICAgICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB3b3JsZCB0cmFuc2Zvcm0gYW5kIGRlY29tcG9zZSB0byBTUlRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5NYXRyaXg0fSBtYXRyaXhcbiAgICAgKi9cbiAgICBzZXRXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xuICAgICAgICBtYXQ0LmNvcHkodGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSwgbWF0cml4LmFycmF5KTtcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZWNvbXBvc2UgdGhlIHdvcmxkIHRyYW5zZm9ybSB0byBTUlRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cbiAgICBkZWNvbXBvc2VXb3JsZFRyYW5zZm9ybTogKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgdG1wID0gbWF0NC5jcmVhdGUoKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xuICAgICAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcbiAgICAgICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgICAgICAgICAvLyBBc3N1bWUgd29ybGQgdHJhbnNmb3JtIGlzIHVwZGF0ZWRcbiAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydCh0bXAsIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybS5hcnJheSk7XG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsb2NhbFRyYW5zZm9ybS5hcnJheSwgdG1wLCB3b3JsZFRyYW5zZm9ybS5hcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdDQuY29weShsb2NhbFRyYW5zZm9ybS5hcnJheSwgd29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHNjYWxlID0gIWtlZXBTY2FsZSA/IHRoaXMuc2NhbGU6IG51bGw7XG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5kZWNvbXBvc2VNYXRyaXgoc2NhbGUsIHRoaXMucm90YXRpb24sIHRoaXMucG9zaXRpb24pO1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICB0cmFuc2Zvcm1OZWVkc1VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5fZGlydHlcbiAgICAgICAgICAgIHx8IHRoaXMucm90YXRpb24uX2RpcnR5XG4gICAgICAgICAgICB8fCB0aGlzLnNjYWxlLl9kaXJ0eTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGxvY2FsIHRyYW5zZm9ybSBmcm9tIFNSVFxuICAgICAqIE5vdGljZSB0aGF0IGxvY2FsIHRyYW5zZm9ybSB3aWxsIG5vdCBiZSB1cGRhdGVkIGlmIF9kaXJ0eSBtYXJrIG9mIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUgaXMgYWxsIGZhbHNlXG4gICAgICovXG4gICAgdXBkYXRlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcbiAgICAgICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZTtcblxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XG4gICAgICAgICAgICB2YXIgbSA9IHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXk7XG5cbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBvcmRlciwgc2NhbGUtPnJvdGF0aW9uLT5wb3NpdGlvblxuICAgICAgICAgICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihtLCByb3RhdGlvbi5hcnJheSwgcG9zaXRpb24uYXJyYXkpO1xuXG4gICAgICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIHNjYWxlLmFycmF5KTtcblxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICBzY2FsZS5fZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHBvc2l0aW9uLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtLCBhc3N1bWUgaXRzIHBhcmVudCB3b3JsZCB0cmFuc2Zvcm0gaGF2ZSBiZWVuIHVwZGF0ZWRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheTtcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShcbiAgICAgICAgICAgICAgICB3b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXksXG4gICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXQ0LmNvcHkod29ybGRUcmFuc2Zvcm0sIGxvY2FsVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtIGJlZm9yZSB3aG9sZSBzY2VuZSBpcyB1cGRhdGVkLlxuICAgICAqL1xuICAgIHVwZGF0ZVdvcmxkVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHJvb3Qgbm9kZSB3aGljaCB0cmFuc2Zvcm0gbmVlZHMgdXBkYXRlO1xuICAgICAgICB2YXIgcm9vdE5vZGVJc0RpcnR5ID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlSXNEaXJ0eSAmJiByb290Tm9kZUlzRGlydHkuZ2V0UGFyZW50KClcbiAgICAgICAgICAgICYmIHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcm9vdE5vZGVJc0RpcnR5ID0gcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpO1xuICAgICAgICB9MlxuICAgICAgICByb290Tm9kZUlzRGlydHkudXBkYXRlKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gYW5kIHdvcmxkIHRyYW5zZm9ybSByZWN1cnNpdmVseVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VVcGRhdGVXb3JsZFxuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlVXBkYXRlV29ybGQpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZUxvY2FsVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gaXMgbWFudWFsbHkgc2V0dGVkXG4gICAgICAgICAgICBmb3JjZVVwZGF0ZVdvcmxkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZVdvcmxkIHx8IHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVdvcmxkVHJhbnNmb3JtVG9wRG93bigpO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGVXb3JsZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZShmb3JjZVVwZGF0ZVdvcmxkKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYm91bmRpbmcgYm94IG9mIG5vZGVcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2ZpbHRlcl1cbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLkJvdW5kaW5nQm94fVxuICAgICAqL1xuICAgIC8vIFRPRE8gU2tpbm5pbmdcbiAgICBnZXRCb3VuZGluZ0JveDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEZpbHRlciAoZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAhZWwuaW52aXNpYmxlICYmIGVsLmdlb21ldHJ5O1xuICAgICAgICB9XG4gICAgICAgIHZhciB0bXBCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciB0bXBNYXQ0ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGludldvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0IHx8IG5ldyBCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgZmlsdGVyID0gZmlsdGVyIHx8IGRlZmF1bHRGaWx0ZXI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmludmVydChpbnZXb3JsZFRyYW5zZm9ybSwgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIE1hdHJpeDQuaWRlbnRpdHkoaW52V29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uIChtZXNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkgJiYgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmNvcHkobWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkodG1wTWF0NCwgaW52V29ybGRUcmFuc2Zvcm0sIG1lc2gud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xuICAgICAgICAgICAgICAgICAgICBvdXQudW5pb24odG1wQkJveCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcywgZGVmYXVsdEZpbHRlcik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIEdldCB3b3JsZCBwb3NpdGlvbiwgZXh0cmFjdGVkIGZyb20gd29ybGQgdHJhbnNmb3JtXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgZ2V0V29ybGRQb3NpdGlvbjogZnVuY3Rpb24gKG91dCkge1xuICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XG4gICAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgICAgIHZhciBhcnIgPSBvdXQuYXJyYXk7XG4gICAgICAgICAgICBhcnJbMF0gPSBtWzEyXTtcbiAgICAgICAgICAgIGFyclsxXSA9IG1bMTNdO1xuICAgICAgICAgICAgYXJyWzJdID0gbVsxNF07XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKG1bMTJdLCBtWzEzXSwgbVsxNF0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IG5vZGVcbiAgICAgKiBAcmV0dXJuIHtOb2RlfVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XG5cbiAgICAgICAgbm9kZS5zZXROYW1lKHRoaXMubmFtZSk7XG4gICAgICAgIG5vZGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgbm9kZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xuICAgICAgICBub2RlLnNjYWxlLmNvcHkodGhpcy5zY2FsZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbm9kZS5hZGQoY2hpbGRyZW5baV0uY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGUgbm9kZSBhcm91bmQgYSBheGlzIGJ5IGFuZ2xlIGRlZ3JlZXMsIGF4aXMgcGFzc2VzIHRocm91Z2ggcG9pbnRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBwb2ludCBDZW50ZXIgcG9pbnRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBheGlzICBDZW50ZXIgYXhpc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICBhbmdsZSBSb3RhdGlvbiBhbmdsZVxuICAgICAqIEBzZWUgaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9TY3JpcHRSZWZlcmVuY2UvVHJhbnNmb3JtLlJvdGF0ZUFyb3VuZC5odG1sXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICovXG4gICAgcm90YXRlQXJvdW5kOiAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdiA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgIHZhciBSVE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIHBlcmZvcm1hbmNlXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocG9pbnQsIGF4aXMsIGFuZ2xlKSB7XG5cbiAgICAgICAgICAgIHYuY29weSh0aGlzLnBvc2l0aW9uKS5zdWJ0cmFjdChwb2ludCk7XG5cbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5pZGVudGl0eSgpO1xuICAgICAgICAgICAgLy8gcGFyZW50IG5vZGVcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZShwb2ludCk7XG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5yb3RhdGUoYW5nbGUsIGF4aXMpO1xuXG4gICAgICAgICAgICBSVE1hdHJpeC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLnJvdGF0aW9uLCB2KTtcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KFJUTWF0cml4KTtcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnNjYWxlKHRoaXMuc2NhbGUpO1xuXG4gICAgICAgICAgICB0aGlzLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW3VwXVxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5vcGVuZ2wub3JnL3Nkay9kb2NzL21hbjIveGh0bWwvZ2x1TG9va0F0LnhtbFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqL1xuICAgIGxvb2tBdDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG0gPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdXApIHtcbiAgICAgICAgICAgIG0ubG9va0F0KHRoaXMucG9zaXRpb24sIHRhcmdldCwgdXAgfHwgdGhpcy5sb2NhbFRyYW5zZm9ybS55KS5pbnZlcnQoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxUcmFuc2Zvcm0obSk7XG5cbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9O1xuICAgIH0pKClcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBOb2RlO1xuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5MaWdodFxuICogQGV4dGVuZHMgY2xheS5Ob2RlXG4gKi9cbnZhciBMaWdodCA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5MaWdodCMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogTGlnaHQgUkdCIGNvbG9yXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgICAgICovXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpZ2h0IGludGVuc2l0eVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgaW50ZW5zaXR5OiAxLjAsXG5cbiAgICAgICAgLy8gQ29uZmlnIGZvciBzaGFkb3cgbWFwXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBsaWdodCBjYXN0IHNoYWRvd1xuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNhc3RTaGFkb3c6IHRydWUsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNoYWRvdyBtYXAgc2l6ZVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc2hhZG93UmVzb2x1dGlvbjogNTEyLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaWdodCBncm91cCwgc2hhZGVyIHdpdGggc2FtZSBgbGlnaHRHcm91cGAgd2lsbCBiZSBhZmZlY3RlZFxuICAgICAgICAgKlxuICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmb3J3YXJkIHJlbmRlcmluZ1xuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgZ3JvdXA6IDBcbiAgICB9O1xufSxcbi8qKiBAbGVuZHMgY2xheS5MaWdodC5wcm90b3R5cGUuICovXG57XG4gICAgLyoqXG4gICAgICogTGlnaHQgdHlwZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlck9mIGNsYXkuTGlnaHQjXG4gICAgICovXG4gICAgdHlwZTogJycsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkxpZ2h0fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkxpZ2h0LnByb3RvdHlwZVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxpZ2h0ID0gTm9kZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICAgICAgbGlnaHQuY29sb3IgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmNvbG9yKTtcbiAgICAgICAgbGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XG4gICAgICAgIGxpZ2h0LmNhc3RTaGFkb3cgPSB0aGlzLmNhc3RTaGFkb3c7XG4gICAgICAgIGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gPSB0aGlzLnNoYWRvd1Jlc29sdXRpb247XG5cbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWM0ID0gZ2xNYXRyaXgudmVjNDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguUGxhbmVcbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtub3JtYWxdXG4gKiBAcGFyYW0ge251bWJlcn0gW2Rpc3RhbmNlXVxuICovXG52YXIgUGxhbmUgPSBmdW5jdGlvbihub3JtYWwsIGRpc3RhbmNlKSB7XG4gICAgLyoqXG4gICAgICogTm9ybWFsIG9mIHRoZSBwbGFuZVxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbCB8fCBuZXcgVmVjdG9yMygwLCAxLCAwKTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIHRoZSBwbGFuZSBlcXVhdGlvbiwgdXNlZCBhcyBkaXN0YW5jZSB0byB0aGUgb3JpZ2luXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2UgfHwgMDtcbn07XG5cblBsYW5lLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBQbGFuZSxcblxuICAgIC8qKlxuICAgICAqIERpc3RhbmNlIGZyb20gYSBnaXZlbiBwb2ludCB0byB0aGUgcGxhbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbihwb2ludCkge1xuICAgICAgICByZXR1cm4gdmVjMy5kb3QocG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5KSAtIHRoaXMuZGlzdGFuY2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcHJvamVjdGlvbiBwb2ludCBvbiB0aGUgcGxhbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gcG9pbnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgcHJvamVjdFBvaW50OiBmdW5jdGlvbihwb2ludCwgb3V0KSB7XG4gICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQocG9pbnQpO1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5LCAtZCk7XG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIHBsYW5lJ3Mgbm9ybWFsIGFuZCBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlXG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGludkxlbiA9IDEgLyB2ZWMzLmxlbih0aGlzLm5vcm1hbC5hcnJheSk7XG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5ub3JtYWwuYXJyYXksIGludkxlbik7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgKj0gaW52TGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcGxhbmUgaW50ZXJzZWN0IGEgZnJ1c3R1bVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5GcnVzdHVtfSBGcnVzdHVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpbnRlcnNlY3RGcnVzdHVtOiBmdW5jdGlvbihmcnVzdHVtKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCBjb29yZHMgb2YgZnJ1c3R1bSBpcyBvbiBwbGFuZSBhbGwgdW5kZXIgcGxhbmVcbiAgICAgICAgdmFyIGNvb3JkcyA9IGZydXN0dW0udmVydGljZXM7XG4gICAgICAgIHZhciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcnJheTtcbiAgICAgICAgdmFyIG9uUGxhbmUgPSB2ZWMzLmRvdChjb29yZHNbMF0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCh2ZWMzLmRvdChjb29yZHNbaV0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlKSAhPSBvblBsYW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiBwbGFuZSBhbmQgYSBnaXZlbiBsaW5lXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gc3RhcnQgc3RhcnQgcG9pbnQgb2YgbGluZVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IGVuZCBlbmQgcG9pbnQgb2YgbGluZVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgaW50ZXJzZWN0TGluZTogKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmQgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgb3V0KSB7XG4gICAgICAgICAgICB2YXIgZDAgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChzdGFydCk7XG4gICAgICAgICAgICB2YXIgZDEgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChlbmQpO1xuICAgICAgICAgICAgaWYgKChkMCA+IDAgJiYgZDEgPiAwKSB8fCAoZDAgPCAwICYmIGQxIDwgMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJheSBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIHZhciBwbiA9IHRoaXMubm9ybWFsLmFycmF5O1xuICAgICAgICAgICAgdmFyIGQgPSB0aGlzLmRpc3RhbmNlO1xuICAgICAgICAgICAgdmFyIHJvID0gc3RhcnQuYXJyYXk7XG4gICAgICAgICAgICAvLyBkaXJlY3Rpb25cbiAgICAgICAgICAgIHZlYzMuc3ViKHJkLCBlbmQuYXJyYXksIHN0YXJ0LmFycmF5KTtcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJkLCByZCk7XG5cbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gdmVjMy5kb3QocG4sIHJkKTtcbiAgICAgICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcbiAgICAgICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW91dCkge1xuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHJvLCByZCwgLXQpO1xuICAgICAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBwbGFuZVxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGFwcGx5VHJhbnNmb3JtOiAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgdmFyIG5vcm1hbHY0ID0gdmVjNC5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHBvaW50djQgPSB2ZWM0LmNyZWF0ZSgpO1xuICAgICAgICBwb2ludHY0WzNdID0gMTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG00KSB7XG4gICAgICAgICAgICBtNCA9IG00LmFycmF5O1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvaW50IG9uIHBsYW5lXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHBvaW50djQsIHRoaXMubm9ybWFsLmFycmF5LCB0aGlzLmRpc3RhbmNlKTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwb2ludHY0LCBwb2ludHY0LCBtNCk7XG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gdmVjMy5kb3QocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXkpO1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBsYW5lIG5vcm1hbFxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZSwgbTQpO1xuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZSwgaW52ZXJzZVRyYW5zcG9zZSk7XG4gICAgICAgICAgICBub3JtYWx2NFszXSA9IDA7XG4gICAgICAgICAgICB2ZWMzLmNvcHkobm9ybWFsdjQsIHRoaXMubm9ybWFsLmFycmF5KTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChub3JtYWx2NCwgbm9ybWFsdjQsIGludmVyc2VUcmFuc3Bvc2UpO1xuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBub3JtYWx2NCk7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBhbm90aGVyIHBsYW5lXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHBsYW5lXG4gICAgICovXG4gICAgY29weTogZnVuY3Rpb24ocGxhbmUpIHtcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXkpO1xuICAgICAgICB0aGlzLm5vcm1hbC5fZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IHBsYW5lXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlBsYW5lfVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBsYW5lID0gbmV3IFBsYW5lKCk7XG4gICAgICAgIHBsYW5lLmNvcHkodGhpcyk7XG4gICAgICAgIHJldHVybiBwbGFuZTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgUGxhbmUgZnJvbSAnLi9QbGFuZSc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG52YXIgdmVjM1NldCA9IHZlYzMuc2V0O1xudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xudmFyIHZlYzNUcmFuZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XG52YXIgbWF0aE1pbiA9IE1hdGgubWluO1xudmFyIG1hdGhNYXggPSBNYXRoLm1heDtcbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLkZydXN0dW1cbiAqL1xudmFyIEZydXN0dW0gPSBmdW5jdGlvbigpIHtcblxuICAgIC8qKlxuICAgICAqIEVpZ2h0IHBsYW5lcyB0byBlbmNsb3NlIHRoZSBmcnVzdHVtXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5QbGFuZVtdfVxuICAgICAqL1xuICAgIHRoaXMucGxhbmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICB0aGlzLnBsYW5lcy5wdXNoKG5ldyBQbGFuZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCb3VuZGluZyBib3ggb2YgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuXG4gICAgLyoqXG4gICAgICogRWlnaHQgdmVydGljZXMgb2YgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgdGhpcy52ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcbiAgICB9XG59O1xuXG5GcnVzdHVtLnByb3RvdHlwZSA9IHtcblxuICAgIC8vIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTIwNTMxMjMxMDA1L2h0dHA6Ly9jcmF6eWpva2UuZnJlZS5mci9kb2MvM0QvcGxhbmUlMjBleHRyYWN0aW9uLnBkZlxuICAgIC8qKlxuICAgICAqIFNldCBmcnVzdHVtIGZyb20gYSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcbiAgICAgKi9cbiAgICBzZXRGcm9tUHJvamVjdGlvbjogZnVuY3Rpb24ocHJvamVjdGlvbk1hdHJpeCkge1xuXG4gICAgICAgIHZhciBwbGFuZXMgPSB0aGlzLnBsYW5lcztcbiAgICAgICAgdmFyIG0gPSBwcm9qZWN0aW9uTWF0cml4LmFycmF5O1xuICAgICAgICB2YXIgbTAgPSBtWzBdLCBtMSA9IG1bMV0sIG0yID0gbVsyXSwgbTMgPSBtWzNdO1xuICAgICAgICB2YXIgbTQgPSBtWzRdLCBtNSA9IG1bNV0sIG02ID0gbVs2XSwgbTcgPSBtWzddO1xuICAgICAgICB2YXIgbTggPSBtWzhdLCBtOSA9IG1bOV0sIG0xMCA9IG1bMTBdLCBtMTEgPSBtWzExXTtcbiAgICAgICAgdmFyIG0xMiA9IG1bMTJdLCBtMTMgPSBtWzEzXSwgbTE0ID0gbVsxNF0sIG0xNSA9IG1bMTVdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBwbGFuZXNcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMF0ubm9ybWFsLmFycmF5LCBtMyAtIG0wLCBtNyAtIG00LCBtMTEgLSBtOCk7XG4gICAgICAgIHBsYW5lc1swXS5kaXN0YW5jZSA9IC0obTE1IC0gbTEyKTtcbiAgICAgICAgcGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzFdLm5vcm1hbC5hcnJheSwgbTMgKyBtMCwgbTcgKyBtNCwgbTExICsgbTgpO1xuICAgICAgICBwbGFuZXNbMV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMik7XG4gICAgICAgIHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcblxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1syXS5ub3JtYWwuYXJyYXksIG0zICsgbTEsIG03ICsgbTUsIG0xMSArIG05KTtcbiAgICAgICAgcGxhbmVzWzJdLmRpc3RhbmNlID0gLShtMTUgKyBtMTMpO1xuICAgICAgICBwbGFuZXNbMl0ubm9ybWFsaXplKCk7XG5cbiAgICAgICAgdmVjM1NldChwbGFuZXNbM10ubm9ybWFsLmFycmF5LCBtMyAtIG0xLCBtNyAtIG01LCBtMTEgLSBtOSk7XG4gICAgICAgIHBsYW5lc1szXS5kaXN0YW5jZSA9IC0obTE1IC0gbTEzKTtcbiAgICAgICAgcGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzRdLm5vcm1hbC5hcnJheSwgbTMgLSBtMiwgbTcgLSBtNiwgbTExIC0gbTEwKTtcbiAgICAgICAgcGxhbmVzWzRdLmRpc3RhbmNlID0gLShtMTUgLSBtMTQpO1xuICAgICAgICBwbGFuZXNbNF0ubm9ybWFsaXplKCk7XG5cbiAgICAgICAgdmVjM1NldChwbGFuZXNbNV0ubm9ybWFsLmFycmF5LCBtMyArIG0yLCBtNyArIG02LCBtMTEgKyBtMTApO1xuICAgICAgICBwbGFuZXNbNV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xNCk7XG4gICAgICAgIHBsYW5lc1s1XS5ub3JtYWxpemUoKTtcblxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXG4gICAgICAgIHZhciBib3VuZGluZ0JveCA9IHRoaXMuYm91bmRpbmdCb3g7XG4gICAgICAgIGlmIChtMTUgPT09IDApICB7XG4gICAgICAgICAgICB2YXIgYXNwZWN0ID0gbTUgLyBtMDtcbiAgICAgICAgICAgIHZhciB6TmVhciA9IC1tMTQgLyAobTEwIC0gMSk7XG4gICAgICAgICAgICB2YXIgekZhciA9IC1tMTQgLyAobTEwICsgMSk7XG4gICAgICAgICAgICB2YXIgZmFyWSA9IC16RmFyIC8gbTU7XG4gICAgICAgICAgICB2YXIgbmVhclkgPSAtek5lYXIgLyBtNTtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3hcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoLWZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoZmFyWSAqIGFzcGVjdCwgZmFyWSwgek5lYXIpO1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZlcnRpY2VzXG4gICAgICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICAgICAgLy8tLS0gbWluIHpcbiAgICAgICAgICAgIC8vIG1pbiB4XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzBdLCAtZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgLWZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xuICAgICAgICAgICAgLy8gbWF4IHhcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMl0sIGZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIGZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xuICAgICAgICAgICAgLy8tLSBtYXggelxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgLW5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIC1uZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG5lYXJZICogYXNwZWN0LCBuZWFyWSwgek5lYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBPcnRob2dyYXBoaWMgcHJvamVjdGlvblxuICAgICAgICAgICAgdmFyIGxlZnQgPSAoLTEgLSBtMTIpIC8gbTA7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoMSAtIG0xMikgLyBtMDtcbiAgICAgICAgICAgIHZhciB0b3AgPSAoMSAtIG0xMykgLyBtNTtcbiAgICAgICAgICAgIHZhciBib3R0b20gPSAoLTEgLSBtMTMpIC8gbTU7XG4gICAgICAgICAgICB2YXIgbmVhciA9ICgtMSAtIG0xNCkgLyBtMTA7XG4gICAgICAgICAgICB2YXIgZmFyID0gKDEgLSBtMTQpIC8gbTEwO1xuXG5cbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoTWF0aC5taW4obGVmdCwgcmlnaHQpLCBNYXRoLm1pbihib3R0b20sIHRvcCksIE1hdGgubWluKGZhciwgbmVhcikpO1xuICAgICAgICAgICAgYm91bmRpbmdCb3gubWF4LnNldChNYXRoLm1heChyaWdodCwgbGVmdCksIE1hdGgubWF4KHRvcCwgYm90dG9tKSwgTWF0aC5tYXgobmVhciwgZmFyKSk7XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSBib3VuZGluZ0JveC5taW4uYXJyYXk7XG4gICAgICAgICAgICB2YXIgbWF4ID0gYm91bmRpbmdCb3gubWF4LmFycmF5O1xuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XG4gICAgICAgICAgICAvLyBtaW4geFxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcbiAgICAgICAgICAgIC8vIG1heCB4XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xuICAgICAgICAgICAgLy8tLSBtYXggelxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCBtaW5bMF0sIG1heFsxXSwgbWF4WzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCBhbmQgc2V0IHRvIHRoZSBnaXZlbiBib3VuZGluZyBib3hcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgKi9cbiAgICBnZXRUcmFuc2Zvcm1lZEJvdW5kaW5nQm94OiAoZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIHRtcFZlYzMgPSB2ZWMzLmNyZWF0ZSgpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiYm94LCBtYXRyaXgpIHtcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG5cbiAgICAgICAgICAgIHZhciBtNCA9IG1hdHJpeC5hcnJheTtcbiAgICAgICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbjtcbiAgICAgICAgICAgIHZhciBtYXggPSBiYm94Lm1heDtcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xuICAgICAgICAgICAgdmFyIHYgPSB2ZXJ0aWNlc1swXTtcbiAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xuICAgICAgICAgICAgdmVjM0NvcHkobWluQXJyLCB0bXBWZWMzKTtcbiAgICAgICAgICAgIHZlYzNDb3B5KG1heEFyciwgdG1wVmVjMyk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdiA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xuXG4gICAgICAgICAgICAgICAgbWluQXJyWzBdID0gbWF0aE1pbih0bXBWZWMzWzBdLCBtaW5BcnJbMF0pO1xuICAgICAgICAgICAgICAgIG1pbkFyclsxXSA9IG1hdGhNaW4odG1wVmVjM1sxXSwgbWluQXJyWzFdKTtcbiAgICAgICAgICAgICAgICBtaW5BcnJbMl0gPSBtYXRoTWluKHRtcFZlYzNbMl0sIG1pbkFyclsyXSk7XG5cbiAgICAgICAgICAgICAgICBtYXhBcnJbMF0gPSBtYXRoTWF4KHRtcFZlYzNbMF0sIG1heEFyclswXSk7XG4gICAgICAgICAgICAgICAgbWF4QXJyWzFdID0gbWF0aE1heCh0bXBWZWMzWzFdLCBtYXhBcnJbMV0pO1xuICAgICAgICAgICAgICAgIG1heEFyclsyXSA9IG1hdGhNYXgodG1wVmVjM1syXSwgbWF4QXJyWzJdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIGJib3g7XG4gICAgICAgIH07XG4gICAgfSkgKClcbn07XG5leHBvcnQgZGVmYXVsdCBGcnVzdHVtO1xuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG52YXIgRVBTSUxPTiA9IDFlLTU7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLlJheVxuICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW29yaWdpbl1cbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtkaXJlY3Rpb25dXG4gKi9cbnZhciBSYXkgPSBmdW5jdGlvbiAob3JpZ2luLCBkaXJlY3Rpb24pIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW4gfHwgbmV3IFZlY3RvcjMoKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgbmV3IFZlY3RvcjMoKTtcbn07XG5cblJheS5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogUmF5LFxuXG4gICAgLy8gaHR0cDovL3d3dy5zaWdncmFwaC5vcmcvZWR1Y2F0aW9uL21hdGVyaWFscy9IeXBlckdyYXBoL3JheXRyYWNlL3JheXBsYW5lX2ludGVyc2VjdGlvbi5odG1cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBhIGdpdmUgcGxhbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUGxhbmV9IHBsYW5lXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgaW50ZXJzZWN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSwgb3V0KSB7XG4gICAgICAgIHZhciBwbiA9IHBsYW5lLm5vcm1hbC5hcnJheTtcbiAgICAgICAgdmFyIGQgPSBwbGFuZS5kaXN0YW5jZTtcbiAgICAgICAgdmFyIHJvID0gdGhpcy5vcmlnaW4uYXJyYXk7XG4gICAgICAgIHZhciByZCA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xuXG4gICAgICAgIHZhciBkaXZpZGVyID0gdmVjMy5kb3QocG4sIHJkKTtcbiAgICAgICAgLy8gcmF5IGlzIHBhcmFsbGVsIHRvIHRoZSBwbGFuZVxuICAgICAgICBpZiAoZGl2aWRlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHQgPSAodmVjMy5kb3QocG4sIHJvKSAtIGQpIC8gZGl2aWRlcjtcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHJvLCByZCwgLXQpO1xuICAgICAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWlycm9yIHRoZSByYXkgYWdhaW5zdCBwbGFuZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5QbGFuZX0gcGxhbmVcbiAgICAgKi9cbiAgICBtaXJyb3JBZ2FpbnN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSkge1xuICAgICAgICAvLyBEaXN0YW5jZSB0byBwbGFuZVxuICAgICAgICB2YXIgZCA9IHZlYzMuZG90KHBsYW5lLm5vcm1hbC5hcnJheSwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMuZGlyZWN0aW9uLmFycmF5LCB0aGlzLmRpcmVjdGlvbi5hcnJheSwgcGxhbmUubm9ybWFsLmFycmF5LCAtZCAqIDIpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5fZGlydHkgPSB0cnVlO1xuICAgIH0sXG5cbiAgICBkaXN0YW5jZVRvUG9pbnQ6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCkge1xuICAgICAgICAgICAgdmVjMy5zdWIodiwgcG9pbnQsIHRoaXMub3JpZ2luLmFycmF5KTtcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cbiAgICAgICAgICAgIHZhciBiID0gdmVjMy5kb3QodiwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xuICAgICAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5vcmlnaW4uYXJyYXksIHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gb3JpZ2luXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLmxlblNxdWFyZWQodik7XG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIHByb2plY3Rpb24gcG9pbnRcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoYzIgLSBiICogYik7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiByYXkgYW5kIHNwaGVyZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBjZW50ZXJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJhZGl1c1xuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBpbnRlcnNlY3RTcGhlcmU6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjZW50ZXIsIHJhZGl1cywgb3V0KSB7XG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb24uYXJyYXk7XG4gICAgICAgICAgICBjZW50ZXIgPSBjZW50ZXIuYXJyYXk7XG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBjZW50ZXIsIG9yaWdpbik7XG4gICAgICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHByb2plY3Rpb24gcG9pbnQgdG8gb3JpZ2luXG4gICAgICAgICAgICB2YXIgYiA9IHZlYzMuZG90KHYsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxuICAgICAgICAgICAgdmFyIGMyID0gdmVjMy5zcXVhcmVkTGVuZ3RoKHYpO1xuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBwcm9qZWN0aW9uIHBvaW50XG4gICAgICAgICAgICB2YXIgZDIgPSBjMiAtIGIgKiBiO1xuXG4gICAgICAgICAgICB2YXIgcjIgPSByYWRpdXMgKiByYWRpdXM7XG4gICAgICAgICAgICAvLyBObyBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIGlmIChkMiA+IHIyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYSA9IE1hdGguc3FydChyMiAtIGQyKTtcbiAgICAgICAgICAgIC8vIEZpcnN0IGludGVyc2VjdCBwb2ludFxuICAgICAgICAgICAgdmFyIHQwID0gYiAtIGE7XG4gICAgICAgICAgICAvLyBTZWNvbmQgaW50ZXJzZWN0IHBvaW50XG4gICAgICAgICAgICB2YXIgdDEgPSBiICsgYTtcblxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQwIDwgMCkge1xuICAgICAgICAgICAgICAgIGlmICh0MSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICAvLyBodHRwOi8vd3d3LnNjcmF0Y2hhcGl4ZWwuY29tL2xlc3NvbnMvM2QtYmFzaWMtbGVzc29ucy9sZXNzb24tNy1pbnRlcnNlY3Rpbmctc2ltcGxlLXNoYXBlcy9yYXktYm94LWludGVyc2VjdGlvbi9cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5Cb3VuZGluZ0JveH0gYmJveFxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94LCBvdXQpIHtcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xuICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XG4gICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbi5hcnJheTtcbiAgICAgICAgdmFyIG1heCA9IGJib3gubWF4LmFycmF5O1xuXG4gICAgICAgIHZhciBpbnZkaXJ4ID0gMSAvIGRpclswXTtcbiAgICAgICAgdmFyIGludmRpcnkgPSAxIC8gZGlyWzFdO1xuICAgICAgICB2YXIgaW52ZGlyeiA9IDEgLyBkaXJbMl07XG5cbiAgICAgICAgdmFyIHRtaW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4O1xuICAgICAgICBpZiAoaW52ZGlyeCA+PSAwKSB7XG4gICAgICAgICAgICB0bWluID0gKG1pblswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xuICAgICAgICAgICAgdG1heCA9IChtYXhbMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRtYXggPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XG4gICAgICAgICAgICB0bWluID0gKG1heFswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnZkaXJ5ID49IDApIHtcbiAgICAgICAgICAgIHR5bWluID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xuICAgICAgICAgICAgdHltYXggPSAobWF4WzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0eW1heCA9IChtaW5bMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcbiAgICAgICAgICAgIHR5bWluID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh0bWluID4gdHltYXgpIHx8ICh0eW1pbiA+IHRtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eW1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xuICAgICAgICAgICAgdG1pbiA9IHR5bWluO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eW1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xuICAgICAgICAgICAgdG1heCA9IHR5bWF4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludmRpcnogPj0gMCkge1xuICAgICAgICAgICAgdHptaW4gPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XG4gICAgICAgICAgICB0em1heCA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHR6bWF4ID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xuICAgICAgICAgICAgdHptaW4gPSAobWF4WzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHRtaW4gPiB0em1heCkgfHwgKHR6bWluID4gdG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XG4gICAgICAgICAgICB0bWluID0gdHptaW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XG4gICAgICAgICAgICB0bWF4ID0gdHptYXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRtYXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gdG1pbiA+PSAwID8gdG1pbiA6IHRtYXg7XG5cbiAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NJUMzJUI2bGxlciVFMiU4MCU5M1RydW1ib3JlX2ludGVyc2VjdGlvbl9hbGdvcml0aG1cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCB0aHJlZSB0cmlhbmdsZSB2ZXJ0aWNlc1xuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gY1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgIHNpbmdsZVNpZGVkLCBDVyB0cmlhbmdsZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBbb3V0XVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtiYXJ5Y2VudGVyaWNdIGJhcnljZW50cmljIGNvb3Jkc1xuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGludGVyc2VjdFRyaWFuZ2xlOiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBlQkEgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICB2YXIgZUNBID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgdmFyIEFPID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHZDcm9zcyA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBzaW5nbGVTaWRlZCwgb3V0LCBiYXJ5Y2VudGVyaWMpIHtcbiAgICAgICAgICAgIHZhciBkaXIgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcbiAgICAgICAgICAgIGEgPSBhLmFycmF5O1xuICAgICAgICAgICAgYiA9IGIuYXJyYXk7XG4gICAgICAgICAgICBjID0gYy5hcnJheTtcblxuICAgICAgICAgICAgdmVjMy5zdWIoZUJBLCBiLCBhKTtcbiAgICAgICAgICAgIHZlYzMuc3ViKGVDQSwgYywgYSk7XG5cbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQ0EsIGRpcik7XG5cbiAgICAgICAgICAgIHZhciBkZXQgPSB2ZWMzLmRvdChlQkEsIHZDcm9zcyk7XG5cbiAgICAgICAgICAgIGlmIChzaW5nbGVTaWRlZCkge1xuICAgICAgICAgICAgICAgIGlmIChkZXQgPiAtRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGV0ID4gLUVQU0lMT04gJiYgZGV0IDwgRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlYzMuc3ViKEFPLCBvcmlnaW4sIGEpO1xuICAgICAgICAgICAgdmFyIHUgPSB2ZWMzLmRvdCh2Q3Jvc3MsIEFPKSAvIGRldDtcbiAgICAgICAgICAgIGlmICh1IDwgMCB8fCB1ID4gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUJBLCBBTyk7XG4gICAgICAgICAgICB2YXIgdiA9IHZlYzMuZG90KGRpciwgdkNyb3NzKSAvIGRldDtcblxuICAgICAgICAgICAgaWYgKHYgPCAwIHx8IHYgPiAxIHx8ICh1ICsgdiA+IDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIGVDQSk7XG4gICAgICAgICAgICB2YXIgdCA9IC12ZWMzLmRvdChBTywgdkNyb3NzKSAvIGRldDtcblxuICAgICAgICAgICAgaWYgKHQgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYXJ5Y2VudGVyaWMpIHtcbiAgICAgICAgICAgICAgICBWZWN0b3IzLnNldChiYXJ5Y2VudGVyaWMsICgxIC0gdSAtIHYpLCB1LCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IGFuIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRvIHRoZSByYXlcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH0gbWF0cml4XG4gICAgICovXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcbiAgICAgICAgVmVjdG9yMy5hZGQodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLm9yaWdpbiwgdGhpcy5vcmlnaW4sIG1hdHJpeCk7XG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIG1hdHJpeCk7XG5cbiAgICAgICAgVmVjdG9yMy5zdWIodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XG4gICAgICAgIFZlY3RvcjMubm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciByYXlcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5SYXl9IHJheVxuICAgICAqL1xuICAgIGNvcHk6IGZ1bmN0aW9uIChyYXkpIHtcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMub3JpZ2luLCByYXkub3JpZ2luKTtcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMuZGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgcmF5XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlJheX1cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xuICAgICAgICByYXkuY29weSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJheTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSYXk7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi9tYXRoL0ZydXN0dW0nO1xuaW1wb3J0IFJheSBmcm9tICcuL21hdGgvUmF5JztcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciB2ZWM0ID0gZ2xNYXRyaXgudmVjNDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5DYW1lcmFcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxuICovXG52YXIgQ2FtZXJhID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuQ2FtZXJhIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAgICAgKi9cbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW52ZXJzZSBvZiBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAgICAgKi9cbiAgICAgICAgaW52UHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVmlldyBtYXRyaXgsIGVxdWFsIHRvIGludmVyc2Ugb2YgY2FtZXJhJ3Mgd29ybGQgbWF0cml4XG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgICAgICovXG4gICAgICAgIHZpZXdNYXRyaXg6IG5ldyBNYXRyaXg0KCksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBmcnVzdHVtIGluIHZpZXcgc3BhY2VcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5GcnVzdHVtfVxuICAgICAgICAgKi9cbiAgICAgICAgZnJ1c3R1bTogbmV3IEZydXN0dW0oKVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy51cGRhdGUodHJ1ZSk7XG59LFxuLyoqIEBsZW5kcyBjbGF5LkNhbWVyYS5wcm90b3R5cGUgKi9cbntcblxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlKSB7XG4gICAgICAgIE5vZGUucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMsIGZvcmNlKTtcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy52aWV3TWF0cml4LCB0aGlzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LCB0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICAgIHRoaXMuZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbih0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgY2FtZXJhIHZpZXcgbWF0cml4XG4gICAgICovXG4gICAgc2V0Vmlld01hdHJpeDogZnVuY3Rpb24gKHZpZXdNYXRyaXgpIHtcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMudmlld01hdHJpeCwgdmlld01hdHJpeCk7XG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMud29ybGRUcmFuc2Zvcm0sIHZpZXdNYXRyaXgpO1xuICAgICAgICB0aGlzLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERlY29tcG9zZSBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKi9cbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7fSxcblxuICAgIC8qKlxuICAgICAqIFNldCBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5NYXRyaXg0fSBwcm9qZWN0aW9uTWF0cml4XG4gICAgICovXG4gICAgc2V0UHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKHByb2plY3Rpb25NYXRyaXgpIHtcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIHRoaXMuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHByb2plY3Rpb24gbWF0cml4LCBjYWxsZWQgYWZ0ZXIgdXBkYXRlXG4gICAgICovXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXG5cbiAgICAvKipcbiAgICAgKiBDYXN0IGEgcGlja2luZyByYXkgZnJvbSBjYW1lcmEgbmVhciBwbGFuZSB0byBmYXIgcGxhbmVcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IyfSBuZGNcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5SYXl9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlJheX1cbiAgICAgKi9cbiAgICBjYXN0UmF5OiAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdjQgPSB2ZWM0LmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5kYywgb3V0KSB7XG4gICAgICAgICAgICB2YXIgcmF5ID0gb3V0ICE9PSB1bmRlZmluZWQgPyBvdXQgOiBuZXcgUmF5KCk7XG4gICAgICAgICAgICB2YXIgeCA9IG5kYy5hcnJheVswXTtcbiAgICAgICAgICAgIHZhciB5ID0gbmRjLmFycmF5WzFdO1xuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIC0xLCAxKTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocmF5Lm9yaWdpbi5hcnJheSwgdjQsIDEgLyB2NFszXSk7XG5cbiAgICAgICAgICAgIHZlYzQuc2V0KHY0LCB4LCB5LCAxLCAxKTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgIHZlYzMuc2NhbGUodjQsIHY0LCAxIC8gdjRbM10pO1xuICAgICAgICAgICAgdmVjMy5zdWIocmF5LmRpcmVjdGlvbi5hcnJheSwgdjQsIHJheS5vcmlnaW4uYXJyYXkpO1xuXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShyYXkuZGlyZWN0aW9uLmFycmF5LCByYXkuZGlyZWN0aW9uLmFycmF5KTtcbiAgICAgICAgICAgIHJheS5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJheS5vcmlnaW4uX2RpcnR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHJheTtcbiAgICAgICAgfTtcbiAgICB9KSgpXG5cbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEByZXR1cm4ge2NsYXkuQ2FtZXJhfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkNhbWVyYS5wcm90b3R5cGVcbiAgICAgKi9cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW1lcmE7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuaW1wb3J0IExpZ2h0IGZyb20gJy4vTGlnaHQnO1xuaW1wb3J0IENhbWVyYSBmcm9tICcuL0NhbWVyYSc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcblxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xuXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KGxpZ2h0TnVtYmVycykge1xuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcbiAgICB2YXIgbGlnaHRUeXBlcyA9IE9iamVjdC5rZXlzKGxpZ2h0TnVtYmVycyk7XG4gICAgbGlnaHRUeXBlcy5zb3J0KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsaWdodFR5cGUgPSBsaWdodE51bWJlcnNbaV07XG4gICAgICAgIGRlZmluZVN0ci5wdXNoKGxpZ2h0VHlwZSArICcgJyArIGxpZ2h0TnVtYmVyc1tsaWdodFR5cGVdKTtcbiAgICB9XG4gICAgdmFyIGtleSA9IGRlZmluZVN0ci5qb2luKCdcXG4nKTtcblxuICAgIGlmIChwcm9ncmFtS2V5Q2FjaGVba2V5XSkge1xuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XG4gICAgfVxuXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XG4gICAgcHJvZ3JhbUtleUNhY2hlW2tleV0gPSBpZDtcbiAgICByZXR1cm4gaWQ7XG59XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2NlbmVcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxuICovXG52YXIgU2NlbmUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TY2VuZSMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2xvYmFsIG1hdGVyaWFsIG9mIHNjZW5lXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxuICAgICAgICAgKi9cbiAgICAgICAgbWF0ZXJpYWw6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0b1VwZGF0ZTogdHJ1ZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogT3BhcXVlIHJlbmRlcmFibGUgbGlzdCwgaXQgd2lsbCBiZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyYWJsZVtdfVxuICAgICAgICAgKiBAcmVhZG9ubHlcbiAgICAgICAgICovXG4gICAgICAgIG9wYXF1ZUxpc3Q6IFtdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcGFxdWUgcmVuZGVyYWJsZSBsaXN0LCBpdCB3aWxsIGJlIHVwZGF0ZWQgYXV0b21hdGljYWxseVxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJhYmxlW119XG4gICAgICAgICAqIEByZWFkb25seVxuICAgICAgICAgKi9cbiAgICAgICAgdHJhbnNwYXJlbnRMaXN0OiBbXSxcblxuICAgICAgICBsaWdodHM6IFtdLFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNjZW5lIGJvdW5kaW5nIGJveCBpbiB2aWV3IHNwYWNlLlxuICAgICAgICAgKiBVc2VkIHdoZW4gY2FtZXJhIG5lZWRzIHRvIGFkdWpzdCB0aGUgbmVhciBhbmQgZmFyIHBsYW5lIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICogc28gdGhhdCB0aGUgdmlldyBmcnVzdHVtIGNvbnRhaW5zIHRoZSB2aXNpYmxlIG9iamVjdHMgYXMgdGlnaHRseSBhcyBwb3NzaWJsZS5cbiAgICAgICAgICogTm90aWNlOlxuICAgICAgICAgKiAgSXQgaXMgdXBkYXRlZCBhZnRlciByZW5kZXJpbmcgKGluIHRoZSBzdGVwIG9mIGZydXN0dW0gY3VsbGluZyBwYXNzaW5nbHkpLiBTbyBtYXkgYmUgbm90IHNvIGFjY3VyYXRlLCBidXQgc2F2ZXMgYSBsb3Qgb2YgY2FsY3VsYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgICAgICovXG4gICAgICAgIHZpZXdCb3VuZGluZ0JveExhc3RGcmFtZTogbmV3IEJvdW5kaW5nQm94KCksXG5cbiAgICAgICAgLy8gVW5pZm9ybXMgZm9yIHNoYWRvdyBtYXAuXG4gICAgICAgIHNoYWRvd1VuaWZvcm1zOiB7fSxcblxuICAgICAgICBfY2FtZXJhTGlzdDogW10sXG5cbiAgICAgICAgLy8gUHJvcGVydGllcyB0byBzYXZlIHRoZSBsaWdodCBpbmZvcm1hdGlvbiBpbiB0aGUgc2NlbmVcbiAgICAgICAgLy8gV2lsbCBiZSBzZXQgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgICAgICBfbGlnaHRVbmlmb3Jtczoge30sXG5cbiAgICAgICAgX3ByZXZpb3VzTGlnaHROdW1iZXI6IHt9LFxuXG4gICAgICAgIF9saWdodE51bWJlcjoge1xuICAgICAgICAgICAgLy8gZ3JvdXBJZDoge1xuICAgICAgICAgICAgICAgIC8vIFBPSU5UX0xJR0hUOiAwLFxuICAgICAgICAgICAgICAgIC8vIERJUkVDVElPTkFMX0xJR0hUOiAwLFxuICAgICAgICAgICAgICAgIC8vIFNQT1RfTElHSFQ6IDAsXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9MSUdIVDogMCxcbiAgICAgICAgICAgICAgICAvLyBBTUJJRU5UX1NIX0xJR0hUOiAwXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2xpZ2h0UHJvZ3JhbUtleXM6IHt9LFxuXG4gICAgICAgIF9vcGFxdWVPYmplY3RDb3VudDogMCxcbiAgICAgICAgX3RyYW5zcGFyZW50T2JqZWN0Q291bnQ6IDAsXG5cbiAgICAgICAgX25vZGVSZXBvc2l0b3J5OiB7fSxcblxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc2NlbmUgPSB0aGlzO1xufSxcbi8qKiBAbGVuZHMgY2xheS5TY2VuZS5wcm90b3R5cGUuICovXG57XG5cbiAgICAvLyBBZGQgbm9kZSB0byBzY2VuZVxuICAgIGFkZFRvU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FtZXJhTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGb3VuZCBtdWx0aXBsZSBjYW1lcmEgaW4gb25lIHNjZW5lLiBVc2UgdGhlIGZpc3Qgb25lLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX25vZGVSZXBvc2l0b3J5W25vZGUubmFtZV0gPSBub2RlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBub2RlIGZyb20gc2NlbmVcbiAgICByZW1vdmVGcm9tU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2FtZXJhTGlzdC5pbmRleE9mKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbm9kZVJlcG9zaXRvcnlbbm9kZS5uYW1lXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgbm9kZSBieSBuYW1lXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7Tm9kZX1cbiAgICAgKiBAREVQUkVDQVRFRFxuICAgICAqL1xuICAgIGdldE5vZGU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlUmVwb3NpdG9yeVtuYW1lXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgc2NlbmUgbm9kZSByZWN1cnNpdmVseSwgaW5jbHVkaW5nIG1hdGVyaWFsLCBza2VsZXRvbi5cbiAgICAgKiBTaGFkZXIgYW5kIGdlb21ldHJ5IGluc3RhbmNlcyB3aWxsIG5vdCBiZWVuIGNsb25lZFxuICAgICAqIEBwYXJhbSAge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cbiAgICAgKi9cbiAgICBjbG9uZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBuZXdOb2RlID0gbm9kZS5jbG9uZSgpO1xuICAgICAgICB2YXIgbWF0ZXJpYWxzTWFwID0ge307XG5cbiAgICAgICAgdmFyIGNsb25lU2tlbGV0b24gPSBmdW5jdGlvbiAoY3VycmVudCwgY3VycmVudE5ldykge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuc2tlbGV0b24pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50TmV3LnNrZWxldG9uID0gY3VycmVudC5za2VsZXRvbi5jbG9uZShub2RlLCBuZXdOb2RlKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50TmV3LmpvaW50cyA9IGN1cnJlbnQuam9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VycmVudC5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsc01hcFtjdXJyZW50Lm1hdGVyaWFsLl9fdWlkX19dID0ge1xuICAgICAgICAgICAgICAgICAgICBvbGRNYXQ6IGN1cnJlbnQubWF0ZXJpYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50Ll9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lU2tlbGV0b24oY3VycmVudC5fY2hpbGRyZW5baV0sIGN1cnJlbnROZXcuX2NoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjbG9uZVNrZWxldG9uKG5vZGUsIG5ld05vZGUpO1xuXG4gICAgICAgIGZvciAodmFyIGd1aWQgaW4gbWF0ZXJpYWxzTWFwKSB7XG4gICAgICAgICAgICBtYXRlcmlhbHNNYXBbZ3VpZF0ubmV3TWF0ID0gbWF0ZXJpYWxzTWFwW2d1aWRdLm9sZE1hdC5jbG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVwbGFjZSBtYXRlcmlhbFxuICAgICAgICBuZXdOb2RlLnRyYXZlcnNlKGZ1bmN0aW9uIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQubWF0ZXJpYWwgPSBtYXRlcmlhbHNNYXBbY3VycmVudC5tYXRlcmlhbC5fX3VpZF9fXS5uZXdNYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFNjZW5lIHVwZGF0ZVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGZvcmNlXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gbm90VXBkYXRlTGlnaHRzXG4gICAgICogICAgICAgICBVc2VmdWwgaW4gZGVmZXJyZWQgcGlwZWxpbmVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChmb3JjZSwgbm90VXBkYXRlTGlnaHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMuYXV0b1VwZGF0ZSB8fCBmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBOb2RlLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCBmb3JjZSk7XG5cbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50ID0gdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50O1xuXG4gICAgICAgIHRoaXMuX29wYXF1ZU9iamVjdENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRPYmplY3RDb3VudCA9IDA7XG5cbiAgICAgICAgbGlnaHRzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlUmVuZGVyTGlzdCh0aGlzLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpO1xuXG4gICAgICAgIHRoaXMub3BhcXVlTGlzdC5sZW5ndGggPSB0aGlzLl9vcGFxdWVPYmplY3RDb3VudDtcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudExpc3QubGVuZ3RoID0gdGhpcy5fdHJhbnNwYXJlbnRPYmplY3RDb3VudDtcblxuICAgICAgICAvLyByZXNldFxuICAgICAgICBpZiAoIW5vdFVwZGF0ZUxpZ2h0cykge1xuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xuXG4gICAgICAgICAgICB2YXIgbGlnaHROdW1iZXIgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xuICAgICAgICAgICAgICAgIGlmICghbGlnaHROdW1iZXJbZ3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVc2VyIGNhbiB1c2UgYW55IHR5cGUgb2YgbGlnaHRcbiAgICAgICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gPSBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gfHwgMDtcbiAgICAgICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0gbGlnaHROdW1iZXI7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbGlnaHROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodFByb2dyYW1LZXlzW2dyb3VwSWRdID0gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcltncm91cElkXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxpZ2h0VW5pZm9ybXMoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW1lcmFMaXN0WzBdO1xuICAgIH0sXG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgc2NlbmUgYW5kIGFkZCB0aGUgcmVuZGVyYWJsZVxuICAgIC8vIG9iamVjdCB0byB0aGUgcmVuZGVyIGxpc3RcbiAgICBfdXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKHBhcmVudCwgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQuaW52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHBhcmVudC5fY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIExpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saWdodHMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGlsZC5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVudExpc3RbdGhpcy5fdHJhbnNwYXJlbnRPYmplY3RDb3VudCsrXSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGFxdWVMaXN0W3RoaXMuX29wYXF1ZU9iamVjdENvdW50KytdID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlUmVuZGVyTGlzdChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3VwZGF0ZUxpZ2h0VW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xuICAgICAgICAvLyBQdXQgdGhlIGxpZ2h0IGNhc3Qgc2hhZG93IGJlZm9yZSB0aGUgbGlnaHQgbm90IGNhc3Qgc2hhZG93XG4gICAgICAgIGxpZ2h0cy5zb3J0KGxpZ2h0U29ydEZ1bmMpO1xuXG4gICAgICAgIHZhciBsaWdodFVuaWZvcm1zID0gdGhpcy5fbGlnaHRVbmlmb3JtcztcbiAgICAgICAgZm9yICh2YXIgZ3JvdXAgaW4gbGlnaHRVbmlmb3Jtcykge1xuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXS52YWx1ZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIHZhciBsaWdodCA9IGxpZ2h0c1tpXTtcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHQudW5pZm9ybVRlbXBsYXRlcykge1xuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlc1tzeW1ib2xdO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHVuaWZvcm1UcGwudmFsdWUobGlnaHQpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXSkge1xuICAgICAgICAgICAgICAgICAgICBsaWdodFVuaWZvcm1zW2dyb3VwXVtzeW1ib2xdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXTtcbiAgICAgICAgICAgICAgICBsdS50eXBlID0gdW5pZm9ybVRwbC50eXBlICsgJ3YnO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodW5pZm9ybVRwbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMWYnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzJmJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnM2YnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHUudmFsdWUucHVzaCh2YWx1ZVtqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vua293biBsaWdodCB1bmlmb3JtIHR5cGUgJyArIHVuaWZvcm1UcGwudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICBsaWdodEdyb3Vwcy5wdXNoKGdyb3VwSWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaWdodEdyb3VwcztcbiAgICB9LFxuXG4gICAgZ2V0TnVtYmVyQ2hhbmdlZExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpZ2h0TnVtYmVyQ2hhbmdlZChncm91cElkKSkge1xuICAgICAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpZ2h0R3JvdXBzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgbGlnaHQgZ3JvdXAgaXMgZGlmZmVyZW50IHdpdGggc2luY2UgbGFzdCBmcmFtZVxuICAgICAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXBkYXRlIHNoYWRlciBhbmQgc2NlbmUncyB1bmlmb3JtcyBpbiBSZW5kZXJlci5yZW5kZXJcbiAgICAgKiBAcGFyYW0ge1NoYWRlcn0gc2hhZGVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgaXNMaWdodE51bWJlckNoYW5nZWQ6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XG4gICAgICAgIHZhciBwcmV2TGlnaHROdW1iZXIgPSB0aGlzLl9wcmV2aW91c0xpZ2h0TnVtYmVyO1xuICAgICAgICB2YXIgY3VycmVudExpZ2h0TnVtYmVyID0gdGhpcy5fbGlnaHROdW1iZXI7XG4gICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcbiAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBjdXJyZW50TGlnaHROdW1iZXJbbGlnaHRHcm91cF0pIHtcbiAgICAgICAgICAgIGlmICghcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50TGlnaHROdW1iZXJbbGlnaHRHcm91cF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0gIT09IHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHNoYWRlcidzIGxpZ2h0IGdyb3VwIHdpdGggc2NlbmUnc1xuICAgICAqIEBwYXJhbSB7U2hhZGVyfSBzaGFkZXJcbiAgICAgKi9cbiAgICBnZXRMaWdodHNOdW1iZXJzOiBmdW5jdGlvbiAobGlnaHRHcm91cCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHROdW1iZXJbbGlnaHRHcm91cF07XG4gICAgfSxcblxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodFByb2dyYW1LZXlzW2xpZ2h0R3JvdXBdO1xuICAgIH0sXG5cbiAgICBzZXRMaWdodFVuaWZvcm1zOiAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBzZXRVbmlmb3Jtcyh1bmlmb3JtcywgcHJvZ3JhbSwgcmVuZGVyZXIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB1bmlmb3Jtcykge1xuICAgICAgICAgICAgICAgIHZhciBsdSA9IHVuaWZvcm1zW3N5bWJvbF07XG4gICAgICAgICAgICAgICAgaWYgKGx1LnR5cGUgPT09ICd0dicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmhhc1VuaWZvcm0oc3ltYm9sKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleFNsb3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbHUudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbHUudmFsdWVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhTbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgJzFpdicsIHN5bWJvbCwgdGV4U2xvdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKHJlbmRlcmVyLmdsLCBsdS50eXBlLCBzeW1ib2wsIGx1LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHByb2dyYW0sIGxpZ2h0R3JvdXAsIHJlbmRlcmVyKSB7XG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLl9saWdodFVuaWZvcm1zW2xpZ2h0R3JvdXBdLCBwcm9ncmFtLCByZW5kZXJlcik7XG4gICAgICAgICAgICAvLyBTZXQgc2hhZG93c1xuICAgICAgICAgICAgc2V0VW5pZm9ybXModGhpcy5zaGFkb3dVbmlmb3JtcywgcHJvZ3JhbSwgcmVuZGVyZXIpO1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlIHNlbGYsIGNsZWFyIGFsbCB0aGUgc2NlbmUgb2JqZWN0c1xuICAgICAqIEJ1dCByZXNvdXJjZXMgb2YgZ2wgbGlrZSB0ZXh1dHVyZSwgc2hhZGVyIHdpbGwgbm90IGJlIGRpc3Bvc2VkLlxuICAgICAqIE1vc3RseSB5b3Ugc2hvdWxkIHVzZSBkaXNwb3NlU2NlbmUgbWV0aG9kIGluIFJlbmRlcmVyIHRvIGRvIGRpc3Bvc2UuXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1hdGVyaWFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGFxdWVMaXN0ID0gW107XG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRMaXN0ID0gW107XG5cbiAgICAgICAgdGhpcy5saWdodHMgPSBbXTtcblxuICAgICAgICB0aGlzLl9saWdodFVuaWZvcm1zID0ge307XG5cbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSB7fTtcbiAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnkgPSB7fTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gbGlnaHRTb3J0RnVuYyhhLCBiKSB7XG4gICAgaWYgKGIuY2FzdFNoYWRvdyAmJiAhYS5jYXN0U2hhZG93KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2NlbmU7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xuXG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG5cbnZhciB2ZWMzQ3JlYXRlID0gdmVjMy5jcmVhdGU7XG52YXIgdmVjM0FkZCA9IHZlYzMuYWRkO1xudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcblxuZnVuY3Rpb24gZ2V0QXJyYXlDdG9yQnlUeXBlICh0eXBlKSB7XG4gICAgcmV0dXJuICh7XG4gICAgICAgICdieXRlJzogdmVuZG9yLkludDhBcnJheSxcbiAgICAgICAgJ3VieXRlJzogdmVuZG9yLlVpbnQ4QXJyYXksXG4gICAgICAgICdzaG9ydCc6IHZlbmRvci5JbnQxNkFycmF5LFxuICAgICAgICAndXNob3J0JzogdmVuZG9yLlVpbnQxNkFycmF5XG4gICAgfSlbdHlwZV0gfHwgdmVuZG9yLkZsb2F0MzJBcnJheTtcbn1cblxuZnVuY3Rpb24gbWFrZUF0dHJLZXkoYXR0ck5hbWUpIHtcbiAgICByZXR1cm4gJ2F0dHJfJyArIGF0dHJOYW1lO1xufVxuLyoqXG4gKiBHZW9tZXRyeSBhdHRyaWJ1dGVcbiAqIEBhbGlhcyBjbGF5Lkdlb21ldHJ5LkF0dHJpYnV0ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEF0dHJpYnV0ZShuYW1lLCB0eXBlLCBzaXplLCBzZW1hbnRpYykge1xuICAgIC8qKlxuICAgICAqIEF0dHJpYnV0ZSBuYW1lXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIC8qKlxuICAgICAqIEF0dHJpYnV0ZSB0eXBlXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIGAnYnl0ZSdgXG4gICAgICogICsgYCd1Ynl0ZSdgXG4gICAgICogICsgYCdzaG9ydCdgXG4gICAgICogICsgYCd1c2hvcnQnYFxuICAgICAqICArIGAnZmxvYXQnYCBNb3N0IGNvbW1vbmx5IHVzZWQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYXR0cmlidXRlIGNvbXBvbmVudC4gMSAtIDQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIC8qKlxuICAgICAqIFNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlLlxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyBgJ1BPU0lUSU9OJ2BcbiAgICAgKiAgKyBgJ05PUk1BTCdgXG4gICAgICogICsgYCdCSU5PUk1BTCdgXG4gICAgICogICsgYCdUQU5HRU5UJ2BcbiAgICAgKiAgKyBgJ1RFWENPT1JEJ2BcbiAgICAgKiAgKyBgJ1RFWENPT1JEXzAnYFxuICAgICAqICArIGAnVEVYQ09PUkRfMSdgXG4gICAgICogICsgYCdDT0xPUidgXG4gICAgICogICsgYCdKT0lOVCdgXG4gICAgICogICsgYCdXRUlHSFQnYFxuICAgICAqXG4gICAgICogSW4gc2hhZGVyLCBhdHRyaWJ1dGUgd2l0aCBzYW1lIHNlbWFudGljIHdpbGwgYmUgYXV0b21hdGljYWxseSBtYXBwZWQuIEZvciBleGFtcGxlOlxuICAgICAqIGBgYGdsc2xcbiAgICAgKiBhdHRyaWJ1dGUgdmVjMyBwb3M6IFBPU0lUSU9OXG4gICAgICogYGBgXG4gICAgICogd2lsbCB1c2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHNlbWFudGljIFBPU0lUSU9OIGluIGdlb21ldHJ5LCBubyBtYXR0ZXIgd2hhdCBuYW1lIGl0IHVzZWQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWMgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqIEB0eXBlIHtUeXBlZEFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXG4gICAgLy8gSW5pdCBnZXR0ZXIgc2V0dGVyXG4gICAgc3dpdGNoIChzaXplKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlW2lkeF07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIENvcHkgZnJvbSBzb3VyY2UgdG8gdGFyZ2V0XG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3RhcmdldF0gPSB0aGlzLnZhbHVlW3RhcmdldF07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeCAqIDJdO1xuICAgICAgICAgICAgICAgIG91dFsxXSA9IGFycltpZHggKiAyICsgMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICAgIGFycltpZHggKiAyXSA9IHZhbFswXTtcbiAgICAgICAgICAgICAgICBhcnJbaWR4ICogMiArIDFdID0gdmFsWzFdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICAgIHNvdXJjZSAqPSAyO1xuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAyO1xuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDFdID0gYXJyW3NvdXJjZSArIDFdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xuICAgICAgICAgICAgICAgIHZhciBpZHgzID0gaWR4ICogMztcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4M107XG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeDMgKyAxXTtcbiAgICAgICAgICAgICAgICBvdXRbMl0gPSBhcnJbaWR4MyArIDJdO1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgYXJyW2lkeDNdID0gdmFsWzBdO1xuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMV0gPSB2YWxbMV07XG4gICAgICAgICAgICAgICAgYXJyW2lkeDMgKyAyXSA9IHZhbFsyXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMztcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gMztcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0XSA9IGFycltzb3VyY2VdO1xuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xuICAgICAgICAgICAgICAgIG91dFswXSA9IGFycltpZHg0XTtcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4NCArIDFdO1xuICAgICAgICAgICAgICAgIG91dFsyXSA9IGFycltpZHg0ICsgMl07XG4gICAgICAgICAgICAgICAgb3V0WzNdID0gYXJyW2lkeDQgKyAzXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xuICAgICAgICAgICAgICAgIGFycltpZHg0XSA9IHZhbFswXTtcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDFdID0gdmFsWzFdO1xuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgMl0gPSB2YWxbMl07XG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAzXSA9IHZhbFszXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gNDtcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gNDtcbiAgICAgICAgICAgICAgICAvLyBjb3B5V2l0aGluIGlzIGV4dHJlbWVseSBzbG93XG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDJdID0gYXJyW3NvdXJjZSArIDJdO1xuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAzXSA9IGFycltzb3VyY2UgKyAzXTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuXG4vKipcbiAqIFNldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgdmFsIGlzIG51bWJlciBpZiBzaXplIGlzIDFcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgY2xheS5HZW9tZXRyeS5BdHRyaWJ1dGUjc2V0XG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XG4gKiBAcGFyYW0ge251bWJlcltdfG51bWJlcn0gdmFsXG4gKiBAZXhhbXBsZVxuICogZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLnNldCgwLCBbMSwgMSwgMV0pO1xuICovXG5cbi8qKlxuICogR2V0IGl0ZW0gdmFsdWUgYXQgZ2l2ZSBpbmRleC4gU2Vjb25kIHBhcmFtZXRlciBvdXQgaXMgbm8gbmVlZCBpZiBzaXplIGlzIDFcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgY2xheS5HZW9tZXRyeS5BdHRyaWJ1dGUjc2V0XG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XG4gKiBAcGFyYW0ge251bWJlcltdfSBbb3V0XVxuICogQGV4YW1wbGVcbiAqIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5nZXQoMCwgb3V0KTtcbiAqL1xuXG4vKipcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gdmVydGV4IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gblZlcnRleFxuICovXG5BdHRyaWJ1dGUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoblZlcnRleCkge1xuICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCAhPSBuVmVydGV4ICogdGhpcy5zaXplKSB7XG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gZ2V0QXJyYXlDdG9yQnlUeXBlKHRoaXMudHlwZSk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihuVmVydGV4ICogdGhpcy5zaXplKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gYXJyYXkuIFdoaWNoIGNhbiBiZSAxIGRpbWVuc2lvbmFsIG9yIDIgZGltZW5zaW9uYWxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAZXhhbXBsZVxuICogIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5mcm9tQXJyYXkoXG4gKiAgICAgIFstMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMF1cbiAqICApO1xuICogIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5mcm9tQXJyYXkoXG4gKiAgICAgIFsgWy0xLCAwLCAwXSwgWzEsIDAsIDBdLCBbMCwgMSwgMF0gXVxuICogICk7XG4gKi9cbkF0dHJpYnV0ZS5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQ29udmVydCAyZCBhcnJheSB0byBmbGF0XG4gICAgaWYgKGFycmF5WzBdICYmIChhcnJheVswXS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xufTtcblxuQXR0cmlidXRlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKGNvcHlWYWx1ZSkge1xuICAgIHZhciByZXQgPSBuZXcgQXR0cmlidXRlKHRoaXMubmFtZSwgdGhpcy50eXBlLCB0aGlzLnNpemUsIHRoaXMuc2VtYW50aWMpO1xuICAgIC8vIEZJWE1FXG4gICAgaWYgKGNvcHlWYWx1ZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ3RvZG8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIEF0dHJpYnV0ZUJ1ZmZlcihuYW1lLCB0eXBlLCBidWZmZXIsIHNpemUsIHNlbWFudGljKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljO1xuXG4gICAgLy8gVG8gYmUgc2V0IGluIG1lc2hcbiAgICAvLyBzeW1ib2wgaW4gdGhlIHNoYWRlclxuICAgIHRoaXMuc3ltYm9sID0gJyc7XG5cbiAgICAvLyBOZWVkcyByZW1vdmUgZmxhZ1xuICAgIHRoaXMubmVlZHNSZW1vdmUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gSW5kaWNlc0J1ZmZlcihidWZmZXIpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICB0aGlzLmNvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5HZW9tZXRyeVxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEdlb21ldHJ5ID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEF0dHJpYnV0ZXMgb2YgZ2VvbWV0cnkuIEluY2x1ZGluZzpcbiAgICAgICAgICogICsgYHBvc2l0aW9uYFxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQwYFxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQxYFxuICAgICAgICAgKiAgKyBgbm9ybWFsYFxuICAgICAgICAgKiAgKyBgdGFuZ2VudGBcbiAgICAgICAgICogICsgYGNvbG9yYFxuICAgICAgICAgKiAgKyBgd2VpZ2h0YFxuICAgICAgICAgKiAgKyBgam9pbnRgXG4gICAgICAgICAqICArIGBiYXJ5Y2VudHJpY2BcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQXR0cmlidXRlKCdwb3NpdGlvbicsICdmbG9hdCcsIDMsICdQT1NJVElPTicpLFxuICAgICAgICAgICAgdGV4Y29vcmQwOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDAnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMCcpLFxuICAgICAgICAgICAgdGV4Y29vcmQxOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDEnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMScpLFxuICAgICAgICAgICAgbm9ybWFsOiBuZXcgQXR0cmlidXRlKCdub3JtYWwnLCAnZmxvYXQnLCAzLCAnTk9STUFMJyksXG4gICAgICAgICAgICB0YW5nZW50OiBuZXcgQXR0cmlidXRlKCd0YW5nZW50JywgJ2Zsb2F0JywgNCwgJ1RBTkdFTlQnKSxcbiAgICAgICAgICAgIGNvbG9yOiBuZXcgQXR0cmlidXRlKCdjb2xvcicsICdmbG9hdCcsIDQsICdDT0xPUicpLFxuICAgICAgICAgICAgLy8gU2tpbm5pbmcgYXR0cmlidXRlc1xuICAgICAgICAgICAgLy8gRWFjaCB2ZXJ0ZXggY2FuIGJlIGJpbmQgdG8gNCBib25lcywgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgIC8vIHN1bSBvZiB3ZWlnaHRzIGlzIDEsIHNvIHRoZSB3ZWlnaHRzIGlzIHN0b3JlZCBpbiB2ZWMzIGFuZCB0aGUgbGFzdFxuICAgICAgICAgICAgLy8gY2FuIGJlIGNhbGN1bGF0ZWQgYnkgMS13Lngtdy55LXcuelxuICAgICAgICAgICAgd2VpZ2h0OiBuZXcgQXR0cmlidXRlKCd3ZWlnaHQnLCAnZmxvYXQnLCAzLCAnV0VJR0hUJyksXG4gICAgICAgICAgICBqb2ludDogbmV3IEF0dHJpYnV0ZSgnam9pbnQnLCAnZmxvYXQnLCA0LCAnSk9JTlQnKSxcbiAgICAgICAgICAgIC8vIEZvciB3aXJlZnJhbWUgZGlzcGxheVxuICAgICAgICAgICAgLy8gaHR0cDovL2NvZGVmbG93Lm9yZy9lbnRyaWVzLzIwMTIvYXVnLzAyL2Vhc3ktd2lyZWZyYW1lLWRpc3BsYXktd2l0aC1iYXJ5Y2VudHJpYy1jb29yZGluYXRlcy9cbiAgICAgICAgICAgIGJhcnljZW50cmljOiBuZXcgQXR0cmlidXRlKCdiYXJ5Y2VudHJpYycsICdmbG9hdCcsIDMsIG51bGwpLFxuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsY3VsYXRlZCBib3VuZGluZyBib3ggb2YgZ2VvbWV0cnkuXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9XG4gICAgICAgICAqL1xuICAgICAgICBib3VuZGluZ0JveDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNlcyBvZiBnZW9tZXRyeS5cbiAgICAgICAgICogQHR5cGUge1VpbnQxNkFycmF5fFVpbnQzMkFycmF5fVxuICAgICAgICAgKi9cbiAgICAgICAgaW5kaWNlczogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdmVydGljZXMgZGF0YSBkeW5hbWljYWxseSB1cGRhdGVkLlxuICAgICAgICAgKiBBdHRyaWJ1dGVzIHZhbHVlIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXIgZmlyc3QgcmVuZGVyIGlmIGR5YW5taWMgaXMgZmFsc2UuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZHluYW1pYzogdHJ1ZSxcblxuICAgICAgICBfZW5hYmxlZEF0dHJpYnV0ZXM6IG51bGxcbiAgICB9O1xufSwgZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGNhY2hlXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcblxuICAgIHRoaXMuX2F0dHJpYnV0ZUxpc3QgPSBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBNYWluIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgdG8gY291bnQgdmVydGV4IG51bWJlclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgbWFpbkF0dHJpYnV0ZTogJ3Bvc2l0aW9uJyxcbiAgICAvKipcbiAgICAgKiBVc2VyIGRlZmluZWQgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxuICAgICAqIHgsIHkgYXJlIE5EQy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogKHgsIHksIHJlbmRlcmVyLCBjYW1lcmEsIHJlbmRlcmFibGUsIG91dCkgPT4gYm9vbGVhblxuICAgICAqIGBgYFxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XG4gICAgICovXG4gICAgcGljazogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAocmF5OiBjbGF5Lm1hdGguUmF5LCByZW5kZXJhYmxlOiBjbGF5LlJlbmRlcmFibGUsIG91dDogQXJyYXkpID0+IGJvb2xlYW5cbiAgICAgKiBgYGBcbiAgICAgKiBAdHlwZSB7P0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHBpY2tCeVJheTogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBib3VuZGluZ0JveCBvZiBHZW9tZXRyeVxuICAgICAqL1xuICAgIHVwZGF0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBiYm94ID0gdGhpcy5ib3VuZGluZ0JveDtcbiAgICAgICAgaWYgKCFiYm94KSB7XG4gICAgICAgICAgICBiYm94ID0gdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwb3NBcnIgPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XG4gICAgICAgIGlmIChwb3NBcnIgJiYgcG9zQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xuICAgICAgICAgICAgdmFyIG1heCA9IGJib3gubWF4O1xuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XG4gICAgICAgICAgICB2ZWMzLnNldChtaW5BcnIsIHBvc0FyclswXSwgcG9zQXJyWzFdLCBwb3NBcnJbMl0pO1xuICAgICAgICAgICAgdmVjMy5zZXQobWF4QXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgcG9zQXJyLmxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICB2YXIgeCA9IHBvc0FycltpKytdO1xuICAgICAgICAgICAgICAgIHZhciB5ID0gcG9zQXJyW2krK107XG4gICAgICAgICAgICAgICAgdmFyIHogPSBwb3NBcnJbaSsrXTtcbiAgICAgICAgICAgICAgICBpZiAoeCA8IG1pbkFyclswXSkgeyBtaW5BcnJbMF0gPSB4OyB9XG4gICAgICAgICAgICAgICAgaWYgKHkgPCBtaW5BcnJbMV0pIHsgbWluQXJyWzFdID0geTsgfVxuICAgICAgICAgICAgICAgIGlmICh6IDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHo7IH1cblxuICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHg7IH1cbiAgICAgICAgICAgICAgICBpZiAoeSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB5OyB9XG4gICAgICAgICAgICAgICAgaWYgKHogPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gejsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogTWFyayBhdHRyaWJ1dGVzIGFuZCBpbmRpY2VzIGluIGdlb21ldHJ5IG5lZWRzIHRvIHVwZGF0ZS5cbiAgICAgKi9cbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGlydHlBdHRyaWJ1dGUoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlydHlJbmRpY2VzKCk7XG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eSgnYW55Jyk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBNYXJrIHRoZSBpbmRpY2VzIG5lZWRzIHRvIHVwZGF0ZS5cbiAgICAgKi9cbiAgICBkaXJ0eUluZGljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2luZGljZXMnKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhlIGF0dHJpYnV0ZXMgbmVlZHMgdG8gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0ck5hbWVdXG4gICAgICovXG4gICAgZGlydHlBdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyTmFtZSkge1xuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbChtYWtlQXR0cktleShhdHRyTmFtZSkpO1xuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbCgnYXR0cmlidXRlcycpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG91dFxuICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxuICAgICAqL1xuICAgIGdldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgb3V0KSB7XG4gICAgICAgIGlmIChpZHggPCB0aGlzLnRyaWFuZ2xlQ291bnQgJiYgaWR4ID49IDApIHtcbiAgICAgICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICAgICAgb3V0ID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgICAgICBvdXRbMF0gPSBpbmRpY2VzW2lkeCAqIDNdO1xuICAgICAgICAgICAgb3V0WzFdID0gaW5kaWNlc1tpZHggKiAzICsgMV07XG4gICAgICAgICAgICBvdXRbMl0gPSBpbmRpY2VzW2lkeCAqIDMgKyAyXTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgICAqL1xuICAgIHNldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgYXJyKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBpbmRpY2VzW2lkeCAqIDNdID0gYXJyWzBdO1xuICAgICAgICBpbmRpY2VzW2lkeCAqIDMgKyAxXSA9IGFyclsxXTtcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMl0gPSBhcnJbMl07XG4gICAgfSxcblxuICAgIGlzVXNlSW5kaWNlczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmluZGljZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgaW5kaWNlcyBmcm9tIGFuIGFycmF5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAgICovXG4gICAgaW5pdEluZGljZXNGcm9tQXJyYXk6IGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gdGhpcy52ZXJ0ZXhDb3VudCA+IDB4ZmZmZlxuICAgICAgICAgICAgPyB2ZW5kb3IuVWludDMyQXJyYXkgOiB2ZW5kb3IuVWludDE2QXJyYXk7XG4gICAgICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxuICAgICAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgICAgIHZhciBzaXplID0gMztcblxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheS5sZW5ndGggKiBzaXplKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtuKytdID0gYXJyYXlbaV1bal07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluZGljZXMgPSB2YWx1ZTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbWFudGljXVxuICAgICAqL1xuICAgIGNyZWF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XG4gICAgICAgIHZhciBhdHRyaWIgPSBuZXcgQXR0cmlidXRlKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKTtcbiAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlc1tuYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cmliO1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0LnB1c2gobmFtZSk7XG4gICAgICAgIHJldHVybiBhdHRyaWI7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYXR0cmlidXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKi9cbiAgICByZW1vdmVBdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcbiAgICAgICAgdmFyIGlkeCA9IGF0dHJpYnV0ZUxpc3QuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7Y2xheS5HZW9tZXRyeS5BdHRyaWJ1dGV9XG4gICAgICovXG4gICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZW5hYmxlZCBhdHRyaWJ1dGVzIG5hbWUgbGlzdFxuICAgICAqIEF0dHJpYnV0ZSB3aGljaCBoYXMgdGhlIHNhbWUgdmVydGV4IG51bWJlciB3aXRoIHBvc2l0aW9uIGlzIHRyZWF0ZWQgYXMgYSBlbmFibGVkIGF0dHJpYnV0ZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICAgICAqL1xuICAgIGdldEVuYWJsZWRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XG4gICAgICAgIC8vIENhY2hlXG4gICAgICAgIGlmIChlbmFibGVkQXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICB2YXIgblZlcnRleCA9IHRoaXMudmVydGV4Q291bnQ7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZUxpc3RbaV07XG4gICAgICAgICAgICB2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyaWIudmFsdWUubGVuZ3RoID09PSBuVmVydGV4ICogYXR0cmliLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW5hYmxlZEF0dHJpYnV0ZXMgPSByZXN1bHQ7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgZ2V0QnVmZmVyQ2h1bmtzOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcbiAgICAgICAgdmFyIGlzQXR0cmlidXRlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnYXR0cmlidXRlcycpO1xuICAgICAgICB2YXIgaXNJbmRpY2VzRGlydHkgPSBjYWNoZS5pc0RpcnR5KCdpbmRpY2VzJyk7XG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBpc0luZGljZXNEaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnVmZmVyKHJlbmRlcmVyLmdsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpO1xuICAgICAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVzID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNhY2hlLmZyZXNoKG1ha2VBdHRyS2V5KGVuYWJsZWRBdHRyaWJ1dGVzW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnYXR0cmlidXRlcycpO1xuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2luZGljZXMnKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5mcmVzaCgnYW55Jyk7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoJ2NodW5rcycpO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlQnVmZmVyOiBmdW5jdGlvbiAoX2dsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xuICAgICAgICB2YXIgZmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFjaHVua3MpIHtcbiAgICAgICAgICAgIGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgLy8gSW50aWFsaXplXG4gICAgICAgICAgICBjaHVua3NbMF0gPSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyczogW10sXG4gICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlcjogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhY2hlLnB1dCgnY2h1bmtzJywgY2h1bmtzKTtcbiAgICAgICAgICAgIGZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlcnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzO1xuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XG5cbiAgICAgICAgaWYgKGlzQXR0cmlidXRlc0RpcnR5IHx8IGZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlck1hcCA9IHt9O1xuICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJNYXBbYXR0cmlidXRlQnVmZmVyc1tpXS5uYW1lXSA9IGF0dHJpYnV0ZUJ1ZmZlcnNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRklYTUUgSWYgc29tZSBhdHRyaWJ1dGVzIHJlbW92ZWRcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtrXTtcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckluZm87XG5cbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJNYXBbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBidWZmZXI7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVySW5mby5idWZmZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBfZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjYWNoZS5pc0RpcnR5KG1ha2VBdHRyS2V5KG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSB3aGVuIHRoZXkgYXJlIGRpcnR5LlxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgQnVmZmVyU3ViRGF0YT9cbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoX2dsLkFSUkFZX0JVRkZFUiwgYXR0cmlidXRlLnZhbHVlLCB0aGlzLmR5bmFtaWMgPyBnbGVudW0uRFlOQU1JQ19EUkFXIDogZ2xlbnVtLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzW2tdID0gbmV3IEF0dHJpYnV0ZUJ1ZmZlcihuYW1lLCBhdHRyaWJ1dGUudHlwZSwgYnVmZmVyLCBhdHRyaWJ1dGUuc2l6ZSwgYXR0cmlidXRlLnNlbWFudGljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlcyBidWZmZXJzLlxuICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJ1dGVCdWZmZXJzW2ldLmJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aCA9IGs7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpICYmIChpc0luZGljZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkpIHtcbiAgICAgICAgICAgIGlmICghaW5kaWNlc0J1ZmZlcikge1xuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXIgPSBuZXcgSW5kaWNlc0J1ZmZlcihfZ2wuY3JlYXRlQnVmZmVyKCkpO1xuICAgICAgICAgICAgICAgIGNodW5rLmluZGljZXNCdWZmZXIgPSBpbmRpY2VzQnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kaWNlc0J1ZmZlci5jb3VudCA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcbiAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCB0aGlzLmR5bmFtaWMgPyBnbGVudW0uRFlOQU1JQ19EUkFXIDogZ2xlbnVtLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciB2ZXJ0ZXguXG4gICAgICovXG4gICAgZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcblxuICAgICAgICBpZiAoIW5vcm1hbHMgfHwgbm9ybWFscy5sZW5ndGggIT09IHBvc2l0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzZXRcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG5vcm1hbHNbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHAxID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcblxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIHZhciBsZW4gPSBpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiB0aGlzLnZlcnRleENvdW50O1xuICAgICAgICB2YXIgaTEsIGkyLCBpMztcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XG4gICAgICAgICAgICBpZiAoaW5kaWNlcykge1xuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xuICAgICAgICAgICAgICAgIGkzID0gaW5kaWNlc1tmKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaTEgPSBmKys7XG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQocDIsIHBvc2l0aW9uc1tpMiozXSwgcG9zaXRpb25zW2kyKjMrMV0sIHBvc2l0aW9uc1tpMiozKzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcblxuICAgICAgICAgICAgdmVjMy5zdWIodjIxLCBwMSwgcDIpO1xuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XG4gICAgICAgICAgICAvLyBBbHJlYWR5IGJlIHdlaWdodGVkIGJ5IHRoZSB0cmlhbmdsZSBhcmVhXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMytpXSA9IG5vcm1hbHNbaTEqMytpXSArIG5baV07XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMiozK2ldID0gbm9ybWFsc1tpMiozK2ldICsgbltpXTtcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMraV0gPSBub3JtYWxzW2kzKjMraV0gKyBuW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzLmxlbmd0aDspIHtcbiAgICAgICAgICAgIHZlYzNTZXQobiwgbm9ybWFsc1tpXSwgbm9ybWFsc1tpKzFdLCBub3JtYWxzW2krMl0pO1xuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobiwgbik7XG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzBdO1xuICAgICAgICAgICAgbm9ybWFsc1tpKytdID0gblsxXTtcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciBmYWNlLlxuICAgICAqL1xuICAgIGdlbmVyYXRlRmFjZU5vcm1hbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVVuaXF1ZVZlcnRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcblxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBwMiA9IHZlYzNDcmVhdGUoKTtcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIHZhciB2MjEgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIGlmICghbm9ybWFscykge1xuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XG4gICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgbGVuOykge1xuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcbiAgICAgICAgICAgICAgICBpMiA9IGluZGljZXNbZisrXTtcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGkxID0gZisrO1xuICAgICAgICAgICAgICAgIGkyID0gZisrO1xuICAgICAgICAgICAgICAgIGkzID0gZisrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2ZWMzU2V0KHAxLCBwb3NpdGlvbnNbaTEqM10sIHBvc2l0aW9uc1tpMSozKzFdLCBwb3NpdGlvbnNbaTEqMysyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XG5cbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcbiAgICAgICAgICAgIHZlYzMuY3Jvc3MobiwgdjIxLCB2MzIpO1xuXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShuLCBuKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kxKjMgKyBpXSA9IG5baV07XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMiozICsgaV0gPSBuW2ldO1xuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTMqMyArIGldID0gbltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIHRhbmdlbnRzIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgZ2VuZXJhdGVUYW5nZW50czogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuVmVydGV4ID0gdGhpcy52ZXJ0ZXhDb3VudDtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgICAgIGlmICghYXR0cmlidXRlcy50YW5nZW50LnZhbHVlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KG5WZXJ0ZXggKiA0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XG5cbiAgICAgICAgaWYgKCF0ZXhjb29yZHMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbWV0cnkgd2l0aG91dCB0ZXhjb29yZHMgY2FuXFwndCBnZW5lcmF0ZSB0YW5nZW50cy4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0YW4xID0gW107XG4gICAgICAgIHZhciB0YW4yID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDsgaSsrKSB7XG4gICAgICAgICAgICB0YW4xW2ldID0gWzAuMCwgMC4wLCAwLjBdO1xuICAgICAgICAgICAgdGFuMltpXSA9IFswLjAsIDAuMCwgMC4wXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xuICAgICAgICB2YXIgdGRpciA9IFswLjAsIDAuMCwgMC4wXTtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XG4gICAgICAgIHZhciBpMSwgaTIsIGkzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XG4gICAgICAgICAgICAgICAgaTEgPSBpbmRpY2VzW2krK107XG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2krK107XG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2krK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpMSA9IGkrKztcbiAgICAgICAgICAgICAgICBpMiA9IGkrKztcbiAgICAgICAgICAgICAgICBpMyA9IGkrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN0MXMgPSB0ZXhjb29yZHNbaTEgKiAyXSxcbiAgICAgICAgICAgICAgICBzdDJzID0gdGV4Y29vcmRzW2kyICogMl0sXG4gICAgICAgICAgICAgICAgc3QzcyA9IHRleGNvb3Jkc1tpMyAqIDJdLFxuICAgICAgICAgICAgICAgIHN0MXQgPSB0ZXhjb29yZHNbaTEgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgc3QydCA9IHRleGNvb3Jkc1tpMiAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICBzdDN0ID0gdGV4Y29vcmRzW2kzICogMiArIDFdLFxuXG4gICAgICAgICAgICAgICAgcDF4ID0gcG9zaXRpb25zW2kxICogM10sXG4gICAgICAgICAgICAgICAgcDJ4ID0gcG9zaXRpb25zW2kyICogM10sXG4gICAgICAgICAgICAgICAgcDN4ID0gcG9zaXRpb25zW2kzICogM10sXG4gICAgICAgICAgICAgICAgcDF5ID0gcG9zaXRpb25zW2kxICogMyArIDFdLFxuICAgICAgICAgICAgICAgIHAyeSA9IHBvc2l0aW9uc1tpMiAqIDMgKyAxXSxcbiAgICAgICAgICAgICAgICBwM3kgPSBwb3NpdGlvbnNbaTMgKiAzICsgMV0sXG4gICAgICAgICAgICAgICAgcDF6ID0gcG9zaXRpb25zW2kxICogMyArIDJdLFxuICAgICAgICAgICAgICAgIHAyeiA9IHBvc2l0aW9uc1tpMiAqIDMgKyAyXSxcbiAgICAgICAgICAgICAgICBwM3ogPSBwb3NpdGlvbnNbaTMgKiAzICsgMl07XG5cbiAgICAgICAgICAgIHZhciB4MSA9IHAyeCAtIHAxeCxcbiAgICAgICAgICAgICAgICB4MiA9IHAzeCAtIHAxeCxcbiAgICAgICAgICAgICAgICB5MSA9IHAyeSAtIHAxeSxcbiAgICAgICAgICAgICAgICB5MiA9IHAzeSAtIHAxeSxcbiAgICAgICAgICAgICAgICB6MSA9IHAyeiAtIHAxeixcbiAgICAgICAgICAgICAgICB6MiA9IHAzeiAtIHAxejtcblxuICAgICAgICAgICAgdmFyIHMxID0gc3QycyAtIHN0MXMsXG4gICAgICAgICAgICAgICAgczIgPSBzdDNzIC0gc3QxcyxcbiAgICAgICAgICAgICAgICB0MSA9IHN0MnQgLSBzdDF0LFxuICAgICAgICAgICAgICAgIHQyID0gc3QzdCAtIHN0MXQ7XG5cbiAgICAgICAgICAgIHZhciByID0gMS4wIC8gKHMxICogdDIgLSB0MSAqIHMyKTtcbiAgICAgICAgICAgIHNkaXJbMF0gPSAodDIgKiB4MSAtIHQxICogeDIpICogcjtcbiAgICAgICAgICAgIHNkaXJbMV0gPSAodDIgKiB5MSAtIHQxICogeTIpICogcjtcbiAgICAgICAgICAgIHNkaXJbMl0gPSAodDIgKiB6MSAtIHQxICogejIpICogcjtcblxuICAgICAgICAgICAgdGRpclswXSA9IChzMSAqIHgyIC0gczIgKiB4MSkgKiByO1xuICAgICAgICAgICAgdGRpclsxXSA9IChzMSAqIHkyIC0gczIgKiB5MSkgKiByO1xuICAgICAgICAgICAgdGRpclsyXSA9IChzMSAqIHoyIC0gczIgKiB6MSkgKiByO1xuXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTFdLCB0YW4xW2kxXSwgc2Rpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTJdLCB0YW4xW2kyXSwgc2Rpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTNdLCB0YW4xW2kzXSwgc2Rpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTFdLCB0YW4yW2kxXSwgdGRpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTJdLCB0YW4yW2kyXSwgdGRpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTNdLCB0YW4yW2kzXSwgdGRpcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRtcCA9IHZlYzNDcmVhdGUoKTtcbiAgICAgICAgdmFyIG5Dcm9zc1QgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXg7IGkrKykge1xuICAgICAgICAgICAgblswXSA9IG5vcm1hbHNbaSAqIDNdO1xuICAgICAgICAgICAgblsxXSA9IG5vcm1hbHNbaSAqIDMgKyAxXTtcbiAgICAgICAgICAgIG5bMl0gPSBub3JtYWxzW2kgKiAzICsgMl07XG4gICAgICAgICAgICB2YXIgdCA9IHRhbjFbaV07XG5cbiAgICAgICAgICAgIC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHRtcCwgbiwgdmVjMy5kb3QobiwgdCkpO1xuICAgICAgICAgICAgdmVjMy5zdWIodG1wLCB0LCB0bXApO1xuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wLCB0bXApO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhhbmRlZG5lc3MuXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG5Dcm9zc1QsIG4sIHQpO1xuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDRdID0gdG1wWzBdO1xuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAxXSA9IHRtcFsxXTtcbiAgICAgICAgICAgIHRhbmdlbnRzW2kgKiA0ICsgMl0gPSB0bXBbMl07XG4gICAgICAgICAgICAvLyBQRU5ESU5HIGNhbiBjb25maWcgP1xuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAzXSA9IHZlYzMuZG90KG5Dcm9zc1QsIHRhbjJbaV0pIDwgMC4wID8gLTEuMCA6IDEuMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIHZlcnRpY2VzIGFyZSBub3Qgc2hhcmVkIGJ5IGRpZmZlcmVudCBpbmRpY2VzLlxuICAgICAqL1xuICAgIGlzVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhDb3VudCA9PT0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB1bmlxdWUgdmVydGV4IGZvciBlYWNoIGluZGV4LlxuICAgICAqL1xuICAgIGdlbmVyYXRlVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCB8fCAhdGhpcy5pbmRpY2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmRpY2VzLmxlbmd0aCA+IDB4ZmZmZikge1xuICAgICAgICAgICAgdGhpcy5pbmRpY2VzID0gbmV3IHZlbmRvci5VaW50MzJBcnJheSh0aGlzLmluZGljZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICB2YXIgb2xkQXR0clZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZU5hbWVMaXN0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xuICAgICAgICAgICAgb2xkQXR0clZhbHVlc1tuYW1lXSA9IGF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdLmluaXQodGhpcy5pbmRpY2VzLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3Vyc29yID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJ1dGVOYW1lTGlzdC5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZUxpc3RbYV07XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGF0dHJpYnV0ZXNbbmFtZV0uc2l6ZTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2N1cnNvciAqIHNpemUgKyBrXSA9IG9sZEF0dHJWYWx1ZXNbbmFtZV1baWkgKiBzaXplICsga107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGN1cnNvcjtcbiAgICAgICAgICAgIGN1cnNvcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBmb3Igd2lyZWZyYW1lIGRyYXcuXG4gICAgICovXG4gICAgZ2VuZXJhdGVCYXJ5Y2VudHJpYzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc1VuaXF1ZVZlcnRleCgpKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlcy5iYXJ5Y2VudHJpYy52YWx1ZTtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RlZDtcbiAgICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gaW5kaWNlcy5sZW5ndGggKiAzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShpbmRpY2VzLmxlbmd0aCAqIDMpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQgLyAzKTspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlpID0gaW5kaWNlcyA/IGluZGljZXNbaSsrXSA6IChpICogMyArIGopO1xuICAgICAgICAgICAgICAgIGFycmF5W2lpICogMyArIGpdID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHRyYW5zZm9ybSB0byBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLk1hdHJpeDR9IG1hdHJpeFxuICAgICAqL1xuICAgIGFwcGx5VHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XG5cbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XG5cbiAgICAgICAgbWF0cml4ID0gbWF0cml4LmFycmF5O1xuICAgICAgICAvLyBOb3JtYWwgTWF0cml4XG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlTWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcbiAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XG5cbiAgICAgICAgdmFyIHZlYzNUcmFuc2Zvcm1NYXQ0ID0gdmVjMy50cmFuc2Zvcm1NYXQ0O1xuICAgICAgICB2YXIgdmVjM0ZvckVhY2ggPSB2ZWMzLmZvckVhY2g7XG4gICAgICAgIHZlYzNGb3JFYWNoKHBvc2l0aW9ucywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XG4gICAgICAgIGlmIChub3JtYWxzKSB7XG4gICAgICAgICAgICB2ZWMzRm9yRWFjaChub3JtYWxzLCAzLCAwLCBudWxsLCB2ZWMzVHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhbmdlbnRzKSB7XG4gICAgICAgICAgICB2ZWMzRm9yRWFjaCh0YW5nZW50cywgNCwgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBnZW9tZXRyeSBkYXRhIGluIEdMIGNvbnRleHQuXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XG4gICAgICAgIGlmIChjaHVua3MpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2h1bmtzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnMuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsuaW5kaWNlc0J1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoY2h1bmsuaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xuICAgIH1cblxufSk7XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5I3ZlcnRleENvdW50XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnkucHJvdG90eXBlLCAndmVydGV4Q291bnQnLCB7XG5cbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG5cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWFpbkF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1t0aGlzLm1haW5BdHRyaWJ1dGVdO1xuICAgICAgICAgICAgaWYgKCFtYWluQXR0cmlidXRlIHx8ICFtYWluQXR0cmlidXRlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWFpbkF0dHJpYnV0ZS52YWx1ZS5sZW5ndGggLyBtYWluQXR0cmlidXRlLnNpemU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5I3RyaWFuZ2xlQ291bnRcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeS5wcm90b3R5cGUsICd0cmlhbmdsZUNvdW50Jywge1xuXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgICAgICBpZiAoIWluZGljZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRpY2VzLmxlbmd0aCAvIDM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuR2VvbWV0cnkuU1RBVElDX0RSQVcgPSBnbGVudW0uU1RBVElDX0RSQVc7XG5HZW9tZXRyeS5EWU5BTUlDX0RSQVcgPSBnbGVudW0uRFlOQU1JQ19EUkFXO1xuR2VvbWV0cnkuU1RSRUFNX0RSQVcgPSBnbGVudW0uU1RSRUFNX0RSQVc7XG5cbkdlb21ldHJ5LkF0dHJpYnV0ZUJ1ZmZlciA9IEF0dHJpYnV0ZUJ1ZmZlcjtcbkdlb21ldHJ5LkluZGljZXNCdWZmZXIgPSBJbmRpY2VzQnVmZmVyO1xuXG5HZW9tZXRyeS5BdHRyaWJ1dGUgPSBBdHRyaWJ1dGU7XG5cbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5O1xuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5QbGFuZVxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXG4gKi9cbnZhciBQbGFuZSA9IEdlb21ldHJ5LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZSMgKi9cbntcbiAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHdpZHRoU2VnbWVudHM6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBoZWlnaHRTZWdtZW50czogMVxufSwgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5idWlsZCgpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBCdWlsZCBwbGFuZSBnZW9tZXRyeVxuICAgICAqL1xuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcbiAgICAgICAgdmFyIHdpZHRoU2VnbWVudHMgPSB0aGlzLndpZHRoU2VnbWVudHM7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTtcbiAgICAgICAgdmFyIGZhY2VzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPD0gaGVpZ2h0U2VnbWVudHM7IHkrKykge1xuICAgICAgICAgICAgdmFyIHQgPSB5IC8gaGVpZ2h0U2VnbWVudHM7XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8PSB3aWR0aFNlZ21lbnRzOyB4KyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcyA9IHggLyB3aWR0aFNlZ21lbnRzO1xuXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goWzIgKiBzIC0gMSwgMiAqIHQgLSAxLCAwXSk7XG4gICAgICAgICAgICAgICAgaWYgKHRleGNvb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaChbcywgdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9ybWFscykge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goWzAsIDAsIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHggPCB3aWR0aFNlZ21lbnRzICYmIHkgPCBoZWlnaHRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHggKyB5ICogKHdpZHRoU2VnbWVudHMgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMV0pO1xuICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtpICsgd2lkdGhTZWdtZW50cyArIDEsIGkgKyAxLCBpICsgd2lkdGhTZWdtZW50cyArIDJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xuICAgICAgICBhdHRyaWJ1dGVzLnRleGNvb3JkMC5mcm9tQXJyYXkodGV4Y29vcmRzKTtcbiAgICAgICAgYXR0cmlidXRlcy5ub3JtYWwuZnJvbUFycmF5KG5vcm1hbHMpO1xuXG4gICAgICAgIHRoaXMuaW5pdEluZGljZXNGcm9tQXJyYXkoZmFjZXMpO1xuXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC0xLCAtMSwgMCk7XG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldCgxLCAxLCAwKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IFBsYW5lIGZyb20gJy4vUGxhbmUnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcblxudmFyIHBsYW5lTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DdWJlXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LndpZHRoU2VnbWVudHNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmRlcHRoU2VnbWVudHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHQuaW5zaWRlXVxuICovXG52YXIgQ3ViZSA9IEdlb21ldHJ5LmV4dGVuZChcbi8qKkBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN1YmUjICovXG57XG4gICAgZHluYW1pYzogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB3aWR0aFNlZ21lbnRzOiAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgaGVpZ2h0U2VnbWVudHM6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBkZXB0aFNlZ21lbnRzOiAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGluc2lkZTogZmFsc2Vcbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYnVpbGQoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3ViZS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBCdWlsZCBjdWJlIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBwbGFuZXMgPSB7XG4gICAgICAgICAgICAncHgnOiBjcmVhdGVQbGFuZSgncHgnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxuICAgICAgICAgICAgJ254JzogY3JlYXRlUGxhbmUoJ254JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcbiAgICAgICAgICAgICdweSc6IGNyZWF0ZVBsYW5lKCdweScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcbiAgICAgICAgICAgICdueSc6IGNyZWF0ZVBsYW5lKCdueScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcbiAgICAgICAgICAgICdweic6IGNyZWF0ZVBsYW5lKCdweicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXG4gICAgICAgICAgICAnbnonOiBjcmVhdGVQbGFuZSgnbnonLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBhdHRyTGlzdCA9IFsncG9zaXRpb24nLCAndGV4Y29vcmQwJywgJ25vcm1hbCddO1xuICAgICAgICB2YXIgdmVydGV4TnVtYmVyID0gMDtcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSAwO1xuICAgICAgICBmb3IgKHZhciBwb3MgaW4gcGxhbmVzKSB7XG4gICAgICAgICAgICB2ZXJ0ZXhOdW1iZXIgKz0gcGxhbmVzW3Bvc10udmVydGV4Q291bnQ7XG4gICAgICAgICAgICBmYWNlTnVtYmVyICs9IHBsYW5lc1twb3NdLmluZGljZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTGlzdFtrXV0uaW5pdCh2ZXJ0ZXhOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZmFjZU51bWJlcik7XG4gICAgICAgIHZhciBmYWNlT2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIHZlcnRleE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcbiAgICAgICAgICAgIHZhciBwbGFuZSA9IHBsYW5lc1twb3NdO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBhdHRyTGlzdC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJMaXN0W2tdO1xuICAgICAgICAgICAgICAgIHZhciBhdHRyQXJyYXkgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB2YXIgYXR0clNpemUgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS5zaXplO1xuICAgICAgICAgICAgICAgIHZhciBpc05vcm1hbCA9IGF0dHJOYW1lID09PSAnbm9ybWFsJztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhdHRyQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc2lkZSAmJiBpc05vcm1hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVtpICsgYXR0clNpemUgKiB2ZXJ0ZXhPZmZzZXRdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGxlbiA9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFuZS5pbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyBmYWNlT2Zmc2V0XSA9IHZlcnRleE9mZnNldCArIHBsYW5lLmluZGljZXNbdGhpcy5pbnNpZGUgPyAobGVuIC0gaSAtIDEpIDogaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmYWNlT2Zmc2V0ICs9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmVydGV4T2Zmc2V0ICs9IHBsYW5lLnZlcnRleENvdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMSk7XG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIC0xKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gY3JlYXRlUGxhbmUocG9zLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cykge1xuXG4gICAgcGxhbmVNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIHZhciBwbGFuZSA9IG5ldyBQbGFuZSh7XG4gICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXG4gICAgICAgIGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50c1xuICAgIH0pO1xuXG4gICAgc3dpdGNoKHBvcykge1xuICAgICAgICBjYXNlICdweCc6XG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWCk7XG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVkocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBNYXRoLlBJIC8gMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbngnOlxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1gpO1xuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgLU1hdGguUEkgLyAyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdweSc6XG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWSk7XG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCAtTWF0aC5QSSAvIDIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ255JzpcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWChwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkgLyAyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdweic6XG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnonOlxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1opO1xuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcGxhbmUuYXBwbHlUcmFuc2Zvcm0ocGxhbmVNYXRyaXgpO1xuICAgIHJldHVybiBwbGFuZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3ViZTtcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuU3BoZXJlXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhTZWdtZW50c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0U2VnbWVudHNdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BoaVN0YXJ0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlMZW5ndGhdXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhU3RhcnRdXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhTGVuZ3RoXVxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXNdXG4gKi9cbnZhciBTcGhlcmUgPSBHZW9tZXRyeS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlIyAqL1xue1xuICAgIGR5bmFtaWM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgd2lkdGhTZWdtZW50czogNDAsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBoZWlnaHRTZWdtZW50czogMjAsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHBoaVN0YXJ0OiAwLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcGhpTGVuZ3RoOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhldGFTdGFydDogMCxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoZXRhTGVuZ3RoOiBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICByYWRpdXM6IDFcblxufSwgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5idWlsZCgpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQnVpbGQgc3BoZXJlIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaGVpZ2h0U2VnbWVudHMgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcblxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcbiAgICAgICAgdmFyIG5vcm1hbEF0dHIgPSB0aGlzLmF0dHJpYnV0ZXMubm9ybWFsO1xuXG4gICAgICAgIHZhciB2ZXJ0ZXhDb3VudCA9ICh3aWR0aFNlZ21lbnRzICsgMSkgKiAoaGVpZ2h0U2VnbWVudHMgKyAxKTtcbiAgICAgICAgcG9zaXRpb25BdHRyLmluaXQodmVydGV4Q291bnQpO1xuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XG4gICAgICAgIG5vcm1hbEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XG5cbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4Q291bnQgPiAweGZmZmYgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5O1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcyA9IG5ldyBJbmRpY2VzQ3Rvcih3aWR0aFNlZ21lbnRzICogaGVpZ2h0U2VnbWVudHMgKiA2KTtcblxuICAgICAgICB2YXIgeCwgeSwgeixcbiAgICAgICAgICAgIHUsIHYsXG4gICAgICAgICAgICBpLCBqO1xuXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcbiAgICAgICAgdmFyIHBoaVN0YXJ0ID0gdGhpcy5waGlTdGFydDtcbiAgICAgICAgdmFyIHBoaUxlbmd0aCA9IHRoaXMucGhpTGVuZ3RoO1xuICAgICAgICB2YXIgdGhldGFTdGFydCA9IHRoaXMudGhldGFTdGFydDtcbiAgICAgICAgdmFyIHRoZXRhTGVuZ3RoID0gdGhpcy50aGV0YUxlbmd0aDtcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xuXG4gICAgICAgIHZhciBwb3MgPSBbXTtcbiAgICAgICAgdmFyIHV2ID0gW107XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgZGl2aWRlciA9IDEgLyByYWRpdXM7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPD0gaGVpZ2h0U2VnbWVudHM7IGogKyspIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gd2lkdGhTZWdtZW50czsgaSArKykge1xuICAgICAgICAgICAgICAgIHUgPSBpIC8gd2lkdGhTZWdtZW50cztcbiAgICAgICAgICAgICAgICB2ID0gaiAvIGhlaWdodFNlZ21lbnRzO1xuXG4gICAgICAgICAgICAgICAgLy8gWCBheGlzIGlzIGludmVydGVkIHNvIHRleHR1cmUgY2FuIGJlIG1hcHBlZCBmcm9tIGxlZnQgdG8gcmlnaHRcbiAgICAgICAgICAgICAgICB4ID0gLXJhZGl1cyAqIE1hdGguY29zKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB5ID0gcmFkaXVzICogTWF0aC5jb3ModGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgeiA9IHJhZGl1cyAqIE1hdGguc2luKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHg7IHBvc1sxXSA9IHk7IHBvc1syXSA9IHo7XG4gICAgICAgICAgICAgICAgdXZbMF0gPSB1OyB1dlsxXSA9IHY7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChvZmZzZXQsIHBvcyk7XG4gICAgICAgICAgICAgICAgdGV4Y29vcmRBdHRyLnNldChvZmZzZXQsIHV2KTtcbiAgICAgICAgICAgICAgICBwb3NbMF0gKj0gZGl2aWRlcjtcbiAgICAgICAgICAgICAgICBwb3NbMV0gKj0gZGl2aWRlcjtcbiAgICAgICAgICAgICAgICBwb3NbMl0gKj0gZGl2aWRlcjtcbiAgICAgICAgICAgICAgICBub3JtYWxBdHRyLnNldChvZmZzZXQsIHBvcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaTEsIGkyLCBpMywgaTQ7XG5cbiAgICAgICAgdmFyIGxlbiA9IHdpZHRoU2VnbWVudHMgKyAxO1xuXG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhTZWdtZW50czsgaSArKykge1xuICAgICAgICAgICAgICAgIGkyID0gaiAqIGxlbiArIGk7XG4gICAgICAgICAgICAgICAgaTEgPSAoaiAqIGxlbiArIGkgKyAxKTtcbiAgICAgICAgICAgICAgICBpNCA9IChqICsgMSkgKiBsZW4gKyBpICsgMTtcbiAgICAgICAgICAgICAgICBpMyA9IChqICsgMSkgKiBsZW4gKyBpO1xuXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XG5cbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHJhZGl1cywgcmFkaXVzLCByYWRpdXMpO1xuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXJhZGl1cywgLXJhZGl1cywgLXJhZGl1cyk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNwaGVyZTtcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2VcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxuICogQHBhcmFtIHtPYmplY3R9IFtnZW5lcmF0b3JdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cbiAqL1xudmFyIFBhcmFtZXRyaWNTdXJmYWNlID0gR2VvbWV0cnkuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlIyAqL1xue1xuICAgIGR5bmFtaWM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgZ2VuZXJhdG9yOiBudWxsXG5cbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYnVpbGQoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQnVpbGQgcGFyYW1ldHJpYyBzdXJmYWNlIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xuXG4gICAgICAgIGlmICghZ2VuZXJhdG9yIHx8ICFnZW5lcmF0b3IueCB8fCAhZ2VuZXJhdG9yLnkgfHwgIWdlbmVyYXRvci56KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHhGdW5jID0gZ2VuZXJhdG9yLng7XG4gICAgICAgIHZhciB5RnVuYyA9IGdlbmVyYXRvci55O1xuICAgICAgICB2YXIgekZ1bmMgPSBnZW5lcmF0b3IuejtcbiAgICAgICAgdmFyIHVSYW5nZSA9IGdlbmVyYXRvci51IHx8IFswLCAxLCAwLjA1XTtcbiAgICAgICAgdmFyIHZSYW5nZSA9IGdlbmVyYXRvci52IHx8IFswLCAxLCAwLjA1XTtcblxuICAgICAgICB2YXIgdU51bSA9IE1hdGguZmxvb3IoKHVSYW5nZVsxXSAtIHVSYW5nZVswXSArIHVSYW5nZVsyXSkgLyB1UmFuZ2VbMl0pO1xuICAgICAgICB2YXIgdk51bSA9IE1hdGguZmxvb3IoKHZSYW5nZVsxXSAtIHZSYW5nZVswXSArIHZSYW5nZVsyXSkgLyB2UmFuZ2VbMl0pO1xuXG4gICAgICAgIGlmICghaXNGaW5pdGUodU51bSkgfHwgIWlzRmluaXRlKHZOdW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZmluaXRlIGdlbmVyYXRvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZlcnRleE51bSA9IHVOdW0gKiB2TnVtO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uaW5pdCh2ZXJ0ZXhOdW0pO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQodmVydGV4TnVtKTtcblxuICAgICAgICB2YXIgcG9zID0gW107XG4gICAgICAgIHZhciB0ZXhjb29yZCA9IFtdO1xuICAgICAgICB2YXIgblZlcnRleCA9IDA7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdk51bTsgaisrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW07IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciB1ID0gaSAqIHVSYW5nZVsyXSArIHVSYW5nZVswXTtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogKiB2UmFuZ2VbMl0gKyB2UmFuZ2VbMF07XG4gICAgICAgICAgICAgICAgcG9zWzBdID0geEZ1bmModSwgdik7XG4gICAgICAgICAgICAgICAgcG9zWzFdID0geUZ1bmModSwgdik7XG4gICAgICAgICAgICAgICAgcG9zWzJdID0gekZ1bmModSwgdik7XG5cbiAgICAgICAgICAgICAgICB0ZXhjb29yZFswXSA9IGkgLyAodU51bSAtIDEpO1xuICAgICAgICAgICAgICAgIHRleGNvb3JkWzFdID0gaiAvICh2TnVtIC0gMSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uc2V0KG5WZXJ0ZXgsIHBvcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC5zZXQoblZlcnRleCwgdGV4Y29vcmQpO1xuICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleE51bSA+IDB4ZmZmZiA/IFVpbnQzMkFycmF5IDogVWludDE2QXJyYXk7XG4gICAgICAgIHZhciBuSW5kaWNlcyA9ICh1TnVtIC0gMSkgKiAodk51bSAtIDEpICogNjtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXMgPSBuZXcgSW5kaWNlc0N0b3IobkluZGljZXMpO1xuXG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW0gLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSBqICogdU51bSArIGk7XG4gICAgICAgICAgICAgICAgdmFyIGkxID0gKGogKiB1TnVtICsgaSArIDEpO1xuICAgICAgICAgICAgICAgIHZhciBpNCA9IChqICsgMSkgKiB1TnVtICsgaSArIDE7XG4gICAgICAgICAgICAgICAgdmFyIGkzID0gKGogKyAxKSAqIHVOdW0gKyBpO1xuXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XG5cbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUGFyYW1ldHJpY1N1cmZhY2U7XG4iLCJ2YXIgbWF0aFV0aWwgPSB7fTtcblxubWF0aFV0aWwuaXNQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PT0gMDtcbn07XG5cbm1hdGhVdGlsLm5leHRQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFsdWUgLS07XG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTtcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAyO1xuICAgIHZhbHVlIHw9IHZhbHVlID4+IDQ7XG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gODtcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAxNjtcbiAgICB2YWx1ZSArKztcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbm1hdGhVdGlsLm5lYXJlc3RQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLnJvdW5kKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGhVdGlsO1xuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgbWF0aFV0aWwgZnJvbSAnLi9tYXRoL3V0aWwnO1xudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlMkRcbiAqIEBleHRlbmRzIGNsYXkuVGV4dHVyZVxuICpcbiAqIEBleGFtcGxlXG4gKiAgICAgLi4uXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcbiAqICAgICAgICAgc2hhZGVyOiBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5waG9uZycsICdkaWZmdXNlTWFwJylcbiAqICAgICB9KTtcbiAqICAgICB2YXIgZGlmZnVzZU1hcCA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xuICogICAgIGRpZmZ1c2VNYXAubG9hZCgnYXNzZXRzL3RleHR1cmVzL2RpZmZ1c2UuanBnJyk7XG4gKiAgICAgbWF0LnNldCgnZGlmZnVzZU1hcCcsIGRpZmZ1c2VNYXApO1xuICogICAgIC4uLlxuICogICAgIGRpZmZ1c2VNYXAuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XG4gKiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBkaWZmdXNlIHRleHR1cmUgbG9hZGVkXG4gKiAgICAgICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgICAgIH0pO1xuICogICAgIH0pO1xuICovXG52YXIgVGV4dHVyZTJEID0gVGV4dHVyZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZTJEIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9XG4gICAgICAgICAqL1xuICAgICAgICBpbWFnZTogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBpeGVscyBkYXRhLiBXaWxsIGJlIGlnbm9yZWQgaWYgaW1hZ2UgaXMgc2V0LlxuICAgICAgICAgKiBAdHlwZSB7P1VpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fVxuICAgICAgICAgKi9cbiAgICAgICAgcGl4ZWxzOiBudWxsLFxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiAgICAgW3tcbiAgICAgICAgICogICAgICAgICBpbWFnZTogbWlwbWFwMCxcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcbiAgICAgICAgICogICAgIH0sIHtcbiAgICAgICAgICogICAgICAgICBpbWFnZTogbWlwbWFwMSxcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcbiAgICAgICAgICogICAgIH0sIC4uLi5dXG4gICAgICAgICAqL1xuICAgICAgICBtaXBtYXBzOiBbXVxuICAgIH07XG59LCB7XG5cbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmUyRCcsXG5cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFXzJELCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xuXG4gICAgICAgIHZhciBnbEZvcm1hdCA9IHRoaXMuZm9ybWF0O1xuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xuXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9XUkFQX1MsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFMoKSk7XG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XG5cbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWFnRmlsdGVyKCkpO1xuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XG5cbiAgICAgICAgdmFyIGFuaXNvdHJvcGljRXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpO1xuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFXzJELCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxuICAgICAgICBpZiAoZ2xUeXBlID09PSAzNjE5Mykge1xuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xuICAgICAgICAgICAgICAgIGdsVHlwZSA9IGdsZW51bS5GTE9BVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgbWlwbWFwLCBpLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKTtcbiAgICAgICAgICAgICAgICB3aWR0aCAvPSAyO1xuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCB0aGlzLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XG4gICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFXzJEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG4gICAgfSxcblxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpIHtcbiAgICAgICAgaWYgKGRhdGEuaW1hZ2UpIHtcbiAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEuaW1hZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FuIGJlIHVzZWQgYXMgYSBibGFuayB0ZXh0dXJlIHdoZW4gd3JpdGluZyByZW5kZXIgdG8gdGV4dHVyZShSVFQpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2xGb3JtYXQgPD0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxuICAgICAgICAgICAgICAgICYmIGdsRm9ybWF0ID49IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEucGl4ZWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElzIGEgcmVuZGVyIHRhcmdldCBpZiBwaXhlbHMgaXMgbnVsbFxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlRleHR1cmUyRC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFXzJEKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0O1xuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHdpZHRoKSAmJiBpc1Bvd2VyT2ZUd28oaGVpZ2h0KTtcbiAgICB9LFxuXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5ub2RlTmFtZSA9PT0gJ0NBTlZBUydcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmltYWdlLm5vZGVOYW1lID09PSAnVklERU8nXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5pbWFnZS5jb21wbGV0ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAhISh0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcbiAgICB9LFxuXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG4gICAgfSxcblxuICAgIGxvYWQ6IGZ1bmN0aW9uIChzcmMsIGNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLmRpcnR5KCk7XG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBzZWxmKTtcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgc2VsZik7XG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUyRC5wcm90b3R5cGUsICd3aWR0aCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCB3aWR0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3dpZHRoICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgaGVpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faGVpZ2h0ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmUyRDtcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcbnZhciBpc1Bvd2VyT2ZUd28gPSBtYXRoVXRpbC5pc1Bvd2VyT2ZUd287XG5cbnZhciB0YXJnZXRMaXN0ID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmVDdWJlXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgIC4uLlxuICogICAgIHZhciBtYXQgPSBuZXcgY2xheS5NYXRlcmlhbCh7XG4gKiAgICAgICAgIHNoYWRlcjogY2xheS5zaGFkZXIubGlicmFyeS5nZXQoJ2NsYXkucGhvbmcnLCAnZW52aXJvbm1lbnRNYXAnKVxuICogICAgIH0pO1xuICogICAgIHZhciBlbnZNYXAgPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSgpO1xuICogICAgIGVudk1hcC5sb2FkKHtcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcbiAqICAgICAgICAgJ254JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnguanBnJ1xuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcbiAqICAgICAgICAgJ3B6JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHouanBnJ1xuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXG4gKiAgICAgfSk7XG4gKiAgICAgbWF0LnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuICogICAgIC4uLlxuICogICAgIGVudk1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAqICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNreSB0ZXh0dXJlIGxvYWRlZFxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xuICogICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuICogICAgICAgICB9KTtcbiAqICAgICB9KTtcbiAqL1xudmFyIFRleHR1cmVDdWJlID0gVGV4dHVyZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZUN1YmUjICove1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIC8vIFBFTkRJTkcgY3ViZW1hcCBzaG91bGQgbm90IGZsaXBZIGluIGRlZmF1bHQuXG4gICAgICAgIC8vIGZsaXBZOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHhcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnhcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHlcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnlcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHpcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnpcbiAgICAgICAgICovXG4gICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgICBweDogbnVsbCxcbiAgICAgICAgICAgIG54OiBudWxsLFxuICAgICAgICAgICAgcHk6IG51bGwsXG4gICAgICAgICAgICBueTogbnVsbCxcbiAgICAgICAgICAgIHB6OiBudWxsLFxuICAgICAgICAgICAgbno6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBpeGVscyBkYXRhIG9mIGVhY2ggc2lkZS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlcyBhcmUgc2V0LlxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweFxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueFxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweVxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueVxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBwelxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBuelxuICAgICAgICAgKi9cbiAgICAgICAgcGl4ZWxzOiB7XG4gICAgICAgICAgICBweDogbnVsbCxcbiAgICAgICAgICAgIG54OiBudWxsLFxuICAgICAgICAgICAgcHk6IG51bGwsXG4gICAgICAgICAgICBueTogbnVsbCxcbiAgICAgICAgICAgIHB6OiBudWxsLFxuICAgICAgICAgICAgbno6IG51bGxcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxuICAgICAgICAgKi9cbiAgICAgICAgbWlwbWFwczogW11cbiAgICB9O1xufSwge1xuXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlQ3ViZScsXG5cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29tbW9uKHJlbmRlcmVyKTtcblxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgdmFyIGdsVHlwZSA9IHRoaXMudHlwZTtcblxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLmdldEF2YWlsYWJsZVdyYXBTKCkpO1xuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9ULCB0aGlzLmdldEF2YWlsYWJsZVdyYXBUKCkpO1xuXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCB0aGlzLmdldEF2YWlsYWJsZU1hZ0ZpbHRlcigpKTtcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xuXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XG4gICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVyZihfZ2wuVEVYVFVSRV9DVUJFX01BUCwgYW5pc290cm9waWNFeHQuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsIHRoaXMuYW5pc290cm9waWMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gZmxvYXQgdHlwZSBpZiBicm93c2VyIGRvbid0IGhhdmUgaGFsZiBmbG9hdCBleHRlbnNpb25cbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xuICAgICAgICAgICAgaWYgKCFoYWxmRmxvYXRFeHQpIHtcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pcG1hcCA9IHRoaXMubWlwbWFwc1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcbiAgICAgICAgICAgICAgICBoZWlnaHQgLz0gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgdGhpcywgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuTlBPVCAmJiB0aGlzLnVzZU1pcG1hcCkge1xuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0TGlzdFtpXTtcbiAgICAgICAgICAgIHZhciBpbWcgPSBkYXRhLmltYWdlICYmIGRhdGEuaW1hZ2VbdGFyZ2V0XTtcbiAgICAgICAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICBfZ2wudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgbGV2ZWwsIGdsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMgJiYgZGF0YS5waXhlbHNbdGFyZ2V0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlQ3ViZS5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcbiAgICB9LFxuXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XG4gICAgfSxcblxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgaXNQb3dlck9mVHdvIG1ldGhvZFxuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LndpZHRoKVxuICAgICAgICAgICAgICAgICYmIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMud2lkdGgpXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UucHgpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB4KVxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubngpXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weSlcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm55KVxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHopXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gISEodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgbG9hZDogZnVuY3Rpb24gKGltYWdlTGlzdCwgY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHV0aWwuZWFjaChpbWFnZUxpc3QsIGZ1bmN0aW9uIChzcmMsIHRhcmdldCl7XG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGlmIChjcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgc2VsZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2FkaW5nIC0tO1xuICAgICAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZGluZysrO1xuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xuICAgICAgICAgICAgc2VsZi5pbWFnZVt0YXJnZXRdID0gaW1hZ2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLnB4LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UucHguaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCBoZWlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbmZ1bmN0aW9uIGlzSW1hZ2VSZW5kZXJhYmxlKGltYWdlKSB7XG4gICAgcmV0dXJuIGltYWdlLm5vZGVOYW1lID09PSAnQ0FOVkFTJyB8fFxuICAgICAgICAgICAgaW1hZ2Uubm9kZU5hbWUgPT09ICdWSURFTycgfHxcbiAgICAgICAgICAgIGltYWdlLmNvbXBsZXRlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlQ3ViZTtcbiIsImltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcblxudmFyIF9saWJyYXJ5ID0ge307XG5cbmZ1bmN0aW9uIFNoYWRlckxpYnJhcnkgKCkge1xuICAgIHRoaXMuX3Bvb2wgPSB7fTtcbn1cblxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBrZXkgPSBuYW1lO1xuXG4gICAgaWYgKHRoaXMuX3Bvb2xba2V5XSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9vbFtrZXldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IF9saWJyYXJ5W25hbWVdO1xuICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCInICsgJyBpcyBub3QgaW4gdGhlIGxpYnJhcnknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihzb3VyY2UudmVydGV4LCBzb3VyY2UuZnJhZ21lbnQpO1xuICAgICAgICB0aGlzLl9wb29sW2tleV0gPSBzaGFkZXI7XG4gICAgICAgIHJldHVybiBzaGFkZXI7XG4gICAgfVxufTtcblxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb29sID0ge307XG59O1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShuYW1lLCB2ZXJ0ZXgsIGZyYWdtZW50KSB7XG4gICAgX2xpYnJhcnlbbmFtZV0gPSB7XG4gICAgICAgIHZlcnRleDogdmVydGV4LFxuICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRcbiAgICB9O1xufVxuXG52YXIgZGVmYXVsdExpYnJhcnkgPSBuZXcgU2hhZGVyTGlicmFyeSgpO1xuXG4vKipcbiAqICMjIyBCdWlsaW4gc2hhZGVyc1xuICogKyBjbGF5LnN0YW5kYXJkXG4gKiArIGNsYXkuYmFzaWNcbiAqICsgY2xheS5sYW1iZXJ0XG4gKiArIGNsYXkud2lyZWZyYW1lXG4gKlxuICogQG5hbWVzcGFjZSBjbGF5LnNoYWRlci5saWJyYXJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgc2hhZGVyIGxpYnJhcnkuXG4gICAgICovXG4gICAgY3JlYXRlTGlicmFyeTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNoYWRlckxpYnJhcnkoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldCBzaGFkZXIgZnJvbSBkZWZhdWx0IGxpYnJhcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxuICAgICAqIEBleGFtcGxlXG4gICAgICogICAgIGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnN0YW5kYXJkJylcbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmdldC5hcHBseShkZWZhdWx0TGlicmFyeSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB2ZXJ0ZXggLSBWZXJ0ZXggc2hhZGVyIGNvZGVcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGZyYWdtZW50IC0gRnJhZ21lbnQgc2hhZGVyIGNvZGVcbiAgICAgKi9cbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmNsZWFyKCk7XG4gICAgfVxufTtcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuXG4vLyBDYWNoZVxudmFyIHByZXZEcmF3SUQgPSAwO1xudmFyIHByZXZEcmF3SW5kaWNlc0J1ZmZlciA9IG51bGw7XG52YXIgcHJldkRyYXdJc1VzZUluZGljZXMgPSB0cnVlO1xuXG52YXIgY3VycmVudERyYXdJRDtcblxudmFyIFJlbmRlckluZm8gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyaWFuZ2xlQ291bnQgPSAwO1xuICAgIHRoaXMudmVydGV4Q291bnQgPSAwO1xuICAgIHRoaXMuZHJhd0NhbGxDb3VudCA9IDA7XG59O1xuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChcbiAgICBhdmFpbGFibGVBdHRyaWJ1dGVzLFxuICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsXG4gICAgaW5kaWNlc0J1ZmZlclxuKSB7XG4gICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVzID0gYXZhaWxhYmxlQXR0cmlidXRlcztcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMgPSBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzO1xuICAgIHRoaXMuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XG5cbiAgICB0aGlzLnZhbyA9IG51bGw7XG59XG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuUmVuZGVyYWJsZVxuICogQGV4dGVuZHMgY2xheS5Ob2RlXG4gKi9cbnZhciBSZW5kZXJhYmxlID0gTm9kZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZSMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5NYXRlcmlhbH1cbiAgICAgKi9cbiAgICBtYXRlcmlhbDogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5Lkdlb21ldHJ5fVxuICAgICAqL1xuICAgIGdlb21ldHJ5OiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBtb2RlOiBnbGVudW0uVFJJQU5HTEVTLFxuXG4gICAgX2RyYXdDYWNoZTogbnVsbCxcblxuICAgIF9yZW5kZXJJbmZvOiBudWxsXG59LCBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9kcmF3Q2FjaGUgPSB7fTtcbiAgICB0aGlzLl9yZW5kZXJJbmZvID0gbmV3IFJlbmRlckluZm8oKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZS5wcm90b3R5cGUgKi9cbntcblxuICAgIF9fcHJvZ3JhbTogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIEdyb3VwIG9mIHJlY2VpdmVkIGxpZ2h0LlxuICAgICAqL1xuICAgIGxpZ2h0R3JvdXA6IDAsXG4gICAgLyoqXG4gICAgICogUmVuZGVyIG9yZGVyLCBOb2RlcyB3aXRoIHNtYWxsZXIgdmFsdWUgcmVuZGVycyBiZWZvcmUgbm9kZXMgd2l0aCBsYXJnZXIgdmFsdWVzLlxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgcmVuZGVyT3JkZXI6IDAsXG4gICAgLyoqXG4gICAgICogVXNlZCB3aGVuIG1vZGUgaXMgTElORVMsIExJTkVfU1RSSVAgb3IgTElORV9MT09QXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBsaW5lV2lkdGg6IDEsXG5cbiAgICAvKipcbiAgICAgKiBJZiBlbmFibGUgY3VsbGluZ1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGN1bGxpbmc6IHRydWUsXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIG9mIHBvbHlnb24gd2lsbCBiZSBjdWxsZWQuXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQkFDS31cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UfVxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuRlJPTlRfQU5EX0JBQ0t9XG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2N1bGxGYWNlXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBjdWxsRmFjZTogZ2xlbnVtLkJBQ0ssXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIGlzIGZyb250IGZhY2UuXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ1d9XG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5DQ1d9XG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2Zyb250RmFjZVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnJvbnRGYWNlOiBnbGVudW0uQ0NXLFxuXG4gICAgLyoqXG4gICAgICogSWYgZW5hYmxlIHNvZnR3YXJlIGZydXN0dW0gY3VsbGluZ1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGZydXN0dW1DdWxsaW5nOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHJlY2VpdmVTaGFkb3c6IHRydWUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FzdFNoYWRvdzogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpZ25vcmVQaWNraW5nOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpZ25vcmVQcmVaOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGlnbm9yZUdCdWZmZXI6IGZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBUT0RPIFNoYWRlciA/XG4gICAgICAgIHJldHVybiB0aGlzLmdlb21ldHJ5ICYmIHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC5zaGFkZXIgJiYgIXRoaXMuaW52aXNpYmxlXG4gICAgICAgICAgICAmJiB0aGlzLmdlb21ldHJ5LnZlcnRleENvdW50ID4gMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIGJlZm9yZVJlbmRlcjogZnVuY3Rpb24gKF9nbCkge30sXG5cbiAgICAvKipcbiAgICAgKiBCZWZvcmUgcmVuZGVyIGhvb2tcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChfZ2wsIHJlbmRlclN0YXQpIHt9LFxuXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xuICAgICAgICBvdXQgPSBOb2RlLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveC5jYWxsKHRoaXMsIGZpbHRlciwgb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgb3V0LnVuaW9uKHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdCb3gpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBtYXRlcmlhbCwgcHJvZ3JhbSkge1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIG1hdGVyaWFsID0gbWF0ZXJpYWwgfHwgdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgLy8gTWF5IHVzZSBzaGFkZXIgb2Ygb3RoZXIgbWF0ZXJpYWwgaWYgc2hhZGVyIGNvZGUgYXJlIHNhbWVcbiAgICAgICAgdmFyIHNoYWRlciA9IG1hdGVyaWFsLnNoYWRlcjtcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuICAgICAgICB2YXIgZ2xEcmF3TW9kZSA9IHRoaXMubW9kZTtcblxuICAgICAgICB2YXIgblZlcnRleCA9IGdlb21ldHJ5LnZlcnRleENvdW50O1xuICAgICAgICB2YXIgaXNVc2VJbmRpY2VzID0gZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCk7XG5cbiAgICAgICAgdmFyIHVpbnRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX2VsZW1lbnRfaW5kZXhfdWludCcpO1xuICAgICAgICB2YXIgdXNlVWludEV4dCA9IHVpbnRFeHQgJiYgblZlcnRleCA+IDB4ZmZmZjtcbiAgICAgICAgdmFyIGluZGljZXNUeXBlID0gdXNlVWludEV4dCA/IF9nbC5VTlNJR05FRF9JTlQgOiBfZ2wuVU5TSUdORURfU0hPUlQ7XG5cbiAgICAgICAgdmFyIHZhb0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xuICAgICAgICAvLyB2YXIgdmFvRXh0ID0gbnVsbDtcblxuICAgICAgICB2YXIgaXNTdGF0aWMgPSAhZ2VvbWV0cnkuZHluYW1pYztcblxuICAgICAgICB2YXIgcmVuZGVySW5mbyA9IHRoaXMuX3JlbmRlckluZm87XG4gICAgICAgIHJlbmRlckluZm8udmVydGV4Q291bnQgPSBuVmVydGV4O1xuICAgICAgICByZW5kZXJJbmZvLnRyaWFuZ2xlQ291bnQgPSAwO1xuICAgICAgICByZW5kZXJJbmZvLmRyYXdDYWxsQ291bnQgPSAwO1xuICAgICAgICAvLyBEcmF3IGVhY2ggY2h1bmtcbiAgICAgICAgdmFyIGRyYXdIYXNoQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAvLyBIYXNoIHdpdGggc2hhZGVyIGlkIGluIGNhc2UgcHJldmlvdXMgbWF0ZXJpYWwgaGFzIGxlc3MgYXR0cmlidXRlcyB0aGFuIG5leHQgbWF0ZXJpYWxcbiAgICAgICAgY3VycmVudERyYXdJRCA9IHJlbmRlcmVyLl9fdWlkX18gKyAnLScgKyBnZW9tZXRyeS5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xuXG4gICAgICAgIGlmIChjdXJyZW50RHJhd0lEICE9PSBwcmV2RHJhd0lEKSB7XG4gICAgICAgICAgICBkcmF3SGFzaENoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIGNhY2hlIHdpbGwgYmUgaW52YWxpZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzXG4gICAgICAgICAgICAvLyAxLiBWQU8gaXMgZW5hYmxlZCBhbmQgaXMgYmluZGVkIHRvIG51bGwgYWZ0ZXIgcmVuZGVyXG4gICAgICAgICAgICAvLyAyLiBHZW9tZXRyeSBuZWVkcyB1cGRhdGVcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAvLyBUT0RPIE9wdGltaXplXG4gICAgICAgICAgICAgICAgKHZhb0V4dCAmJiBpc1N0YXRpYylcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgICAgICAgICAgfHwgZ2VvbWV0cnkuX2NhY2hlLmlzRGlydHkoJ2FueScpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkcmF3SGFzaENoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZEcmF3SUQgPSBjdXJyZW50RHJhd0lEO1xuXG4gICAgICAgIGlmICghZHJhd0hhc2hDaGFuZ2VkKSB7XG4gICAgICAgICAgICAvLyBEaXJlY3QgZHJhd1xuICAgICAgICAgICAgaWYgKHByZXZEcmF3SXNVc2VJbmRpY2VzKSB7XG4gICAgICAgICAgICAgICAgX2dsLmRyYXdFbGVtZW50cyhnbERyYXdNb2RlLCBwcmV2RHJhd0luZGljZXNCdWZmZXIuY291bnQsIGluZGljZXNUeXBlLCAwKTtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRyaWFuZ2xlQ291bnQgPSBwcmV2RHJhd0luZGljZXNCdWZmZXIuY291bnQgLyAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRklYTUUgVXNlIHZlcnRleCBudW1iZXIgaW4gYnVmZmVyXG4gICAgICAgICAgICAgICAgLy8gdmVydGV4Q291bnQgbWF5IGdldCB0aGUgd3JvbmcgdmFsdWUgd2hlbiBnZW9tZXRyeSBmb3JnZXQgdG8gbWFyayBkaXJ0eSBhZnRlciB1cGRhdGVcbiAgICAgICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyhnbERyYXdNb2RlLCAwLCBuVmVydGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlckluZm8uZHJhd0NhbGxDb3VudCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGNhY2hlIG9mIHN0YXRpYyBnZW9tZXRyeVxuICAgICAgICAgICAgdmFyIHZhb0xpc3QgPSB0aGlzLl9kcmF3Q2FjaGVbY3VycmVudERyYXdJRF07XG4gICAgICAgICAgICBpZiAoIXZhb0xpc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmtzID0gZ2VvbWV0cnkuZ2V0QnVmZmVyQ2h1bmtzKHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNodW5rcykgeyAgLy8gRW1wdHkgbWVzaFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhb0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbY107XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVycztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSBjaHVuay5pbmRpY2VzQnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJzW2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNlbWFudGljO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBzZW1hbnRpY0luZm8gJiYgc2VtYW50aWNJbmZvLnN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIHByb2dyYW0uYXR0cmlidXRlc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZUJ1ZmZlckluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbyA9IG5ldyBWZXJ0ZXhBcnJheU9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlclxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB2YW9MaXN0LnB1c2godmFvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdDYWNoZVtjdXJyZW50RHJhd0lEXSA9IHZhb0xpc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhb0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdmFvTGlzdFtpXTtcbiAgICAgICAgICAgICAgICB2YXIgbmVlZHNCaW5kQXR0cmlidXRlcyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdmVydGV4IG9iamVjdCBhcnJheSBjb3N0IGEgbG90XG4gICAgICAgICAgICAgICAgLy8gU28gd2UgZG9uJ3QgdXNlIGl0IG9uIHRoZSBkeW5hbWljIG9iamVjdFxuICAgICAgICAgICAgICAgIGlmICh2YW9FeHQgJiYgaXNTdGF0aWMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHZlcnRleCBhcnJheSBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2Jsb2cudG9qaWNvZGUuY29tLzIwMTIvMTAvb2VzdmVydGV4YXJyYXlvYmplY3QtZXh0ZW5zaW9uLmh0bWxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhby52YW8gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFvLnZhbyA9IHZhb0V4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNCaW5kQXR0cmlidXRlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvLnZhbyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGF2YWlsYWJsZUF0dHJpYnV0ZXMgPSB2YW8uYXZhaWxhYmxlQXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IHZhby5pbmRpY2VzQnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IHByb2dyYW0uZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgdmFvLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsICh2YW9FeHQgJiYgaXNTdGF0aWMgJiYgdmFvLnZhbykpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGF0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXZhaWxhYmxlQXR0cmlidXRlcy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25MaXN0W2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdmFpbGFibGVBdHRyaWJ1dGVzW2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGF0dHJpYnV0ZUJ1ZmZlckluZm8uYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVCdWZmZXJJbmZvLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5GTE9BVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnl0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5CWVRFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1Ynl0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5VTlNJR05FRF9CWVRFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzaG9ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5TSE9SVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndXNob3J0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xUeXBlID0gX2dsLlVOU0lHTkVEX1NIT1JUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbFR5cGUgPSBfZ2wuRkxPQVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIHNpemUsIGdsVHlwZSwgZmFsc2UsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZ2xEcmF3TW9kZSA9PSBnbGVudW0uTElORVMgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2xEcmF3TW9kZSA9PSBnbGVudW0uTElORV9TVFJJUCB8fFxuICAgICAgICAgICAgICAgICAgICBnbERyYXdNb2RlID09IGdsZW51bS5MSU5FX0xPT1BcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcHJldkRyYXdJbmRpY2VzQnVmZmVyID0gaW5kaWNlc0J1ZmZlcjtcbiAgICAgICAgICAgICAgICBwcmV2RHJhd0lzVXNlSW5kaWNlcyA9IGdlb21ldHJ5LmlzVXNlSW5kaWNlcygpO1xuICAgICAgICAgICAgICAgIC8vIERvIGRyYXdpbmdcbiAgICAgICAgICAgICAgICBpZiAocHJldkRyYXdJc1VzZUluZGljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9nbC5kcmF3RWxlbWVudHMoZ2xEcmF3TW9kZSwgaW5kaWNlc0J1ZmZlci5jb3VudCwgaW5kaWNlc1R5cGUsIDApO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRyaWFuZ2xlQ291bnQgKz0gaW5kaWNlc0J1ZmZlci5jb3VudCAvIDM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRyYXdBcnJheXMoZ2xEcmF3TW9kZSwgMCwgblZlcnRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhb0V4dCAmJiBpc1N0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZHJhd0NhbGxDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlckluZm87XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IHJlbmRlcmFibGVcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJlbmRlcmFibGV9XG4gICAgICovXG4gICAgY2xvbmU6IChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAnY2FzdFNoYWRvdycsICdyZWNlaXZlU2hhZG93JyxcbiAgICAgICAgICAgICdtb2RlJywgJ2N1bGxpbmcnLCAnY3VsbEZhY2UnLCAnZnJvbnRGYWNlJyxcbiAgICAgICAgICAgICdmcnVzdHVtQ3VsbGluZycsXG4gICAgICAgICAgICAncmVuZGVyT3JkZXInLCAnbGluZVdpZHRoJyxcbiAgICAgICAgICAgICdpZ25vcmVQaWNraW5nJywgJ2lnbm9yZVByZVonLCAnaWdub3JlR0J1ZmZlcidcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBOb2RlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICByZW5kZXJhYmxlLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcbiAgICAgICAgICAgIHJlbmRlcmFibGUubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgLy8gVHJ5IG5vdCB0byBvdmVyd3JpdGUgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlW25hbWVdICE9PSB0aGlzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGVbbmFtZV0gPSB0aGlzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGU7XG4gICAgICAgIH07XG4gICAgfSkoKVxufSk7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuUmVuZGVyYWJsZS5QT0lOVFMgPSBnbGVudW0uUE9JTlRTO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5SZW5kZXJhYmxlLkxJTkVTID0gZ2xlbnVtLkxJTkVTO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5SZW5kZXJhYmxlLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuTElORV9TVFJJUCA9IGdsZW51bS5MSU5FX1NUUklQO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5SZW5kZXJhYmxlLlRSSUFOR0xFUyA9IGdsZW51bS5UUklBTkdMRVM7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuVFJJQU5HTEVfRkFOID0gZ2xlbnVtLlRSSUFOR0xFX0ZBTjtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuUmVuZGVyYWJsZS5CQUNLID0gZ2xlbnVtLkJBQ0s7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuRlJPTlQgPSBnbGVudW0uRlJPTlQ7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuQ1cgPSBnbGVudW0uQ1c7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuQ0NXID0gZ2xlbnVtLkNDVztcblxuUmVuZGVyYWJsZS5SZW5kZXJJbmZvID0gUmVuZGVySW5mbztcblxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyYWJsZTtcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4vUmVuZGVyYWJsZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWVzaFxuICogQGV4dGVuZHMgY2xheS5SZW5kZXJhYmxlXG4gKi9cbnZhciBNZXNoID0gUmVuZGVyYWJsZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuTWVzaCMgKi9cbntcbiAgICAvKipcbiAgICAgKiBVc2VkIHdoZW4gaXQgaXMgYSBza2lubmVkIG1lc2hcbiAgICAgKiBAdHlwZSB7Y2xheS5Ta2VsZXRvbn1cbiAgICAgKi9cbiAgICBza2VsZXRvbjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBKb2ludHMgaW5kaWNlcyBNZXNoZXMgY2FuIHNoYXJlIHRoZSBvbmUgc2tlbGV0b24gaW5zdGFuY2UgYW5kIGVhY2ggbWVzaCBjYW4gdXNlIG9uZSBwYXJ0IG9mIGpvaW50cy4gSm9pbnRzIGluZGljZXMgaW5kaWNhdGUgdGhlIGluZGV4IG9mIGpvaW50IGluIHRoZSBza2VsZXRvbiBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICBqb2ludHM6IG51bGwsXG5cbiAgICAvKipcbiAgICAgKiBJZiBzdG9yZSB0aGUgc2tpbiBtYXRyaWNlcyBpbiB2ZXJ0ZXggdGV4dHVyZVxuICAgICAqIEB0eXBlIHtib29sfVxuICAgICAqL1xuICAgIHVzZVNraW5NYXRyaWNlc1RleHR1cmU6IGZhbHNlXG5cbn0sIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuam9pbnRzKSB7XG4gICAgICAgIHRoaXMuam9pbnRzID0gW107XG4gICAgfVxufSwge1xuXG4gICAgaXNTa2lubmVkTWVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy5za2VsZXRvbiAmJiB0aGlzLmpvaW50cyAmJiB0aGlzLmpvaW50cy5sZW5ndGggPiAwKTtcbiAgICB9LFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNoYWRlciwgcHJvZ3JhbSkge1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIC8vIFNldCBwb3NlIG1hdHJpY2VzIG9mIHNraW5uZWQgbWVzaFxuICAgICAgICBpZiAodGhpcy5za2VsZXRvbikge1xuICAgICAgICAgICAgLy8gVE9ETyBNdWx0aXBsZSBtZXNoIHNoYXJlIHNhbWUgc2tlbGV0b25cbiAgICAgICAgICAgIHRoaXMuc2tlbGV0b24udXBkYXRlKCk7XG5cbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheSA9IHRoaXMuc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKHRoaXMuX191aWRfXywgdGhpcy5qb2ludHMpO1xuXG4gICAgICAgICAgICAvLyBpZiAodGhpcy51c2VTa2luTWF0cmljZXNUZXh0dXJlKSB7XG4gICAgICAgICAgICAvLyAgICAgdmFyIHNpemU7XG4gICAgICAgICAgICAvLyAgICAgdmFyIG51bUpvaW50cyA9IHRoaXMuam9pbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIC8vICAgICBpZiAobnVtSm9pbnRzID4gMjU2KSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHNpemUgPSA2NDtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gNjQpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc2l6ZSA9IDMyO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgICBlbHNlIGlmIChudW1Kb2ludHMgPiAxNikge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaXplID0gMTY7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaXplID0gODtcbiAgICAgICAgICAgIC8vICAgICB9XG5cbiAgICAgICAgICAgIC8vICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZSgpO1xuICAgICAgICAgICAgLy8gICAgIHRleHR1cmUud2lkdGggPSBzaXplO1xuICAgICAgICAgICAgLy8gICAgIHRleHR1cmUuaGVpZ2h0ID0gc2l6ZTtcblxuICAgICAgICAgICAgLy8gICAgIGlmICghdGV4dHVyZS5waXhlbHMgfHwgdGV4dHVyZS5waXhlbHMubGVuZ3RoICE9PSBzaXplICogc2l6ZSAqIDQpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGV4dHVyZS5waXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiBzaXplICogNCk7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICAgIHRleHR1cmUucGl4ZWxzLnNldChza2luTWF0cmljZXNBcnJheSk7XG4gICAgICAgICAgICAvLyAgICAgdGV4dHVyZS5kaXJ0eSgpO1xuXG4gICAgICAgICAgICAvLyAgICAgc2hhZGVyLnNldFVuaWZvcm0oX2dsLCAnMWYnLCAnc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUnLCBzaXplKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdTS0lOX01BVFJJWCcsIHNraW5NYXRyaWNlc0FycmF5KTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZW5kZXJhYmxlLnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzLCByZW5kZXJlciwgc2hhZGVyLCBwcm9ncmFtKTtcbiAgICB9LFxuXG4gICAgZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9za2luTWF0cmljZXNUZXh0dXJlID0gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZSB8fCBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIHR5cGU6IGdsZW51bS5GTE9BVCxcbiAgICAgICAgICAgIG1pbkZpbHRlcjogZ2xlbnVtLk5FQVJFU1QsXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IGdsZW51bS5ORUFSRVNULFxuICAgICAgICAgICAgdXNlTWlwbWFwOiBmYWxzZSxcbiAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZTtcbiAgICB9XG59KTtcblxuLy8gRW51bXNcbk1lc2guUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcbk1lc2guTElORVMgPSBnbGVudW0uTElORVM7XG5NZXNoLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XG5NZXNoLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcbk1lc2guVFJJQU5HTEVTID0gZ2xlbnVtLlRSSUFOR0xFUztcbk1lc2guVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XG5NZXNoLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XG5cbk1lc2guQkFDSyA9IGdsZW51bS5CQUNLO1xuTWVzaC5GUk9OVCA9IGdsZW51bS5GUk9OVDtcbk1lc2guRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XG5NZXNoLkNXID0gZ2xlbnVtLkNXO1xuTWVzaC5DQ1cgPSBnbGVudW0uQ0NXO1xuXG5leHBvcnQgZGVmYXVsdCBNZXNoO1xuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZVxuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcbiAqL1xudmFyIFBlcnNwZWN0aXZlID0gQ2FtZXJhLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmUjICovXG57XG4gICAgLyoqXG4gICAgICogVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiBkZWdyZWVzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBmb3Y6IDUwLFxuICAgIC8qKlxuICAgICAqIEFzcGVjdCByYXRpbywgdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoIC8gaGVpZ2h0XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBhc3BlY3Q6IDEsXG4gICAgLyoqXG4gICAgICogTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbmVhcjogMC4xLFxuICAgIC8qKlxuICAgICAqIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZmFyOiAyMDAwXG59LFxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZS5wcm90b3R5cGUgKi9cbntcblxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmFkID0gdGhpcy5mb3YgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgucGVyc3BlY3RpdmUocmFkLCB0aGlzLmFzcGVjdCwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XG4gICAgfSxcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xuICAgICAgICB2YXIgcmFkID0gTWF0aC5hdGFuKDEgLyBtWzVdKSAqIDI7XG4gICAgICAgIHRoaXMuZm92ID0gcmFkIC8gTWF0aC5QSSAqIDE4MDtcbiAgICAgICAgdGhpcy5hc3BlY3QgPSBtWzVdIC8gbVswXTtcbiAgICAgICAgdGhpcy5uZWFyID0gbVsxNF0gLyAobVsxMF0gLSAxKTtcbiAgICAgICAgdGhpcy5mYXIgPSBtWzE0XSAvIChtWzEwXSArIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjYW1lcmEuZm92ID0gdGhpcy5mb3Y7XG4gICAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLmFzcGVjdDtcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcblxuICAgICAgICByZXR1cm4gY2FtZXJhO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQZXJzcGVjdGl2ZTtcbiIsImltcG9ydCBDYW1lcmEgZnJvbSAnLi4vQ2FtZXJhJztcbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY1xuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcbiAqL1xudmFyIE9ydGhvZ3JhcGhpYyA9IENhbWVyYS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpYyMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlZnQ6IC0xLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcmlnaHQ6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBuZWFyOiAtMSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGZhcjogMSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRvcDogMSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdHRvbTogLTFcbn0sXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpYy5wcm90b3R5cGUgKi9cbntcblxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgub3J0aG8odGhpcy5sZWZ0LCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSwgdGhpcy50b3AsIHRoaXMubmVhciwgdGhpcy5mYXIpO1xuICAgIH0sXG5cbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xuICAgICAgICB0aGlzLmxlZnQgPSAoLTEgLSBtWzEyXSkgLyBtWzBdO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gKDEgLSBtWzEyXSkgLyBtWzBdO1xuICAgICAgICB0aGlzLnRvcCA9ICgxIC0gbVsxM10pIC8gbVs1XTtcbiAgICAgICAgdGhpcy5ib3R0b20gPSAoLTEgLSBtWzEzXSkgLyBtWzVdO1xuICAgICAgICB0aGlzLm5lYXIgPSAtKC0xIC0gbVsxNF0pIC8gbVsxMF07XG4gICAgICAgIHRoaXMuZmFyID0gLSgxIC0gbVsxNF0pIC8gbVsxMF07XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjYW1lcmEubGVmdCA9IHRoaXMubGVmdDtcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gdGhpcy5yaWdodDtcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcbiAgICAgICAgY2FtZXJhLnRvcCA9IHRoaXMudG9wO1xuICAgICAgICBjYW1lcmEuYm90dG9tID0gdGhpcy5ib3R0b207XG5cbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgT3J0aG9ncmFwaGljO1xuIiwiZnVuY3Rpb24gZ2V0KG9wdGlvbnMpIHtcblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHhoci5vcGVuKCdnZXQnLCBvcHRpb25zLnVybCk7XG4gICAgLy8gV2l0aCByZXNwb25zZSB0eXBlIHNldCBicm93c2VyIGNhbiBnZXQgYW5kIHB1dCBiaW5hcnkgZGF0YVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1NlbmRpbmdfYW5kX1JlY2VpdmluZ19CaW5hcnlfRGF0YVxuICAgIC8vIERlZmF1bHQgaXMgdGV4dCwgYW5kIGl0IGNhbiBiZSBzZXRcbiAgICAvLyBhcnJheWJ1ZmZlciwgYmxvYiwgZG9jdW1lbnQsIGpzb24sIHRleHRcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgaWYgKG9wdGlvbnMub25wcm9ncmVzcykge1xuICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0XG4gICAgICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gZS5sb2FkZWQgLyBlLnRvdGFsO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhwZXJjZW50LCBlLmxvYWRlZCwgZS50b3RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9ucHJvZ3Jlc3MobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xuICAgICAgICAgICAgb3B0aW9ucy5vbmVycm9yICYmIG9wdGlvbnMub25lcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQgJiYgb3B0aW9ucy5vbmxvYWQoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMub25lcnJvcikge1xuICAgICAgICB4aHIub25lcnJvciA9IG9wdGlvbnMub25lcnJvcjtcbiAgICB9XG4gICAgeGhyLnNlbmQobnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXQgOiBnZXRcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHN0YW5kYXJkXFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQyIDogVEVYQ09PUkRfMTtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmIGRlZmluZWQoUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRCkgfHwgZGVmaW5lZChOT1JNQUxNQVBfRU5BQkxFRClcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChBT01BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkMjtcXG4jZW5kaWZcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gICAgdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiAgICB2ZWMzIHNraW5uZWRUYW5nZW50ID0gdGFuZ2VudC54eXo7XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAgICBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuICAgIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuICAgIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuICAgIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuICAgIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gICAgdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiAgICB2X1RhbmdlbnQgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZFRhbmdlbnQsIDAuMCkpLnh5eik7XFxuICAgIHZfQml0YW5nZW50ID0gbm9ybWFsaXplKGNyb3NzKHZfTm9ybWFsLCB2X1RhbmdlbnQpICogdGFuZ2VudC53KTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuICAgIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuICAgIHZfVGV4Y29vcmQyID0gdGV4Y29vcmQyO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5XFxuI2RlZmluZSBHTE9TU0lORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgUk9VR0hORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgTUVUQUxORVNTX0NIQU5ORUwgMVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MgOiAwLjU7XFxuICAgICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4gICAgI2VuZGlmXFxuI2Vsc2VcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M6IDAuNTtcXG4gICAgI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdsb3NzaW5lc3NNYXA7XFxuICAgICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuICAgICNpZmRlZiBQQVJBTExBWF9DT1JSRUNURURcXG51bmlmb3JtIHZlYzMgZW52aXJvbm1lbnRCb3hNaW47XFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWF4O1xcbiAgICAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG4jZW5kaWZcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBzc2FvTWFwO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XFxudW5pZm9ybSBmbG9hdCBhb0ludGVuc2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDI7XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcyA6IDAuMDtcXG4jZWxzZVxcbnVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yIDogWzAuMSwgMC4xLCAwLjFdO1xcbiNlbmRpZlxcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGVtaXNzaW9uSW50ZW5zaXR5OiAxO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxudW5pZm9ybSBmbG9hdCBtYXhNaXBtYXBMZXZlbDogNTtcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X3NoX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9jdWJlbWFwX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5wb2ludF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuZGlyZWN0aW9uYWxfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgU1BPVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuc3BvdF9saWdodFxcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG5AaW1wb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbkBpbXBvcnQgY2xheS51dGlsLnBhcmFsbGF4X2NvcnJlY3RcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxuZmxvYXQgR19TbWl0aChmbG9hdCBnLCBmbG9hdCBuZHYsIGZsb2F0IG5kbClcXG57XFxuICAgIGZsb2F0IHJvdWdobmVzcyA9IDEuMCAtIGc7XFxuICAgIGZsb2F0IGsgPSByb3VnaG5lc3MgKiByb3VnaG5lc3MgLyAyLjA7XFxuICAgIGZsb2F0IEcxViA9IG5kdiAvIChuZHYgKiAoMS4wIC0gaykgKyBrKTtcXG4gICAgZmxvYXQgRzFMID0gbmRsIC8gKG5kbCAqICgxLjAgLSBrKSArIGspO1xcbiAgICByZXR1cm4gRzFMICogRzFWO1xcbn1cXG52ZWMzIEZfU2NobGljayhmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiAgICByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbmZsb2F0IERfUGhvbmcoZmxvYXQgZywgZmxvYXQgbmRoKSB7XFxuICAgIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gICAgcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChmbG9hdCBnLCBmbG9hdCBuZGgpIHtcXG4gICAgZmxvYXQgciA9IDEuMCAtIGc7XFxuICAgIGZsb2F0IGEgPSByICogcjtcXG4gICAgZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiAgICByZXR1cm4gYSAvIChQSSAqIHRtcCAqIHRtcCk7XFxufVxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE9jY2x1c2lvblNjYWxlIDogMC4wMjtcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4TWF4TGF5ZXJzIDogMjA7XFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE1pbkxheWVycyA6IDU7XFxudW5pZm9ybSBzYW1wbGVyMkQgcGFyYWxsYXhPY2NsdXNpb25NYXA7XFxubWF0MyB0cmFuc3Bvc2UoaW4gbWF0MyBpbk1hdClcXG57XFxuICAgIHZlYzMgaTAgPSBpbk1hdFswXTtcXG4gICAgdmVjMyBpMSA9IGluTWF0WzFdO1xcbiAgICB2ZWMzIGkyID0gaW5NYXRbMl07XFxuICAgIHJldHVybiBtYXQzKFxcbiAgICAgICAgdmVjMyhpMC54LCBpMS54LCBpMi54KSxcXG4gICAgICAgIHZlYzMoaTAueSwgaTEueSwgaTIueSksXFxuICAgICAgICB2ZWMzKGkwLnosIGkxLnosIGkyLnopXFxuICAgICk7XFxufVxcbnZlYzIgcGFyYWxsYXhVdih2ZWMyIHV2LCB2ZWMzIHZpZXdEaXIpXFxue1xcbiAgICBmbG9hdCBudW1MYXllcnMgPSBtaXgocGFyYWxsYXhNYXhMYXllcnMsIHBhcmFsbGF4TWluTGF5ZXJzLCBhYnMoZG90KHZlYzMoMC4wLCAwLjAsIDEuMCksIHZpZXdEaXIpKSk7XFxuICAgIGZsb2F0IGxheWVySGVpZ2h0ID0gMS4wIC8gbnVtTGF5ZXJzO1xcbiAgICBmbG9hdCBjdXJMYXllckhlaWdodCA9IDAuMDtcXG4gICAgdmVjMiBkZWx0YVV2ID0gdmlld0Rpci54eSAqIHBhcmFsbGF4T2NjbHVzaW9uU2NhbGUgLyAodmlld0Rpci56ICogbnVtTGF5ZXJzKTtcXG4gICAgdmVjMiBjdXJVdiA9IHV2O1xcbiAgICBmbG9hdCBoZWlnaHQgPSAxLjAgLSB0ZXh0dXJlMkQocGFyYWxsYXhPY2NsdXNpb25NYXAsIGN1clV2KS5yO1xcbiAgICBmb3IgKGludCBpID0gMDsgaSA8IDMwOyBpKyspIHtcXG4gICAgICAgIGN1ckxheWVySGVpZ2h0ICs9IGxheWVySGVpZ2h0O1xcbiAgICAgICAgY3VyVXYgLT0gZGVsdGFVdjtcXG4gICAgICAgIGhlaWdodCA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgY3VyVXYpLnI7XFxuICAgICAgICBpZiAoaGVpZ2h0IDwgY3VyTGF5ZXJIZWlnaHQpIHtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB2ZWMyIHByZXZVdiA9IGN1clV2ICsgZGVsdGFVdjtcXG4gICAgZmxvYXQgbmV4dCA9IGhlaWdodCAtIGN1ckxheWVySGVpZ2h0O1xcbiAgICBmbG9hdCBwcmV2ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBwcmV2VXYpLnIgLSBjdXJMYXllckhlaWdodCArIGxheWVySGVpZ2h0O1xcbiAgICByZXR1cm4gbWl4KGN1clV2LCBwcmV2VXYsIG5leHQgLyAobmV4dCAtIHByZXYpKTtcXG59XFxuI2VuZGlmXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IGFsYmVkb0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gICAgYWxiZWRvQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4gICAgdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuICAgIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3MgLSB2X1dvcmxkUG9zaXRpb24pO1xcbiAgICB2ZWMyIHV2ID0gdl9UZXhjb29yZDtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiAgICBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuICAgIHV2ID0gcGFyYWxsYXhVdih2X1RleGNvb3JkLCBub3JtYWxpemUodHJhbnNwb3NlKHRibikgKiAtVikpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gICAgdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB1dik7XFxuICAgICNpZmRlZiBTUkdCX0RFQ09ERVxcbiAgICB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuICAgICNlbmRpZlxcbiAgICBhbGJlZG9Db2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiAgICAjaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiAgICBhbGJlZG9Db2xvci5hICo9IHRleGVsLmE7XFxuICAgICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUVUQUxORVNTXFxuICAgIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICAgICNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbiAgICBmbG9hdCBtMiA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHV2KVtNRVRBTE5FU1NfQ0hBTk5FTF07XFxuICAgIG0gPSBjbGFtcChtMiArIChtIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICAjZW5kaWZcXG4gICAgdmVjMyBiYXNlQ29sb3IgPSBhbGJlZG9Db2xvci5yZ2I7XFxuICAgIGFsYmVkb0NvbG9yLnJnYiA9IGJhc2VDb2xvciAqICgxLjAgLSBtKTtcXG4gICAgdmVjMyBzcGVjID0gbWl4KHZlYzMoMC4wNCksIGJhc2VDb2xvciwgbSk7XFxuI2Vsc2VcXG4gICAgdmVjMyBzcGVjID0gc3BlY3VsYXJDb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1JPVUdITkVTU1xcbiAgICBmbG9hdCBnID0gMS4wIC0gcm91Z2huZXNzO1xcbiAgICAjaWZkZWYgUk9VR0hORVNTTUFQX0VOQUJMRURcXG4gICAgZmxvYXQgZzIgPSAxLjAgLSB0ZXh0dXJlMkQocm91Z2huZXNzTWFwLCB1dilbUk9VR0hORVNTX0NIQU5ORUxdO1xcbiAgICBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gICAgI2VuZGlmXFxuI2Vsc2VcXG4gICAgZmxvYXQgZyA9IGdsb3NzaW5lc3M7XFxuICAgICNpZmRlZiBHTE9TU0lORVNTTUFQX0VOQUJMRURcXG4gICAgZmxvYXQgZzIgPSB0ZXh0dXJlMkQoZ2xvc3NpbmVzc01hcCwgdXYpW0dMT1NTSU5FU1NfQ0hBTk5FTF07XFxuICAgIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbiAgICBzcGVjICo9IHNSR0JUb0xpbmVhcih0ZXh0dXJlMkQoc3BlY3VsYXJNYXAsIHV2KSkucmdiO1xcbiNlbmRpZlxcbiAgICB2ZWMzIE4gPSB2X05vcm1hbDtcXG4jaWZkZWYgRE9VQkxFX1NJREVEXFxuICAgIGlmIChkb3QoTiwgVikgPCAwLjApIHtcXG4gICAgICAgIE4gPSAtTjtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbiAgICBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiAgICAgICAgdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHV2KS54eXo7XFxuICAgICAgICBpZiAoZG90KG5vcm1hbFRleGVsLCBub3JtYWxUZXhlbCkgPiAwLjApIHsgICAgICAgICAgICBOID0gbm9ybWFsVGV4ZWwgKiAyLjAgLSAxLjA7XFxuICAgICAgICAgICAgdGJuWzFdID0gLXRiblsxXTtcXG4gICAgICAgICAgICBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiAgICAgICAgfVxcbiAgICB9XFxuI2VuZGlmXFxuICAgIHZlYzMgZGlmZnVzZVRlcm0gPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiAgICB2ZWMzIHNwZWN1bGFyVGVybSA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuICAgIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiAgICB2ZWMzIGZyZXNuZWxUZXJtID0gRl9TY2hsaWNrKG5kdiwgc3BlYyk7XFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4gICAge3tcXG4gICAgICAgIGRpZmZ1c2VUZXJtICs9IGFtYmllbnRMaWdodENvbG9yW19pZHhfXTtcXG4gICAgfX1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiAgICB7e1xcbiAgICAgICAgZGlmZnVzZVRlcm0gKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCBOKSAqIGFtYmllbnRTSExpZ2h0Q29sb3JbX2lkeF9dO1xcbiAgICB9fVxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYnNQb2ludFtQT0lOVF9MSUdIVF9DT1VOVF07XFxuICAgIGlmKHNoYWRvd0VuYWJsZWQpXFxuICAgIHtcXG4gICAgICAgIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNQb2ludCk7XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuICAgIHt7XFxuICAgICAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiAgICAgICAgdmVjMyBsYyA9IHBvaW50TGlnaHRDb2xvcltfaWR4X107XFxuICAgICAgICBmbG9hdCByYW5nZSA9IHBvaW50TGlnaHRSYW5nZVtfaWR4X107XFxuICAgICAgICB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiAgICAgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gICAgICAgIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuICAgICAgICBMIC89IGRpc3Q7XFxuICAgICAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiAgICAgICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtfaWR4X107XFxuICAgICAgICB9XFxuI2VuZGlmXFxuICAgICAgICB2ZWMzIGxpID0gbGMgKiBuZGwgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuICAgICAgICBkaWZmdXNlVGVybSArPSBsaTtcXG4gICAgICAgIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiAgICB9fVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiAgICBpZihzaGFkb3dFbmFibGVkKVxcbiAgICB7XFxuICAgICAgICBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzRGlyKTtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4gICAge3tcXG4gICAgICAgIHZlYzMgTCA9IC1ub3JtYWxpemUoZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltfaWR4X10pO1xcbiAgICAgICAgdmVjMyBsYyA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltfaWR4X107XFxuICAgICAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiAgICAgICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNEaXJbX2lkeF9dO1xcbiAgICAgICAgfVxcbiNlbmRpZlxcbiAgICAgICAgdmVjMyBsaSA9IGxjICogbmRsICogc2hhZG93Q29udHJpYjtcXG4gICAgICAgIGRpZmZ1c2VUZXJtICs9IGxpO1xcbiAgICAgICAgc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuICAgIH19XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiAgICBpZihzaGFkb3dFbmFibGVkKVxcbiAgICB7XFxuICAgICAgICBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiAgICB7XFxuICAgICAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBzcG90TGlnaHRQb3NpdGlvbltpXTtcXG4gICAgICAgIHZlYzMgc3BvdExpZ2h0RGlyZWN0aW9uID0gLW5vcm1hbGl6ZShzcG90TGlnaHREaXJlY3Rpb25baV0pO1xcbiAgICAgICAgdmVjMyBsYyA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiAgICAgICAgZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gICAgICAgIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiAgICAgICAgZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuICAgICAgICBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gICAgICAgIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuICAgICAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiAgICAgICAgZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gICAgICAgIEwgLz0gZGlzdDtcXG4gICAgICAgIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBMKTtcXG4gICAgICAgIGZsb2F0IGZhbGxvZmY7XFxuICAgICAgICBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKCBiIC0gYSksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuICAgICAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgICAgICBpZiAoc2hhZG93RW5hYmxlZClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNTcG90W2ldO1xcbiAgICAgICAgfVxcbiNlbmRpZlxcbiAgICAgICAgdmVjMyBsaSA9IGxjICogYXR0ZW51YXRpb24gKiAoMS4wIC0gZmFsbG9mZikgKiBzaGFkb3dDb250cmliICogbmRsO1xcbiAgICAgICAgZGlmZnVzZVRlcm0gKz0gbGk7XFxuICAgICAgICBzcGVjdWxhclRlcm0gKz0gbGkgKiBmcmVzbmVsVGVybSAqIERfUGhvbmcoZywgbmRoKTtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICB2ZWM0IG91dENvbG9yID0gYWxiZWRvQ29sb3I7XFxuICAgIG91dENvbG9yLnJnYiAqPSBkaWZmdXNlVGVybTtcXG4gICAgb3V0Q29sb3IucmdiICs9IHNwZWN1bGFyVGVybTtcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuICAgIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAgICBmbG9hdCByb3VnaDIgPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGJpYXMyID0gcm91Z2gyICogNS4wO1xcbiAgICB2ZWMyIGJyZGZQYXJhbTIgPSB0ZXh0dXJlMkQoYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbMF0sIHZlYzIocm91Z2gyLCBuZHYpKS54eTtcXG4gICAgdmVjMyBlbnZXZWlnaHQyID0gc3BlYyAqIGJyZGZQYXJhbTIueCArIGJyZGZQYXJhbTIueTtcXG4gICAgdmVjMyBlbnZUZXhlbDI7XFxuICAgIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4gICAge3tcXG4gICAgICAgIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMLCBiaWFzMiksIDUxLjUpO1xcbiAgICAgICAgb3V0Q29sb3IucmdiICs9IGFtYmllbnRDdWJlbWFwTGlnaHRDb2xvcltfaWR4X10gKiBlbnZUZXhlbDIgKiBlbnZXZWlnaHQyO1xcbiAgICB9fVxcbiNlbmRpZlxcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9FTkFCTEVEXFxuICAgIHZlYzMgZW52V2VpZ2h0ID0gZyAqIGZyZXNuZWxUZXJtO1xcbiAgICB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gICAgI2lmZGVmIFBBUkFMTEFYX0NPUlJFQ1RFRFxcbiAgICBMID0gcGFyYWxsYXhDb3JyZWN0KEwsIHZfV29ybGRQb3NpdGlvbiwgZW52aXJvbm1lbnRCb3hNaW4sIGVudmlyb25tZW50Qm94TWF4KTtcXG4gICAgI2VuZGlmXFxuICAgICNpZmRlZiBFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVJcXG4gICAgZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGJpYXMgPSByb3VnaCAqIG1heE1pcG1hcExldmVsO1xcbiAgICB2ZWMzIGVudlRleGVsID0gZGVjb2RlSERSKHRleHR1cmVDdWJlTG9kRVhUKGVudmlyb25tZW50TWFwLCBMLCBiaWFzKSkucmdiO1xcbiAgICAgICAgI2lmZGVmIEJSREZMT09LVVBfRU5BQkxFRFxcbiAgICB2ZWMyIGJyZGZQYXJhbSA9IHRleHR1cmUyRChicmRmTG9va3VwLCB2ZWMyKHJvdWdoLCBuZHYpKS54eTtcXG4gICAgZW52V2VpZ2h0ID0gc3BlYyAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuICAgICAgICAjZW5kaWZcXG4gICAgI2Vsc2VcXG4gICAgdmVjMyBlbnZUZXhlbCA9IHRleHR1cmVDdWJlKGVudmlyb25tZW50TWFwLCBMKS54eXo7XFxuICAgICNlbmRpZlxcbiAgICBvdXRDb2xvci5yZ2IgKz0gZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuI2VuZGlmXFxuICAgIGZsb2F0IGFvRmFjdG9yID0gMS4wO1xcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG4gICAgYW9GYWN0b3IgPSBtaW4odGV4dHVyZTJEKHNzYW9NYXAsIChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dykuciwgYW9GYWN0b3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxuICAgIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQoYW9NYXAsIHZfVGV4Y29vcmQyKS5yKSAqIGFvSW50ZW5zaXR5LCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4gICAgb3V0Q29sb3IucmdiICo9IGFvRmFjdG9yO1xcbiAgICB2ZWMzIGxFbWlzc2lvbiA9IGVtaXNzaW9uO1xcbiNpZmRlZiBFTUlTU0lWRU1BUF9FTkFCTEVEXFxuICAgIGxFbWlzc2lvbiAqPSB0ZXh0dXJlMkQoZW1pc3NpdmVNYXAsIHV2KS5yZ2I7XFxuI2VuZGlmXFxuICAgIG91dENvbG9yLnJnYiArPSBsRW1pc3Npb24gKiBlbWlzc2lvbkludGVuc2l0eTtcXG4gICAgaWYobGluZVdpZHRoID4gMC4pXFxuICAgIHtcXG4gICAgICAgIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiAgICB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gICAgaWYgKG91dENvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiAgICAgICAgZGlzY2FyZDtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiAgICBvdXRDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcob3V0Q29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gICAgb3V0Q29sb3IgPSBsaW5lYXJUb3NSR0Iob3V0Q29sb3IpO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIob3V0Q29sb3IpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkTVIudmVydGV4XFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLnZlcnRleFxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmRNUi5mcmFnbWVudFxcbiNkZWZpbmUgVVNFX01FVEFMTkVTU1xcbiNkZWZpbmUgVVNFX1JPVUdITkVTU1xcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5mcmFnbWVudFxcbkBlbmRcIjtcbiIsImltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcblxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XG5pbXBvcnQgc3RhbmRhcmRFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcblxuLy8gSW1wb3J0IHN0YW5kYXJkIHNoYWRlclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xuXG52YXIgVEVYVFVSRV9QUk9QRVJUSUVTID0gWydkaWZmdXNlTWFwJywgJ25vcm1hbE1hcCcsICdyb3VnaG5lc3NNYXAnLCAnbWV0YWxuZXNzTWFwJywgJ2VtaXNzaXZlTWFwJywgJ2Vudmlyb25tZW50TWFwJywgJ2JyZGZMb29rdXAnLCAnc3Nhb01hcCcsICdhb01hcCddO1xudmFyIFNJTVBMRV9QUk9QRVJUSUVTID0gWydjb2xvcicsICdlbWlzc2lvbicsICdlbWlzc2lvbkludGVuc2l0eScsICdhbHBoYScsICdyb3VnaG5lc3MnLCAnbWV0YWxuZXNzJywgJ3V2UmVwZWF0JywgJ3V2T2Zmc2V0JywgJ2FvSW50ZW5zaXR5JywgJ2FscGhhQ3V0b2ZmJ107XG52YXIgUFJPUEVSVElFU19DSEFOR0VfU0hBREVSID0gWydsaW5lYXInLCAnZW5jb2RlUkdCTScsICdkZWNvZGVSR0JNJywgJ2RvdWJsZVNpZGVkJywgJ2FscGhhVGVzdCcsICdyb3VnaG5lc3NDaGFubmVsJywgJ21ldGFsbmVzc0NoYW5uZWwnLCAnZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZCddO1xuXG52YXIgTlVNX0RFRklORV9NQVAgPSB7XG4gICAgJ3JvdWdobmVzc0NoYW5uZWwnOiAnUk9VR0hORVNTX0NIQU5ORUwnLFxuICAgICdtZXRhbG5lc3NDaGFubmVsJzogJ01FVEFMTkVTU19DSEFOTkVMJ1xufTtcbnZhciBCT09MX0RFRklORV9NQVAgPSB7XG4gICAgJ2xpbmVhcic6ICdTUkdCX0RFQ09ERScsXG4gICAgJ2VuY29kZVJHQk0nOiAnUkdCTV9FTkNPREUnLFxuICAgICdkZWNvZGVSR0JNJzogJ1JHQk1fREVDT0RFJyxcbiAgICAnZG91YmxlU2lkZWQnOiAnRE9VQkxFX1NJREVEJyxcbiAgICAnYWxwaGFUZXN0JzogJ0FMUEhBX1RFU1QnLFxuICAgICdlbnZpcm9ubWVudE1hcFByZWZpbHRlcmVkJzogJ0VOVklST05NRU5UTUFQX1BSRUZJTFRFUidcbn1cblxuXG52YXIgc3RhbmRhcmRTaGFkZXI7XG4vKipcbiAqIFN0YW5kYXJkIG1hdGVyaWFsIHdpdGhvdXQgY3VzdG9tIHNoYWRlci5cbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlN0YW5kYXJkTWF0ZXJpYWxcbiAqIEBleHRlbmRzIGNsYXkuQmFzZVxuICogQGV4YW1wbGVcbiAqIHZhciBtYXQgPSBuZXcgY2xheS5TdGFuZGFyZE1hdGVyaWFsKHtcbiAqICAgICBjb2xvcjogWzEsIDEsIDFdLFxuICogICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VUZXh0dXJlXG4gKiB9KTtcbiAqIG1hdC5yb3VnaG5lc3MgPSAxO1xuICovXG52YXIgU3RhbmRhcmRNYXRlcmlhbCA9IE1hdGVyaWFsLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGFuZGFyZFNoYWRlcikge1xuICAgICAgICBzdGFuZGFyZFNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyB7XG4gICAgICAgIHNoYWRlcjogc3RhbmRhcmRTaGFkZXJcbiAgICB9O1xufSwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIC8vIFBFTkRJTkdcbiAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRpb24pO1xuICAgIC8vIEV4dGVuZCBhZnRlciBzaGFkZXIgaXMgY3JlYXRlZC5cbiAgICB1dGlsLmRlZmF1bHRzKHRoaXMsIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyAge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMSwgMV1cbiAgICAgICAgICovXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDAsIDBdXG4gICAgICAgICAqL1xuICAgICAgICBlbWlzc2lvbjogWzAsIDAsIDBdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAwXG4gICAgICAgICAqL1xuICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQGRlZmF1bHQgMC41XG4gICAgICAgICAqL1xuICAgICAgICByb3VnaG5lc3M6IDAuNSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQGRlZmF1bHQgMFxuICAgICAgICAgKi9cbiAgICAgICAgbWV0YWxuZXNzOiAwLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAxXG4gICAgICAgICAqL1xuICAgICAgICBhbHBoYTogMSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBhbHBoYVRlc3Q6IGZhbHNlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDdXRvZmYgdGhyZXNob2xkIGZvciBhbHBoYSB0ZXN0XG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBhbHBoYUN1dG9mZjogMC45LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIC8vIFRPRE8gTXVzdCBkaXNhYmxlIGN1bGxpbmcuXG4gICAgICAgIGRvdWJsZVNpZGVkOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJSREYgTG9va3VwIGlzIGdlbmVyYXRlZCBieSBjbGF5LnV0aWwuY3ViZW1hcC5pbnRlZ3JhdGVCcmRmXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cbiAgICAgICAgICogQGRlZmF1bHQgWzEsIDFdXG4gICAgICAgICAqL1xuICAgICAgICB1dlJlcGVhdDogWzEsIDFdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XG4gICAgICAgICAqIEBkZWZhdWx0IFswLCAwXVxuICAgICAgICAgKi9cbiAgICAgICAgdXZPZmZzZXQ6IFswLCAwXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQGRlZmF1bHQgMVxuICAgICAgICAgKi9cbiAgICAgICAgYW9JbnRlbnNpdHk6IDEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZDogZmFsc2UsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgbGluZWFyOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBlbmNvZGVSR0JNOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBkZWNvZGVSR0JNOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge051bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIHJvdWdobmVzc0NoYW5uZWw6IDAsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMVxuICAgIH0pO1xuXG4gICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9NRVRBTE5FU1MnKTtcbiAgICB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xufSwge1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIFNJTVBMRV9QUk9QRVJUSUVTLmNvbmNhdChQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcbiAgICB9XG59KTtcblxuU0lNUExFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHByb3BOYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShwcm9wTmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChwcm9wTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0ocHJvcE5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG5cblBST1BFUlRJRVNfQ0hBTkdFX1NIQURFUi5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgIHZhciBwcml2YXRlS2V5ID0gJ18nICsgcHJvcE5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3ByaXZhdGVLZXldO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpc1twcml2YXRlS2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHByb3BOYW1lIGluIE5VTV9ERUZJTkVfTUFQKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBOVU1fREVGSU5FX01BUFtwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBCT09MX0RFRklORV9NQVBbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIHZhbHVlID8gdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSkgOiB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAnZW52aXJvbm1lbnRCb3gnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbnZCb3ggPSB0aGlzLl9lbnZpcm9ubWVudEJveDtcbiAgICAgICAgaWYgKGVudkJveCkge1xuICAgICAgICAgICAgZW52Qm94Lm1pbi5zZXRBcnJheSh0aGlzLmdldCgnZW52aXJvbm1lbnRCb3hNaW4nKSk7XG4gICAgICAgICAgICBlbnZCb3gubWF4LnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1heCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW52Qm94O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9lbnZpcm9ubWVudEJveCA9IHZhbHVlO1xuXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zIHx8IHt9O1xuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1pbiddIHx8IHtcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddID0gdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWF4J10gfHwge1xuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUT0RPIENhbid0IGRldGVjdCBvcGVyYXRpb24gbGlrZSBib3gubWluID0gbmV3IFZlY3RvcigpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudEJveE1pbicsIHZhbHVlLm1pbi5hcnJheSk7XG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50Qm94TWF4JywgdmFsdWUubWF4LmFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BBUkFMTEFYX0NPUlJFQ1RFRCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bmRlZmluZSgnZnJhZ21lbnQnLCAnUEFSQUxMQVhfQ09SUkVDVEVEJyk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU3RhbmRhcmRNYXRlcmlhbDtcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5Kb2ludFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEpvaW50ID0gQmFzZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuSm9pbnQjICovXG57XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTMjaXNzdWVjb21tZW50LTI5MjE2NTc2XG4gICAgLyoqXG4gICAgICogSm9pbnQgbmFtZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgbmFtZTogJycsXG4gICAgLyoqXG4gICAgICogSW5kZXggb2Ygam9pbnQgaW4gdGhlIHNrZWxldG9uXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBpbmRleDogLTEsXG5cbiAgICAvKipcbiAgICAgKiBTY2VuZSBub2RlIGF0dGFjaGVkIHRvXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cbiAgICAgKi9cbiAgICBub2RlOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogUm9vdCBzY2VuZSBub2RlIG9mIHRoZSBza2VsZXRvbiwgd2hpY2ggcGFyZW50IG5vZGUgaXMgbnVsbCBvciBkb24ndCBoYXZlIGEgam9pbnRcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIHJvb3ROb2RlOiBudWxsXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSm9pbnQ7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgSm9pbnQgZnJvbSAnLi9Kb2ludCc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XG52YXIgcXVhdCA9IGdsTWF0cml4LnF1YXQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2tlbGV0b25cbiAqL1xudmFyIFNrZWxldG9uID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU2tlbGV0b24jICove1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWxhdGl2ZSByb290IG5vZGUgdGhhdCBub3QgYWZmZWN0IHRyYW5zZm9ybSBvZiBqb2ludC5cbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cbiAgICAgICAgICovXG4gICAgICAgIHJlbGF0aXZlUm9vdE5vZGU6IG51bGwsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgbmFtZTogJycsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGpvaW50c1xuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPGNsYXkuSm9pbnQ+fVxuICAgICAgICAgKi9cbiAgICAgICAgam9pbnRzOiBbXSxcblxuICAgICAgICBfY2xpcHM6IFtdLFxuXG4gICAgICAgIC8vIE1hdHJpeCB0byBqb2ludCBzcGFjZSAocmVsYXRpdmUgdG8gcm9vdCBqb2ludClcbiAgICAgICAgX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheTogbnVsbCxcblxuICAgICAgICAvLyBVc2Ugc3ViYXJyYXkgaW5zdGVhZCBvZiBjb3B5IGJhY2sgZWFjaCB0aW1lIGNvbXB1dGluZyBtYXRyaXhcbiAgICAgICAgLy8gaHR0cDovL2pzcGVyZi5jb20vc3ViYXJyYXktdnMtY29weS1mb3ItYXJyYXktdHJhbnNmb3JtLzVcbiAgICAgICAgX2pvaW50TWF0cmljZXNTdWJBcnJheXM6IFtdLFxuXG4gICAgICAgIC8vIGpvaW50TWF0cml4ICogY3VycmVudFBvc2VNYXRyaXhcbiAgICAgICAgLy8gd29ybGRUcmFuc2Zvcm0gaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgYm9uZVxuICAgICAgICAvLyBzdGlsbCBpbiBtb2RlbCBzcGFjZSBub3Qgd29ybGQgc3BhY2VcbiAgICAgICAgX3NraW5NYXRyaWNlc0FycmF5OiBudWxsLFxuXG4gICAgICAgIF9za2luTWF0cmljZXNTdWJBcnJheXM6IFtdLFxuXG4gICAgICAgIF9zdWJTa2luTWF0cmljZXNBcnJheToge31cbiAgICB9O1xufSxcbi8qKiBAbGVuZHMgY2xheS5Ta2VsZXRvbi5wcm90b3R5cGUgKi9cbntcblxuICAgIC8qKlxuICAgICAqIEFkZCBhIHNraW5uaW5nIGNsaXAgYW5kIGNyZWF0ZSBhIG1hcCBiZXR3ZWVuIGNsaXAgYW5kIHNrZWxldG9uXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5Ta2lubmluZ0NsaXB9IGNsaXBcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW21hcFJ1bGVdIE1hcCBiZXR3ZWVuIGpvaW50IG5hbWUgaW4gc2tlbGV0b24gYW5kIGpvaW50IG5hbWUgaW4gY2xpcFxuICAgICAqL1xuICAgIGFkZENsaXA6IGZ1bmN0aW9uIChjbGlwLCBtYXBSdWxlKSB7XG4gICAgICAgIC8vIENsaXAgaGF2ZSBiZWVuIGV4aXN0cyBpblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpcHNbaV0uY2xpcCA9PT0gY2xpcCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXAgdGhlIGpvaW50IGluZGV4IGluIHNrZWxldG9uIHRvIGpvaW50IHBvc2UgaW5kZXggaW4gY2xpcFxuICAgICAgICB2YXIgbWFwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtYXBzW2ldID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGF2YXRhclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gdGhpcy5qb2ludHNbal07XG4gICAgICAgICAgICAgICAgdmFyIHRyYWNrID0gY2xpcC50cmFja3NbaV07XG4gICAgICAgICAgICAgICAgdmFyIGpvaW50TmFtZSA9IGpvaW50Lm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG1hcFJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgam9pbnROYW1lID0gbWFwUnVsZVtqb2ludE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHJhY2submFtZSA9PT0gam9pbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcHNbal0gPSBpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jbGlwcy5wdXNoKHtcbiAgICAgICAgICAgIG1hcHM6IG1hcHMsXG4gICAgICAgICAgICBjbGlwOiBjbGlwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwcy5sZW5ndGggLSAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxuICAgICAqL1xuICAgIHJlbW92ZUNsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XG4gICAgICAgIHZhciBpZHggPSAtMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jbGlwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2ldLmNsaXAgPT09IGNsaXApIHtcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGlwcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xuICAgICAqL1xuICAgIHJlbW92ZUNsaXBzQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBjbGlwIGJ5IGluZGV4XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBpbmRleFxuICAgICAqL1xuICAgIGdldENsaXA6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5fY2xpcHNbaW5kZXhdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHNbaW5kZXhdLmNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldENsaXBOdW1iZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzLmxlbmd0aDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIGpvaW50IG1hdHJpY2VzIGZyb20gbm9kZSB0cmFuc2Zvcm1cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cbiAgICB1cGRhdGVKb2ludE1hdHJpY2VzOiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBtNCA9IG1hdDQuY3JlYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5qb2ludHMubGVuZ3RoICogMTYpO1xuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xuICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLnJlbGF0aXZlUm9vdE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgbWF0NC5pbnZlcnQobTQsIHRoaXMucmVsYXRpdmVSb290Tm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XG4gICAgICAgICAgICAgICAgLy8gICAgIG1hdDQubXVsdGlwbHkoXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBtNCxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIG00LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheVxuICAgICAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgICAgIC8vICAgICBtYXQ0LmludmVydChtNCwgbTQpO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5jb3B5KG00LCBqb2ludC5ub2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobTQsIG00KTtcbiAgICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaSAqIDE2O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXlbb2Zmc2V0ICsgal0gPSBtNFtqXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgc2V0Sm9pbnRNYXRyaWNlc0FycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IGFycjtcbiAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFyci5sZW5ndGgpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XG4gICAgfSxcblxuICAgIHVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcbiAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5LnN1YmFycmF5KGkgKiAxNiwgKGkrMSkgKiAxNik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXG4gICAgICovXG4gICAgdXBkYXRlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyB2YXIgbTQgPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHkoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcbiAgICAgICAgICAgICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fam9pbnRNYXRyaWNlc1N1YkFycmF5c1tpXVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBKb2ludCBzcGFjZSBpcyByZWxhdGl2ZSB0byByb290LCBpZiBoYXZlXG4gICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucmVsYXRpdmVSb290Tm9kZSkge1xuICAgICAgICAgICAgICAgIC8vICAgICBtYXQ0LmludmVydChtNCwgdGhpcy5yZWxhdGl2ZVJvb3ROb2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgbWF0NC5tdWx0aXBseShcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIG00LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldXG4gICAgICAgICAgICAgICAgLy8gICAgICk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICBnZXRTdWJTa2luTWF0cmljZXM6IGZ1bmN0aW9uIChtZXNoSWQsIGpvaW50cykge1xuICAgICAgICB2YXIgc3ViQXJyYXkgPSB0aGlzLl9zdWJTa2luTWF0cmljZXNBcnJheVttZXNoSWRdO1xuICAgICAgICBpZiAoIXN1YkFycmF5KSB7XG4gICAgICAgICAgICBzdWJBcnJheVxuICAgICAgICAgICAgICAgID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXVxuICAgICAgICAgICAgICAgID0gbmV3IEZsb2F0MzJBcnJheShqb2ludHMubGVuZ3RoICogMTYpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGlkeCA9IGpvaW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xuICAgICAgICAgICAgICAgIHN1YkFycmF5W2N1cnNvcisrXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5W2lkeCAqIDE2ICsgal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1YkFycmF5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgcG9zZSBhbmQgdXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNsaXBJbmRleFxuICAgICAqL1xuICAgIHNldFBvc2U6IGZ1bmN0aW9uIChjbGlwSW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2NsaXBJbmRleF0pIHtcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcHNbY2xpcEluZGV4XS5jbGlwO1xuICAgICAgICAgICAgdmFyIG1hcHMgPSB0aGlzLl9jbGlwc1tjbGlwSW5kZXhdLm1hcHM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAobWFwc1tpXSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBwb3NlID0gY2xpcC50cmFja3NbbWFwc1tpXV07XG5cbiAgICAgICAgICAgICAgICAvLyBOb3QgdXBkYXRlIGlmIHRoZXJlIGlzIG5vIGRhdGEuXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBJZiBzeW5jIHBvc2UucG9zaXRpb24sIHBvc2Uucm90YXRpb24sIHBvc2Uuc2NhbGVcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB2ZWMzLmNvcHkoam9pbnQubm9kZS5wb3NpdGlvbi5hcnJheSwgcG9zZS5wb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1YXQuY29weShqb2ludC5ub2RlLnJvdGF0aW9uLmFycmF5LCBwb3NlLnJvdGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMuc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUuc2NhbGUuYXJyYXksIHBvc2Uuc2NhbGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnJvdGF0aW9uLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgam9pbnQubm9kZS5zY2FsZS5fZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfSxcblxuICAgIGNsb25lOiBmdW5jdGlvbiAocm9vdE5vZGUsIG5ld1Jvb3ROb2RlKSB7XG4gICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpO1xuICAgICAgICBza2VsZXRvbi5uYW1lID0gdGhpcy5uYW1lO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBuZXdKb2ludCA9IG5ldyBKb2ludCgpO1xuICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSA9IHRoaXMuam9pbnRzW2ldLm5hbWU7XG4gICAgICAgICAgICBuZXdKb2ludC5pbmRleCA9IHRoaXMuam9pbnRzW2ldLmluZGV4O1xuXG4gICAgICAgICAgICB2YXIgcGF0aCA9IHRoaXMuam9pbnRzW2ldLm5vZGUuZ2V0UGF0aChyb290Tm9kZSk7XG4gICAgICAgICAgICB2YXIgcm9vdE5vZGVQYXRoID0gdGhpcy5qb2ludHNbaV0ucm9vdE5vZGUuZ2V0UGF0aChyb290Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChwYXRoICE9IG51bGwgJiYgcm9vdE5vZGVQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdKb2ludC5ub2RlID0gbmV3Um9vdE5vZGUucXVlcnlOb2RlKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignU29tZXRoaW5nIHdyb25nIGluIGNsb25lLCBtYXkgYmUgdGhlIHNrZWxldG9uIHJvb3Qgbm9kZXMgaXMgbm90IG1vdW50ZWQgb24gdGhlIGNsb25lZCByb290IG5vZGUuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNrZWxldG9uLmpvaW50cy5wdXNoKG5ld0pvaW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkpIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBza2VsZXRvbi5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XG5cbiAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBza2VsZXRvbi51cGRhdGUoKTtcblxuICAgICAgICByZXR1cm4gc2tlbGV0b247XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNrZWxldG9uO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkudXRpbC5yYW5kXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIHV2KSB7XFxuICAgIGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MztcXG4gICAgaGlnaHAgZmxvYXQgZHQgPSBkb3QodXYueHksIHZlYzIoYSxiKSksIHNuID0gbW9kKGR0LCAzLjE0MTU5MjY1MzU4OTc5Myk7XFxuICAgIHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG51bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRmFjdG9yIDogNS4wO1xcbmZsb2F0IGxpZ2h0QXR0ZW51YXRpb24oZmxvYXQgZGlzdCwgZmxvYXQgcmFuZ2UpXFxue1xcbiAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IDEuMDtcXG4gICAgYXR0ZW51YXRpb24gPSBkaXN0KmRpc3QvKHJhbmdlKnJhbmdlKzEuMCk7XFxuICAgIGZsb2F0IGF0dF9zID0gYXR0ZW51YXRpb25GYWN0b3I7XFxuICAgIGF0dGVudWF0aW9uID0gMS4wLyhhdHRlbnVhdGlvbiphdHRfcysxLjApO1xcbiAgICBhdHRfcyA9IDEuMC8oYXR0X3MrMS4wKTtcXG4gICAgYXR0ZW51YXRpb24gPSBhdHRlbnVhdGlvbiAtIGF0dF9zO1xcbiAgICBhdHRlbnVhdGlvbiAvPSAxLjAgLSBhdHRfcztcXG4gICAgcmV0dXJuIGNsYW1wKGF0dGVudWF0aW9uLCAwLjAsIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiAgICB2ZWMzIGQgPSBmd2lkdGgodl9CYXJ5Y2VudHJpYyk7XFxuICAgIHZlYzMgYTMgPSBzbW9vdGhzdGVwKHZlYzMoMC4wKSwgZCAqIHdpZHRoLCB2X0JhcnljZW50cmljKTtcXG4gICAgcmV0dXJuIG1pbihtaW4oYTMueCwgYTMueSksIGEzLnopO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudmVjNCBlbmNvZGVGbG9hdChjb25zdCBpbiBmbG9hdCBkZXB0aClcXG57XFxuICAgIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgyNTYuMCoyNTYuMCoyNTYuMCwgMjU2LjAqMjU2LjAsIDI1Ni4wLCAxLjApO1xcbiAgICBjb25zdCB2ZWM0IGJpdF9tYXNrICA9IHZlYzQoMC4wLCAxLjAvMjU2LjAsIDEuMC8yNTYuMCwgMS4wLzI1Ni4wKTtcXG4gICAgdmVjNCByZXMgPSBmcmFjdChkZXB0aCAqIGJpdFNoaWZ0cyk7XFxuICAgIHJlcyAtPSByZXMueHh5eiAqIGJpdF9tYXNrO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuZmxvYXQgZGVjb2RlRmxvYXQoY29uc3QgaW4gdmVjNCBjb2xvcilcXG57XFxuICAgIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgxLjAvKDI1Ni4wKjI1Ni4wKjI1Ni4wKSwgMS4wLygyNTYuMCoyNTYuMCksIDEuMC8yNTYuMCwgMS4wKTtcXG4gICAgcmV0dXJuIGRvdChjb2xvciwgYml0U2hpZnRzKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmZsb2F0XFxuQGltcG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxudmVjMyBSR0JNRGVjb2RlKHZlYzQgcmdibSwgZmxvYXQgcmFuZ2UpIHtcXG4gIHJldHVybiByYW5nZSAqIHJnYm0ucmdiICogcmdibS5hO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IFJHQk1FbmNvZGUodmVjMyBjb2xvciwgZmxvYXQgcmFuZ2UpIHtcXG4gICAgaWYgKGRvdChjb2xvciwgY29sb3IpID09IDAuMCkge1xcbiAgICAgICAgcmV0dXJuIHZlYzQoMC4wKTtcXG4gICAgfVxcbiAgICB2ZWM0IHJnYm07XFxuICAgIGNvbG9yIC89IHJhbmdlO1xcbiAgICByZ2JtLmEgPSBjbGFtcChtYXgobWF4KGNvbG9yLnIsIGNvbG9yLmcpLCBtYXgoY29sb3IuYiwgMWUtNikpLCAwLjAsIDEuMCk7XFxuICAgIHJnYm0uYSA9IGNlaWwocmdibS5hICogMjU1LjApIC8gMjU1LjA7XFxuICAgIHJnYm0ucmdiID0gY29sb3IgLyByZ2JtLmE7XFxuICAgIHJldHVybiByZ2JtO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IGRlY29kZUhEUih2ZWM0IGNvbG9yKVxcbntcXG4jaWYgZGVmaW5lZChSR0JNX0RFQ09ERSkgfHwgZGVmaW5lZChSR0JNKVxcbiAgICByZXR1cm4gdmVjNChSR0JNRGVjb2RlKGNvbG9yLCA1MS41KSwgMS4wKTtcXG4jZWxzZVxcbiAgICByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbnZlYzQgZW5jb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fRU5DT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuICAgIHJldHVybiBSR0JNRW5jb2RlKGNvbG9yLnh5eiwgNTEuNSk7XFxuI2Vsc2VcXG4gICAgcmV0dXJuIGNvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzQgc1JHQlRvTGluZWFyKGluIHZlYzQgdmFsdWUpIHtcXG4gICAgcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKDAuMDUyMTMyNzAxNCksIHZlYzMoMi40KSksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjA0MDQ1KSkpKSwgdmFsdWUudyk7XFxufVxcbnZlYzQgbGluZWFyVG9zUkdCKGluIHZlYzQgdmFsdWUpIHtcXG4gICAgcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IsIHZlYzMoMC40MTY2NikpICogMS4wNTUgLSB2ZWMzKDAuMDU1KSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMobGVzc1RoYW5FcXVhbCh2YWx1ZS5yZ2IsIHZlYzMoMC4wMDMxMzA4KSkpKSwgdmFsdWUudyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFNLSU5OSU5HXFxuYXR0cmlidXRlIHZlYzMgd2VpZ2h0IDogV0VJR0hUO1xcbmF0dHJpYnV0ZSB2ZWM0IGpvaW50IDogSk9JTlQ7XFxudW5pZm9ybSBtYXQ0IHNraW5NYXRyaXhbSk9JTlRfQ09VTlRdIDogU0tJTl9NQVRSSVg7XFxubWF0NCBnZXRTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiAgICByZXR1cm4gc2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG5tYXQ0IHNraW5NYXRyaXhXUyA9IGdldFNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG5pZiAod2VpZ2h0LnkgPiAxZS00KVxcbntcXG4gICAgc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTtcXG59XFxuaWYgKHdlaWdodC56ID4gMWUtNClcXG57XFxuICAgIHNraW5NYXRyaXhXUyArPSBnZXRTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7XFxufVxcbmZsb2F0IHdlaWdodFcgPSAxLjAtd2VpZ2h0Lngtd2VpZ2h0Lnktd2VpZ2h0Lno7XFxuaWYgKHdlaWdodFcgPiAxZS00KVxcbntcXG4gICAgc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbnZlYzMgcGFyYWxsYXhDb3JyZWN0KGluIHZlYzMgZGlyLCBpbiB2ZWMzIHBvcywgaW4gdmVjMyBib3hNaW4sIGluIHZlYzMgYm94TWF4KSB7XFxuICAgIHZlYzMgZmlyc3QgPSAoYm94TWF4IC0gcG9zKSAvIGRpcjtcXG4gICAgdmVjMyBzZWNvbmQgPSAoYm94TWluIC0gcG9zKSAvIGRpcjtcXG4gICAgdmVjMyBmdXJ0aGVyID0gbWF4KGZpcnN0LCBzZWNvbmQpO1xcbiAgICBmbG9hdCBkaXN0ID0gbWluKGZ1cnRoZXIueCwgbWluKGZ1cnRoZXIueSwgZnVydGhlci56KSk7XFxuICAgIHZlYzMgZml4ZWRQb3MgPSBwb3MgKyBkaXIgKiBkaXN0O1xcbiAgICB2ZWMzIGJveENlbnRlciA9IChib3hNYXggKyBib3hNaW4pICogMC41O1xcbiAgICByZXR1cm4gbm9ybWFsaXplKGZpeGVkUG9zIC0gYm94Q2VudGVyKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZlYzQgY2xhbXBTYW1wbGUoY29uc3QgaW4gc2FtcGxlcjJEIHRleHR1cmUsIGNvbnN0IGluIHZlYzIgY29vcmQpXFxue1xcbiNpZmRlZiBTVEVSRU9cXG4gICAgZmxvYXQgZXllID0gc3RlcCgwLjUsIGNvb3JkLngpICogMC41O1xcbiAgICB2ZWMyIGNvb3JkQ2xhbXBlZCA9IGNsYW1wKGNvb3JkLCB2ZWMyKGV5ZSwgMC4wKSwgdmVjMigwLjUgKyBleWUsIDEuMCkpO1xcbiNlbHNlXFxuICAgIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoMC4wKSwgdmVjMigxLjApKTtcXG4jZW5kaWZcXG4gICAgcmV0dXJuIHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZENsYW1wZWQpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiAgICBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gICAgY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuICAgIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiAgICBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gICAgY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuICAgIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmJhc2ljLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgOiBbMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA6IFswLjAsIDAuMF07XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG5hdHRyaWJ1dGUgdmVjNCBhX0NvbG9yIDogQ09MT1I7XFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiAgICB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiAgICB2X0JhcnljZW50cmljID0gYmFyeWNlbnRyaWM7XFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gICAgdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuYmFzaWMuZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAwLjA7XFxudW5pZm9ybSB2ZWM0IGxpbmVDb2xvciA6IFswLjAsIDAuMCwgMC4wLCAwLjZdO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuI2lmZGVmIFJFTkRFUl9URVhDT09SRFxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZfVGV4Y29vcmQsIDEuMCwgMS4wKTtcXG4gICAgcmV0dXJuO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiAgICBnbF9GcmFnQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxuICAgIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuICAgIHRleCA9IHNSR0JUb0xpbmVhcih0ZXgpO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKERJRkZVU0VNQVBfQUxQSEFfQUxQSEEpXFxuICAgIGdsX0ZyYWdDb2xvci5hID0gdGV4LmE7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4LnJnYjtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gICAgaWYoIGxpbmVXaWR0aCA+IDAuKVxcbiAgICB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiAgICB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gICAgaWYgKGdsX0ZyYWdDb2xvci5hIDwgYWxwaGFDdXRvZmYpIHtcXG4gICAgICAgIGRpc2NhcmQ7XFxuICAgIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhnbF9GcmFnQ29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gICAgZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9zUkdCKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5sYW1iZXJ0LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICAgIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuICAgIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNCggc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gICAgdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gICAgdl9Ob3JtYWwgPSBub3JtYWxpemUoICggd29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApICkueHl6ICk7XFxuICAgIHZfV29ybGRQb3NpdGlvbiA9ICggd29ybGQgKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCkgKS54eXo7XFxuICAgIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuICAgIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQuZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuI2lmZGVmIFJFTkRFUl9OT1JNQUxcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2X05vcm1hbCAqIDAuNSArIDAuNSwgMS4wKTtcXG4gICAgcmV0dXJuO1xcbiNlbmRpZlxcbiNpZmRlZiBSRU5ERVJfVEVYQ09PUkRcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2X1RleGNvb3JkLCAxLjAsIDEuMCk7XFxuICAgIHJldHVybjtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gICAgZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCggZGlmZnVzZU1hcCwgdl9UZXhjb29yZCApO1xcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiAgICB0ZXgucmdiID0gcG93KHRleC5yZ2IsIHZlYzMoMi4yKSk7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4LnJnYjtcXG4jaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiAgICBnbF9GcmFnQ29sb3IuYSAqPSB0ZXguYTtcXG4jZW5kaWZcXG4jZW5kaWZcXG4gICAgdmVjMyBkaWZmdXNlQ29sb3IgPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuICAgIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuICAgIHtcXG4gICAgICAgIGRpZmZ1c2VDb2xvciArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuICAgIH1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiAgICB7e1xcbiAgICAgICAgZGlmZnVzZUNvbG9yICs9IGNhbGNBbWJpZW50U0hMaWdodChfaWR4Xywgdl9Ob3JtYWwpICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuICAgIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiAgICBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gICAgaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiAgICB7XFxuICAgICAgICBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzUG9pbnQpO1xcbiAgICB9XFxuI2VuZGlmXFxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCBQT0lOVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiAgICB7XFxuICAgICAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25baV07XFxuICAgICAgICB2ZWMzIGxpZ2h0Q29sb3IgPSBwb2ludExpZ2h0Q29sb3JbaV07XFxuICAgICAgICBmbG9hdCByYW5nZSA9IHBvaW50TGlnaHRSYW5nZVtpXTtcXG4gICAgICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiAgICAgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiAgICAgICAgbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gICAgICAgIGZsb2F0IG5kbCA9IGRvdCggdl9Ob3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XFxuICAgICAgICBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgICAgIGlmKCBzaGFkb3dFbmFibGVkIClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtpXTtcXG4gICAgICAgIH1cXG4jZW5kaWZcXG4gICAgICAgIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogY2xhbXAobmRsLCAwLjAsIDEuMCkgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuICAgIH1cXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgIGZsb2F0IHNoYWRvd0NvbnRyaWJzRGlyW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXTtcXG4gICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAge1xcbiAgICAgICAgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic0Rpcik7XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZm9yKGludCBpID0gMDsgaSA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBpKyspXFxuICAgIHtcXG4gICAgICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSAtZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltpXTtcXG4gICAgICAgIHZlYzMgbGlnaHRDb2xvciA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltpXTtcXG4gICAgICAgIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKSk7XFxuICAgICAgICBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgICAgIGlmKCBzaGFkb3dFbmFibGVkIClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNEaXJbaV07XFxuICAgICAgICB9XFxuI2VuZGlmXFxuICAgICAgICBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogc2hhZG93Q29udHJpYjtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAge1xcbiAgICAgICAgY29tcHV0ZVNoYWRvd09mU3BvdExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzU3BvdCk7XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZm9yKGludCBpID0gMDsgaSA8IFNQT1RfTElHSFRfQ09VTlQ7IGkrKylcXG4gICAge1xcbiAgICAgICAgdmVjMyBsaWdodFBvc2l0aW9uID0gLXNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiAgICAgICAgdmVjMyBzcG90TGlnaHREaXJlY3Rpb24gPSAtbm9ybWFsaXplKCBzcG90TGlnaHREaXJlY3Rpb25baV0gKTtcXG4gICAgICAgIHZlYzMgbGlnaHRDb2xvciA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiAgICAgICAgZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gICAgICAgIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiAgICAgICAgZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuICAgICAgICBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gICAgICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiAgICAgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiAgICAgICAgbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gICAgICAgIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBmbG9hdCBmYWxsb2ZmO1xcbiAgICAgICAgZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyggYiAtIGEpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmYWxsb2ZmID0gcG93KGZhbGxvZmYsIGZhbGxvZmZGYWN0b3IpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gZG90KHZfTm9ybWFsLCBsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBuZGwgPSBjbGFtcChuZGwsIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgICAgICBpZiggc2hhZG93RW5hYmxlZCApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzU3BvdFtpXTtcXG4gICAgICAgIH1cXG4jZW5kaWZcXG4gICAgICAgIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogbmRsICogYXR0ZW51YXRpb24gKiAoMS4wLWZhbGxvZmYpICogc2hhZG93Q29udHJpYjtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IucmdiICo9IGRpZmZ1c2VDb2xvcjtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gICAgaWYobGluZVdpZHRoID4gMC4pXFxuICAgIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuICAgIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiAgICBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiAgICAgICAgZGlzY2FyZDtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKGdsX0ZyYWdDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiAgICBnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb3NSR0IoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LndpcmVmcmFtZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiAgICBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wICk7XFxuICAgIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS53aXJlZnJhbWUuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDEuMDtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbnZvaWQgbWFpbigpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gY29sb3I7XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gKDEuMC1lZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogYWxwaGE7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNreWJveC52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc2t5Ym94LmZyYWdtZW50XFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZpcm9ubWVudE1hcDtcXG51bmlmb3JtIGZsb2F0IGxvZDogMC4wO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiAgICB2ZWMzIHZpZXdEaXJlY3Rpb24gPSBub3JtYWxpemUodl9Xb3JsZFBvc2l0aW9uIC0gZXllUG9zKTtcXG4jaWZkZWYgTE9EXFxuICAgIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmVMb2RFWFQoZW52aXJvbm1lbnRNYXAsIHZpZXdEaXJlY3Rpb24sIGxvZCkpO1xcbiNlbHNlXFxuICAgIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIHZpZXdEaXJlY3Rpb24pKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gICAgdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiAgICB0ZXhlbC5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcodGV4ZWwucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gICAgdGV4ZWwgPSBsaW5lYXJUb3NSR0IodGV4ZWwpO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh0ZXhlbC5yZ2IsIDEuMCkpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmNvbG9yYWRqdXN0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgZ2FtbWEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBzYXR1cmF0aW9uIDogMS4wO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IGNsYW1wKHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpLCAwLjAsIDEuMCk7XFxuICAgIGNvbG9yID0gY2xhbXAoIChjb2xvci12ZWMzKDAuNSkpKmNvbnRyYXN0K3ZlYzMoMC41KSwgMC4wLCAxLjApO1xcbiAgICBjb2xvciA9IGNsYW1wKCBjb2xvciAqIHBvdygyLjAsIGV4cG9zdXJlKSwgMC4wLCAxLjApO1xcbiAgICBjb2xvciA9IGNsYW1wKCBwb3coY29sb3IsIHZlYzMoZ2FtbWEpKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoIGNvbG9yLCB3ICk7XFxuICAgIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRuZXNzXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb250cmFzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiAgICB2ZWMzIGNvbG9yID0gKHRleC5yZ2ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmV4cG9zdXJlXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHRleC5yZ2IgKiBwb3coMi4wLCBleHBvc3VyZSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmdhbW1hXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHBvdyh0ZXgucmdiLCB2ZWMzKGdhbW1hKSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnNhdHVyYXRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHRleC5yZ2I7XFxuICAgIGZsb2F0IGx1bWluYW5jZSA9IGRvdChjb2xvciwgdyk7XFxuICAgIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFs5XTtcXG5nYXVzc2lhbktlcm5lbFswXSA9IDAuMDc7XFxuZ2F1c3NpYW5LZXJuZWxbMV0gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzJdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFszXSA9IDAuMTQ7XFxuZ2F1c3NpYW5LZXJuZWxbNF0gPSAwLjE2O1xcbmdhdXNzaWFuS2VybmVsWzVdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs2XSA9IDAuMTI7XFxuZ2F1c3NpYW5LZXJuZWxbN10gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzhdID0gMC4wNztcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzEzXFxuZmxvYXQgZ2F1c3NpYW5LZXJuZWxbMTNdO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wMjtcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjEzO1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjExO1xcbmdhdXNzaWFuS2VybmVsWzldID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFsxMF0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzExXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMTJdID0gMC4wMjtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1clxcbiNkZWZpbmUgU0hBREVSX05BTUUgZ2F1c3NpYW5fYmx1clxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7dmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDIuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG51bmlmb3JtIGZsb2F0IGJsdXJEaXIgOiAwLjA7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbiAodm9pZClcXG57XFxuICAgIEBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmtlcm5lbC5nYXVzc2lhbl85XFxuICAgIHZlYzIgb2ZmID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4gICAgb2ZmICo9IHZlYzIoMS4wIC0gYmx1ckRpciwgYmx1ckRpcik7XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB3ZWlnaHRBbGwgPSAwLjA7XFxuICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7XFxuICAgICAgICBmbG9hdCB3ID0gZ2F1c3NpYW5LZXJuZWxbaV07XFxuICAgICAgICB2ZWM0IHRleGVsID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBmbG9hdChpIC0gNCkgKiBvZmYpKTtcXG4gICAgICAgIHN1bSArPSB0ZXhlbCAqIHc7XFxuICAgICAgICB3ZWlnaHRBbGwgKz0gdztcXG4gICAgfVxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoc3VtIC8gbWF4KHdlaWdodEFsbCwgMC4wMSkpO1xcbn1cXG5AZW5kXFxuXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sb2dfbHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCB0ZXggPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gICAgZmxvYXQgbHVtaW5hbmNlID0gZG90KHRleC5yZ2IsIHcpO1xcbiAgICBsdW1pbmFuY2UgPSBsb2cobHVtaW5hbmNlICsgMC4wMDEpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmx1bV9hZGFwdGlvblxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFkYXB0ZWRMdW07XFxudW5pZm9ybSBzYW1wbGVyMkQgY3VycmVudEx1bTtcXG51bmlmb3JtIGZsb2F0IGZyYW1lVGltZSA6IDAuMDI7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICBmbG9hdCBmQWRhcHRlZEx1bSA9IGRlY29kZUhEUih0ZXh0dXJlMkQoYWRhcHRlZEx1bSwgdmVjMigwLjUsIDAuNSkpKS5yO1xcbiAgICBmbG9hdCBmQ3VycmVudEx1bSA9IGV4cChlbmNvZGVIRFIodGV4dHVyZTJEKGN1cnJlbnRMdW0sIHZlYzIoMC41LCAwLjUpKSkucik7XFxuICAgIGZBZGFwdGVkTHVtICs9IChmQ3VycmVudEx1bSAtIGZBZGFwdGVkTHVtKSAqICgxLjAgLSBwb3coMC45OCwgMzAuMCAqIGZyYW1lVGltZSkpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGZBZGFwdGVkTHVtKSwgMS4wKSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdW1cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkICk7XFxuICAgIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHV0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsb29rdXA7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiAgICBmbG9hdCBibHVlQ29sb3IgPSB0ZXguYiAqIDYzLjA7XFxuICAgIHZlYzIgcXVhZDE7XFxuICAgIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gICAgcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuICAgIHZlYzIgcXVhZDI7XFxuICAgIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiAgICBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiAgICB2ZWMyIHRleFBvczE7XFxuICAgIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXgucik7XFxuICAgIHRleFBvczEueSA9IChxdWFkMS55ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXguZyk7XFxuICAgIHZlYzIgdGV4UG9zMjtcXG4gICAgdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gICAgdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gICAgdmVjNCBuZXdDb2xvcjEgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MxKTtcXG4gICAgdmVjNCBuZXdDb2xvcjIgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MyKTtcXG4gICAgdmVjNCBuZXdDb2xvciA9IG1peChuZXdDb2xvcjEsIG5ld0NvbG9yMiwgZnJhY3QoYmx1ZUNvbG9yKSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobmV3Q29sb3IucmdiLCB0ZXgudyk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudmlnbmV0dGVcXG4jZGVmaW5lIE9VVFBVVF9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBkYXJrbmVzczogMTtcXG51bmlmb3JtIGZsb2F0IG9mZnNldDogMTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IHRleGVsLnJnYjtcXG4gICAgdmVjMiB1diA9ICh2X1RleGNvb3JkIC0gdmVjMigwLjUpKSAqIHZlYzIob2Zmc2V0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQobWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSBkYXJrbmVzcyksIGRvdCh1diwgdXYpKSwgdGV4ZWwuYSkpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLm91dHB1dFxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXgucmdiO1xcbiNpZmRlZiBPVVRQVVRfQUxQSEFcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXguYTtcXG4jZWxzZVxcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxuI2lmZGVmIFBSRU1VTFRJUExZX0FMUEhBXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHRocmVzaG9sZCA6IDE7XFxudW5pZm9ybSBmbG9hdCBzY2FsZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemU6IFs1MTIsIDUxMl07XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuY29uc3QgdmVjMyBsdW1XZWlnaHQgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWM0IG1lZGlhbih2ZWM0IGEsIHZlYzQgYiwgdmVjNCBjKVxcbntcXG4gICAgcmV0dXJuIGEgKyBiICsgYyAtIG1pbihtaW4oYSwgYiksIGMpIC0gbWF4KG1heChhLCBiKSwgYyk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiAgICB2ZWMzIGQgPSAxLjAgLyB0ZXh0dXJlU2l6ZS54eXggKiB2ZWMzKDEuMCwgMS4wLCAwLjApO1xcbiAgICB2ZWM0IHMxID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eikpO1xcbiAgICB2ZWM0IHMyID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eikpO1xcbiAgICB2ZWM0IHMzID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiAgICB2ZWM0IHM0ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiAgICB0ZXhlbCA9IG1lZGlhbihtZWRpYW4odGV4ZWwsIHMxLCBzMiksIHMzLCBzNCk7XFxuI2VuZGlmXFxuICAgIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IgLCBsdW1XZWlnaHQpO1xcbiAgICB2ZWM0IGNvbG9yO1xcbiAgICBpZiAobHVtID4gdGhyZXNob2xkICYmIHRleGVsLmEgPiAwLjApXFxuICAgIHtcXG4gICAgICAgIGNvbG9yID0gdmVjNCh0ZXhlbC5yZ2IgKiBzY2FsZSwgdGV4ZWwuYSAqIHNjYWxlKTtcXG4gICAgfVxcbiAgICBlbHNlXFxuICAgIHtcXG4gICAgICAgIGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICB9XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5cIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG93bnNhbXBsZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuZmxvYXQgYnJpZ2h0bmVzcyh2ZWMzIGMpXFxue1xcbiAgICByZXR1cm4gbWF4KG1heChjLnIsIGMuZyksIGMuYik7XFxufVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiAgICB2ZWMzIHMxID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSkucmdiO1xcbiAgICB2ZWMzIHMyID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSkucmdiO1xcbiAgICB2ZWMzIHMzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkucmdiO1xcbiAgICB2ZWMzIHM0ID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkucmdiO1xcbiAgICBmbG9hdCBzMXcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMSkgKyAxLjApO1xcbiAgICBmbG9hdCBzMncgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMikgKyAxLjApO1xcbiAgICBmbG9hdCBzM3cgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMykgKyAxLjApO1xcbiAgICBmbG9hdCBzNHcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzNCkgKyAxLjApO1xcbiAgICBmbG9hdCBvbmVEaXZpZGVTdW0gPSAxLjAgLyAoczF3ICsgczJ3ICsgczN3ICsgczR3KTtcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoXFxuICAgICAgICAoczEgKiBzMXcgKyBzMiAqIHMydyArIHMzICogczN3ICsgczQgKiBzNHcpICogb25lRGl2aWRlU3VtLFxcbiAgICAgICAgMS4wXFxuICAgICk7XFxuI2Vsc2VcXG4gICAgdmVjNCBjb2xvciA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiAgICBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gICAgY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSk7XFxuICAgIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiAgICBjb2xvciAqPSAwLjI1O1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnVwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIsIDUxMl07XFxudW5pZm9ybSBmbG9hdCBzYW1wbGVTY2FsZTogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5jbGFtcF9zYW1wbGVcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuICAgIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuICAgIHZlYzQgcztcXG4gICAgcyAgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAtIGQueHkpKTtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAtIGQud3kpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAtIGQuenkpKTtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAgICAgICApKSAqIDQuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQud3kpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHMgLyAxNi4wKTtcXG4jZWxzZVxcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsICsxLjAsICsxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4gICAgdmVjNCBzO1xcbiAgICBzICA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiAgICBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiAgICBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiAgICBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDQuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmNvbXBvc2l0ZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zZmxhcmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2RpcnQ7XFxuI2VuZGlmXFxuI2lmZGVmIExVTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbHVtO1xcbiNlbmRpZlxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1dDtcXG4jZW5kaWZcXG4jaWZkZWYgQ09MT1JfQ09SUkVDVElPTlxcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0bmVzcyA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGNvbnRyYXN0IDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVklHTkVUVEVcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlRGFya25lc3M6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlT2Zmc2V0OiAxLjA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGJsb29tSW50ZW5zaXR5IDogMC4yNTtcXG51bmlmb3JtIGZsb2F0IGxlbnNmbGFyZUludGVuc2l0eSA6IDE7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiAgICBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gICAgY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuICAgIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiAgICBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gICAgY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuICAgIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbmZsb2F0IGV5ZUFkYXB0aW9uKGZsb2F0IGZMdW0pXFxue1xcbiAgICByZXR1cm4gbWl4KDAuMiwgZkx1bSwgMC41KTtcXG59XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxudmVjMyBsdXRUcmFuc2Zvcm0odmVjMyBjb2xvcikge1xcbiAgICBmbG9hdCBibHVlQ29sb3IgPSBjb2xvci5iICogNjMuMDtcXG4gICAgdmVjMiBxdWFkMTtcXG4gICAgcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiAgICBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gICAgdmVjMiBxdWFkMjtcXG4gICAgcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuICAgIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuICAgIHZlYzIgdGV4UG9zMTtcXG4gICAgdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiAgICB0ZXhQb3MxLnkgPSAocXVhZDEueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuICAgIHZlYzIgdGV4UG9zMjtcXG4gICAgdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiAgICB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuICAgIHZlYzQgbmV3Q29sb3IxID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMSk7XFxuICAgIHZlYzQgbmV3Q29sb3IyID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMik7XFxuICAgIHZlYzQgbmV3Q29sb3IgPSBtaXgobmV3Q29sb3IxLCBuZXdDb2xvcjIsIGZyYWN0KGJsdWVDb2xvcikpO1xcbiAgICByZXR1cm4gbmV3Q29sb3IucmdiO1xcbn1cXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ZWwgPSB2ZWM0KDAuMCk7XFxuICAgIHZlYzQgb3JpZ2luYWxUZXhlbCA9IHZlYzQoMC4wKTtcXG4jaWZkZWYgVEVYVFVSRV9FTkFCTEVEXFxuICAgIHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuICAgIG9yaWdpbmFsVGV4ZWwgPSB0ZXhlbDtcXG4jZW5kaWZcXG4jaWZkZWYgQkxPT01fRU5BQkxFRFxcbiAgICB2ZWM0IGJsb29tVGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSk7XFxuICAgIHRleGVsLnJnYiArPSBibG9vbVRleGVsLnJnYiAqIGJsb29tSW50ZW5zaXR5O1xcbiAgICB0ZXhlbC5hICs9IGJsb29tVGV4ZWwuYSAqIGJsb29tSW50ZW5zaXR5O1xcbiNlbmRpZlxcbiNpZmRlZiBMRU5TRkxBUkVfRU5BQkxFRFxcbiAgICB0ZXhlbCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkpICogdGV4dHVyZTJEKGxlbnNkaXJ0LCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eTtcXG4jZW5kaWZcXG4gICAgdGV4ZWwuYSA9IG1pbih0ZXhlbC5hLCAxLjApO1xcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbiAgICBmbG9hdCBmTHVtID0gdGV4dHVyZTJEKGx1bSwgdmVjMigwLjUsIDAuNSkpLnI7XFxuICAgIGZsb2F0IGFkYXB0ZWRMdW1EZXN0ID0gMy4wIC8gKG1heCgwLjEsIDEuMCArIDEwLjAqZXllQWRhcHRpb24oZkx1bSkpKTtcXG4gICAgZmxvYXQgZXhwb3N1cmVCaWFzID0gYWRhcHRlZEx1bURlc3QgKiBleHBvc3VyZTtcXG4jZWxzZVxcbiAgICBmbG9hdCBleHBvc3VyZUJpYXMgPSBleHBvc3VyZTtcXG4jZW5kaWZcXG4gICAgdGV4ZWwucmdiICo9IGV4cG9zdXJlQmlhcztcXG4gICAgdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuICAgIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG4gICAgdGV4ZWwucmdiID0gbHV0VHJhbnNmb3JtKGNsYW1wKHRleGVsLnJnYix2ZWMzKDAuMCksdmVjMygxLjApKSk7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG4gICAgdGV4ZWwucmdiID0gY2xhbXAodGV4ZWwucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiAgICB0ZXhlbC5yZ2IgPSBjbGFtcCgodGV4ZWwucmdiIC0gdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuICAgIHRleGVsLnJnYiA9IG1peCh2ZWMzKGx1bSksIHRleGVsLnJnYiwgc2F0dXJhdGlvbik7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxuICAgIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKHZpZ25ldHRlT2Zmc2V0KTtcXG4gICAgdGV4ZWwucmdiID0gbWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSB2aWduZXR0ZURhcmtuZXNzKSwgZG90KHV2LCB1dikpO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4ZWwpO1xcbiNpZmRlZiBERUJVR1xcbiAgICAjaWYgREVCVUcgPT0gMVxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSkpO1xcbiAgICAjZWxpZiBERUJVRyA9PSAyXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSkgKiBibG9vbUludGVuc2l0eSk7XFxuICAgICNlbGlmIERFQlVHID09IDNcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQobGVuc2ZsYXJlLCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eSkpO1xcbiAgICAjZW5kaWZcXG4jZW5kaWZcXG4gICAgaWYgKG9yaWdpbmFsVGV4ZWwuYSA8PSAwLjAxICYmIGdsX0ZyYWdDb2xvci5hID4gMWUtNSkge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgPSBkb3QoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuICAgIH1cXG4jaWZkZWYgUFJFTVVMVElQTFlfQUxQSEFcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcXG4jZW5kaWZcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuY29jXFxudW5pZm9ybSBzYW1wbGVyMkQgZGVwdGg7XFxudW5pZm9ybSBmbG9hdCB6TmVhcjogMC4xO1xcbnVuaWZvcm0gZmxvYXQgekZhcjogMjAwMDtcXG51bmlmb3JtIGZsb2F0IGZvY2FsRGlzdDogMztcXG51bmlmb3JtIGZsb2F0IGZvY2FsUmFuZ2U6IDE7XFxudW5pZm9ybSBmbG9hdCBmb2NhbExlbmd0aDogMzA7XFxudW5pZm9ybSBmbG9hdCBmc3RvcDogMi44O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpXFxue1xcbiAgICBmbG9hdCB6ID0gdGV4dHVyZTJEKGRlcHRoLCB2X1RleGNvb3JkKS5yICogMi4wIC0gMS4wO1xcbiAgICBmbG9hdCBkaXN0ID0gMi4wICogek5lYXIgKiB6RmFyIC8gKHpGYXIgKyB6TmVhciAtIHogKiAoekZhciAtIHpOZWFyKSk7XFxuICAgIGZsb2F0IGFwZXJ0dXJlID0gZm9jYWxMZW5ndGggLyBmc3RvcDtcXG4gICAgZmxvYXQgY29jO1xcbiAgICBmbG9hdCB1cHBwZXIgPSBmb2NhbERpc3QgKyBmb2NhbFJhbmdlO1xcbiAgICBmbG9hdCBsb3dlciA9IGZvY2FsRGlzdCAtIGZvY2FsUmFuZ2U7XFxuICAgIGlmIChkaXN0IDw9IHVwcHBlciAmJiBkaXN0ID49IGxvd2VyKSB7XFxuICAgICAgICBjb2MgPSAwLjU7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBmbG9hdCBmb2NhbEFkanVzdGVkID0gZGlzdCA+IHVwcHBlciA/IHVwcHBlciA6IGxvd2VyO1xcbiAgICAgICAgY29jID0gYWJzKGFwZXJ0dXJlICogKGZvY2FsTGVuZ3RoICogKGRpc3QgLSBmb2NhbEFkanVzdGVkKSkgLyAoZGlzdCAqIChmb2NhbEFkanVzdGVkIC0gZm9jYWxMZW5ndGgpKSk7XFxuICAgICAgICBjb2MgPSBjbGFtcChjb2MsIDAuMCwgMC40KSAvIDAuNDAwMDAwMTtcXG4gICAgICAgIGlmIChkaXN0IDwgbG93ZXIpIHtcXG4gICAgICAgICAgICBjb2MgPSAtY29jO1xcbiAgICAgICAgfVxcbiAgICAgICAgY29jID0gY29jICogMC41ICsgMC41O1xcbiAgICB9XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGNvYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YucHJlbXVsdGlwbHlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvYztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxudm9pZCBtYWluKCkge1xcbiAgICBmbG9hdCBmQ29jID0gbWF4KGFicyhkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkKSkgKiAyLjAgLSAxLjApLCAwLjEpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoXFxuICAgICAgICB2ZWM0KGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpLnJnYiAqIGZDb2MsIDEuMClcXG4gICAgKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmRvZi5taW5fY29jXFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbkBpbXBvcnQgY2xheS51dGlsLmZsb2F0XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgMS4wLCAxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4gICAgZmxvYXQgZkNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuICAgIGZDb2MgPSBtaW4oZkNvYywgZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuenkpKSk7XFxuICAgIGZDb2MgPSBtaW4oZkNvYywgZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQueHcpKSk7XFxuICAgIGZDb2MgPSBtaW4oZkNvYywgZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuencpKSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGZDb2MpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLm1heF9jb2NcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMi4wLCA1MTIuMF07XFxuQGltcG9ydCBjbGF5LnV0aWwuZmxvYXRcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCAxLjAsIDEuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5O1xcbiAgICBmbG9hdCBmQ29jID0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gICAgZkNvYyA9IG1heChmQ29jLCBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC56eSkpKTtcXG4gICAgZkNvYyA9IG1heChmQ29jLCBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC54dykpKTtcXG4gICAgZkNvYyA9IG1heChmQ29jLCBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC56dykpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZkNvYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuY29jX3Vwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2M7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuZmxvYXRcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuICAgIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuICAgIGZsb2F0IHM7XFxuICAgIHMgID0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCAtIGQueHkpKTtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkIC0gZC53eSkpICogMi4wO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuICAgIHMgKz0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuencpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICAgICAgICkpICogNC4wO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnh3KSkgKiAyLjA7XFxuICAgIHMgKz0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC53eSkpICogMi4wO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KHMgLyAxNi4wKTtcXG4jZWxzZVxcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsICsxLjAsICsxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4gICAgZmxvYXQgcztcXG4gICAgcyAgPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuICAgIHMgKz0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQueHcpKTtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChzIC8gNC4wKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmRvZi51cHNhbXBsZVxcbiNkZWZpbmUgSElHSF9RVUFMSVRZXFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IHRhcCh2ZWMyIHV2LCBpbm91dCB2ZWM0IGNvbG9yLCBmbG9hdCBiYXNlV2VpZ2h0KSB7XFxuICAgIGZsb2F0IHdlaWdodCA9IGFicyhkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB1dikpICogMi4wIC0gMS4wKSAqIGJhc2VXZWlnaHQ7XFxuICAgIGNvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdXYpKSAqIHdlaWdodDtcXG4gICAgcmV0dXJuIHdlaWdodDtcXG59XFxudm9pZCBtYWluKClcXG57XFxuI2lmZGVmIEhJR0hfUVVBTElUWVxcbiAgICB2ZWM0IGQgPSB2ZWM0KDEuMCwgMS4wLCAtMS4wLCAwLjApIC8gdGV4dHVyZVNpemUueHl4eSAqIHNhbXBsZVNjYWxlO1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCBiYXNlV2VpZ2h0ID0gMS4wIC8gMTYuMDtcXG4gICAgZmxvYXQgdyAgPSB0YXAodl9UZXhjb29yZCAtIGQueHksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCAtIGQud3ksIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCAtIGQuenksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQuencsIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCAgICAgICAsIGNvbG9yLCBiYXNlV2VpZ2h0ICogNC4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQueHcsIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQuenksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQud3ksIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQueHksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGNvbG9yIC8gdyk7XFxuI2Vsc2VcXG4gICAgdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCArMS4wLCArMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IGJhc2VXZWlnaHQgPSAxLjAgLyA0LjA7XFxuICAgIGZsb2F0IHcgID0gdGFwKHZfVGV4Y29vcmQgKyBkLnh5LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIHcgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnp5LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIHcgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnh3LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIHcgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnp3LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvciAvIHcpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmRvd25zYW1wbGVcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvYztcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCB0YXAodmVjMiB1diwgaW5vdXQgdmVjNCBjb2xvcikge1xcbiAgICBmbG9hdCB3ZWlnaHQgPSBhYnMoZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdXYpKSAqIDIuMCAtIDEuMCkgKiAwLjI1O1xcbiAgICBjb2xvciArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHV2KSkgKiB3ZWlnaHQ7XFxuICAgIHJldHVybiB3ZWlnaHQ7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHdlaWdodCA9IHRhcCh2X1RleGNvb3JkICsgZC54eSwgY29sb3IpO1xcbiAgICB3ZWlnaHQgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnp5LCBjb2xvcik7XFxuICAgIHdlaWdodCArPSB0YXAodl9UZXhjb29yZCArIGQueHcsIGNvbG9yKTtcXG4gICAgd2VpZ2h0ICs9IHRhcCh2X1RleGNvb3JkICsgZC56dywgY29sb3IpO1xcbiAgICBjb2xvciAvPSB3ZWlnaHQ7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuaGV4YWdvbmFsX2JsdXJfZnJhZ1xcbkBpbXBvcnQgY2xheS51dGlsLmZsb2F0XFxudmVjNCBkb0JsdXIoc2FtcGxlcjJEIHRhcmdldFRleHR1cmUsIHZlYzIgb2Zmc2V0KSB7XFxuI2lmZGVmIEJMVVJfQ09DXFxuICAgIGZsb2F0IGNvY1N1bSA9IDAuMDtcXG4jZWxzZVxcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiNlbmRpZlxcbiAgICBmbG9hdCB3ZWlnaHRTdW0gPSAwLjA7XFxuICAgIGZsb2F0IGtlcm5lbFdlaWdodCA9IDEuMCAvIGZsb2F0KEtFUk5FTF9TSVpFKTtcXG4gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBLRVJORUxfU0laRTsgaSsrKSB7XFxuICAgICAgICB2ZWMyIGNvb3JkID0gdl9UZXhjb29yZCArIG9mZnNldCAqIGZsb2F0KGkpO1xcbiAgICAgICAgZmxvYXQgdyA9IGtlcm5lbFdlaWdodDtcXG4jaWZkZWYgQkxVUl9DT0NcXG4gICAgICAgIGZsb2F0IGZDb2MgPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQodGFyZ2V0VGV4dHVyZSwgY29vcmQpKSAqIDIuMCAtIDEuMDtcXG4gICAgICAgIGNvY1N1bSArPSBjbGFtcChmQ29jLCAtMS4wLCAwLjApICogdztcXG4jZWxzZVxcbiAgICAgICAgZmxvYXQgZkNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIGNvb3JkKSkgKiAyLjAgLSAxLjA7XFxuICAgICAgICB2ZWM0IHRleGVsID0gdGV4dHVyZTJEKHRhcmdldFRleHR1cmUsIGNvb3JkKTtcXG4gICAgI2lmICFkZWZpbmVkKEJMVVJfTkVBUkZJRUxEKVxcbiAgICAgICAgdyAqPSBhYnMoZkNvYyk7XFxuICAgICNlbmRpZlxcbiAgICAgICAgY29sb3IgKz0gZGVjb2RlSERSKHRleGVsKSAqIHc7XFxuI2VuZGlmXFxuICAgICAgICB3ZWlnaHRTdW0gKz0gdztcXG4gICAgfVxcbiNpZmRlZiBCTFVSX0NPQ1xcbiAgICByZXR1cm4gZW5jb2RlRmxvYXQoY2xhbXAoY29jU3VtIC8gd2VpZ2h0U3VtLCAtMS4wLCAwLjApICogMC41ICsgMC41KTtcXG4jZWxzZVxcbiAgICByZXR1cm4gY29sb3IgLyB3ZWlnaHRTdW07XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuaGV4YWdvbmFsX2JsdXJfMVxcbiNkZWZpbmUgS0VSTkVMX1NJWkUgNVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gZmxvYXQgYmx1clNpemUgOiAxLjA7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMi4wLCA1MTIuMF07XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmRvZi5oZXhhZ29uYWxfYmx1cl9mcmFnXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgb2Zmc2V0ID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4jaWYgIWRlZmluZWQoQkxVUl9ORUFSRklFTEQpICYmICFkZWZpbmVkKEJMVVJfQ09DKVxcbiAgICBvZmZzZXQgKj0gYWJzKGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQpKSAqIDIuMCAtIDEuMCk7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvciA9IGRvQmx1cih0ZXh0dXJlLCB2ZWMyKDAuMCwgb2Zmc2V0LnkpKTtcXG4jaWYgIWRlZmluZWQoQkxVUl9DT0MpXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmhleGFnb25hbF9ibHVyXzJcXG4jZGVmaW5lIEtFUk5FTF9TSVpFIDVcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvYztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJsdXJTaXplIDogMS4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuaGV4YWdvbmFsX2JsdXJfZnJhZ1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIG9mZnNldCA9IGJsdXJTaXplIC8gdGV4dHVyZVNpemU7XFxuI2lmICFkZWZpbmVkKEJMVVJfTkVBUkZJRUxEKSAmJiAhZGVmaW5lZChCTFVSX0NPQylcXG4gICAgb2Zmc2V0ICo9IGFicyhkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkKSkgKiAyLjAgLSAxLjApO1xcbiNlbmRpZlxcbiAgICBvZmZzZXQueSAvPSAyLjA7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGRvQmx1cih0ZXh0dXJlLCAtb2Zmc2V0KTtcXG4jaWYgIWRlZmluZWQoQkxVUl9DT0MpXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmhleGFnb25hbF9ibHVyXzNcXG4jZGVmaW5lIEtFUk5FTF9TSVpFIDVcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlMjtcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmhleGFnb25hbF9ibHVyX2ZyYWdcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiBvZmZzZXQgPSBibHVyU2l6ZSAvIHRleHR1cmVTaXplO1xcbiNpZiAhZGVmaW5lZChCTFVSX05FQVJGSUVMRCkgJiYgIWRlZmluZWQoQkxVUl9DT0MpXFxuICAgIG9mZnNldCAqPSBhYnMoZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCkpICogMi4wIC0gMS4wKTtcXG4jZW5kaWZcXG4gICAgb2Zmc2V0LnkgLz0gMi4wO1xcbiAgICB2ZWMyIHZEb3duUmlnaHQgPSB2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpO1xcbiAgICB2ZWM0IHRleGVsMSA9IGRvQmx1cih0ZXh0dXJlMSwgLW9mZnNldCk7XFxuICAgIHZlYzQgdGV4ZWwyID0gZG9CbHVyKHRleHR1cmUxLCB2RG93blJpZ2h0KTtcXG4gICAgdmVjNCB0ZXhlbDMgPSBkb0JsdXIodGV4dHVyZTIsIHZEb3duUmlnaHQpO1xcbiNpZmRlZiBCTFVSX0NPQ1xcbiAgICBmbG9hdCBjb2MxID0gZGVjb2RlRmxvYXQodGV4ZWwxKSAqIDIuMCAtIDEuMDtcXG4gICAgZmxvYXQgY29jMiA9IGRlY29kZUZsb2F0KHRleGVsMikgKiAyLjAgLSAxLjA7XFxuICAgIGZsb2F0IGNvYzMgPSBkZWNvZGVGbG9hdCh0ZXhlbDMpICogMi4wIC0gMS4wO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChcXG4gICAgICAgICgoY29jMSArIGNvYzIgKyBjb2MzKSAvIDMuMCkgKiAwLjUgKyAwLjVcXG4gICAgKTtcXG4jZWxzZVxcbiAgICB2ZWM0IGNvbG9yID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMykgLyAzLjA7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuY29tcG9zaXRlXFxuI2RlZmluZSBERUJVRyAwXFxudW5pZm9ybSBzYW1wbGVyMkQgb3JpZ2luYWw7XFxudW5pZm9ybSBzYW1wbGVyMkQgYmx1cnJlZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBuZWFyZmllbGQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5lYXJjb2M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmZsb2F0XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgYmx1cnJlZENvbG9yID0gZGVjb2RlSERSKHRleHR1cmUyRChibHVycmVkLCB2X1RleGNvb3JkKSk7XFxuICAgIHZlYzQgb3JpZ2luYWxDb2xvciA9IGRlY29kZUhEUih0ZXh0dXJlMkQob3JpZ2luYWwsIHZfVGV4Y29vcmQpKTtcXG4gICAgZmxvYXQgZkNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQpKTtcXG4gICAgZkNvYyA9IGFicyhmQ29jICogMi4wIC0gMS4wKTtcXG4gICAgZmxvYXQgd2VpZ2h0ID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZkNvYyk7XFxuI2lmZGVmIE5FQVJGSUVMRF9FTkFCTEVEXFxuICAgIHZlYzQgbmVhcmZpZWxkQ29sb3IgPSBkZWNvZGVIRFIodGV4dHVyZTJEKG5lYXJmaWVsZCwgdl9UZXhjb29yZCkpO1xcbiAgICBmbG9hdCBmTmVhckNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChuZWFyY29jLCB2X1RleGNvb3JkKSk7XFxuICAgIGZOZWFyQ29jID0gYWJzKGZOZWFyQ29jICogMi4wIC0gMS4wKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKFxcbiAgICAgICAgbWl4KFxcbiAgICAgICAgICAgIG5lYXJmaWVsZENvbG9yLCBtaXgob3JpZ2luYWxDb2xvciwgYmx1cnJlZENvbG9yLCB3ZWlnaHQpLFxcbiAgICAgICAgICAgIHBvdygxLjAgLSBmTmVhckNvYywgNC4wKVxcbiAgICAgICAgKVxcbiAgICApO1xcbiNlbHNlXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihtaXgob3JpZ2luYWxDb2xvciwgYmx1cnJlZENvbG9yLCB3ZWlnaHQpKTtcXG4jZW5kaWZcXG4jaWYgREVCVUcgPT0gMVxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoZkNvYyksIDEuMCk7XFxuI2VsaWYgREVCVUcgPT0gMlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoZk5lYXJDb2MpLCAxLjApO1xcbiNlbGlmIERFQlVHID09IDNcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGJsdXJyZWRDb2xvcik7XFxuI2VsaWYgREVCVUcgPT0gNFxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIobmVhcmZpZWxkQ29sb3IpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmxlbnNmbGFyZVxcbiNkZWZpbmUgU0FNUExFX05VTUJFUiA4XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zY29sb3I7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IGRpc3BlcnNhbCA6IDAuMztcXG51bmlmb3JtIGZsb2F0IGhhbG9XaWR0aCA6IDAuNDtcXG51bmlmb3JtIGZsb2F0IGRpc3RvcnRpb24gOiAxLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgdGV4dHVyZURpc3RvcnRlZChcXG4gICAgaW4gdmVjMiB0ZXhjb29yZCxcXG4gICAgaW4gdmVjMiBkaXJlY3Rpb24sXFxuICAgIGluIHZlYzMgZGlzdG9ydGlvblxcbikge1xcbiAgICByZXR1cm4gdmVjNChcXG4gICAgICAgIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLnIpKS5yLFxcbiAgICAgICAgZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24uZykpLmcsXFxuICAgICAgICBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5iKSkuYixcXG4gICAgICAgIDEuMFxcbiAgICApO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB0ZXhjb29yZCA9IC12X1RleGNvb3JkICsgdmVjMigxLjApOyAgICB2ZWMyIHRleHR1cmVPZmZzZXQgPSAxLjAgLyB0ZXh0dXJlU2l6ZTtcXG4gICAgdmVjMiBnaG9zdFZlYyA9ICh2ZWMyKDAuNSkgLSB0ZXhjb29yZCkgKiBkaXNwZXJzYWw7XFxuICAgIHZlYzIgaGFsb1ZlYyA9IG5vcm1hbGl6ZShnaG9zdFZlYykgKiBoYWxvV2lkdGg7XFxuICAgIHZlYzMgZGlzdG9ydGlvbiA9IHZlYzMoLXRleHR1cmVPZmZzZXQueCAqIGRpc3RvcnRpb24sIDAuMCwgdGV4dHVyZU9mZnNldC54ICogZGlzdG9ydGlvbik7XFxuICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLjApO1xcbiAgICBmb3IgKGludCBpID0gMDsgaSA8IFNBTVBMRV9OVU1CRVI7IGkrKylcXG4gICAge1xcbiAgICAgICAgdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGdob3N0VmVjICogZmxvYXQoaSkpO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIG9mZnNldCkgLyBsZW5ndGgodmVjMigwLjUpKTtcXG4gICAgICAgIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiAgICAgICAgcmVzdWx0ICs9IHRleHR1cmVEaXN0b3J0ZWQob2Zmc2V0LCBub3JtYWxpemUoZ2hvc3RWZWMpLCBkaXN0b3J0aW9uKSAqIHdlaWdodDtcXG4gICAgfVxcbiAgICByZXN1bHQgKj0gdGV4dHVyZTJEKGxlbnNjb2xvciwgdmVjMihsZW5ndGgodmVjMigwLjUpIC0gdGV4Y29vcmQpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpKTtcXG4gICAgZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYykpIC8gbGVuZ3RoKHZlYzIoMC41KSk7XFxuICAgIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiAgICB2ZWMyIG9mZnNldCA9IGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYyk7XFxuICAgIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHJlc3VsdDtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5ibGVuZFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYmxlbmRcXG4jaWZkZWYgVEVYVFVSRTFfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUxO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTJfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUyO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTNfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUzO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MyA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU0O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NCA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTVfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU1O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTZfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU2O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NiA6IDEuMDtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdmVjNCgwLjApO1xcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUxLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQxO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUyLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQyO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUzLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQzO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU0LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ0O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU1LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ1O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU2LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ2O1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4KTtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5meGFhXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQgOiBWSUVXUE9SVDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG4jZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvMTI4LjApXFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NVUwgICAoMS4wLzguMClcXG4jZGVmaW5lIEZYQUFfU1BBTl9NQVggICAgIDguMFxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiByZXNvbHV0aW9uID0gMS4wIC8gdmlld3BvcnQuenc7XFxuICAgIHZlYzMgcmdiTlcgPSAgZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggLTEuMCwgLTEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuICAgIHZlYzMgcmdiTkUgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAxLjAsIC0xLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggLTEuMCwgMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDEuMCwgMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gICAgdmVjNCByZ2JhTSAgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgIGdsX0ZyYWdDb29yZC54eSAgKiByZXNvbHV0aW9uICkgKTtcXG4gICAgdmVjMyByZ2JNICA9IHJnYmFNLnh5ejtcXG4gICAgZmxvYXQgb3BhY2l0eSAgPSByZ2JhTS53O1xcbiAgICB2ZWMzIGx1bWEgPSB2ZWMzKCAwLjI5OSwgMC41ODcsIDAuMTE0ICk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdCggcmdiTlcsIGx1bWEgKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KCByZ2JORSwgbHVtYSApO1xcbiAgICBmbG9hdCBsdW1hU1cgPSBkb3QoIHJnYlNXLCBsdW1hICk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdCggcmdiU0UsIGx1bWEgKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KCByZ2JNLCAgbHVtYSApO1xcbiAgICBmbG9hdCBsdW1hTWluID0gbWluKCBsdW1hTSwgbWluKCBtaW4oIGx1bWFOVywgbHVtYU5FICksIG1pbiggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgoIGx1bWFNLCBtYXgoIG1heCggbHVtYU5XLCBsdW1hTkUpICwgbWF4KCBsdW1hU1csIGx1bWFTRSApICkgKTtcXG4gICAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoICggbHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFICkgKiAoIDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwgKSwgRlhBQV9SRURVQ0VfTUlOICk7XFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvICggbWluKCBhYnMoIGRpci54ICksIGFicyggZGlyLnkgKSApICsgZGlyUmVkdWNlICk7XFxuICAgIGRpciA9IG1pbiggdmVjMiggRlhBQV9TUEFOX01BWCwgIEZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICBtYXgoIHZlYzIoLUZYQUFfU1BBTl9NQVgsIC1GWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiByZXNvbHV0aW9uO1xcbiAgICB2ZWMzIHJnYkEgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDEuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuICAgIHJnYkEgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAgKiByZXNvbHV0aW9uICsgZGlyICogKCAyLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiAgICByZ2JBICo9IDAuNTtcXG4gICAgdmVjMyByZ2JCID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAgKiByZXNvbHV0aW9uICsgZGlyICogLTAuNSApICkueHl6O1xcbiAgICByZ2JCICs9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgICogcmVzb2x1dGlvbiArIGRpciAqIDAuNSApICkueHl6O1xcbiAgICByZ2JCICo9IDAuMjU7XFxuICAgIHJnYkIgKz0gcmdiQSAqIDAuNTtcXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QoIHJnYkIsIGx1bWEgKTtcXG4gICAgaWYgKCAoIGx1bWFCIDwgbHVtYU1pbiApIHx8ICggbHVtYUIgPiBsdW1hTWF4ICkgKVxcbiAgICB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JBLCBvcGFjaXR5ICk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JCLCBvcGFjaXR5ICk7XFxuICAgIH1cXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5meGFhM1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0IDogVklFV1BPUlQ7XFxudW5pZm9ybSBmbG9hdCBzdWJwaXhlbDogMC43NTtcXG51bmlmb3JtIGZsb2F0IGVkZ2VUaHJlc2hvbGQ6IDAuMTI1O1xcbnVuaWZvcm0gZmxvYXQgZWRnZVRocmVzaG9sZE1pbjogMC4wNjI1O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5mbG9hdCBGeGFhTHVtYSh2ZWM0IHJnYmEpIHsgcmV0dXJuIHJnYmEueTsgfVxcbnZlYzQgRnhhYVBpeGVsU2hhZGVyKFxcbiAgICB2ZWMyIHBvc1xcbiAgICAsc2FtcGxlcjJEIHRleFxcbiAgICAsdmVjMiBmeGFhUXVhbGl0eVJjcEZyYW1lXFxuICAgICxmbG9hdCBmeGFhUXVhbGl0eVN1YnBpeFxcbiAgICAsZmxvYXQgZnhhYVF1YWxpdHlFZGdlVGhyZXNob2xkXFxuICAgICxmbG9hdCBmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGRNaW5cXG4pIHtcXG4gICAgdmVjMiBwb3NNO1xcbiAgICBwb3NNLnggPSBwb3MueDtcXG4gICAgcG9zTS55ID0gcG9zLnk7XFxuICAgIHZlYzQgcmdieU0gPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc00sIDAuMCkpO1xcbiAgICBmbG9hdCBsdW1hUyA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAwLjAsIDEuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hRSA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAxLjAsIDAuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hTiA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAwLjAsLTEuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hVyA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKC0xLjAsIDAuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBtYXhTTSA9IG1heChsdW1hUywgcmdieU0ueSk7XFxuICAgIGZsb2F0IG1pblNNID0gbWluKGx1bWFTLCByZ2J5TS55KTtcXG4gICAgZmxvYXQgbWF4RVNNID0gbWF4KGx1bWFFLCBtYXhTTSk7XFxuICAgIGZsb2F0IG1pbkVTTSA9IG1pbihsdW1hRSwgbWluU00pO1xcbiAgICBmbG9hdCBtYXhXTiA9IG1heChsdW1hTiwgbHVtYVcpO1xcbiAgICBmbG9hdCBtaW5XTiA9IG1pbihsdW1hTiwgbHVtYVcpO1xcbiAgICBmbG9hdCByYW5nZU1heCA9IG1heChtYXhXTiwgbWF4RVNNKTtcXG4gICAgZmxvYXQgcmFuZ2VNaW4gPSBtaW4obWluV04sIG1pbkVTTSk7XFxuICAgIGZsb2F0IHJhbmdlTWF4U2NhbGVkID0gcmFuZ2VNYXggKiBmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGQ7XFxuICAgIGZsb2F0IHJhbmdlID0gcmFuZ2VNYXggLSByYW5nZU1pbjtcXG4gICAgZmxvYXQgcmFuZ2VNYXhDbGFtcGVkID0gbWF4KGZ4YWFRdWFsaXR5RWRnZVRocmVzaG9sZE1pbiwgcmFuZ2VNYXhTY2FsZWQpO1xcbiAgICBib29sIGVhcmx5RXhpdCA9IHJhbmdlIDwgcmFuZ2VNYXhDbGFtcGVkO1xcbiAgICBpZihlYXJseUV4aXQpIHJldHVybiByZ2J5TTtcXG4gICAgZmxvYXQgbHVtYU5XID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NNICsgKHZlYzIoLTEuMCwtMS4wKSAqIGZ4YWFRdWFsaXR5UmNwRnJhbWUueHkpLCAwLjApKSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAxLjAsIDEuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hTkUgPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc00gKyAodmVjMiggMS4wLC0xLjApICogZnhhYVF1YWxpdHlSY3BGcmFtZS54eSksIDAuMCkpKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NNICsgKHZlYzIoLTEuMCwgMS4wKSAqIGZ4YWFRdWFsaXR5UmNwRnJhbWUueHkpLCAwLjApKSk7XFxuICAgIGZsb2F0IGx1bWFOUyA9IGx1bWFOICsgbHVtYVM7XFxuICAgIGZsb2F0IGx1bWFXRSA9IGx1bWFXICsgbHVtYUU7XFxuICAgIGZsb2F0IHN1YnBpeFJjcFJhbmdlID0gMS4wL3JhbmdlO1xcbiAgICBmbG9hdCBzdWJwaXhOU1dFID0gbHVtYU5TICsgbHVtYVdFO1xcbiAgICBmbG9hdCBlZGdlSG9yejEgPSAoLTIuMCAqIHJnYnlNLnkpICsgbHVtYU5TO1xcbiAgICBmbG9hdCBlZGdlVmVydDEgPSAoLTIuMCAqIHJnYnlNLnkpICsgbHVtYVdFO1xcbiAgICBmbG9hdCBsdW1hTkVTRSA9IGx1bWFORSArIGx1bWFTRTtcXG4gICAgZmxvYXQgbHVtYU5XTkUgPSBsdW1hTlcgKyBsdW1hTkU7XFxuICAgIGZsb2F0IGVkZ2VIb3J6MiA9ICgtMi4wICogbHVtYUUpICsgbHVtYU5FU0U7XFxuICAgIGZsb2F0IGVkZ2VWZXJ0MiA9ICgtMi4wICogbHVtYU4pICsgbHVtYU5XTkU7XFxuICAgIGZsb2F0IGx1bWFOV1NXID0gbHVtYU5XICsgbHVtYVNXO1xcbiAgICBmbG9hdCBsdW1hU1dTRSA9IGx1bWFTVyArIGx1bWFTRTtcXG4gICAgZmxvYXQgZWRnZUhvcno0ID0gKGFicyhlZGdlSG9yejEpICogMi4wKSArIGFicyhlZGdlSG9yejIpO1xcbiAgICBmbG9hdCBlZGdlVmVydDQgPSAoYWJzKGVkZ2VWZXJ0MSkgKiAyLjApICsgYWJzKGVkZ2VWZXJ0Mik7XFxuICAgIGZsb2F0IGVkZ2VIb3J6MyA9ICgtMi4wICogbHVtYVcpICsgbHVtYU5XU1c7XFxuICAgIGZsb2F0IGVkZ2VWZXJ0MyA9ICgtMi4wICogbHVtYVMpICsgbHVtYVNXU0U7XFxuICAgIGZsb2F0IGVkZ2VIb3J6ID0gYWJzKGVkZ2VIb3J6MykgKyBlZGdlSG9yejQ7XFxuICAgIGZsb2F0IGVkZ2VWZXJ0ID0gYWJzKGVkZ2VWZXJ0MykgKyBlZGdlVmVydDQ7XFxuICAgIGZsb2F0IHN1YnBpeE5XU1dORVNFID0gbHVtYU5XU1cgKyBsdW1hTkVTRTtcXG4gICAgZmxvYXQgbGVuZ3RoU2lnbiA9IGZ4YWFRdWFsaXR5UmNwRnJhbWUueDtcXG4gICAgYm9vbCBob3J6U3BhbiA9IGVkZ2VIb3J6ID49IGVkZ2VWZXJ0O1xcbiAgICBmbG9hdCBzdWJwaXhBID0gc3VicGl4TlNXRSAqIDIuMCArIHN1YnBpeE5XU1dORVNFO1xcbiAgICBpZighaG9yelNwYW4pIGx1bWFOID0gbHVtYVc7XFxuICAgIGlmKCFob3J6U3BhbikgbHVtYVMgPSBsdW1hRTtcXG4gICAgaWYoaG9yelNwYW4pIGxlbmd0aFNpZ24gPSBmeGFhUXVhbGl0eVJjcEZyYW1lLnk7XFxuICAgIGZsb2F0IHN1YnBpeEIgPSAoc3VicGl4QSAqICgxLjAvMTIuMCkpIC0gcmdieU0ueTtcXG4gICAgZmxvYXQgZ3JhZGllbnROID0gbHVtYU4gLSByZ2J5TS55O1xcbiAgICBmbG9hdCBncmFkaWVudFMgPSBsdW1hUyAtIHJnYnlNLnk7XFxuICAgIGZsb2F0IGx1bWFOTiA9IGx1bWFOICsgcmdieU0ueTtcXG4gICAgZmxvYXQgbHVtYVNTID0gbHVtYVMgKyByZ2J5TS55O1xcbiAgICBib29sIHBhaXJOID0gYWJzKGdyYWRpZW50TikgPj0gYWJzKGdyYWRpZW50Uyk7XFxuICAgIGZsb2F0IGdyYWRpZW50ID0gbWF4KGFicyhncmFkaWVudE4pLCBhYnMoZ3JhZGllbnRTKSk7XFxuICAgIGlmKHBhaXJOKSBsZW5ndGhTaWduID0gLWxlbmd0aFNpZ247XFxuICAgIGZsb2F0IHN1YnBpeEMgPSBjbGFtcChhYnMoc3VicGl4QikgKiBzdWJwaXhSY3BSYW5nZSwgMC4wLCAxLjApO1xcbiAgICB2ZWMyIHBvc0I7XFxuICAgIHBvc0IueCA9IHBvc00ueDtcXG4gICAgcG9zQi55ID0gcG9zTS55O1xcbiAgICB2ZWMyIG9mZk5QO1xcbiAgICBvZmZOUC54ID0gKCFob3J6U3BhbikgPyAwLjAgOiBmeGFhUXVhbGl0eVJjcEZyYW1lLng7XFxuICAgIG9mZk5QLnkgPSAoIGhvcnpTcGFuKSA/IDAuMCA6IGZ4YWFRdWFsaXR5UmNwRnJhbWUueTtcXG4gICAgaWYoIWhvcnpTcGFuKSBwb3NCLnggKz0gbGVuZ3RoU2lnbiAqIDAuNTtcXG4gICAgaWYoIGhvcnpTcGFuKSBwb3NCLnkgKz0gbGVuZ3RoU2lnbiAqIDAuNTtcXG4gICAgdmVjMiBwb3NOO1xcbiAgICBwb3NOLnggPSBwb3NCLnggLSBvZmZOUC54ICogMS4wO1xcbiAgICBwb3NOLnkgPSBwb3NCLnkgLSBvZmZOUC55ICogMS4wO1xcbiAgICB2ZWMyIHBvc1A7XFxuICAgIHBvc1AueCA9IHBvc0IueCArIG9mZk5QLnggKiAxLjA7XFxuICAgIHBvc1AueSA9IHBvc0IueSArIG9mZk5QLnkgKiAxLjA7XFxuICAgIGZsb2F0IHN1YnBpeEQgPSAoKC0yLjApKnN1YnBpeEMpICsgMy4wO1xcbiAgICBmbG9hdCBsdW1hRW5kTiA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTiwgMC4wKSkpO1xcbiAgICBmbG9hdCBzdWJwaXhFID0gc3VicGl4QyAqIHN1YnBpeEM7XFxuICAgIGZsb2F0IGx1bWFFbmRQID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NQLCAwLjApKSk7XFxuICAgIGlmKCFwYWlyTikgbHVtYU5OID0gbHVtYVNTO1xcbiAgICBmbG9hdCBncmFkaWVudFNjYWxlZCA9IGdyYWRpZW50ICogMS4wLzQuMDtcXG4gICAgZmxvYXQgbHVtYU1NID0gcmdieU0ueSAtIGx1bWFOTiAqIDAuNTtcXG4gICAgZmxvYXQgc3VicGl4RiA9IHN1YnBpeEQgKiBzdWJwaXhFO1xcbiAgICBib29sIGx1bWFNTFRaZXJvID0gbHVtYU1NIDwgMC4wO1xcbiAgICBsdW1hRW5kTiAtPSBsdW1hTk4gKiAwLjU7XFxuICAgIGx1bWFFbmRQIC09IGx1bWFOTiAqIDAuNTtcXG4gICAgYm9vbCBkb25lTiA9IGFicyhsdW1hRW5kTikgPj0gZ3JhZGllbnRTY2FsZWQ7XFxuICAgIGJvb2wgZG9uZVAgPSBhYnMobHVtYUVuZFApID49IGdyYWRpZW50U2NhbGVkO1xcbiAgICBpZighZG9uZU4pIHBvc04ueCAtPSBvZmZOUC54ICogMS41O1xcbiAgICBpZighZG9uZU4pIHBvc04ueSAtPSBvZmZOUC55ICogMS41O1xcbiAgICBib29sIGRvbmVOUCA9ICghZG9uZU4pIHx8ICghZG9uZVApO1xcbiAgICBpZighZG9uZVApIHBvc1AueCArPSBvZmZOUC54ICogMS41O1xcbiAgICBpZighZG9uZVApIHBvc1AueSArPSBvZmZOUC55ICogMS41O1xcbiAgICBpZihkb25lTlApIHtcXG4gICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc04ueHksIDAuMCkpKTtcXG4gICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc1AueHksIDAuMCkpKTtcXG4gICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBsdW1hRW5kTiAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBsdW1hRW5kUCAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgIGRvbmVOID0gYWJzKGx1bWFFbmROKSA+PSBncmFkaWVudFNjYWxlZDtcXG4gICAgICAgIGRvbmVQID0gYWJzKGx1bWFFbmRQKSA+PSBncmFkaWVudFNjYWxlZDtcXG4gICAgICAgIGlmKCFkb25lTikgcG9zTi54IC09IG9mZk5QLnggKiAyLjA7XFxuICAgICAgICBpZighZG9uZU4pIHBvc04ueSAtPSBvZmZOUC55ICogMi4wO1xcbiAgICAgICAgZG9uZU5QID0gKCFkb25lTikgfHwgKCFkb25lUCk7XFxuICAgICAgICBpZighZG9uZVApIHBvc1AueCArPSBvZmZOUC54ICogMi4wO1xcbiAgICAgICAgaWYoIWRvbmVQKSBwb3NQLnkgKz0gb2ZmTlAueSAqIDIuMDtcXG4gICAgICAgIGlmKGRvbmVOUCkge1xcbiAgICAgICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc04ueHksIDAuMCkpKTtcXG4gICAgICAgICAgICBpZighZG9uZVApIGx1bWFFbmRQID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NQLnh5LCAwLjApKSk7XFxuICAgICAgICAgICAgaWYoIWRvbmVOKSBsdW1hRW5kTiA9IGx1bWFFbmROIC0gbHVtYU5OICogMC41O1xcbiAgICAgICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBsdW1hRW5kUCAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgICAgICBkb25lTiA9IGFicyhsdW1hRW5kTikgPj0gZ3JhZGllbnRTY2FsZWQ7XFxuICAgICAgICAgICAgZG9uZVAgPSBhYnMobHVtYUVuZFApID49IGdyYWRpZW50U2NhbGVkO1xcbiAgICAgICAgICAgIGlmKCFkb25lTikgcG9zTi54IC09IG9mZk5QLnggKiA0LjA7XFxuICAgICAgICAgICAgaWYoIWRvbmVOKSBwb3NOLnkgLT0gb2ZmTlAueSAqIDQuMDtcXG4gICAgICAgICAgICBkb25lTlAgPSAoIWRvbmVOKSB8fCAoIWRvbmVQKTtcXG4gICAgICAgICAgICBpZighZG9uZVApIHBvc1AueCArPSBvZmZOUC54ICogNC4wO1xcbiAgICAgICAgICAgIGlmKCFkb25lUCkgcG9zUC55ICs9IG9mZk5QLnkgKiA0LjA7XFxuICAgICAgICAgICAgaWYoZG9uZU5QKSB7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc04ueHksIDAuMCkpKTtcXG4gICAgICAgICAgICAgICAgaWYoIWRvbmVQKSBsdW1hRW5kUCA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zUC54eSwgMC4wKSkpO1xcbiAgICAgICAgICAgICAgICBpZighZG9uZU4pIGx1bWFFbmROID0gbHVtYUVuZE4gLSBsdW1hTk4gKiAwLjU7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBsdW1hRW5kUCAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgICAgICAgICAgZG9uZU4gPSBhYnMobHVtYUVuZE4pID49IGdyYWRpZW50U2NhbGVkO1xcbiAgICAgICAgICAgICAgICBkb25lUCA9IGFicyhsdW1hRW5kUCkgPj0gZ3JhZGllbnRTY2FsZWQ7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lTikgcG9zTi54IC09IG9mZk5QLnggKiAxMi4wO1xcbiAgICAgICAgICAgICAgICBpZighZG9uZU4pIHBvc04ueSAtPSBvZmZOUC55ICogMTIuMDtcXG4gICAgICAgICAgICAgICAgZG9uZU5QID0gKCFkb25lTikgfHwgKCFkb25lUCk7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lUCkgcG9zUC54ICs9IG9mZk5QLnggKiAxMi4wO1xcbiAgICAgICAgICAgICAgICBpZighZG9uZVApIHBvc1AueSArPSBvZmZOUC55ICogMTIuMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZmxvYXQgZHN0TiA9IHBvc00ueCAtIHBvc04ueDtcXG4gICAgZmxvYXQgZHN0UCA9IHBvc1AueCAtIHBvc00ueDtcXG4gICAgaWYoIWhvcnpTcGFuKSBkc3ROID0gcG9zTS55IC0gcG9zTi55O1xcbiAgICBpZighaG9yelNwYW4pIGRzdFAgPSBwb3NQLnkgLSBwb3NNLnk7XFxuICAgIGJvb2wgZ29vZFNwYW5OID0gKGx1bWFFbmROIDwgMC4wKSAhPSBsdW1hTUxUWmVybztcXG4gICAgZmxvYXQgc3Bhbkxlbmd0aCA9IChkc3RQICsgZHN0Tik7XFxuICAgIGJvb2wgZ29vZFNwYW5QID0gKGx1bWFFbmRQIDwgMC4wKSAhPSBsdW1hTUxUWmVybztcXG4gICAgZmxvYXQgc3Bhbkxlbmd0aFJjcCA9IDEuMC9zcGFuTGVuZ3RoO1xcbiAgICBib29sIGRpcmVjdGlvbk4gPSBkc3ROIDwgZHN0UDtcXG4gICAgZmxvYXQgZHN0ID0gbWluKGRzdE4sIGRzdFApO1xcbiAgICBib29sIGdvb2RTcGFuID0gZGlyZWN0aW9uTiA/IGdvb2RTcGFuTiA6IGdvb2RTcGFuUDtcXG4gICAgZmxvYXQgc3VicGl4RyA9IHN1YnBpeEYgKiBzdWJwaXhGO1xcbiAgICBmbG9hdCBwaXhlbE9mZnNldCA9IChkc3QgKiAoLXNwYW5MZW5ndGhSY3ApKSArIDAuNTtcXG4gICAgZmxvYXQgc3VicGl4SCA9IHN1YnBpeEcgKiBmeGFhUXVhbGl0eVN1YnBpeDtcXG4gICAgZmxvYXQgcGl4ZWxPZmZzZXRHb29kID0gZ29vZFNwYW4gPyBwaXhlbE9mZnNldCA6IDAuMDtcXG4gICAgZmxvYXQgcGl4ZWxPZmZzZXRTdWJwaXggPSBtYXgocGl4ZWxPZmZzZXRHb29kLCBzdWJwaXhIKTtcXG4gICAgaWYoIWhvcnpTcGFuKSBwb3NNLnggKz0gcGl4ZWxPZmZzZXRTdWJwaXggKiBsZW5ndGhTaWduO1xcbiAgICBpZiggaG9yelNwYW4pIHBvc00ueSArPSBwaXhlbE9mZnNldFN1YnBpeCAqIGxlbmd0aFNpZ247XFxuICAgIHJldHVybiB2ZWM0KGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSwgMC4wKSkueHl6LCByZ2J5TS55KTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSBGeGFhUGl4ZWxTaGFkZXIoXFxuICAgICAgICB2X1RleGNvb3JkLFxcbiAgICAgICAgdGV4dHVyZSxcXG4gICAgICAgIHZlYzIoMS4wKSAvIHZpZXdwb3J0Lnp3LFxcbiAgICAgICAgc3VicGl4ZWwsXFxuICAgICAgICBlZGdlVGhyZXNob2xkLFxcbiAgICAgICAgZWRnZVRocmVzaG9sZE1pblxcbiAgICApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgMS4wKTtcXG59XFxuQGVuZFwiO1xuIiwiaW1wb3J0IGxpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xuaW1wb3J0IHV0aWxFc3NsIGZyb20gJy4vc291cmNlL3V0aWwuZ2xzbC5qcyc7XG5cbmltcG9ydCBiYXNpY0Vzc2wgZnJvbSAnLi9zb3VyY2UvYmFzaWMuZ2xzbC5qcyc7XG5pbXBvcnQgbGFtYmVydEVzc2wgZnJvbSAnLi9zb3VyY2UvbGFtYmVydC5nbHNsLmpzJztcbmltcG9ydCBzdGFuZGFyZEVzc2wgZnJvbSAnLi9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XG5pbXBvcnQgd2lyZWZyYW1lRXNzbCBmcm9tICcuL3NvdXJjZS93aXJlZnJhbWUuZ2xzbC5qcyc7XG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zb3VyY2UvcHJlei5nbHNsLmpzJztcblxuaW1wb3J0IGxpYnJhcnkgZnJvbSAnLi9saWJyYXJ5JztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcblxuXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0RXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKHV0aWxFc3NsKTtcblxuLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXG5TaGFkZXJbJ2ltcG9ydCddKGJhc2ljRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGxhbWJlcnRFc3NsKTtcblNoYWRlclsnaW1wb3J0J10oc3RhbmRhcmRFc3NsKTtcblNoYWRlclsnaW1wb3J0J10od2lyZWZyYW1lRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKHNreWJveEVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShwcmV6RXNzbCk7XG5cbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuYmFzaWMnLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLmZyYWdtZW50JykpO1xubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5sYW1iZXJ0JywgU2hhZGVyLnNvdXJjZSgnY2xheS5sYW1iZXJ0LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQuZnJhZ21lbnQnKSk7XG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LndpcmVmcmFtZScsIFNoYWRlci5zb3VyY2UoJ2NsYXkud2lyZWZyYW1lLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LndpcmVmcmFtZS5mcmFnbWVudCcpKTtcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc2t5Ym94JywgU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JykpO1xubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5wcmV6JywgU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSk7XG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnN0YW5kYXJkJywgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpKTtcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmRNUicsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50JykpO1xuXG5cbmltcG9ydCBjb2xvcmFkanVzdEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzJztcbmltcG9ydCBibHVyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JsdXIuZ2xzbC5qcyc7XG5pbXBvcnQgbHVtRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzJztcbmltcG9ydCBsdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvbHV0Lmdsc2wuanMnO1xuaW1wb3J0IHZpZ2VudHRlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL3ZpZ25ldHRlLmdsc2wuanMnO1xuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9vdXRwdXQuZ2xzbC5qcyc7XG5pbXBvcnQgYnJpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzJztcbmltcG9ydCBkb3duc2FtcGxlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Rvd25zYW1wbGUuZ2xzbC5qcyc7XG5pbXBvcnQgdXBzYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdXBzYW1wbGUuZ2xzbC5qcyc7XG5pbXBvcnQgaGRyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzJztcbmltcG9ydCBkb2ZFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZG9mLmdsc2wuanMnO1xuaW1wb3J0IGxlbnNmbGFyZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyc7XG5pbXBvcnQgYmxlbmRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyc7XG5cbmltcG9ydCBmeGFhRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Z4YWEuZ2xzbC5qcyc7XG5pbXBvcnQgZnhhYTNFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYTMuZ2xzbC5qcyc7XG5cbi8vIFNvbWUgYnVpbGQgaW4gc2hhZGVyc1xuU2hhZGVyWydpbXBvcnQnXShjb2xvcmFkanVzdEVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShibHVyRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGx1bUVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShsdXRFc3NsKTtcblNoYWRlclsnaW1wb3J0J10odmlnZW50dGVFc3NsKTtcblNoYWRlclsnaW1wb3J0J10ob3V0cHV0RXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGJyaWdodEVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShkb3duc2FtcGxlRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKHVwc2FtcGxlRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGhkckVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShkb2ZFc3NsKTtcblNoYWRlclsnaW1wb3J0J10obGVuc2ZsYXJlRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGJsZW5kRXNzbCk7XG5cblNoYWRlclsnaW1wb3J0J10oZnhhYUVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShmeGFhM0Vzc2wpO1xuIiwiLyoqXG4gKiBnbFRGIExvYWRlclxuICogU3BlY2lmaWNhdGlvbiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWRcbiAqXG4gKiBUT0RPIE1vcnBoIHRhcmdldHNcbiAqL1xuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2NvcmUvcmVxdWVzdCc7XG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5cbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi4vU3RhbmRhcmRNYXRlcmlhbCc7XG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcbmltcG9ydCBOb2RlIGZyb20gJy4uL05vZGUnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XG5pbXBvcnQgc2hhZGVyTGlicmFyeSBmcm9tICcuLi9zaGFkZXIvbGlicmFyeSc7XG5pbXBvcnQgU2tlbGV0b24gZnJvbSAnLi4vU2tlbGV0b24nO1xuaW1wb3J0IEpvaW50IGZyb20gJy4uL0pvaW50JztcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xuXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5cbmltcG9ydCBUcmFja0NsaXAgZnJvbSAnLi4vYW5pbWF0aW9uL1RyYWNrQ2xpcCc7XG5pbXBvcnQgU2FtcGxlclRyYWNrIGZyb20gJy4uL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xuXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuXG4vLyBJbXBvcnQgYnVpbHRpbiBzaGFkZXJcbmltcG9ydCAnLi4vc2hhZGVyL2J1aWx0aW4nO1xuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xuXG52YXIgc2VtYW50aWNBdHRyaWJ1dGVNYXAgPSB7XG4gICAgJ05PUk1BTCc6ICdub3JtYWwnLFxuICAgICdQT1NJVElPTic6ICdwb3NpdGlvbicsXG4gICAgJ1RFWENPT1JEXzAnOiAndGV4Y29vcmQwJyxcbiAgICAnVEVYQ09PUkRfMSc6ICd0ZXhjb29yZDEnLFxuICAgICdXRUlHSFRTXzAnOiAnd2VpZ2h0JyxcbiAgICAnSk9JTlRTXzAnOiAnam9pbnQnLFxuICAgICdDT0xPUl8wJzogJ2NvbG9yJ1xufTtcblxudmFyIEFSUkFZX0NUT1JfTUFQID0ge1xuICAgIDUxMjA6IHZlbmRvci5JbnQ4QXJyYXksXG4gICAgNTEyMTogdmVuZG9yLlVpbnQ4QXJyYXksXG4gICAgNTEyMjogdmVuZG9yLkludDE2QXJyYXksXG4gICAgNTEyMzogdmVuZG9yLlVpbnQxNkFycmF5LFxuICAgIDUxMjU6IHZlbmRvci5VaW50MzJBcnJheSxcbiAgICA1MTI2OiB2ZW5kb3IuRmxvYXQzMkFycmF5XG59O1xudmFyIFNJWkVfTUFQID0ge1xuICAgIFNDQUxBUjogMSxcbiAgICBWRUMyOiAyLFxuICAgIFZFQzM6IDMsXG4gICAgVkVDNDogNCxcbiAgICBNQVQyOiA0LFxuICAgIE1BVDM6IDksXG4gICAgTUFUNDogMTZcbn07XG5cbmZ1bmN0aW9uIGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4LCBpc0luZGljZXMpIHtcbiAgICB2YXIgYWNjZXNzb3JJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xuXG4gICAgdmFyIGJ1ZmZlciA9IGxpYi5idWZmZXJWaWV3c1thY2Nlc3NvckluZm8uYnVmZmVyVmlld107XG4gICAgdmFyIGJ5dGVPZmZzZXQgPSBhY2Nlc3NvckluZm8uYnl0ZU9mZnNldCB8fCAwO1xuICAgIHZhciBBcnJheUN0b3IgPSBBUlJBWV9DVE9SX01BUFthY2Nlc3NvckluZm8uY29tcG9uZW50VHlwZV0gfHwgdmVuZG9yLkZsb2F0MzJBcnJheTtcblxuICAgIHZhciBzaXplID0gU0laRV9NQVBbYWNjZXNzb3JJbmZvLnR5cGVdO1xuICAgIGlmIChzaXplID09IG51bGwgJiYgaXNJbmRpY2VzKSB7XG4gICAgICAgIHNpemUgPSAxO1xuICAgIH1cbiAgICB2YXIgYXJyID0gbmV3IEFycmF5Q3RvcihidWZmZXIsIGJ5dGVPZmZzZXQsIHNpemUgKiBhY2Nlc3NvckluZm8uY291bnQpO1xuXG4gICAgdmFyIHF1YW50aXplRXh0ZW5zaW9uID0gYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnMgJiYgYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnNbJ1dFQjNEX3F1YW50aXplZF9hdHRyaWJ1dGVzJ107XG4gICAgaWYgKHF1YW50aXplRXh0ZW5zaW9uKSB7XG4gICAgICAgIHZhciBkZWNvZGVkQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XG4gICAgICAgIHZhciBkZWNvZGVNYXRyaXggPSBxdWFudGl6ZUV4dGVuc2lvbi5kZWNvZGVNYXRyaXg7XG4gICAgICAgIHZhciBkZWNvZGVPZmZzZXQsIGRlY29kZVNjYWxlO1xuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0ID0gbmV3IEFycmF5KHNpemUpO1xuICAgICAgICB2YXIgZGVjb2RlU2NhbGUgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XG4gICAgICAgICAgICBkZWNvZGVPZmZzZXRba10gPSBkZWNvZGVNYXRyaXhbc2l6ZSAqIChzaXplICsgMSkgKyBrXTtcbiAgICAgICAgICAgIGRlY29kZVNjYWxlW2tdID0gZGVjb2RlTWF0cml4W2sgKiAoc2l6ZSArIDEpICsga107XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2Nlc3NvckluZm8uY291bnQ7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVkQXJyW2kgKiBzaXplICsga10gPSBhcnJbaSAqIHNpemUgKyBrXSAqIGRlY29kZVNjYWxlW2tdICsgZGVjb2RlT2Zmc2V0W2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXJyID0gZGVjb2RlZEFycjtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmxvYWRlci5HTFRGLklSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBqc29uXG4gKiBAcHJvcGVydHkge2NsYXkuU2NlbmV9IHNjZW5lXG4gKiBAcHJvcGVydHkge2NsYXkuTm9kZX0gcm9vdE5vZGVcbiAqIEBwcm9wZXJ0eSB7Y2xheS5DYW1lcmFbXX0gY2FtZXJhc1xuICogQHByb3BlcnR5IHtjbGF5LlRleHR1cmVbXX0gdGV4dHVyZXNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NYXRlcmlhbFtdfSBtYXRlcmlhbHNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ta2VsZXRvbltdfSBza2VsZXRvbnNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NZXNoW119IG1lc2hlc1xuICogQHByb3BlcnR5IHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXBbXX0gY2xpcHNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlW119IG5vZGVzXG4gKi9cblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5sb2FkZXIuR0xURlxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEdMVEZMb2FkZXIgPSBCYXNlLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURiMgKi9cbntcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XG4gICAgICovXG4gICAgcm9vdE5vZGU6IG51bGwsXG4gICAgLyoqXG4gICAgICogUm9vdCBwYXRoIGZvciB1cmkgcGFyc2luZy5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHJvb3RQYXRoOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogUm9vdCBwYXRoIGZvciB0ZXh0dXJlIHVyaSBwYXJzaW5nLiBEZWZhdWx0bHkgdXNlIHRoZSByb290UGF0aFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGV4dHVyZVJvb3RQYXRoOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogUm9vdCBwYXRoIGZvciBidWZmZXIgdXJpIHBhcnNpbmcuIERlZmF1bHRseSB1c2UgdGhlIHJvb3RQYXRoXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBidWZmZXJSb290UGF0aDogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFNoYWRlciB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIG1hdGVyaWFscy5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfGNsYXkuU2hhZGVyfVxuICAgICAqIEBkZWZhdWx0ICdjbGF5LnN0YW5kYXJkJ1xuICAgICAqL1xuICAgIHNoYWRlcjogJ2NsYXkuc3RhbmRhcmQnLFxuXG4gICAgLyoqXG4gICAgICogSWYgdXNlIHtAbGluayBjbGF5LlN0YW5kYXJkTWF0ZXJpYWx9XG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB1c2VTdGFuZGFyZE1hdGVyaWFsOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIElmIGxvYWRpbmcgdGhlIGNhbWVyYXMuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgaW5jbHVkZUNhbWVyYTogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIElmIGxvYWRpbmcgdGhlIGFuaW1hdGlvbnMuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgaW5jbHVkZUFuaW1hdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBtZXNoZXNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpbmNsdWRlTWVzaDogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSB0ZXh0dXJlcy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpbmNsdWRlVGV4dHVyZTogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgY3Jvc3NPcmlnaW46ICcnLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy82NzRcbiAgICAgKi9cbiAgICB0ZXh0dXJlRmxpcFk6IGZhbHNlLFxuXG4gICAgc2hhZGVyTGlicmFyeTogbnVsbFxufSxcbmZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuc2hhZGVyTGlicmFyeSkge1xuICAgICAgICB0aGlzLnNoYWRlckxpYnJhcnkgPSBzaGFkZXJMaWJyYXJ5LmNyZWF0ZUxpYnJhcnkoKTtcbiAgICB9XG59LFxuLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5HTFRGLnByb3RvdHlwZSAqL1xue1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKi9cbiAgICBsb2FkOiBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGlzQmluYXJ5ID0gdXJsLmVuZHNXaXRoKCcuZ2xiJyk7XG5cbiAgICAgICAgaWYgKHRoaXMucm9vdFBhdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmdldCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uIChwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdwcm9ncmVzcycsIHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsIGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogaXNCaW5hcnkgPyAnYXJyYXlidWZmZXInIDogJ3RleHQnLFxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlQmluYXJ5KGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShKU09OLnBhcnNlKGRhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBnbFRGIGJpbmFyeVxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuSVJlc3VsdH1cbiAgICAgKi9cbiAgICBwYXJzZUJpbmFyeTogZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgICAgICB2YXIgaGVhZGVyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlciwgMCwgNCk7XG4gICAgICAgIGlmIChoZWFkZXJbMF0gIT09IDB4NDY1NDZDNjcpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IEludmFsaWQgaGVhZGVyJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlYWRlclswXSA8IDIpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnT25seSBnbFRGMi4wIGlzIHN1cHBvcnRlZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIsIDEyKTtcblxuICAgICAgICB2YXIganNvbjtcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgLy8gUmVhZCBjaHVua3NcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhVmlldy5ieXRlTGVuZ3RoOykge1xuICAgICAgICAgICAgdmFyIGNodW5rTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xuICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgdmFyIGNodW5rVHlwZSA9IGRhdGFWaWV3LmdldFVpbnQzMihpLCB0cnVlKTtcbiAgICAgICAgICAgIGkgKz0gNDtcblxuICAgICAgICAgICAgLy8ganNvblxuICAgICAgICAgICAgaWYgKGNodW5rVHlwZSA9PT0gMHg0RTRGNTM0QSkge1xuICAgICAgICAgICAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWZmZXIsIGkgKyAxMiwgY2h1bmtMZW5ndGgpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE8sIGZvciB0aGUgYnJvd3NlciBub3Qgc3VwcG9ydCBUZXh0RGVjb2Rlci5cbiAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBkZWNvZGVyLmRlY29kZShhcnIpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSlNPTiBQYXJzZSBlcnJvcjonICsgZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNodW5rVHlwZSA9PT0gMHgwMDRFNDk0Mikge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIuc2xpY2UoaSArIDEyLCBpICsgMTIgKyBjaHVua0xlbmd0aCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpICs9IGNodW5rTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbikge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdJbnZhbGlkIGdsVEYgYmluYXJ5IGZvcm1hdDogQ2FuXFwndCBmaW5kIEpTT04uJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShqc29uLCBidWZmZXJzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGpzb25cbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyW119IFtidWZmZXJdXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5JUmVzdWx0fVxuICAgICAqL1xuICAgIHBhcnNlOiBmdW5jdGlvbiAoanNvbiwgYnVmZmVycykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGxpYiA9IHtcbiAgICAgICAgICAgIGpzb246IGpzb24sXG4gICAgICAgICAgICBidWZmZXJzOiBbXSxcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdzOiBbXSxcbiAgICAgICAgICAgIG1hdGVyaWFsczogW10sXG4gICAgICAgICAgICB0ZXh0dXJlczogW10sXG4gICAgICAgICAgICBtZXNoZXM6IFtdLFxuICAgICAgICAgICAgam9pbnRzOiBbXSxcbiAgICAgICAgICAgIHNrZWxldG9uczogW10sXG4gICAgICAgICAgICBjYW1lcmFzOiBbXSxcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgICAgIGNsaXBzOiBbXVxuICAgICAgICB9O1xuICAgICAgICAvLyBNb3VudCBvbiB0aGUgcm9vdCBub2RlIGlmIGdpdmVuXG4gICAgICAgIHZhciByb290Tm9kZSA9IHRoaXMucm9vdE5vZGUgfHwgbmV3IFNjZW5lKCk7XG5cbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWQoKSB7XG4gICAgICAgICAgICBsb2FkaW5nLS07XG4gICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFmdGVyTG9hZEJ1ZmZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGFscmVhZHkgbG9hZCBidWZmZXJzXG4gICAgICAgIGlmIChidWZmZXJzKSB7XG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IGJ1ZmZlcnMuc2xpY2UoKTtcbiAgICAgICAgICAgIGFmdGVyTG9hZEJ1ZmZlcih0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIExvYWQgYnVmZmVyc1xuICAgICAgICAgICAgdXRpbC5lYWNoKGpzb24uYnVmZmVycywgZnVuY3Rpb24gKGJ1ZmZlckluZm8sIGlkeCkge1xuICAgICAgICAgICAgICAgIGxvYWRpbmcrKztcbiAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGJ1ZmZlckluZm8udXJpO1xuXG4gICAgICAgICAgICAgICAgc2VsZi5fbG9hZEJ1ZmZlcihwYXRoLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpYi5idWZmZXJzW2lkeF0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sIGNoZWNrTG9hZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAganNvbjoganNvbixcbiAgICAgICAgICAgICAgICBzY2VuZTogc2VsZi5yb290Tm9kZSA/IG51bGwgOiByb290Tm9kZSxcbiAgICAgICAgICAgICAgICByb290Tm9kZTogc2VsZi5yb290Tm9kZSA/IHJvb3ROb2RlIDogbnVsbCxcbiAgICAgICAgICAgICAgICBjYW1lcmFzOiBsaWIuY2FtZXJhcyxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlczogbGliLnRleHR1cmVzLFxuICAgICAgICAgICAgICAgIG1hdGVyaWFsczogbGliLm1hdGVyaWFscyxcbiAgICAgICAgICAgICAgICBza2VsZXRvbnM6IGxpYi5za2VsZXRvbnMsXG4gICAgICAgICAgICAgICAgbWVzaGVzOiBsaWIuaW5zdGFuY2VkTWVzaGVzLFxuICAgICAgICAgICAgICAgIGNsaXBzOiBsaWIuY2xpcHMsXG4gICAgICAgICAgICAgICAgbm9kZXM6IGxpYi5ub2Rlc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZEJ1ZmZlcihpbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgLy8gQnVmZmVyIG5vdCBsb2FkIGNvbXBsZXRlLlxuICAgICAgICAgICAgaWYgKGxpYi5idWZmZXJzLmxlbmd0aCAhPT0ganNvbi5idWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgJ0J1ZmZlciBub3QgbG9hZCBjb21wbGV0ZS4nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGpzb24uYnVmZmVyVmlld3MuZm9yRWFjaChmdW5jdGlvbiAoYnVmZmVyVmlld0luZm8sIGlkeCkge1xuICAgICAgICAgICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcbiAgICAgICAgICAgICAgICBsaWIuYnVmZmVyVmlld3NbaWR4XSA9IGxpYi5idWZmZXJzW2J1ZmZlclZpZXdJbmZvLmJ1ZmZlcl1cbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCwgKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCkgKyAoYnVmZmVyVmlld0luZm8uYnl0ZUxlbmd0aCB8fCAwKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZVRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VUZXh0dXJlcyhqc29uLCBsaWIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZU1hdGVyaWFscyhqc29uLCBsaWIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzaGVzKGpzb24sIGxpYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9wYXJzZU5vZGVzKGpzb24sIGxpYik7XG5cbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBvbmUgc2NlbmUuXG4gICAgICAgICAgICBpZiAoanNvbi5zY2VuZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2NlbmVJbmZvID0ganNvbi5zY2VuZXNbanNvbi5zY2VuZSB8fCAwXTsgLy8gRGVmYXVsdCB1c2UgdGhlIGZpcnN0IHNjZW5lLlxuICAgICAgICAgICAgICAgIGlmIChzY2VuZUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZUluZm8ubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW3NjZW5lSW5mby5ub2Rlc1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5vZGUuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlTWVzaCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlU2tpbnMoanNvbiwgbGliKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlQW5pbWF0aW9ucyhqc29uLCBsaWIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRSZXN1bHQoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmluYXJ5IGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgICAqL1xuICAgIHJlc29sdmVCaW5hcnlQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xuICAgICAgICBpZiAocGF0aCAmJiBwYXRoLm1hdGNoKC9eZGF0YTooLio/KWJhc2U2NCwvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLmJ1ZmZlclJvb3RQYXRoO1xuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGV4dHVyZSBmaWxlIHBhdGggcmVzb2x2ZXIuIFVzZXIgY2FuIG92ZXJyaWRlIGl0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICAgKi9cbiAgICByZXNvbHZlVGV4dHVyZVBhdGg6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290UGF0aCA9IHRoaXMudGV4dHVyZVJvb3RQYXRoO1xuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcbiAgICB9LFxuXG4gICAgX2dldFNoYWRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZGVyTGlicmFyeS5nZXQodGhpcy5zaGFkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xvYWRCdWZmZXI6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcbiAgICAgICAgcmVxdWVzdC5nZXQoe1xuICAgICAgICAgICAgdXJsOiB0aGlzLnJlc29sdmVCaW5hcnlQYXRoKHBhdGgpLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2VzcyhidWZmZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgICAgICAgICAgICBvbmVycm9yICYmIG9uZXJyb3IoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvMTAwXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTNcbiAgICBfcGFyc2VTa2luczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuXG4gICAgICAgIC8vIENyZWF0ZSBza2VsZXRvbnMgYW5kIGpvaW50c1xuICAgICAgICB2YXIgaGF2ZUludkJpbmRNYXRyaWNlcyA9IGZhbHNlO1xuICAgICAgICB1dGlsLmVhY2goanNvbi5za2lucywgZnVuY3Rpb24gKHNraW5JbmZvLCBpZHgpIHtcbiAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbih7XG4gICAgICAgICAgICAgICAgbmFtZTogc2tpbkluZm8ubmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNraW5JbmZvLmpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlSWR4ID0gc2tpbkluZm8uam9pbnRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IG5ldyBKb2ludCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHNrZWxldG9uLmpvaW50cy5sZW5ndGhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChqb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBza2VsZXRvbi5yZWxhdGl2ZVJvb3ROb2RlID0gbGliLm5vZGVzW3NraW5JbmZvLnNrZWxldG9uXSB8fCB0aGlzLnJvb3ROb2RlO1xuICAgICAgICAgICAgaWYgKHNraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICBoYXZlSW52QmluZE1hdHJpY2VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgSUJNSW5mbyA9IGpzb24uYWNjZXNzb3JzW3NraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXNdO1xuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbSUJNSW5mby5idWZmZXJWaWV3XTtcblxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBJQk1JbmZvLmJ5dGVPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IElCTUluZm8uY291bnQgKiAxNjtcblxuICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTtcblxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnNldEpvaW50TWF0cmljZXNBcnJheShhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludE1hdHJpY2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaWIuc2tlbGV0b25zW2lkeF0gPSBza2VsZXRvbjtcbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgZnVuY3Rpb24gZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG1lc2gsIHNrZWxldG9uLCBqb2ludEluZGljZXMpIHtcbiAgICAgICAgICAgIG1lc2guc2tlbGV0b24gPSBza2VsZXRvbjtcbiAgICAgICAgICAgIG1lc2guam9pbnRzID0gam9pbnRJbmRpY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Sm9pbnRJbmRleChqb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIGpvaW50LmluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgbm9kZUlkeCkge1xuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNraW4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBza2luSWR4ID0gbm9kZUluZm8uc2tpbjtcbiAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBsaWIuc2tlbGV0b25zW3NraW5JZHhdO1xuXG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBsaWIubm9kZXNbbm9kZUlkeF07XG4gICAgICAgICAgICAgICAgdmFyIGpvaW50SW5kaWNlcyA9IHNrZWxldG9uLmpvaW50cy5tYXAoZ2V0Sm9pbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBNZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVNraW5uaW5nRm9yTWVzaChub2RlLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE1lc2ggaGF2ZSBtdWx0aXBsZSBwcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlU2tpbm5pbmdGb3JNZXNoKGNoaWxkcmVuW2ldLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9wYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XG4gICAgICAgIHV0aWwuZWFjaChqc29uLnRleHR1cmVzLCBmdW5jdGlvbiAodGV4dHVyZUluZm8sIGlkeCl7XG4gICAgICAgICAgICAvLyBzYW1wbGVycyBpcyBvcHRpb25hbFxuICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gKGpzb24uc2FtcGxlcnMgJiYganNvbi5zYW1wbGVyc1t0ZXh0dXJlSW5mby5zYW1wbGVyXSkgfHwge307XG4gICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xuICAgICAgICAgICAgWyd3cmFwUycsICd3cmFwVCcsICdtYWdGaWx0ZXInLCAnbWluRmlsdGVyJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNhbXBsZXJJbmZvW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHMocGFyYW1ldGVycywge1xuICAgICAgICAgICAgICAgIHdyYXBTOiBUZXh0dXJlLlJFUEVBVCxcbiAgICAgICAgICAgICAgICB3cmFwVDogVGV4dHVyZS5SRVBFQVQsXG4gICAgICAgICAgICAgICAgZmxpcFk6IHRoaXMudGV4dHVyZUZsaXBZXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmVJbmZvLnRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSB0ZXh0dXJlSW5mby5mb3JtYXQ7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gZ2xlbnVtLlRFWFRVUkVfMkQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgdmFyIGltYWdlSW5mbyA9IGpzb24uaW1hZ2VzW3RleHR1cmVJbmZvLnNvdXJjZV07XG4gICAgICAgICAgICAgICAgdmFyIHVyaTtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmZvLnVyaSkge1xuICAgICAgICAgICAgICAgICAgICB1cmkgPSB0aGlzLnJlc29sdmVUZXh0dXJlUGF0aChpbWFnZUluZm8udXJpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VJbmZvLmJ1ZmZlclZpZXcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB1cmkgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtsaWIuYnVmZmVyVmlld3NbaW1hZ2VJbmZvLmJ1ZmZlclZpZXddXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW1hZ2VJbmZvLm1pbWVUeXBlXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVyaSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJpLCB0aGlzLmNyb3NzT3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgbGliLnRleHR1cmVzW2lkeF0gPSB0ZXh0dXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9LSFJDb21tb25NYXRlcmlhbFRvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIGxpYikge1xuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcbiAgICAgICAgdmFyIGNvbW1vbk1hdGVyaWFsSW5mbyA9IG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddO1xuICAgICAgICB1bmlmb3JtcyA9IGNvbW1vbk1hdGVyaWFsSW5mby52YWx1ZXMgfHwge307XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5kaWZmdXNlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdW5pZm9ybXMuZGlmZnVzZSA9IGxpYi50ZXh0dXJlc1t1bmlmb3Jtcy5kaWZmdXNlXSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdW5pZm9ybXMuZW1pc3Npb24gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB1bmlmb3Jtcy5lbWlzc2lvbiA9IGxpYi50ZXh0dXJlc1t1bmlmb3Jtcy5lbWlzc2lvbl0gfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcbiAgICAgICAgaWYgKHVuaWZvcm1zWydkaWZmdXNlJ10gaW5zdGFuY2VvZiBUZXh0dXJlMkQpIHtcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaWZvcm1zWydlbWlzc2lvbiddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWF0ZXJpYWw7XG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XG4gICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxuICAgICAgICAgICAgICAgIGRvdWJsZVNpZGVkOiBtYXRlcmlhbEluZm8uZG91YmxlU2lkZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxuICAgICAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xuXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1bmlmb3Jtcy50cmFuc3BhcmVudCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZmZ1c2VQcm9wID0gdW5pZm9ybXNbJ2RpZmZ1c2UnXTtcbiAgICAgICAgaWYgKGRpZmZ1c2VQcm9wKSB7XG4gICAgICAgICAgICAvLyBDb2xvclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZnVzZVByb3ApKSB7XG4gICAgICAgICAgICAgICAgZGlmZnVzZVByb3AgPSBkaWZmdXNlUHJvcC5zbGljZSgwLCAzKTtcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuY29sb3IgPSBkaWZmdXNlUHJvcClcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2NvbG9yJywgZGlmZnVzZVByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZGlmZnVzZU1hcCA9IGRpZmZ1c2VQcm9wKVxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIGRpZmZ1c2VQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZW1pc3Npb25Qcm9wID0gdW5pZm9ybXNbJ2VtaXNzaW9uJ107XG4gICAgICAgIGlmIChlbWlzc2lvblByb3AgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ29sb3JcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVtaXNzaW9uUHJvcCkpIHtcbiAgICAgICAgICAgICAgICBlbWlzc2lvblByb3AgPSBlbWlzc2lvblByb3Auc2xpY2UoMCwgMyk7XG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaW9uID0gZW1pc3Npb25Qcm9wKVxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZW1pc3Npb24nLCBlbWlzc2lvblByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZW1pc3NpdmVNYXAgPSBlbWlzc2lvblByb3ApXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2l2ZU1hcCcsIGVtaXNzaW9uUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcbiAgICAgICAgICAgIHZhciBub3JtYWxUZXh0dXJlSW5kZXggPSBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5pbmRleDtcbiAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdub3JtYWxNYXAnLCBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NoaW5pbmVzcyddICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBnbG9zc2luZXNzID0gTWF0aC5sb2codW5pZm9ybXNbJ3NoaW5pbmVzcyddKSAvIE1hdGgubG9nKDgxOTIpO1xuICAgICAgICAgICAgLy8gVW5pZm9ybSBnbG9zc2luZXNzXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMSAtIGdsb3NzaW5lc3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdnbG9zc2luZXNzJywgMC4zKTtcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMC4zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NwZWN1bGFyJ10gIT0gbnVsbCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzcGVjdWxhckNvbG9yJywgdW5pZm9ybXNbJ3NwZWN1bGFyJ10uc2xpY2UoMCwgMykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmlmb3Jtc1sndHJhbnNwYXJlbmN5J10gIT0gbnVsbCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdhbHBoYScsIHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XG4gICAgfSxcblxuICAgIF9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIG1ldGFsbGljUm91Z2huZXNzTWF0SW5mbywgbGliKSB7XG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XG5cbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xuICAgICAgICB2YXIgZGlmZnVzZU1hcCwgcm91Z2huZXNzTWFwLCBtZXRhbG5lc3NNYXAsIG5vcm1hbE1hcCwgZW1pc3NpdmVNYXA7XG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcbiAgICAgICAgaWYgKG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlKSB7XG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xuICAgICAgICAgICAgZGlmZnVzZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZGlmZnVzZU1hcCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlKSB7XG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgPSBsaWIudGV4dHVyZXNbbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIHJvdWdobmVzc01hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbWV0YWxuZXNzTWFwJywgJ3JvdWdobmVzc01hcCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xuICAgICAgICAgICAgbm9ybWFsTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdub3JtYWxNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZSkge1xuICAgICAgICAgICAgZW1pc3NpdmVNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBiYXNlQ29sb3IgPSBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcblxuICAgICAgICB2YXIgY29tbW9uUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIHJvdWdobmVzc01hcDogcm91Z2huZXNzTWFwIHx8IG51bGwsXG4gICAgICAgICAgICBtZXRhbG5lc3NNYXA6IG1ldGFsbmVzc01hcCB8fCBudWxsLFxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxuICAgICAgICAgICAgY29sb3I6IGJhc2VDb2xvci5zbGljZSgwLCAzKSxcbiAgICAgICAgICAgIGFscGhhOiBiYXNlQ29sb3JbM10sXG4gICAgICAgICAgICBtZXRhbG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5tZXRhbGxpY0ZhY3RvciB8fCAwLFxuICAgICAgICAgICAgcm91Z2huZXNzOiBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ucm91Z2huZXNzRmFjdG9yIHx8IDAsXG4gICAgICAgICAgICBlbWlzc2lvbjogbWF0ZXJpYWxJbmZvLmVtaXNzaXZlRmFjdG9yIHx8IFswLCAwLCAwXSxcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxuICAgICAgICAgICAgYWxwaGFDdXRvZmY6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZiB8fCAwXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzc01hcCkge1xuICAgICAgICAgICAgLy8gSW4gZ2xURiBtZXRhbGxpY0ZhY3RvciB3aWxsIGRvIG11bHRpcGx5LCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBTdGFuZGFyZE1hdGVyaWFsLlxuICAgICAgICAgICAgLy8gU28gc2ltcGx5IGlnbm9yZSBpdFxuICAgICAgICAgICAgY29tbW9uUHJvcGVydGllcy5tZXRhbG5lc3MgPSAwLjU7XG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzcyA9IDAuNTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHV0aWwuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcbiAgICAgICAgICAgICAgICBhbHBoYVRlc3Q6IGFscGhhVGVzdCxcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkLFxuICAgICAgICAgICAgICAgIC8vIEcgY2hhbm5lbFxuICAgICAgICAgICAgICAgIHJvdWdobmVzc0NoYW5uZWw6IDEsXG4gICAgICAgICAgICAgICAgLy8gQiBDaGFubmVsXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMlxuICAgICAgICAgICAgfSwgY29tbW9uUHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9nZXRTaGFkZXIoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfTUVUQUxORVNTJyk7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJywgMSk7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ01FVEFMTkVTU19DSEFOTkVMJywgMik7XG5cbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRElGRlVTRU1BUF9BTFBIQV9BTFBIQScpO1xuXG4gICAgICAgICAgICBpZiAoYWxwaGFUZXN0KSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoTWFzayA9IGZhbHNlO1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcbiAgICB9LFxuXG4gICAgX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8sIGxpYikge1xuICAgICAgICB2YXIgYWxwaGFUZXN0ID0gbWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ01BU0snO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1N0YW5kYXJkTWF0ZXJpYWwgZG9lc25cXCd0IHN1cHBvcnQgc3BlY3VsYXIgZ2xvc3NpbmVzcyB3b3JrZmxvdyB5ZXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtYXRlcmlhbDtcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIGdsb3NzaW5lc3NNYXAsIHNwZWN1bGFyTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwO1xuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XG4gICAgICAgICAgICAvLyBUT0RPIHRleENvb3JkXG4gICAgICAgIGlmIChzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmRpZmZ1c2VUZXh0dXJlKSB7XG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSkge1xuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCA9IHNwZWN1bGFyTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ3NwZWN1bGFyTWFwJywgJ2dsb3NzaW5lc3NNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUpIHtcbiAgICAgICAgICAgIG5vcm1hbE1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUpIHtcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGlmZnVzZUNvbG9yID0gc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcblxuICAgICAgICB2YXIgY29tbW9uUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXA6IGdsb3NzaW5lc3NNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIHNwZWN1bGFyTWFwOiBzcGVjdWxhck1hcCB8fCBudWxsLFxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxuICAgICAgICAgICAgY29sb3I6IGRpZmZ1c2VDb2xvci5zbGljZSgwLCAzKSxcbiAgICAgICAgICAgIGFscGhhOiBkaWZmdXNlQ29sb3JbM10sXG4gICAgICAgICAgICBzcGVjdWxhckNvbG9yOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyRmFjdG9yIHx8IFsxLCAxLCAxXSxcbiAgICAgICAgICAgIGdsb3NzaW5lc3M6IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZ2xvc3NpbmVzc0ZhY3RvciB8fCAwLFxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXG4gICAgICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMSxcbiAgICAgICAgICAgIGFscGhhQ3V0b2ZmOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmYgPT0gbnVsbCA/IDAuOSA6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZlxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5nbG9zc2luZXNzTWFwKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgc3BlY3VsYXJGYWN0b3JcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuZ2xvc3NpbmVzcyA9IDAuNTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5zcGVjdWxhck1hcCkge1xuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyQ29sb3IgPSBbMSwgMSwgMV07XG4gICAgICAgIH1cblxuICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdHTE9TU0lORVNTX0NIQU5ORUwnLCAzKTtcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XG5cbiAgICAgICAgaWYgKGFscGhhVGVzdCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdGVyaWFsLnNldChjb21tb25Qcm9wZXJ0aWVzKTtcblxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xuICAgIH0sXG5cbiAgICBfcGFyc2VNYXRlcmlhbHM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWF0ZXJpYWxzLCBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBpZHgpIHtcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8uZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19jb21tb24nXSkge1xuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIGxpYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRlcmlhbEluZm8uZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSkge1xuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSwgbGliKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3Bick1ldGFsbGljUm91Z2huZXNzVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIG1hdGVyaWFsSW5mby5wYnJNZXRhbGxpY1JvdWdobmVzcyB8fCB7fSwgbGliKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9wYXJzZU1lc2hlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWVzaGVzLCBmdW5jdGlvbiAobWVzaEluZm8sIGlkeCkge1xuICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdID0gW107XG4gICAgICAgICAgICAvLyBHZW9tZXRyeVxuICAgICAgICAgICAgZm9yICh2YXIgcHAgPSAwOyBwcCA8IG1lc2hJbmZvLnByaW1pdGl2ZXMubGVuZ3RoOyBwcCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZUluZm8gPSBtZXNoSW5mby5wcmltaXRpdmVzW3BwXTtcbiAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElHTlxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtZXNoSW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBib3VuZGluZ0JveDogbmV3IEJvdW5kaW5nQm94KClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljcyA9IE9iamVjdC5rZXlzKHByaW1pdGl2ZUluZm8uYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3MgPSAwOyBzcyA8IHNlbWFudGljcy5sZW5ndGg7IHNzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gc2VtYW50aWNzW3NzXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2Vzc29ySWR4ID0gcHJpbWl0aXZlSW5mby5hdHRyaWJ1dGVzW3NlbWFudGljXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gc2VtYW50aWNBdHRyaWJ1dGVNYXBbc2VtYW50aWNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gU0laRV9NQVBbYXR0cmlidXRlSW5mby50eXBlXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUFycmF5ID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgYWNjZXNzb3JJZHgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZWJHTCBhdHRyaWJ1dGUgYnVmZmVyIG5vdCBzdXBwb3J0IHVpbnQzMi5cbiAgICAgICAgICAgICAgICAgICAgLy8gRGlyZWN0IHVzZSBGbG9hdDMyQXJyYXkgbWF5IGFsc28gaGF2ZSBpc3N1ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0cmlidXRlQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYyA9PT0gJ1dFSUdIVFNfMCcgJiYgc2l6ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VpZ2h0IGRhdGEgaW4gUVRFSyBoYXMgb25seSAzIGNvbXBvbmVudCwgdGhlIGxhc3QgY29tcG9uZW50IGNhbiBiZSBldmFsdWF0ZWQgc2luY2UgaXQgaXMgbm9ybWFsaXplZFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdlaWdodEFycmF5ID0gbmV3IGF0dHJpYnV0ZUFycmF5LmNvbnN0cnVjdG9yKGF0dHJpYnV0ZUluZm8uY291bnQgKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcxID0gYXR0cmlidXRlQXJyYXlbaTRdLCB3MiA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgMV0sIHczID0gYXR0cmlidXRlQXJyYXlbaTQgKyAyXSwgdzQgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3U3VtID0gdzEgKyB3MiArIHczICsgdzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTNdID0gdzEgLyB3U3VtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodEFycmF5W2kzICsgMV0gPSB3MiAvIHdTdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAyXSA9IHczIC8gd1N1bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSB3ZWlnaHRBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ0NPTE9SXzAnICYmIHNpemUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvckFycmF5ID0gbmV3IGF0dHJpYnV0ZUFycmF5LmNvbnN0cnVjdG9yKGF0dHJpYnV0ZUluZm8uY291bnQgKiA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNF0gPSBhdHRyaWJ1dGVBcnJheVtpM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDFdID0gYXR0cmlidXRlQXJyYXlbaTMgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgMl0gPSBhdHRyaWJ1dGVBcnJheVtpMyArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAzXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gY29sb3JBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBhdHRyaWJ1dGVBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVUeXBlID0gJ2Zsb2F0JztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQxNkFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ3VzaG9ydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuSW50MTZBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdzaG9ydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1Ynl0ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuSW50OEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ2J5dGUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udHlwZSA9IGF0dHJpYnV0ZVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljID09PSAnUE9TSVRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCb3VuZGluZyBCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBhdHRyaWJ1dGVJbmZvLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBhdHRyaWJ1dGVJbmZvLm1heDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4uc2V0KG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5zZXQobWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBpbmRpY2VzXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZUluZm8uaW5kaWNlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBwcmltaXRpdmVJbmZvLmluZGljZXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbWV0cnkudmVydGV4Q291bnQgPD0gMHhmZmZmICYmIGdlb21ldHJ5LmluZGljZXMgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDMyQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKGdlb21ldHJ5LmluZGljZXMgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZ2VvbWV0cnkuaW5kaWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBsaWIubWF0ZXJpYWxzW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbEluZm8gPSAoanNvbi5tYXRlcmlhbHMgfHwgW10pW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xuICAgICAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IG1hdGVyaWFsXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHNlbGYuX2dldFNoYWRlcigpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IFtNZXNoLlBPSU5UUywgTWVzaC5MSU5FUywgTWVzaC5MSU5FX0xPT1AsIE1lc2guTElORV9TVFJJUCwgTWVzaC5UUklBTkdMRVMsIE1lc2guVFJJQU5HTEVfU1RSSVAsIE1lc2guVFJJQU5HTEVfRkFOXVtwcmltaXRpdmVJbmZvLm1vZGVdIHx8IE1lc2guVFJJQU5HTEVTLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVHQnVmZmVyOiBtYXRlcmlhbC50cmFuc3BhcmVudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBtZXNoLmN1bGxpbmcgPSAhbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgobWF0ZXJpYWwgaW5zdGFuY2VvZiBTdGFuZGFyZE1hdGVyaWFsKSAmJiBtYXRlcmlhbC5ub3JtYWxNYXApXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRlcmlhbC5pc1RleHR1cmVFbmFibGVkKCdub3JtYWxNYXAnKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnVkVSVEVYX0NPTE9SJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbWVzaC5uYW1lID0gR0xURkxvYWRlci5nZW5lcmF0ZU1lc2hOYW1lKGpzb24ubWVzaGVzLCBpZHgsIHBwKTtcblxuICAgICAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XS5wdXNoKG1lc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgX2luc3RhbmNlQ2FtZXJhOiBmdW5jdGlvbiAoanNvbiwgbm9kZUluZm8pIHtcbiAgICAgICAgdmFyIGNhbWVyYUluZm8gPSBqc29uLmNhbWVyYXNbbm9kZUluZm8uY2FtZXJhXTtcblxuICAgICAgICBpZiAoY2FtZXJhSW5mby50eXBlID09PSAncGVyc3BlY3RpdmUnKSB7XG4gICAgICAgICAgICB2YXIgcGVyc3BlY3RpdmVJbmZvID0gY2FtZXJhSW5mby5wZXJzcGVjdGl2ZSB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgYXNwZWN0OiBwZXJzcGVjdGl2ZUluZm8uYXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgZm92OiBwZXJzcGVjdGl2ZUluZm8ueWZvdixcbiAgICAgICAgICAgICAgICBmYXI6IHBlcnNwZWN0aXZlSW5mby56ZmFyLFxuICAgICAgICAgICAgICAgIG5lYXI6IHBlcnNwZWN0aXZlSW5mby56bmVhclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgb3J0aG9ncmFwaGljSW5mbyA9IGNhbWVyYUluZm8ub3J0aG9ncmFwaGljIHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcnRob2dyYXBoaWNDYW1lcmEoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgdG9wOiBvcnRob2dyYXBoaWNJbmZvLnltYWcsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IG9ydGhvZ3JhcGhpY0luZm8ueG1hZyxcbiAgICAgICAgICAgICAgICBsZWZ0OiAtb3J0aG9ncmFwaGljSW5mby54bWFnLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogLW9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcbiAgICAgICAgICAgICAgICBuZWFyOiBvcnRob2dyYXBoaWNJbmZvLnpuZWFyLFxuICAgICAgICAgICAgICAgIGZhcjogb3J0aG9ncmFwaGljSW5mby56ZmFyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfcGFyc2VOb2RlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuXG4gICAgICAgIGZ1bmN0aW9uIGluc3RhbmNlTWVzaChtZXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1lc2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZSxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbWVzaC5nZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBtYXRlcmlhbDogbWVzaC5tYXRlcmlhbCxcbiAgICAgICAgICAgICAgICBjdWxsaW5nOiBtZXNoLmN1bGxpbmcsXG4gICAgICAgICAgICAgICAgbW9kZTogbWVzaC5tb2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMgPSBbXTtcblxuICAgICAgICB1dGlsLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKG5vZGVJbmZvLCBpZHgpIHtcbiAgICAgICAgICAgIHZhciBub2RlO1xuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLmNhbWVyYSAhPSBudWxsICYmIHRoaXMuaW5jbHVkZUNhbWVyYSkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9pbnN0YW5jZUNhbWVyYShqc29uLCBub2RlSW5mbyk7XG4gICAgICAgICAgICAgICAgbGliLmNhbWVyYXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGVJbmZvLm1lc2ggIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVNZXNoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZXMgPSBsaWIubWVzaGVzW25vZGVJbmZvLm1lc2hdO1xuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgbm9kZSB3aXRoIG1lc2ggZGlyZWN0bHlcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaWIuaW5zdGFuY2VkTWVzaGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZXNoID0gaW5zdGFuY2VNZXNoKHByaW1pdGl2ZXNbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKG5ld01lc2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChuZXdNZXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgIC8vIFBFTkRJTkcgRHVscGxpY2F0ZSBuYW1lLlxuICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlSW5mby5tYXRyaXgpIHtcbiAgICAgICAgICAgICAgICBub2RlLmxvY2FsVHJhbnNmb3JtLnNldEFycmF5KG5vZGVJbmZvLm1hdHJpeCk7XG4gICAgICAgICAgICAgICAgbm9kZS5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucG9zaXRpb24uc2V0QXJyYXkobm9kZUluZm8udHJhbnNsYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8ucm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yb3RhdGlvbi5zZXRBcnJheShub2RlSW5mby5yb3RhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5zY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNjYWxlLnNldEFycmF5KG5vZGVJbmZvLnNjYWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpYi5ub2Rlc1tpZHhdID0gbm9kZTtcbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgLy8gQnVpbGQgaGllcmFyY2h5XG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBsaWIubm9kZXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUluZm8uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkSWR4ID0gbm9kZUluZm8uY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpYi5ub2Rlc1tjaGlsZElkeF07XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgX3BhcnNlQW5pbWF0aW9uczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuICAgICAgICBmdW5jdGlvbiBjaGVja0NoYW5uZWxQYXRoKGNoYW5uZWxJbmZvKSB7XG4gICAgICAgICAgICBpZiAoY2hhbm5lbEluZm8ucGF0aCA9PT0gJ3dlaWdodHMnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG5vdCBzdXBwb3J0IG1vcnBoIHRhcmdldHMgeWV0LicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFubmVsSW5mby50YXJnZXQubm9kZSArICdfJyArIGFuaW1hdGlvbkluZm8uc2FtcGxlcnNbY2hhbm5lbEluZm8uc2FtcGxlcl0uaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGltZUFjY2Vzc29yTXVsdGlwbGllZCA9IHt9O1xuICAgICAgICB1dGlsLmVhY2goanNvbi5hbmltYXRpb25zLCBmdW5jdGlvbiAoYW5pbWF0aW9uSW5mbywgaWR4KSB7XG4gICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBhbmltYXRpb25JbmZvLmNoYW5uZWxzLmZpbHRlcihjaGVja0NoYW5uZWxQYXRoKTtcblxuICAgICAgICAgICAgaWYgKCFjaGFubmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdHJhY2tzID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxJbmZvID0gY2hhbm5lbHNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxIYXNoID0gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldE5vZGUgPSBsaWIubm9kZXNbY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGVdO1xuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF07XG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXTtcblxuICAgICAgICAgICAgICAgIGlmICghdHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdID0gbmV3IFNhbXBsZXJUcmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YXJnZXROb2RlID8gdGFyZ2V0Tm9kZS5uYW1lIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldE5vZGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrLnRhcmdldE5vZGVJbmRleCA9IGNoYW5uZWxJbmZvLnRhcmdldC5ub2RlO1xuICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8uaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVMZW4gPSB0cmFjay5jaGFubmVscy50aW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lQWNjZXNzb3JNdWx0aXBsaWVkW3NhbXBsZXJJbmZvLmlucHV0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmcmFtZUxlbjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZVtrXSAqPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBzYW1wbGVySW5mby5pbnRlcnBvbGF0aW9uIHx8ICdMSU5FQVInO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uICE9PSAnTElORUFSJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgb25seSBzdXBwb3J0IExJTkVBUiBpbnRlcnBvbGF0aW9uLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gY2hhbm5lbEluZm8udGFyZ2V0LnBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09ICd0cmFuc2xhdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9ICdwb3NpdGlvbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHNbcGF0aF0gPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBzYW1wbGVySW5mby5vdXRwdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhbmltYXRpb25JbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgbG9vcDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKHZhciBoYXNoIGluIHRyYWNrcykge1xuICAgICAgICAgICAgICAgIGNsaXAuYWRkVHJhY2sodHJhY2tzW2hhc2hdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsaXAuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XG4gICAgICAgICAgICBsaWIuY2xpcHMucHVzaChjbGlwKTtcbiAgICAgICAgfSwgdGhpcyk7XG5cblxuICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgIHZhciBtYXhMaWZlID0gbGliLmNsaXBzLnJlZHVjZShmdW5jdGlvbiAobWF4VGltZSwgY2xpcCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1heFRpbWUsIGNsaXAubGlmZSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBsaWIuY2xpcHMuZm9yRWFjaChmdW5jdGlvbiAoY2xpcCkge1xuICAgICAgICAgICAgY2xpcC5saWZlID0gbWF4TGlmZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGxpYi5jbGlwcztcbiAgICB9XG59KTtcblxuR0xURkxvYWRlci5nZW5lcmF0ZU1lc2hOYW1lID0gZnVuY3Rpb24gKG1lc2hlcywgaWR4LCBwcmltaXRpdmVJZHgpIHtcbiAgICB2YXIgbWVzaEluZm8gPSBtZXNoZXNbaWR4XTtcbiAgICB2YXIgbWVzaE5hbWUgPSBtZXNoSW5mby5uYW1lIHx8ICgnbWVzaF8nICsgaWR4KTtcbiAgICByZXR1cm4gcHJpbWl0aXZlSWR4ID09PSAwID8gbWVzaE5hbWUgOiAobWVzaE5hbWUgKyAnJCcgKyBwcmltaXRpdmVJZHgpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgR0xURkxvYWRlcjtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XG4gKlxuICogQGV4YW1wbGVcbiAqICAgICB2YXIgbGlnaHQgPSBuZXcgY2xheS5saWdodC5EaXJlY3Rpb25hbCh7XG4gKiAgICAgICAgIGludGVuc2l0eTogMC41LFxuICogICAgICAgICBjb2xvcjogWzEuMCwgMC4wLCAwLjBdXG4gKiAgICAgfSk7XG4gKiAgICAgbGlnaHQucG9zaXRpb24uc2V0KDEwLCAxMCwgMTApO1xuICogICAgIGxpZ2h0Lmxvb2tBdChjbGF5Lm1hdGguVmVjdG9yMy5aRVJPKTtcbiAqICAgICBzY2VuZS5hZGQobGlnaHQpO1xuICovXG52YXIgRGlyZWN0aW9uYWxMaWdodCA9IExpZ2h0LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5saWdodC5EaXJlY3Rpb25hbCMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgc2hhZG93U2xvcGVTY2FsZTogMi4wLFxuICAgIC8qKlxuICAgICAqIFNoYWRvdyBjYXNjYWRlLlxuICAgICAqIFVzZSBQU1NNIHRlY2huaXF1ZSB3aGVuIGl0IGlzIGxhcmdlciB0aGFuIDEgYW5kIGhhdmUgYSB1bmlxdWUgZGlyZWN0aW9uYWwgbGlnaHQgaW4gc2NlbmUuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzaGFkb3dDYXNjYWRlOiAxLFxuXG4gICAgLyoqXG4gICAgICogQXZhaWxhYmxlIHdoZW4gc2hhZG93Q2FzY2FkZSBpcyBsYXJnZXIgdGhhbiAxIGFuZCBoYXZlIGEgdW5pcXVlIGRpcmVjdGlvbmFsIGxpZ2h0IGluIHNjZW5lLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgY2FzY2FkZVNwbGl0TG9nRmFjdG9yOiAwLjJcbn0sIHtcblxuICAgIHR5cGU6ICdESVJFQ1RJT05BTF9MSUdIVCcsXG5cbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuX19kaXIgPSBpbnN0YW5jZS5fX2RpciB8fCBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubm9ybWFsaXplKCkubmVnYXRlKCkuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHRDb2xvcjoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuRGlyZWN0aW9uYWx9XG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwucHJvdG90eXBlXG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XG4gICAgICAgIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUgPSB0aGlzLnNoYWRvd1Nsb3BlU2NhbGU7XG4gICAgICAgIHJldHVybiBsaWdodDtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRGlyZWN0aW9uYWxMaWdodDtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuUG9pbnRcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcbiAqL1xudmFyIFBvaW50TGlnaHQgPSBMaWdodC5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkubGlnaHQuUG9pbnQjICovXG57XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICByYW5nZTogMTAwLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBjYXN0U2hhZG93OiBmYWxzZVxufSwge1xuXG4gICAgdHlwZTogJ1BPSU5UX0xJR0hUJyxcblxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcbiAgICAgICAgcG9pbnRMaWdodFBvc2l0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRMaWdodFJhbmdlOiB7XG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwb2ludExpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbIGNvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHkgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5Qb2ludH1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5Qb2ludC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBsaWdodC5yYW5nZSA9IHRoaXMucmFuZ2U7XG4gICAgICAgIHJldHVybiBsaWdodDtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRMaWdodDtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlNwb3RcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcbiAqL1xudmFyIFNwb3RMaWdodCA9IExpZ2h0LmV4dGVuZChcbi8qKkBsZW5kcyBjbGF5LmxpZ2h0LlNwb3QgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhbmdlOiAyMCxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHVtYnJhQW5nbGU6IDMwLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcGVudW1icmFBbmdsZTogNDUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBmYWxsb2ZmRmFjdG9yOiAyLjAsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzaGFkb3dCaWFzOiAwLjAwMDIsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjBcbn0se1xuXG4gICAgdHlwZTogJ1NQT1RfTElHSFQnLFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICBzcG90TGlnaHRQb3NpdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcG90TGlnaHRSYW5nZToge1xuICAgICAgICAgICAgdHlwZTogJzFmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmU6IHtcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY29zKGluc3RhbmNlLnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZToge1xuICAgICAgICAgICAgdHlwZTogJzFmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jb3MoaW5zdGFuY2UucGVudW1icmFBbmdsZSAqIE1hdGguUEkgLyAxODApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcG90TGlnaHRGYWxsb2ZmRmFjdG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5mYWxsb2ZmRmFjdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcG90TGlnaHREaXJlY3Rpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuX19kaXIgPSBpbnN0YW5jZS5fX2RpciB8fCBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubmVnYXRlKCkuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNwb3RMaWdodENvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5TcG90fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LlNwb3QucHJvdG90eXBlXG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcbiAgICAgICAgbGlnaHQudW1icmFBbmdsZSA9IHRoaXMudW1icmFBbmdsZTtcbiAgICAgICAgbGlnaHQucGVudW1icmFBbmdsZSA9IHRoaXMucGVudW1icmFBbmdsZTtcbiAgICAgICAgbGlnaHQuZmFsbG9mZkZhY3RvciA9IHRoaXMuZmFsbG9mZkZhY3RvcjtcbiAgICAgICAgbGlnaHQuc2hhZG93QmlhcyA9IHRoaXMuc2hhZG93QmlhcztcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTcG90TGlnaHQ7XG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcbiAqL1xudmFyIEFtYmllbnRMaWdodCA9IExpZ2h0LmV4dGVuZCh7XG5cbiAgICBjYXN0U2hhZG93OiBmYWxzZVxuXG59LCB7XG5cbiAgICB0eXBlOiAnQU1CSUVOVF9MSUdIVCcsXG5cbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XG4gICAgICAgIGFtYmllbnRMaWdodENvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBuYW1lIGNsb25lXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnQucHJvdG90eXBlXG4gICAgICovXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudExpZ2h0O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuL1RleHR1cmVDdWJlJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcblxudmFyIEtFWV9GUkFNRUJVRkZFUiA9ICdmcmFtZWJ1ZmZlcic7XG52YXIgS0VZX1JFTkRFUkJVRkZFUiA9ICdyZW5kZXJidWZmZXInO1xudmFyIEtFWV9SRU5ERVJCVUZGRVJfV0lEVEggPSBLRVlfUkVOREVSQlVGRkVSICsgJ193aWR0aCc7XG52YXIgS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19oZWlnaHQnO1xudmFyIEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19hdHRhY2hlZCc7XG52YXIgS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCA9ICdkZXB0aHRleHR1cmVfYXR0YWNoZWQnO1xuXG52YXIgR0xfRlJBTUVCVUZGRVIgPSBnbGVudW0uRlJBTUVCVUZGRVI7XG52YXIgR0xfUkVOREVSQlVGRkVSID0gZ2xlbnVtLlJFTkRFUkJVRkZFUjtcbnZhciBHTF9ERVBUSF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX0FUVEFDSE1FTlQ7XG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSBnbGVudW0uQ09MT1JfQVRUQUNITUVOVDA7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkZyYW1lQnVmZmVyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgRnJhbWVCdWZmZXIgPSBCYXNlLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlciMgKi9cbntcbiAgICAvKipcbiAgICAgKiBJZiB1c2UgZGVwdGggYnVmZmVyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZGVwdGhCdWZmZXI6IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHZpZXdwb3J0OiBudWxsLFxuXG4gICAgX3dpZHRoOiAwLFxuICAgIF9oZWlnaHQ6IDAsXG5cbiAgICBfdGV4dHVyZXM6IG51bGwsXG5cbiAgICBfYm91bmRSZW5kZXJlcjogbnVsbCxcbn0sIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBVc2UgY2FjaGVcbiAgICB0aGlzLl9jYWNoZSA9IG5ldyBDYWNoZSgpO1xuXG4gICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcbn0sXG5cbi8qKkBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyLnByb3RvdHlwZS4gKi9cbntcbiAgICAvKipcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSB3aWR0aFxuICAgICAqIHtudW1iZXJ9XG4gICAgICovXG4gICAgLy8gRklYTUUgQ2FuJ3QgdXNlIGJlZm9yZSAjYmluZFxuICAgIGdldFRleHR1cmVXaWR0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBhdHRhY2hlZCB0ZXh0dXJlIGhlaWdodFxuICAgICAqIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0VGV4dHVyZUhlaWdodDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHRoZSBmcmFtZWJ1ZmZlciB0byBnaXZlbiByZW5kZXJlciBiZWZvcmUgcmVuZGVyaW5nXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcblxuICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIpIHtcbiAgICAgICAgICAgIC8vIEFscmVhZHkgYm91bmRcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZW5kZXJlciBhbHJlYWR5IGJvdW5kIHdpdGggYW5vdGhlciBmcmFtZWJ1ZmZlci4gVW5iaW5kIGl0IGZpcnN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPSB0aGlzO1xuXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcblxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0aGlzLl9nZXRGcmFtZUJ1ZmZlckdMKHJlbmRlcmVyKSk7XG4gICAgICAgIHRoaXMuX2JvdW5kUmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG5cbiAgICAgICAgY2FjaGUucHV0KCd2aWV3cG9ydCcsIHJlbmRlcmVyLnZpZXdwb3J0KTtcblxuICAgICAgICB2YXIgaGFzVGV4dHVyZUF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgIHZhciB3aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodDtcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLl90ZXh0dXJlcykge1xuICAgICAgICAgICAgaGFzVGV4dHVyZUF0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcbiAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIERvIHdpZHRoLCBoZWlnaHQgY2hlY2tpbmcsIG1ha2Ugc3VyZSBzaXplIGFyZSBzYW1lXG4gICAgICAgICAgICAgICAgd2lkdGggPSBvYmoudGV4dHVyZS53aWR0aDtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBvYmoudGV4dHVyZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgLy8gQXR0YWNoIHRleHR1cmVzXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9BdHRhY2gocmVuZGVyZXIsIG9iai50ZXh0dXJlLCBhdHRhY2htZW50LCBvYmoudGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBpZiAoIWhhc1RleHR1cmVBdHRhY2hlZCAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdNdXN0IGF0dGFjaCB0ZXh0dXJlIGJlZm9yZSBiaW5kLCBvciByZW5kZXJidWZmZXIgbWF5IGhhdmUgaW5jb3JyZWN0IHdpZHRoIGFuZCBoZWlnaHQuJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZpZXdwb3J0KSB7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh0aGlzLnZpZXdwb3J0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIGF0dGFjaGVkVGV4dHVyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb0RldGFjaChfZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQpICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZW5kZXIgYnVmZmVyXG4gICAgICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfUkVOREVSQlVGRkVSKSkge1xuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSLCBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlbmRlcmJ1ZmZlciA9IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSKTtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSClcbiAgICAgICAgICAgICAgICAgICAgfHwgaGVpZ2h0ICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQpKSB7XG4gICAgICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xuICAgICAgICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgX2dsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSCwgd2lkdGgpO1xuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCkpIHtcbiAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5iaW5kIHRoZSBmcmFtZSBidWZmZXIgYWZ0ZXIgcmVuZGVyaW5nXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICAvLyBSZW1vdmUgc3RhdHVzIHJlY29yZCBvbiByZW5kZXJlclxuICAgICAgICByZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9IG51bGw7XG5cbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG51bGwpO1xuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMuX2NhY2hlLmdldCgndmlld3BvcnQnKTtcbiAgICAgICAgLy8gUmVzZXQgdmlld3BvcnQ7XG4gICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xuICAgIH0sXG5cbiAgICAvLyBCZWNhdXNlIHRoZSBkYXRhIG9mIHRleHR1cmUgaXMgY2hhbmdlZCBvdmVyIHRpbWUsXG4gICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XG4gICAgdXBkYXRlTWlwbWFwOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XG4gICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBvYmoudGV4dHVyZTtcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBzb21lIHRleHR1cmUgZm9ybWF0IGNhbid0IGdlbmVyYXRlIG1pcG1hcFxuICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS5OUE9UICYmIHRleHR1cmUudXNlTWlwbWFwXG4gICAgICAgICAgICAgICAgICAgICYmIHRleHR1cmUubWluRmlsdGVyID09PSBUZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0ZXh0dXJlLnRleHR1cmVUeXBlID09PSAndGV4dHVyZUN1YmUnID8gZ2xlbnVtLlRFWFRVUkVfQ1VCRV9NQVAgOiBnbGVudW0uVEVYVFVSRV8yRDtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZS5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vIDB4OENENSwgMzYwNTMsIEZSQU1FQlVGRkVSX0NPTVBMRVRFXG4gICAgLy8gMHg4Q0Q2LCAzNjA1NCwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXG4gICAgLy8gMHg4Q0Q3LCAzNjA1NSwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRcbiAgICAvLyAweDhDRDksIDM2MDU3LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNcbiAgICAvLyAweDhDREQsIDM2MDYxLCBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFxuICAgIGNoZWNrU3RhdHVzOiBmdW5jdGlvbiAoX2dsKSB7XG4gICAgICAgIHJldHVybiBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUik7XG4gICAgfSxcblxuICAgIF9nZXRGcmFtZUJ1ZmZlckdMOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfRlJBTUVCVUZGRVIpKSB7XG4gICAgICAgICAgICBjYWNoZS5wdXQoS0VZX0ZSQU1FQlVGRkVSLCByZW5kZXJlci5nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoS0VZX0ZSQU1FQlVGRkVSKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgdGV4dHVyZShSVFQpIHRvIHRoZSBmcmFtZWJ1ZmZlclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW2F0dGFjaG1lbnQ9Z2wuQ09MT1JfQVRUQUNITUVOVDBdXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdGFyZ2V0PWdsLlRFWFRVUkVfMkRdXG4gICAgICovXG4gICAgYXR0YWNoOiBmdW5jdGlvbiAodGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLndpZHRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0ZXh0dXJlIGF0dGFjaGVkIHRvIGNvbG9yIGJ1ZmZlciBpcyBub3QgYSB2YWxpZC4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIHdpZHRoIGFuZCBoZWlnaHQgY2hlY2tcblxuICAgICAgICAvLyBJZiB0aGUgZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgZGV2ZWxvcGVyc1xuICAgICAgICAvLyBDYW4gYXR0YWNoIGEgZGVwdGggdGV4dHVyZSB0byB0aGUgZGVwdGggYnVmZmVyXG4gICAgICAgIC8vIGh0dHA6Ly9ibG9nLnRvamljb2RlLmNvbS8yMDEyLzA3L3VzaW5nLXdlYmdsZGVwdGh0ZXh0dXJlLmh0bWxcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgR0xfQ09MT1JfQVRUQUNITUVOVDA7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcblxuICAgICAgICB2YXIgYm91bmRSZW5kZXJlciA9IHRoaXMuX2JvdW5kUmVuZGVyZXI7XG4gICAgICAgIHZhciBfZ2wgPSBib3VuZFJlbmRlcmVyICYmIGJvdW5kUmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzO1xuXG4gICAgICAgIGlmIChfZ2wpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgICAgICAgY2FjaGUudXNlKGJvdW5kUmVuZGVyZXIuX191aWRfXyk7XG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhdHRhY2hlZFxuICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLnRhcmdldCA9PT0gdGFyZ2V0XG4gICAgICAgICAgICAmJiBwcmV2aW91cy50ZXh0dXJlID09PSB0ZXh0dXJlXG4gICAgICAgICAgICAmJiAoYXR0YWNoZWRUZXh0dXJlcyAmJiBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdICE9IG51bGwpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XG4gICAgICAgIGlmIChib3VuZFJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjYW5BdHRhY2ggPSB0aGlzLl9kb0F0dGFjaChib3VuZFJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gU2V0IHZpZXdwb3J0IGFnYWluIGluY2FzZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgc2l6ZSB0ZXh0dXJlcy5cbiAgICAgICAgICAgIGlmICghdGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIGJvdW5kUmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0udGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9kb0F0dGFjaDogZnVuY3Rpb24gKHJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGV4dHVyZSBpcyBhbHdheXMgdXBkYXRlZFxuICAgICAgICAvLyBCZWNhdXNlIHRleHR1cmUgd2lkdGggb3IgaGVpZ2h0IG1heSBiZSBjaGFuZ2VkIGFuZCBpbiB0aGlzIHdlIGNhbid0IGJlIG5vdGlmaWVkXG4gICAgICAgIC8vIEZJWE1FIGF3a3dhcmQ7XG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSB0ZXh0dXJlLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcik7XG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF07XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGFuZCB0YXJnZXQgbm90IGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChvYmoudGV4dHVyZSA9PT0gdGV4dHVyZSAmJiBvYmoudGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xuXG4gICAgICAgIHZhciBjYW5BdHRhY2ggPSB0cnVlO1xuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XG4gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcblxuICAgICAgICAgICAgaWYgKCFleHRlbnNpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXB0aCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICAgICAgICAgICAgICBjYW5BdHRhY2ggPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmZvcm1hdCAhPT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVFxuICAgICAgICAgICAgICAgICYmIHRleHR1cmUuZm9ybWF0ICE9PSBnbGVudW0uREVQVEhfU1RFTkNJTFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gZGVwdGggYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHJlbmRlciBidWZmZXIgY3JlYXRlZCBwcmV2aW91c1xuICAgICAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xuICAgICAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSB0aGlzLl9jYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVELCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1pcG1hcCBsZXZlbCBjYW4gb25seSBiZSAwXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCB3ZWJnbFRleHR1cmUsIDApO1xuXG4gICAgICAgIGlmICghYXR0YWNoZWRUZXh0dXJlcykge1xuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KCdhdHRhY2hlZF90ZXh0dXJlcycsIGF0dGFjaGVkVGV4dHVyZXMpO1xuICAgICAgICB9XG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRhcmdldCA9IHRhcmdldDtcblxuICAgICAgICByZXR1cm4gY2FuQXR0YWNoO1xuICAgIH0sXG5cbiAgICBfZG9EZXRhY2g6IGZ1bmN0aW9uIChfZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xuICAgICAgICAvLyBEZXRhY2ggYSB0ZXh0dXJlIGZyb20gZnJhbWVidWZmZXJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9XZWJHTC9ibG9iL21hc3Rlci9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjAvY29uZm9ybWFuY2UvZnJhbWVidWZmZXItdGVzdC5odG1sI0wxNDVcbiAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0YXJnZXQsIG51bGwsIDApO1xuXG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGFjaCBhIHRleHR1cmVcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFthdHRhY2htZW50PWdsLkNPTE9SX0FUVEFDSE1FTlQwXVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxuICAgICAqL1xuICAgIGRldGFjaDogZnVuY3Rpb24gKGF0dGFjaG1lbnQsIHRhcmdldCkge1xuICAgICAgICAvLyBUT0RPIGRlcHRoIGV4dGVuc2lvbiBjaGVjayA/XG4gICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX2JvdW5kUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgICAgICAgY2FjaGUudXNlKHRoaXMuX2JvdW5kUmVuZGVyZXIuX191aWRfXyk7XG4gICAgICAgICAgICB0aGlzLl9kb0RldGFjaCh0aGlzLl9ib3VuZFJlbmRlcmVyLmdsLCBhdHRhY2htZW50LCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBEaXNwb3NlXG4gICAgICogQHBhcmFtICB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBfZ2xcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcblxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgICAgICB2YXIgcmVuZGVyQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xuICAgICAgICBpZiAocmVuZGVyQnVmZmVyKSB7XG4gICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlckJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZyYW1lQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9GUkFNRUJVRkZFUik7XG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xuICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lQnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xuXG4gICAgICAgIC8vIENsZWFyIGNhY2hlIGZvciByZXVzaW5nXG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XG5cbiAgICB9XG59KTtcblxuRnJhbWVCdWZmZXIuREVQVEhfQVRUQUNITUVOVCA9IEdMX0RFUFRIX0FUVEFDSE1FTlQ7XG5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMCA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xuRnJhbWVCdWZmZXIuU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLlNURU5DSUxfQVRUQUNITUVOVDtcbkZyYW1lQnVmZmVyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA9IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ7XG5cbmV4cG9ydCBkZWZhdWx0IEZyYW1lQnVmZmVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZfVGV4Y29vcmQgPSB0ZXhjb29yZDtcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFwiO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBQbGFuZSBmcm9tICcuLi9nZW9tZXRyeS9QbGFuZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcbmltcG9ydCB2ZXJ0ZXhFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci92ZXJ0ZXguZ2xzbC5qcyc7XG5cblNoYWRlclsnaW1wb3J0J10odmVydGV4RXNzbCk7XG5cbnZhciBwbGFuZUdlbyA9IG5ldyBQbGFuZSgpO1xudmFyIG1lc2ggPSBuZXcgTWVzaCh7XG4gICAgZ2VvbWV0cnk6IHBsYW5lR2VvLFxuICAgIGZydXN0dW1DdWxsaW5nOiBmYWxzZVxufSk7XG52YXIgY2FtZXJhID0gbmV3IE9ydGhvQ2FtZXJhKCk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5QYXNzXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgUGFzcyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuUGFzcyMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogRnJhZ21lbnQgc2hhZGVyIHN0cmluZ1xuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgLy8gUEVORElORyBzaGFkZXIgb3IgZnJhZ21lbnQgP1xuICAgICAgICBmcmFnbWVudCA6ICcnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgb3V0cHV0cyA6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxuICAgICAgICAgKi9cbiAgICAgICAgbWF0ZXJpYWwgOiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBjbGVhckNvbG9yOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBjbGVhckRlcHRoOiB0cnVlXG4gICAgfTtcbn0sIGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpLCB0aGlzLmZyYWdtZW50KTtcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICBzaGFkZXI6IHNoYWRlclxuICAgIH0pO1xuICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmVzQWxsKCk7XG5cbiAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzLnByb3RvdHlwZSAqL1xue1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXG4gICAgICovXG4gICAgc2V0VW5pZm9ybSA6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHt9XG4gICAgICovXG4gICAgZ2V0VW5pZm9ybSA6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgdmFyIHVuaWZvcm0gPSB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zW25hbWVdO1xuICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm0udmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYXR0YWNobWVudFxuICAgICAqL1xuICAgIGF0dGFjaE91dHB1dCA6IGZ1bmN0aW9uKHRleHR1cmUsIGF0dGFjaG1lbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcbiAgICAgICAgdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdID0gdGV4dHVyZTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxuICAgICAqL1xuICAgIGRldGFjaE91dHB1dCA6IGZ1bmN0aW9uKHRleHR1cmUpIHtcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPT09IHRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJpbmQgOiBmdW5jdGlvbihyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcblxuICAgICAgICBpZiAodGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHVuYmluZCA6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xuICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkZyYW1lQnVmZmVyfSBbZnJhbWVCdWZmZXJdXG4gICAgICovXG4gICAgcmVuZGVyIDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XG5cbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5iaW5kKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XG4gICAgICAgICAgICBpZiAoZXh0ICYmIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZzLnB1c2goYXR0YWNobWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXh0LmRyYXdCdWZmZXJzRVhUKGJ1ZnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XG5cbiAgICAgICAgLy8gRklYTUUgRG9uJ3QgY2xlYXIgaW4gZWFjaCBwYXNzIGluIGRlZmF1bHQsIGxldCB0aGUgY29sb3Igb3ZlcndyaXRlIHRoZSBidWZmZXJcbiAgICAgICAgLy8gRklYTUUgcGl4ZWxzIG1heSBiZSBkaXNjYXJkXG4gICAgICAgIHZhciBjbGVhckJpdCA9IHRoaXMuY2xlYXJEZXB0aCA/IF9nbC5ERVBUSF9CVUZGRVJfQklUIDogMDtcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDb2xvcikge1xuICAgICAgICAgICAgY2xlYXJCaXQgPSBjbGVhckJpdCB8IF9nbC5DT0xPUl9CVUZGRVJfQklUO1xuICAgICAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHZhciBjYyA9IHRoaXMuY2xlYXJDb2xvcjtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNjKSkge1xuICAgICAgICAgICAgICAgIF9nbC5jbGVhckNvbG9yKGNjWzBdLCBjY1sxXSwgY2NbMl0sIGNjWzNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZ2wuY2xlYXIoY2xlYXJCaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmJsZW5kV2l0aFByZXZpb3VzKSB7XG4gICAgICAgICAgICAvLyBCbGVuZCB3aXRoIHByZXZpb3VzIHJlbmRlcmVkIHNjZW5lIGluIHRoZSBmaW5hbCBvdXRwdXRcbiAgICAgICAgICAgIC8vIEZJWE1FIENvbmZpZ3VyZSBibGVuZC5cbiAgICAgICAgICAgIC8vIEZJWE1FIEl0IHdpbGwgY2F1c2Ugc2NyZWVuIGJsaW5r77yfXG4gICAgICAgICAgICBfZ2wuZW5hYmxlKF9nbC5CTEVORCk7XG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XG5cbiAgICAgICAgaWYgKGZyYW1lQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNpbXBseSBkbyBxdWFkIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlclF1YWQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbbWVzaF0sIGNhbWVyYSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7fVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFBhc3M7XG4iLCIvLyBUT0RPIFNob3VsZCBub3QgZGVyaXZlZCBmcm9tIG1lc2g/XG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcbmltcG9ydCBDdWJlR2VvbWV0cnkgZnJvbSAnLi4vZ2VvbWV0cnkvQ3ViZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuXG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL3NreWJveC5nbHNsLmpzJztcblNoYWRlci5pbXBvcnQoc2t5Ym94RXNzbCk7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5Ta3lib3hcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgIHZhciBza3lUZXggPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSgpO1xuICogICAgIHNreVRleC5sb2FkKHtcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcbiAqICAgICAgICAgJ254JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnguanBnJ1xuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcbiAqICAgICAgICAgJ3B6JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHouanBnJ1xuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXG4gKiAgICAgfSk7XG4gKiAgICAgdmFyIHNreWJveCA9IG5ldyBjbGF5LnBsdWdpbi5Ta3lib3goe1xuICogICAgICAgICBzY2VuZTogc2NlbmVcbiAqICAgICB9KTtcbiAqICAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIHNreVRleCk7XG4gKi9cbnZhciBTa3lib3ggPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgc2t5Ym94U2hhZGVyID0gbmV3IFNoYWRlcih7XG4gICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC5mcmFnbWVudCcpXG4gICAgfSk7XG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgc2hhZGVyOiBza3lib3hTaGFkZXIsXG4gICAgICAgIGRlcHRoTWFzazogZmFsc2VcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWJveC5wcm90b3R5cGVcbiAgICAgICAgICovXG4gICAgICAgIHNjZW5lOiBudWxsLFxuXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ3ViZUdlb21ldHJ5KCksXG5cbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxuXG4gICAgICAgIGVudmlyb25tZW50TWFwOiBudWxsLFxuXG4gICAgICAgIGN1bGxpbmc6IGZhbHNlXG4gICAgfTtcbn0sIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xuICAgIGlmIChzY2VuZSkge1xuICAgICAgICB0aGlzLmF0dGFjaFNjZW5lKHNjZW5lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnRNYXApIHtcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcbiAgICB9XG59LCAvKiogQGxlbmRzIGNsYXkucGx1Z2luLlNreWJveCMgKi8ge1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCB0aGUgc2t5Ym94IHRvIHRoZSBzY2VuZVxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXG4gICAgICovXG4gICAgYXR0YWNoU2NlbmU6IGZ1bmN0aW9uIChzY2VuZSkge1xuICAgICAgICBpZiAodGhpcy5zY2VuZSkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xuICAgICAgICB9XG4gICAgICAgIHNjZW5lLnNreWJveCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICBzY2VuZS5vbignYmVmb3JlcmVuZGVyJywgdGhpcy5fYmVmb3JlUmVuZGVyU2NlbmUsIHRoaXMpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGV0YWNoIGZyb20gc2NlbmVcbiAgICAgKi9cbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zY2VuZSkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5Ym94ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBza3lib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLmRldGFjaFNjZW5lKCk7XG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXQgZW52aXJvbm1lbnQgbWFwXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmVDdWJlfSBlbnZNYXBcbiAgICAgKi9cbiAgICBzZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKGVudk1hcCkge1xuICAgICAgICB0aGlzLm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0IGVudmlyb25tZW50IG1hcFxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XG4gICAgICovXG4gICAgZ2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdlbnZpcm9ubWVudE1hcCcpO1xuICAgIH0sXG5cbiAgICBfYmVmb3JlUmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XG4gICAgICAgIHRoaXMucmVuZGVyU2t5Ym94KHJlbmRlcmVyLCBjYW1lcmEpO1xuICAgIH0sXG5cbiAgICByZW5kZXJTa3lib3g6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24uY29weShjYW1lcmEuZ2V0V29ybGRQb3NpdGlvbigpKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgLy8gRG9uJ3QgcmVtZW1iZXIgdG8gZGlzYWJsZSBibGVuZFxuICAgICAgICByZW5kZXJlci5nbC5kaXNhYmxlKHJlbmRlcmVyLmdsLkJMRU5EKTtcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwuZ2V0KCdsb2QnKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0xPRCcpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3RoaXNdLCBjYW1lcmEpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTa3lib3g7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcblxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XG5cbi8qKlxuICogUGFzcyByZW5kZXJpbmcgc2NlbmUgdG8gYSBlbnZpcm9ubWVudCBjdWJlIG1hcFxuICpcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXBcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKiBAZXhhbXBsZVxuICogICAgIC8vIEV4YW1wbGUgb2YgY2FyIHJlZmxlY3Rpb25cbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoe1xuICogICAgICAgICB3aWR0aDogMjU2LFxuICogICAgICAgICBoZWlnaHQ6IDI1NlxuICogICAgIH0pO1xuICogICAgIHZhciBlbnZQYXNzID0gbmV3IGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCh7XG4gKiAgICAgICAgIHBvc2l0aW9uOiBjYXIucG9zaXRpb24sXG4gKiAgICAgICAgIHRleHR1cmU6IGVudk1hcFxuICogICAgIH0pO1xuICogICAgIHZhciBjYXJCb2R5ID0gY2FyLmdldENoaWxkQnlOYW1lKCdib2R5Jyk7XG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKCdlbnZpcm9ubWVudE1hcCcpO1xuICogICAgIGNhckJvZHkubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XG4gKiAgICAgLi4uXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xuICogICAgICAgICBlbnZQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUpO1xuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgfSk7XG4gKi9cbnZhciBFbnZpcm9ubWVudE1hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcbiAgICB2YXIgcmV0ID0gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBwb3NpdGlvblxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXG4gICAgICAgICAqL1xuICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBmYXIgcGxhbmVcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcbiAgICAgICAgICovXG4gICAgICAgIGZhcjogMTAwMCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBuZWFyIHBsYW5lXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXG4gICAgICAgICAqL1xuICAgICAgICBuZWFyOiAwLjEsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbnZpcm9ubWVudCBjdWJlIG1hcFxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcbiAgICAgICAgICovXG4gICAgICAgIHRleHR1cmU6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZWQgaWYgeW91IHdhbid0IGhhdmUgc2hhZG93IGluIGVudmlyb25tZW50IG1hcFxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cbiAgICAgICAgICovXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXG4gICAgfTtcbiAgICB2YXIgY2FtZXJhcyA9IHJldC5fY2FtZXJhcyA9IHtcbiAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXG4gICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxuICAgICAgICBweTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHsgZm92OiA5MCB9KSxcbiAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXG4gICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxuICAgICAgICBuejogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHsgZm92OiA5MCB9KVxuICAgIH07XG4gICAgY2FtZXJhcy5weC5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xuICAgIGNhbWVyYXMubngubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcbiAgICBjYW1lcmFzLnB5Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XG4gICAgY2FtZXJhcy5ueS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xuICAgIGNhbWVyYXMucHoubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcbiAgICBjYW1lcmFzLm56Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG5cbiAgICAvLyBGSVhNRSBJbiB3aW5kb3dzLCB1c2Ugb25lIGZyYW1lYnVmZmVyIG9ubHkgcmVuZGVycyBvbmUgc2lkZSBvZiBjdWJlbWFwXG4gICAgcmV0Ll9mcmFtZUJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xuXG4gICAgcmV0dXJuIHJldDtcbn0sICAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdGFyZ2V0XG4gICAgICogQHJldHVybiAge2NsYXkuQ2FtZXJhfVxuICAgICAqL1xuICAgIGdldENhbWVyYTogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhc1t0YXJnZXRdO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cbiAgICAgKi9cbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgbm90VXBkYXRlU2NlbmUpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUd2VhayBmb3ZcbiAgICAgICAgLy8gaHR0cDovL3RoZS13aXRuZXNzLm5ldC9uZXdzLzIwMTIvMDIvc2VhbWxlc3MtY3ViZS1tYXAtZmlsdGVyaW5nL1xuICAgICAgICB2YXIgbiA9IHRoaXMudGV4dHVyZS53aWR0aDtcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9jYW1lcmFzW3RhcmdldF07XG4gICAgICAgICAgICBWZWN0b3IzLmNvcHkoY2FtZXJhLnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcblxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xuICAgICAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XG4gICAgICAgICAgICBjYW1lcmEuZm92ID0gZm92O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFkb3dNYXBQYXNzKSB7XG4gICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGJvdW5kaW5nQm94TGFzdEZyYW1lXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgICAgIGJib3guYXBwbHlUcmFuc2Zvcm0oY2FtZXJhLnZpZXdNYXRyaXgpO1xuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5jb3B5KGJib3gpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2goXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsXG4gICAgICAgICAgICAgICAgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEVudmlyb25tZW50TWFwUGFzcztcbiIsImltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xuaW1wb3J0IFNwaGVyZUdlb21ldHJ5IGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuXG5pbXBvcnQgYmFzaWNFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvYmFzaWMuZ2xzbC5qcyc7XG5TaGFkZXIuaW1wb3J0KGJhc2ljRXNzbCk7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5Ta3lkb21lXG4gKlxuICogQGV4YW1wbGVcbiAqICAgICB2YXIgc2t5VGV4ID0gbmV3IGNsYXkuVGV4dHVyZTJEKCk7XG4gKiAgICAgc2t5VGV4LmxvYWQoJ2Fzc2V0cy90ZXh0dXJlcy9za3kuanBnJyk7XG4gKiAgICAgdmFyIHNreWRvbWUgPSBuZXcgY2xheS5wbHVnaW4uU2t5ZG9tZSh7XG4gKiAgICAgICAgIHNjZW5lOiBzY2VuZVxuICogICAgIH0pO1xuICogICAgIHNreWRvbWUubWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgc2t5VGV4KTtcbiAqL1xudmFyIFNreWRvbWUgPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgc2t5ZG9tZVNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy5mcmFnbWVudCcpKTtcblxuICAgIHZhciBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgIHNoYWRlcjogc2t5ZG9tZVNoYWRlcixcbiAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxuICAgIH0pO1xuICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ2RpZmZ1c2VNYXAnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWRvbWUjXG4gICAgICAgICAqL1xuICAgICAgICBzY2VuZTogbnVsbCxcblxuICAgICAgICBnZW9tZXRyeTogbmV3IFNwaGVyZUdlb21ldHJ5KHtcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDMwLFxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IDMwLFxuICAgICAgICAgICAgLy8gdGhldGFMZW5ndGg6IE1hdGguUEkgLyAyXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcblxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcblxuICAgICAgICBjdWxsaW5nOiBmYWxzZVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcbiAgICBpZiAoc2NlbmUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hTY2VuZShzY2VuZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnRNYXApIHtcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcbiAgICB9XG59LCB7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIHRoZSBza3lib3ggdG8gdGhlIHNjZW5lXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wbHVnaW4uU2t5ZG9tZS5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBhdHRhY2hTY2VuZTogZnVuY3Rpb24gKHNjZW5lKSB7XG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaFNjZW5lKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2NlbmUuc2t5ZG9tZSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICBzY2VuZS5vbignYmVmb3JlcmVuZGVyJywgdGhpcy5fYmVmb3JlUmVuZGVyU2NlbmUsIHRoaXMpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGV0YWNoIGZyb20gc2NlbmVcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wbHVnaW4uU2t5ZG9tZS5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zY2VuZSkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5ZG9tZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XG4gICAgfSxcblxuICAgIF9iZWZvcmVSZW5kZXJTY2VuZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24uY29weShjYW1lcmEuZ2V0V29ybGRQb3NpdGlvbigpKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpc10sIGNhbWVyYSk7XG4gICAgfSxcblxuICAgIHNldEVudmlyb25tZW50TWFwOiBmdW5jdGlvbiAoZW52TWFwKSB7XG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgZW52TWFwKTtcbiAgICB9LFxuXG4gICAgZ2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XG4gICAgfSxcblxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLmRldGFjaFNjZW5lKCk7XG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNreWRvbWU7XG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5cbi8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYmI5NDM5OTEodj12cy44NSkuYXNweFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rvamkvd2ViZ2wtdGV4dHVyZS11dGlscy9ibG9iL21hc3Rlci90ZXh0dXJlLXV0aWwvZGRzLmpzXG52YXIgRERTX01BR0lDID0gMHgyMDUzNDQ0NDtcblxudmFyIEREU0RfQ0FQUyA9IDB4MTtcbnZhciBERFNEX0hFSUdIVCA9IDB4MjtcbnZhciBERFNEX1dJRFRIID0gMHg0O1xudmFyIEREU0RfUElUQ0ggPSAweDg7XG52YXIgRERTRF9QSVhFTEZPUk1BVCA9IDB4MTAwMDtcbnZhciBERFNEX01JUE1BUENPVU5UID0gMHgyMDAwMDtcbnZhciBERFNEX0xJTkVBUlNJWkUgPSAweDgwMDAwO1xudmFyIEREU0RfREVQVEggPSAweDgwMDAwMDtcblxudmFyIEREU0NBUFNfQ09NUExFWCA9IDB4ODtcbnZhciBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwO1xudmFyIEREU0NBUFNfVEVYVFVSRSA9IDB4MTAwMDtcblxudmFyIEREU0NBUFMyX0NVQkVNQVAgPSAweDIwMDtcbnZhciBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWCA9IDB4NDAwO1xudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVYID0gMHg4MDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVkgPSAweDEwMDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVkgPSAweDIwMDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVogPSAweDQwMDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVogPSAweDgwMDA7XG52YXIgRERTQ0FQUzJfVk9MVU1FID0gMHgyMDAwMDA7XG5cbnZhciBERFBGX0FMUEhBUElYRUxTID0gMHgxO1xudmFyIEREUEZfQUxQSEEgPSAweDI7XG52YXIgRERQRl9GT1VSQ0MgPSAweDQ7XG52YXIgRERQRl9SR0IgPSAweDQwO1xudmFyIEREUEZfWVVWID0gMHgyMDA7XG52YXIgRERQRl9MVU1JTkFOQ0UgPSAweDIwMDAwO1xuXG5mdW5jdGlvbiBmb3VyQ0NUb0ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoMCkgK1xuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgxKSA8PCA4KSArXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDIpIDw8IDE2KSArXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDMpIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gaW50MzJUb0ZvdXJDQyh2YWx1ZSkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICB2YWx1ZSAmIDB4ZmYsXG4gICAgICAgICh2YWx1ZSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICh2YWx1ZSA+PiAxNikgJiAweGZmLFxuICAgICAgICAodmFsdWUgPj4gMjQpICYgMHhmZlxuICAgICk7XG59XG5cbnZhciBoZWFkZXJMZW5ndGhJbnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHNcblxudmFyIEZPVVJDQ19EWFQxID0gZm91ckNDVG9JbnQzMignRFhUMScpO1xudmFyIEZPVVJDQ19EWFQzID0gZm91ckNDVG9JbnQzMignRFhUMycpO1xudmFyIEZPVVJDQ19EWFQ1ID0gZm91ckNDVG9JbnQzMignRFhUNScpO1xuICAgIC8vIE9mZnNldHMgaW50byB0aGUgaGVhZGVyIGFycmF5XG52YXIgb2ZmX21hZ2ljID0gMDtcblxudmFyIG9mZl9zaXplID0gMTtcbnZhciBvZmZfZmxhZ3MgPSAyO1xudmFyIG9mZl9oZWlnaHQgPSAzO1xudmFyIG9mZl93aWR0aCA9IDQ7XG5cbnZhciBvZmZfbWlwbWFwQ291bnQgPSA3O1xuXG52YXIgb2ZmX3BmRmxhZ3MgPSAyMDtcbnZhciBvZmZfcGZGb3VyQ0MgPSAyMTtcblxudmFyIG9mZl9jYXBzID0gMjc7XG52YXIgb2ZmX2NhcHMyID0gMjg7XG52YXIgb2ZmX2NhcHMzID0gMjk7XG52YXIgb2ZmX2NhcHM0ID0gMzA7XG5cbnZhciByZXQgPSB7XG4gICAgcGFyc2U6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCBvdXQpIHtcbiAgICAgICAgdmFyIGhlYWRlciA9IG5ldyBJbnQzMkFycmF5KGFycmF5QnVmZmVyLCAwLCBoZWFkZXJMZW5ndGhJbnQpO1xuICAgICAgICBpZiAoaGVhZGVyW29mZl9tYWdpY10gIT09IEREU19NQUdJQykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoZWFkZXIob2ZmX3BmRmxhZ3MpICYgRERQRl9GT1VSQ0MpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvdXJDQyA9IGhlYWRlcihvZmZfcGZGb3VyQ0MpO1xuICAgICAgICB2YXIgd2lkdGggPSBoZWFkZXJbb2ZmX3dpZHRoXTtcbiAgICAgICAgdmFyIGhlaWdodCA9IGhlYWRlcltvZmZfaGVpZ2h0XTtcbiAgICAgICAgdmFyIGlzQ3ViZU1hcCA9IGhlYWRlcltvZmZfY2FwczJdICYgRERTQ0FQUzJfQ1VCRU1BUDtcbiAgICAgICAgdmFyIGhhc01pcG1hcCA9IGhlYWRlcltvZmZfZmxhZ3NdICYgRERTRF9NSVBNQVBDT1VOVDtcbiAgICAgICAgdmFyIGJsb2NrQnl0ZXMsIGludGVybmFsRm9ybWF0O1xuICAgICAgICBzd2l0Y2goZm91ckNDKSB7XG4gICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQxOlxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4O1xuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMzpcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUNTpcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YU9mZnNldCA9IGhlYWRlcltvZmZfc2l6ZV0gKyA0O1xuICAgICAgICAvLyBUT0RPOiBTdXBwb3NlIGFsbCBmYWNlIGFyZSBleGlzdGVkXG4gICAgICAgIHZhciBmYWNlTnVtYmVyID0gaXNDdWJlTWFwID8gNiA6IDE7XG4gICAgICAgIHZhciBtaXBtYXBDb3VudCA9IDE7XG4gICAgICAgIGlmIChoYXNNaXBtYXApIHtcbiAgICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3VudF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHR1cmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgZmFjZU51bWJlcjsgZisrKSB7XG4gICAgICAgICAgICB2YXIgX3dpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB2YXIgX2hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgIHRleHR1cmVzW2ZdID0gbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICAgICAgd2lkdGggOiBfd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0IDogX2hlaWdodCxcbiAgICAgICAgICAgICAgICBmb3JtYXQgOiBpbnRlcm5hbEZvcm1hdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbWlwbWFwcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBtYXBDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBNYXRoLm1heCg0LCBfd2lkdGgpIC8gNCAqIE1hdGgubWF4KDQsIF9oZWlnaHQpIC8gNCAqIGJsb2NrQnl0ZXM7XG4gICAgICAgICAgICAgICAgdmFyIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICBfd2lkdGggKj0gMC41O1xuICAgICAgICAgICAgICAgIF9oZWlnaHQgKj0gMC41O1xuICAgICAgICAgICAgICAgIG1pcG1hcHNbaV0gPSBieXRlQXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0dXJlc1tmXS5waXhlbHMgPSBtaXBtYXBzWzBdO1xuICAgICAgICAgICAgaWYgKGhhc01pcG1hcCkge1xuICAgICAgICAgICAgICAgIHRleHR1cmVzW2ZdLm1pcG1hcHMgPSBtaXBtYXBzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gcmV0dXJuIGlzQ3ViZU1hcCA/IHRleHR1cmVzIDogdGV4dHVyZXNbMF07XG4gICAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgICAgIG91dC53aWR0aCA9IHRleHR1cmVzWzBdLndpZHRoO1xuICAgICAgICAgICAgb3V0LmhlaWdodCA9IHRleHR1cmVzWzBdLmhlaWdodDtcbiAgICAgICAgICAgIG91dC5mb3JtYXQgPSB0ZXh0dXJlc1swXS5mb3JtYXQ7XG4gICAgICAgICAgICBvdXQucGl4ZWxzID0gdGV4dHVyZXNbMF0ucGl4ZWxzO1xuICAgICAgICAgICAgb3V0Lm1pcG1hcHMgPSB0ZXh0dXJlc1swXS5taXBtYXBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVzWzBdO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmV0O1xuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XG52YXIgdG9DaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxudmFyIE1JTkVMRU4gPSA4O1xudmFyIE1BWEVMRU4gPSAweDdmZmY7XG5mdW5jdGlvbiByZ2JlMmZsb2F0KHJnYmUsIGJ1ZmZlciwgb2Zmc2V0LCBleHBvc3VyZSkge1xuICAgIGlmIChyZ2JlWzNdID4gMCkge1xuICAgICAgICB2YXIgZiA9IE1hdGgucG93KDIuMCwgcmdiZVszXSAtIDEyOCAtIDggKyBleHBvc3VyZSk7XG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAwXSA9IHJnYmVbMF0gKiBmO1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSByZ2JlWzFdICogZjtcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gcmdiZVsyXSAqIGY7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSAwO1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSAwO1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSAwO1xuICAgIH1cbiAgICBidWZmZXJbb2Zmc2V0ICsgM10gPSAxLjA7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gdWludDgyc3RyaW5nKGFycmF5LCBvZmZzZXQsIHNpemUpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBzdHIgKz0gdG9DaGFyKGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gY29weXJnYmUocywgdCkge1xuICAgIHRbMF0gPSBzWzBdO1xuICAgIHRbMV0gPSBzWzFdO1xuICAgIHRbMl0gPSBzWzJdO1xuICAgIHRbM10gPSBzWzNdO1xufVxuXG4vLyBUT0RPIDogY2hlY2tcbmZ1bmN0aW9uIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcbiAgICB2YXIgcnNoaWZ0ID0gMCwgeCA9IDAsIGxlbiA9IHhtYXg7XG4gICAgd2hpbGUgKGxlbiA+IDApIHtcbiAgICAgICAgc2Nhblt4XVswXSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgIHNjYW5beF1bMV0gPSBidWZmZXJbb2Zmc2V0KytdO1xuICAgICAgICBzY2FuW3hdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcbiAgICAgICAgc2Nhblt4XVszXSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgIGlmIChzY2FuW3hdWzBdID09PSAxICYmIHNjYW5beF1bMV0gPT09IDEgJiYgc2Nhblt4XVsyXSA9PT0gMSkge1xuICAgICAgICAgICAgLy8gZXhwIGlzIGNvdW50IG9mIHJlcGVhdGVkIHBpeGVsc1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IChzY2FuW3hdWzNdIDw8IHJzaGlmdCkgPj4+IDA7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb3B5cmdiZShzY2FuW3gtMV0sIHNjYW5beF0pO1xuICAgICAgICAgICAgICAgIHgrKztcbiAgICAgICAgICAgICAgICBsZW4tLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJzaGlmdCArPSA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeCsrO1xuICAgICAgICAgICAgbGVuLS07XG4gICAgICAgICAgICByc2hpZnQgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcbiAgICBpZiAoKHhtYXggPCBNSU5FTEVOKSB8ICh4bWF4ID4gTUFYRUxFTikpIHtcbiAgICAgICAgcmV0dXJuIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpO1xuICAgIH1cbiAgICB2YXIgaSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgaWYgKGkgIT0gMikge1xuICAgICAgICByZXR1cm4gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCAtIDEsIHhtYXgpO1xuICAgIH1cbiAgICBzY2FuWzBdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcbiAgICBzY2FuWzBdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcblxuICAgIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xuICAgIGlmICgoKChzY2FuWzBdWzJdIDw8IDgpID4+PiAwKSB8IGkpID4+PiAwICE9PSB4bWF4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHhtYXg7KSB7XG4gICAgICAgICAgICB2YXIgY29kZSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgICAgICBpZiAoY29kZSA+IDEyOCkge1xuICAgICAgICAgICAgICAgIGNvZGUgPSAoY29kZSAmIDEyNykgPj4+IDA7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xuICAgICAgICAgICAgICAgICAgICBzY2FuW3grK11baV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29kZS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG59XG5cblxudmFyIHJldCA9IHtcbiAgICAvLyBodHRwOi8vd3d3LmdyYXBoaWNzLmNvcm5lbGwuZWR1L35iancvcmdiZS5odG1sXG4gICAgLy8gQmxlbmRlciBzb3VyY2VcbiAgICAvLyBodHRwOi8vcmFkc2l0ZS5sYmwuZ292L3JhZGlhbmNlL3JlZmVyL05vdGVzL3BpY3R1cmVfZm9ybWF0Lmh0bWxcbiAgICBwYXJzZVJHQkU6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCB0ZXh0dXJlLCBleHBvc3VyZSkge1xuICAgICAgICBpZiAoZXhwb3N1cmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgZXhwb3N1cmUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgICB2YXIgc2l6ZSA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBpZiAodWludDgyc3RyaW5nKGRhdGEsIDAsIDIpICE9PSAnIz8nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCBlbXB0eSBsaW5lLCBuZXh0IGxpbmUgaXMgcmVzb2x1dGlvbiBpbmZvXG4gICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodG9DaGFyKGRhdGFbaV0pID09PSAnXFxuJyAmJiB0b0NoYXIoZGF0YVtpKzFdKSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA+PSBzaXplKSB7IC8vIG5vdCBmb3VuZFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgcmVzb2x1dGlvbiBpbmZvIGxpbmVcbiAgICAgICAgaSArPSAyO1xuICAgICAgICB2YXIgc3RyID0gJyc7XG4gICAgICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgX2NoYXIgPSB0b0NoYXIoZGF0YVtpXSk7XG4gICAgICAgICAgICBpZiAoX2NoYXIgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gX2NoYXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gLVkgTSArWCBOXG4gICAgICAgIHZhciB0bXAgPSBzdHIuc3BsaXQoJyAnKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KHRtcFsxXSk7XG4gICAgICAgIHZhciB3aWR0aCA9IHBhcnNlSW50KHRtcFszXSk7XG4gICAgICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVhZCBhbmQgZGVjb2RlIGFjdHVhbCBkYXRhXG4gICAgICAgIHZhciBvZmZzZXQgPSBpKzE7XG4gICAgICAgIHZhciBzY2FubGluZSA9IFtdO1xuICAgICAgICAvLyBtZW16ZXJvXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgc2NhbmxpbmVbeF0gPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XG4gICAgICAgICAgICAgICAgc2NhbmxpbmVbeF1bal0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBwaXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7XG4gICAgICAgIHZhciBvZmZzZXQyID0gMDtcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRDb2xvcnMoc2NhbmxpbmUsIGRhdGEsIG9mZnNldCwgd2lkdGgpO1xuICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgIHJnYmUyZmxvYXQoc2NhbmxpbmVbeF0sIHBpeGVscywgb2Zmc2V0MiwgZXhwb3N1cmUpO1xuICAgICAgICAgICAgICAgIG9mZnNldDIgKz0gNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0ZXh0dXJlLnBpeGVscyA9IHBpeGVscztcbiAgICAgICAgLy8gSEFMRl9GTE9BVCBjYW4ndCB1c2UgRmxvYXQzMkFycmF5XG4gICAgICAgIHRleHR1cmUudHlwZSA9IFRleHR1cmUuRkxPQVQ7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgIH0sXG5cbiAgICBwYXJzZVJHQkVGcm9tUE5HOiBmdW5jdGlvbihwbmcpIHtcblxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJldDtcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9jb3JlL3JlcXVlc3QnO1xuaW1wb3J0IEVudmlyb25tZW50TWFwUGFzcyBmcm9tICcuLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcbmltcG9ydCBTa3lkb21lIGZyb20gJy4uL3BsdWdpbi9Ta3lkb21lJztcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XG5cbmltcG9ydCBkZHMgZnJvbSAnLi9kZHMnO1xuaW1wb3J0IGhkciBmcm9tICcuL2hkcic7XG5cbi8qKlxuICogQGFsaWFzIGNsYXkudXRpbC50ZXh0dXJlXG4gKi9cbnZhciB0ZXh0dXJlVXRpbCA9IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8b2JqZWN0fSBwYXRoXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25lcnJvcl1cbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmV9XG4gICAgICovXG4gICAgbG9hZFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xuICAgICAgICB2YXIgdGV4dHVyZTtcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XG4gICAgICAgICAgICBvbmVycm9yID0gb25zdWNjZXNzO1xuICAgICAgICAgICAgb3B0aW9uID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZihwYXRoKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChwYXRoLm1hdGNoKC8uaGRyJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2hkcicpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHNSR0I6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhkci5wYXJzZVJHQkUoZGF0YSwgdGV4dHVyZSwgb3B0aW9uLmV4cG9zdXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvLmRkcyQvKSB8fCBvcHRpb24uZmlsZVR5cGUgPT09ICdkZHMnKSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkcy5wYXJzZShkYXRhLCB0ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKG9uc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YocGF0aCkgPT0gJ29iamVjdCcgJiYgdHlwZW9mKHBhdGgucHgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUoKTtcbiAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9hZCBhIHBhbm9yYW1hIHRleHR1cmUgYW5kIHJlbmRlciBpdCB0byBhIGN1YmUgbWFwXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGhcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb24uZW5jb2RlUkdCTV1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtvcHRpb24uZXhwb3N1cmVdXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbnN1Y2Nlc3NdXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxuICAgICAqL1xuICAgIGxvYWRQYW5vcmFtYTogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYXRoLCBjdWJlTWFwLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XG4gICAgICAgICAgICBvbmVycm9yID0gb25zdWNjZXNzO1xuICAgICAgICAgICAgb3B0aW9uID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZShwYXRoLCBvcHRpb24sIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XG4gICAgICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgICAgICB0ZXh0dXJlLmZsaXBZID0gb3B0aW9uLmZsaXBZIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2VsZi5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgdGV4dHVyZSwgY3ViZU1hcCwgb3B0aW9uKTtcbiAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKGN1YmVNYXApO1xuICAgICAgICB9LCBvbmVycm9yKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgcGFub3JhbWEgdGV4dHVyZSB0byBhIGN1YmUgbWFwXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gcGFub3JhbWFNYXBcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25cbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9uLmVuY29kZVJHQk1dXG4gICAgICovXG4gICAgcGFub3JhbWFUb0N1YmVNYXA6IGZ1bmN0aW9uIChyZW5kZXJlciwgcGFub3JhbWFNYXAsIGN1YmVNYXAsIG9wdGlvbikge1xuICAgICAgICB2YXIgZW52aXJvbm1lbnRNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcygpO1xuICAgICAgICB2YXIgc2t5ZG9tZSA9IG5ldyBTa3lkb21lKHtcbiAgICAgICAgICAgIHNjZW5lOiBuZXcgU2NlbmUoKVxuICAgICAgICB9KTtcbiAgICAgICAgc2t5ZG9tZS5tYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCBwYW5vcmFtYU1hcCk7XG5cbiAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xuICAgICAgICBpZiAob3B0aW9uLmVuY29kZVJHQk0pIHtcbiAgICAgICAgICAgIHNreWRvbWUubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0VOQ09ERScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2hhcmUgc1JHQlxuICAgICAgICBjdWJlTWFwLnNSR0IgPSBwYW5vcmFtYU1hcC5zUkdCO1xuXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gY3ViZU1hcDtcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2t5ZG9tZS5zY2VuZSk7XG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gbnVsbDtcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICByZXR1cm4gY3ViZU1hcDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcbiAgICAgKiBAcGFyYW0ge0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnR9IGltYWdlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIGhlaWdodFRvTm9ybWFsOiBmdW5jdGlvbiAoaW1hZ2UsIGNoZWNrQnVtcCkge1xuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIHZhciB3aWR0aCA9IGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2hlY2tCdW1wID0gY2hlY2tCdW1wIHx8IGZhbHNlO1xuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBkc3REYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgIGlmIChjaGVja0J1bXApIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcbiAgICAgICAgICAgICAgICB2YXIgZyA9IHNyY0RhdGEuZGF0YVtpICsgMV07XG4gICAgICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xuICAgICAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmID4gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHaXZlbiBpbWFnZSBpcyBub3QgYSBoZWlnaHQgbWFwJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNb2RpZmllZCBmcm9tIGh0dHA6Ly9tcmRvb2IuY29tL2xhYi9qYXZhc2NyaXB0L2hlaWdodDJub3JtYWwvXG4gICAgICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTI7XG4gICAgICAgICAgICBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gbGVmdCBlZGdlXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaV07XG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAod2lkdGggLSAxKSAqIDQpIHtcbiAgICAgICAgICAgICAgICAvLyByaWdodCBlZGdlXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2kgKyA0XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPCB3aWR0aCAqIDQpIHtcbiAgICAgICAgICAgICAgICAvLyB0b3AgZWRnZVxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2ldO1xuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaSA+IHdpZHRoICogKGhlaWdodCAtIDEpICogNCkge1xuICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBlZGdlXG4gICAgICAgICAgICAgICAgeTEgPSBzcmNEYXRhLmRhdGFbaSAtIHdpZHRoICogNF07XG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcbiAgICAgICAgICAgICAgICB5MiA9IHNyY0RhdGEuZGF0YVtpICsgd2lkdGggKiA0XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2ldID0gKHgxIC0geDIpICsgMTI3O1xuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2kgKyAxXSA9ICh5MSAtIHkyKSArIDEyNztcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMl0gPSAyNTU7XG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoZHN0RGF0YSwgMCwgMCk7XG4gICAgICAgIHJldHVybiBjYW52YXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgaGVpZ2h0IG1hcCB0byBub3JtYWwgbWFwXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RocmVzaG9sZD0yMF1cbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICBpc0hlaWdodEltYWdlOiBmdW5jdGlvbiAoaW1nLCBkb3duU2NhbGVTaXplLCB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpbWcgfHwgIWltZy53aWR0aCB8fCAhaW1nLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIHZhciBzaXplID0gZG93blNjYWxlU2l6ZSB8fCAzMjtcbiAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIHx8IDIwO1xuICAgICAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHNpemUsIHNpemUpO1xuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgc2l6ZSwgc2l6ZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjRGF0YS5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcbiAgICAgICAgICAgIHZhciBnID0gc3JjRGF0YS5kYXRhW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciBiID0gc3JjRGF0YS5kYXRhW2kgKyAyXTtcbiAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xuICAgICAgICAgICAgaWYgKGRpZmYgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIF9mZXRjaFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcbiAgICAgICAgcmVxdWVzdC5nZXQoe1xuICAgICAgICAgICAgdXJsOiBwYXRoLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxuICAgICAgICAgICAgb25sb2FkOiBvbnN1Y2Nlc3MsXG4gICAgICAgICAgICBvbmVycm9yOiBvbmVycm9yXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjaGVzc2JvYXJkIHRleHR1cmVcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtzaXplXVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3VuaXRTaXplXVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gW2NvbG9yMV1cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjJdXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XG4gICAgICovXG4gICAgY3JlYXRlQ2hlc3Nib2FyZDogZnVuY3Rpb24gKHNpemUsIHVuaXRTaXplLCBjb2xvcjEsIGNvbG9yMikge1xuICAgICAgICBzaXplID0gc2l6ZSB8fCA1MTI7XG4gICAgICAgIHVuaXRTaXplID0gdW5pdFNpemUgfHwgNjQ7XG4gICAgICAgIGNvbG9yMSA9IGNvbG9yMSB8fCAnYmxhY2snO1xuICAgICAgICBjb2xvcjIgPSBjb2xvcjIgfHwgJ3doaXRlJztcblxuICAgICAgICB2YXIgcmVwZWF0ID0gTWF0aC5jZWlsKHNpemUgLyB1bml0U2l6ZSk7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSBzaXplO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3IyO1xuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSk7XG5cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByZXBlYXQ7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBpc0ZpbGwgPSBqICUgMiA/IChpICUgMikgOiAoaSAlIDIgLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChpICogdW5pdFNpemUsIGogKiB1bml0U2l6ZSwgdW5pdFNpemUsIHVuaXRTaXplKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgaW1hZ2U6IGNhbnZhcyxcbiAgICAgICAgICAgIGFuaXNvdHJvcGljOiA4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBibGFuayBwdXJlIGNvbG9yIDF4MSB0ZXh0dXJlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBjb2xvclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxuICAgICAqL1xuICAgIGNyZWF0ZUJsYW5rOiBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSAxO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxLCAxKTtcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgaW1hZ2U6IGNhbnZhc1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZXh0dXJlVXRpbDtcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxEaXN0cmlidXRpb247XFxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZSA6IFs1MTIsIDI1Nl07XFxuY29uc3QgdmVjMyBOID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcXG5jb25zdCBmbG9hdCBmU2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxudmVjMyBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0IGksIGZsb2F0IHJvdWdobmVzcywgdmVjMyBOKSB7XFxuICAgIHZlYzMgSCA9IHRleHR1cmUyRChub3JtYWxEaXN0cmlidXRpb24sIHZlYzIocm91Z2huZXNzLCBpKSkucmdiO1xcbiAgICB2ZWMzIHVwVmVjdG9yID0gYWJzKE4ueikgPCAwLjk5OSA/IHZlYzMoMC4wLCAwLjAsIDEuMCkgOiB2ZWMzKDEuMCwgMC4wLCAwLjApO1xcbiAgICB2ZWMzIHRhbmdlbnRYID0gbm9ybWFsaXplKGNyb3NzKHVwVmVjdG9yLCBOKSk7XFxuICAgIHZlYzMgdGFuZ2VudFkgPSBjcm9zcyhOLCB0YW5nZW50WCk7XFxuICAgIHJldHVybiB0YW5nZW50WCAqIEgueCArIHRhbmdlbnRZICogSC55ICsgTiAqIEguejtcXG59XFxuZmxvYXQgR19TbWl0aChmbG9hdCByb3VnaG5lc3MsIGZsb2F0IE5vViwgZmxvYXQgTm9MKSB7XFxuICAgIGZsb2F0IGsgPSByb3VnaG5lc3MgKiByb3VnaG5lc3MgLyAyLjA7XFxuICAgIGZsb2F0IEcxViA9IE5vViAvIChOb1YgKiAoMS4wIC0gaykgKyBrKTtcXG4gICAgZmxvYXQgRzFMID0gTm9MIC8gKE5vTCAqICgxLjAgLSBrKSArIGspO1xcbiAgICByZXR1cm4gRzFMICogRzFWO1xcbn1cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB2aWV3cG9ydFNpemU7XFxuICAgIGZsb2F0IE5vViA9IHV2Lng7XFxuICAgIGZsb2F0IHJvdWdobmVzcyA9IHV2Lnk7XFxuICAgIHZlYzMgVjtcXG4gICAgVi54ID0gc3FydCgxLjAgLSBOb1YgKiBOb1YpO1xcbiAgICBWLnkgPSAwLjA7XFxuICAgIFYueiA9IE5vVjtcXG4gICAgZmxvYXQgQSA9IDAuMDtcXG4gICAgZmxvYXQgQiA9IDAuMDtcXG4gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gICAgICAgIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiAgICAgICAgdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuICAgICAgICBmbG9hdCBOb0wgPSBjbGFtcChMLnosIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IE5vSCA9IGNsYW1wKEgueiwgMC4wLCAxLjApO1xcbiAgICAgICAgZmxvYXQgVm9IID0gY2xhbXAoZG90KFYsIEgpLCAwLjAsIDEuMCk7XFxuICAgICAgICBpZiAoTm9MID4gMC4wKSB7XFxuICAgICAgICAgICAgZmxvYXQgRyA9IEdfU21pdGgocm91Z2huZXNzLCBOb1YsIE5vTCk7XFxuICAgICAgICAgICAgZmxvYXQgR19WaXMgPSBHICogVm9IIC8gKE5vSCAqIE5vVik7XFxuICAgICAgICAgICAgZmxvYXQgRmMgPSBwb3coMS4wIC0gVm9ILCA1LjApO1xcbiAgICAgICAgICAgIEEgKz0gKDEuMCAtIEZjKSAqIEdfVmlzO1xcbiAgICAgICAgICAgIEIgKz0gRmMgKiBHX1ZpcztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzIoQSwgQikgLyBmU2FtcGxlTnVtYmVyLCAwLjAsIDEuMCk7XFxufVxcblwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCIjZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsRGlzdHJpYnV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzIDogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuY29uc3QgZmxvYXQgZlNhbXBsZU51bWJlciA9IGZsb2F0KFNBTVBMRV9OVU1CRVIpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gICAgdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuICAgIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi56KSA8IDAuOTk5ID8gdmVjMygwLjAsIDAuMCwgMS4wKSA6IHZlYzMoMS4wLCAwLjAsIDAuMCk7XFxuICAgIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3ModXBWZWN0b3IsIE4pKTtcXG4gICAgdmVjMyB0YW5nZW50WSA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gICAgcmV0dXJuIHRhbmdlbnRYICogSC54ICsgdGFuZ2VudFkgKiBILnkgKyBOICogSC56O1xcbn1cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUodl9Xb3JsZFBvc2l0aW9uIC0gZXllUG9zKTtcXG4gICAgdmVjMyBOID0gVjtcXG4gICAgdmVjMyBSID0gVjtcXG4gICAgdmVjMyBwcmVmaWx0ZXJlZENvbG9yID0gdmVjMygwLjApO1xcbiAgICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDtcXG4gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gICAgICAgIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiAgICAgICAgdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuICAgICAgICBmbG9hdCBOb0wgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGlmIChOb0wgPiAwLjApIHtcXG4gICAgICAgICAgICBwcmVmaWx0ZXJlZENvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYiAqIE5vTDtcXG4gICAgICAgICAgICB0b3RhbFdlaWdodCArPSBOb0w7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQocHJlZmlsdGVyZWRDb2xvciAvIHRvdGFsV2VpZ2h0LCAxLjApKTtcXG59XFxuXCI7XG4iLCIvLyBDdWJlbWFwIHByZWZpbHRlciB1dGlsaXR5XG4vLyBodHRwOi8vd3d3LnVucmVhbGVuZ2luZS5jb20vZmlsZXMvZG93bmxvYWRzLzIwMTNTaWdncmFwaFByZXNlbnRhdGlvbnNOb3Rlcy5wZGZcbi8vIGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMzL2dwdWdlbXMzX2NoMjAuaHRtbFxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4uL1RleHR1cmVDdWJlJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5pbXBvcnQgdGV4dHVyZVV0aWwgZnJvbSAnLi90ZXh0dXJlJztcblxuaW1wb3J0IGludGVncmF0ZUJSREZTaGFkZXJDb2RlIGZyb20gJy4vc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyc7XG5pbXBvcnQgcHJlZmlsdGVyRnJhZ0NvZGUgZnJvbSAnLi9zaGFkZXIvcHJlZmlsdGVyLmdsc2wuanMnO1xuXG52YXIgY3ViZW1hcFV0aWwgPSB7fTtcblxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XG5cbi8qKlxuICogQG5hbWUgY2xheS51dGlsLmN1YmVtYXAucHJlZmlsdGVyRW52aXJvbm1lbnRNYXBcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IGVudk1hcFxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy53aWR0aD02NF1cbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLmhlaWdodD02NF1cbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLnR5cGVdXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZW5jb2RlUkdCTT1mYWxzZV1cbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNPWZhbHNlXVxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IFtub3JtYWxEaXN0cmlidXRpb25dXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gW2JyZGZMb29rdXBdXG4gKi9cbmN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKFxuICAgIHJlbmRlcmVyLCBlbnZNYXAsIHRleHR1cmVPcHRzLCBub3JtYWxEaXN0cmlidXRpb24sIGJyZGZMb29rdXBcbikge1xuICAgIC8vIE5vdCBjcmVhdGUgb3RoZXIgcmVuZGVyZXIsIGl0IGlzIGVhc3kgaGF2aW5nIGlzc3VlIG9mIGNyb3NzIHJlZmVyZW5jZSBvZiByZXNvdXJjZXMgbGlrZSBmcmFtZWJ1ZmZlclxuICAgIC8vIFBFTkRJTkcgcHJlc2VydmVEcmF3aW5nQnVmZmVyP1xuICAgIGlmICghYnJkZkxvb2t1cCB8fCAhbm9ybWFsRGlzdHJpYnV0aW9uKSB7XG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IGN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uKCk7XG4gICAgICAgIGJyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pO1xuICAgIH1cbiAgICB0ZXh0dXJlT3B0cyA9IHRleHR1cmVPcHRzIHx8IHt9O1xuXG4gICAgdmFyIHdpZHRoID0gdGV4dHVyZU9wdHMud2lkdGggfHwgNjQ7XG4gICAgdmFyIGhlaWdodCA9IHRleHR1cmVPcHRzLmhlaWdodCB8fCA2NDtcblxuICAgIHZhciB0ZXh0dXJlVHlwZSA9IHRleHR1cmVPcHRzLnR5cGUgfHwgZW52TWFwLnR5cGU7XG5cbiAgICAvLyBVc2Ugc2FtZSB0eXBlIHdpdGggZ2l2ZW4gZW52TWFwXG4gICAgdmFyIHByZWZpbHRlcmVkQ3ViZU1hcCA9IG5ldyBUZXh0dXJlQ3ViZSh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHR5cGU6IHRleHR1cmVUeXBlLFxuICAgICAgICBmbGlwWTogZmFsc2UsXG4gICAgICAgIG1pcG1hcHM6IFtdXG4gICAgfSk7XG5cbiAgICBpZiAoIXByZWZpbHRlcmVkQ3ViZU1hcC5pc1Bvd2VyT2ZUd28oKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1dpZHRoIGFuZCBoZWlnaHQgbXVzdCBiZSBwb3dlciBvZiB0d28gdG8gZW5hYmxlIG1pcG1hcC4nKTtcbiAgICB9XG5cbiAgICB2YXIgc2l6ZSA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhciBtaXBtYXBOdW0gPSBNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDIpICsgMTtcblxuICAgIHZhciBwcmVmaWx0ZXJNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XG4gICAgICAgICAgICB2ZXJ0ZXg6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLFxuICAgICAgICAgICAgZnJhZ21lbnQ6IHByZWZpbHRlckZyYWdDb2RlXG4gICAgICAgIH0pXG4gICAgfSk7XG4gICAgcHJlZmlsdGVyTWF0ZXJpYWwuc2V0KCdub3JtYWxEaXN0cmlidXRpb24nLCBub3JtYWxEaXN0cmlidXRpb24pO1xuXG4gICAgdGV4dHVyZU9wdHMuZW5jb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XG4gICAgdGV4dHVyZU9wdHMuZGVjb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fREVDT0RFJyk7XG5cbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xuICAgIHZhciBza3lFbnY7XG5cbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xuICAgICAgICAvLyBDb252ZXJ0IHBhbm9yYW1hIHRvIGN1YmVtYXBcbiAgICAgICAgdmFyIGVudkN1YmVtYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICAvLyBGSVhNRSBGTE9BVCB0eXBlIHdpbGwgY2F1c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIGVycm9yIG9uIGlPU1xuICAgICAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUgPT09IFRleHR1cmUuRkxPQVQgP1xuICAgICAgICAgICAgICAgICAgICBUZXh0dXJlLkhBTEZfRkxPQVQgOiB0ZXh0dXJlVHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgdGV4dHVyZVV0aWwucGFub3JhbWFUb0N1YmVNYXAocmVuZGVyZXIsIGVudk1hcCwgZW52Q3ViZW1hcCwge1xuICAgICAgICAgICAgLy8gUEVORElORyBlbmNvZGVSR0JNIHNvIGl0IGNhbiBiZSBkZWNvZGVkIGFzIFJHQk1cbiAgICAgICAgICAgIGVuY29kZVJHQk06IHRleHR1cmVPcHRzLmRlY29kZVJHQk1cbiAgICAgICAgfSk7XG4gICAgICAgIGVudk1hcCA9IGVudkN1YmVtYXA7XG4gICAgfVxuICAgIHNreUVudiA9IG5ldyBTa3lib3goe1xuICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcbiAgICAgICAgbWF0ZXJpYWw6IHByZWZpbHRlck1hdGVyaWFsXG4gICAgfSk7XG4gICAgc2t5RW52Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuXG4gICAgdmFyIGVudk1hcFBhc3MgPSBuZXcgRW52aXJvbm1lbnRNYXBQYXNzKHtcbiAgICAgICAgdGV4dHVyZTogcHJlZmlsdGVyZWRDdWJlTWFwXG4gICAgfSk7XG5cbiAgICAvLyBGb3JjZSB0byBiZSBVTlNJR05FRF9CWVRFXG4gICAgaWYgKHRleHR1cmVPcHRzLmVuY29kZVJHQk0pIHtcbiAgICAgICAgdGV4dHVyZVR5cGUgPSBwcmVmaWx0ZXJlZEN1YmVNYXAudHlwZSA9IFRleHR1cmUuVU5TSUdORURfQllURTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyVGFyZ2V0VG1wID0gbmV3IFRleHR1cmUyRCh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHR5cGU6IHRleHR1cmVUeXBlXG4gICAgfSk7XG4gICAgdmFyIGZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcbiAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXG4gICAgfSk7XG4gICAgdmFyIEFycmF5Q3RvciA9IHZlbmRvclt0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5VTlNJR05FRF9CWVRFID8gJ1VpbnQ4QXJyYXknIDogJ0Zsb2F0MzJBcnJheSddO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlwbWFwTnVtOyBpKyspIHtcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0gPSB7XG4gICAgICAgICAgICBwaXhlbHM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIGkgLyAodGFyZ2V0cy5sZW5ndGggLSAxKSk7XG5cbiAgICAgICAgLy8gVHdlYWsgZm92XG4gICAgICAgIC8vIGh0dHA6Ly90aGUtd2l0bmVzcy5uZXQvbmV3cy8yMDEyLzAyL3NlYW1sZXNzLWN1YmUtbWFwLWZpbHRlcmluZy9cbiAgICAgICAgdmFyIG4gPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XG4gICAgICAgIHZhciBmb3YgPSAyICogTWF0aC5hdGFuKG4gLyAobiAtIDAuNSkpIC8gTWF0aC5QSSAqIDE4MDtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRhcmdldHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBwaXhlbHMgPSBuZXcgQXJyYXlDdG9yKHJlbmRlclRhcmdldFRtcC53aWR0aCAqIHJlbmRlclRhcmdldFRtcC5oZWlnaHQgKiA0KTtcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChyZW5kZXJUYXJnZXRUbXApO1xuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG5cbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2pdKTtcbiAgICAgICAgICAgIGNhbWVyYS5mb3YgPSBmb3Y7XG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXG4gICAgICAgICAgICAgICAgMCwgMCwgcmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIFRleHR1cmUuUkdCQSwgdGV4dHVyZVR5cGUsIHBpeGVsc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgLy8gdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgLy8gY2FudmFzLndpZHRoID0gcmVuZGVyVGFyZ2V0VG1wLndpZHRoO1xuICAgICAgICAgICAgLy8gY2FudmFzLmhlaWdodCA9IHJlbmRlclRhcmdldFRtcC5oZWlnaHQ7XG4gICAgICAgICAgICAvLyB2YXIgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShyZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQpO1xuICAgICAgICAgICAgLy8gZm9yICh2YXIgayA9IDA7IGsgPCBwaXhlbHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIC8vICAgICBpbWFnZURhdGEuZGF0YVtrXSA9IHBpeGVsc1trXTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgIC8vIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzKTtcblxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIHByZWZpbHRlcmVkQ3ViZU1hcC5taXBtYXBzW2ldLnBpeGVsc1t0YXJnZXRzW2pdXSA9IHBpeGVscztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldFRtcC53aWR0aCAvPSAyO1xuICAgICAgICByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0IC89IDI7XG4gICAgICAgIHJlbmRlclRhcmdldFRtcC5kaXJ0eSgpO1xuICAgIH1cblxuICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgIHJlbmRlclRhcmdldFRtcC5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICBza3lFbnYuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgLy8gUmVtb3ZlIGdwdSByZXNvdXJjZSBhbGx1Y2F0ZWQgaW4gcmVuZGVyZXJcbiAgICBub3JtYWxEaXN0cmlidXRpb24uZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICAvLyByZW5kZXJlci5kaXNwb3NlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBlbnZpcm9ubWVudE1hcDogcHJlZmlsdGVyZWRDdWJlTWFwLFxuICAgICAgICBicmRmTG9va3VwOiBicmRmTG9va3VwLFxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb246IG5vcm1hbERpc3RyaWJ1dGlvbixcbiAgICAgICAgbWF4TWlwbWFwTGV2ZWw6IG1pcG1hcE51bVxuICAgIH07XG59O1xuXG5jdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pIHtcbiAgICBub3JtYWxEaXN0cmlidXRpb24gPSBub3JtYWxEaXN0cmlidXRpb24gfHwgY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoe1xuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcbiAgICB9KTtcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcbiAgICAgICAgZnJhZ21lbnQ6IGludGVncmF0ZUJSREZTaGFkZXJDb2RlXG4gICAgfSk7XG5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICB3aWR0aDogNTEyLFxuICAgICAgICBoZWlnaHQ6IDI1NixcbiAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXG4gICAgICAgIHVzZU1pcG1hcDogZmFsc2VcbiAgICB9KTtcbiAgICBwYXNzLnNldFVuaWZvcm0oJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XG4gICAgcGFzcy5zZXRVbmlmb3JtKCd2aWV3cG9ydFNpemUnLCBbNTEyLCAyNTZdKTtcbiAgICBwYXNzLmF0dGFjaE91dHB1dCh0ZXh0dXJlKTtcbiAgICBwYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVidWZmZXIpO1xuXG4gICAgLy8gRklYTUUgT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggY2FuIHJlYWRQaXhlbHMgd2l0aCBmbG9hdCB0eXBlLlxuICAgIC8vIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgIC8vIHZhciBwaXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KDUxMiAqIDI1NiAqIDQpO1xuICAgIC8vIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXG4gICAgLy8gICAgIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LFxuICAgIC8vICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuRkxPQVQsIHBpeGVsc1xuICAgIC8vICk7XG4gICAgLy8gdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XG4gICAgLy8gdGV4dHVyZS5mbGlwWSA9IGZhbHNlO1xuICAgIC8vIHRleHR1cmUuZGlydHkoKTtcbiAgICAvLyBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbmN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uID0gZnVuY3Rpb24gKHJvdWdobmVzc0xldmVscywgc2FtcGxlU2l6ZSkge1xuXG4gICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXG4gICAgLy8gR0xTTCBub3Qgc3VwcG9ydCBiaXQgb3BlcmF0aW9uLCB1c2UgbG9va3VwIGluc3RlYWRcbiAgICAvLyBWIC0+IGkgLyBOLCBVIC0+IHJvdWdobmVzc1xuICAgIHZhciByb3VnaG5lc3NMZXZlbHMgPSByb3VnaG5lc3NMZXZlbHMgfHwgMjU2O1xuICAgIHZhciBzYW1wbGVTaXplID0gc2FtcGxlU2l6ZSB8fCAxMDI0O1xuXG4gICAgdmFyIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICB3aWR0aDogcm91Z2huZXNzTGV2ZWxzLFxuICAgICAgICBoZWlnaHQ6IHNhbXBsZVNpemUsXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXG4gICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxuICAgIH0pO1xuICAgIHZhciBwaXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNhbXBsZVNpemUgKiByb3VnaG5lc3NMZXZlbHMgKiA0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xuICAgICAgICB2YXIgeCA9IGkgLyBzYW1wbGVTaXplO1xuICAgICAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL0JpdHdpc2VfT3BlcmF0b3JzXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTkwODQ5Mi91bnNpZ25lZC1pbnRlZ2VyLWluLWphdmFzY3JpcHRcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODIyMzUwL3doYXQtaXMtdGhlLWphdmFzY3JpcHQtb3BlcmF0b3ItYW5kLWhvdy1kby15b3UtdXNlLWl0XG4gICAgICAgIHZhciB5ID0gKGkgPDwgMTYgfCBpID4+PiAxNikgPj4+IDA7XG4gICAgICAgIHkgPSAoKHkgJiAxNDMxNjU1NzY1KSA8PCAxIHwgKHkgJiAyODYzMzExNTMwKSA+Pj4gMSkgPj4+IDA7XG4gICAgICAgIHkgPSAoKHkgJiA4NTg5OTM0NTkpIDw8IDIgfCAoeSAmIDM0MzU5NzM4MzYpID4+PiAyKSA+Pj4gMDtcbiAgICAgICAgeSA9ICgoeSAmIDI1MjY0NTEzNSkgPDwgNCB8ICh5ICYgNDA0MjMyMjE2MCkgPj4+IDQpID4+PiAwO1xuICAgICAgICB5ID0gKCgoeSAmIDE2NzExOTM1KSA8PCA4IHwgKHkgJiA0Mjc4MjU1MzYwKSA+Pj4gOCkgPj4+IDApIC8gNDI5NDk2NzI5NjtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvdWdobmVzc0xldmVsczsgaisrKSB7XG4gICAgICAgICAgICB2YXIgcm91Z2huZXNzID0gaiAvIHJvdWdobmVzc0xldmVscztcbiAgICAgICAgICAgIHZhciBhID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICAgICAgICAgICAgdmFyIHBoaSA9IDIuMCAqIE1hdGguUEkgKiB4O1xuICAgICAgICAgICAgLy8gQ0RGXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSBNYXRoLnNxcnQoKDEgLSB5KSAvICgxICsgKGEgKiBhIC0gMS4wKSAqIHkpKTtcbiAgICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NUaGV0YSAqIGNvc1RoZXRhKTtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoaSAqIHJvdWdobmVzc0xldmVscyArIGopICogNDtcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXRdID0gc2luVGhldGEgKiBNYXRoLmNvcyhwaGkpO1xuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDFdID0gc2luVGhldGEgKiBNYXRoLnNpbihwaGkpO1xuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDJdID0gY29zVGhldGE7XG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgM10gPSAxLjA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLnBpeGVscyA9IHBpeGVscztcblxuICAgIHJldHVybiBub3JtYWxEaXN0cmlidXRpb247XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjdWJlbWFwVXRpbDtcbiIsIi8vIGh0dHBzOi8vZG9jcy51bnJlYWxlbmdpbmUuY29tL2xhdGVzdC9JTlQvRW5naW5lL1JlbmRlcmluZy9MaWdodGluZ0FuZFNoYWRvd3MvQW1iaWVudEN1YmVtYXAvXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IGN1YmVtYXBVdGlsIGZyb20gJy4uL3V0aWwvY3ViZW1hcCc7XG5cbi8qKlxuICogQW1iaWVudCBjdWJlbWFwIGxpZ2h0IHByb3ZpZGVzIHNwZWN1bGFyIHBhcnRzIG9mIEltYWdlIEJhc2VkIExpZ2h0aW5nLlxuICogV2hpY2ggaXMgYSBiYXNpYyByZXF1aXJlbWVudCBmb3IgUGh5c2ljYWxseSBCYXNlZCBSZW5kZXJpbmdcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XG4gKi9cbnZhciBBbWJpZW50Q3ViZW1hcExpZ2h0ID0gTGlnaHQuZXh0ZW5kKHtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwI1xuICAgICAqL1xuICAgIGN1YmVtYXA6IG51bGwsXG5cbiAgICAvLyBUT0RPXG4gICAgLy8gcmFuZ2U6IDEwMCxcblxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxuXG4gICAgX25vcm1hbERpc3RyaWJ1dGlvbjogbnVsbCxcbiAgICBfYnJkZkxvb2t1cDogbnVsbFxuXG59LCAvKiogQGxlbmRzIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXAjICovIHtcblxuICAgIHR5cGU6ICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnLFxuXG4gICAgLyoqXG4gICAgICogRG8gcHJlZml0ZXJpbmcgdGhlIGN1YmVtYXBcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTMyXVxuICAgICAqL1xuICAgIHByZWZpbHRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XG4gICAgICAgIGlmICghdGhpcy5fYnJkZkxvb2t1cCkge1xuICAgICAgICAgICAgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uID0gY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX2JyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdWJlbWFwID0gdGhpcy5jdWJlbWFwO1xuICAgICAgICBpZiAoY3ViZW1hcC5fX3ByZWZpbHRlcmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0ID0gY3ViZW1hcFV0aWwucHJlZmlsdGVyRW52aXJvbm1lbnRNYXAoXG4gICAgICAgICAgICByZW5kZXJlciwgY3ViZW1hcCwge1xuICAgICAgICAgICAgICAgIGVuY29kZVJHQk06IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplXG4gICAgICAgICAgICB9LCB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24sIHRoaXMuX2JyZGZMb29rdXBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jdWJlbWFwID0gcmVzdWx0LmVudmlyb25tZW50TWFwO1xuICAgICAgICB0aGlzLmN1YmVtYXAuX19wcmVmaWx0ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgY3ViZW1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICB9LFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwOiB7XG4gICAgICAgICAgICB0eXBlOiAndCcsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmN1YmVtYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXA6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0JyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX2JyZGZMb29rdXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQG5hbWUgY2xvbmVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwLnByb3RvdHlwZVxuICAgICAqL1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRDdWJlbWFwTGlnaHQ7XG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5cbi8qKlxuICogU3BoZXJpY2FsIEhhcm1vbmljIEFtYmllbnQgTGlnaHRcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRTSFxuICogQGV4dGVuZHMgY2xheS5MaWdodFxuICovXG52YXIgQW1iaWVudFNITGlnaHQgPSBMaWdodC5leHRlbmQoe1xuXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBTcGhlcmljYWwgSGFybW9uaWMgQ29lZmZpY2llbnRzXG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRTSCNcbiAgICAgKi9cbiAgICBjb2VmZmljaWVudHM6IFtdLFxuXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fY29lZmZpY2llbnRzVG1wQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xufSwge1xuXG4gICAgdHlwZTogJ0FNQklFTlRfU0hfTElHSFQnLFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICBhbWJpZW50U0hMaWdodENvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50czoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzVG1wQXJyID0gaW5zdGFuY2UuX2NvZWZmaWNpZW50c1RtcEFycjtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluc3RhbmNlLmNvZWZmaWNpZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNUbXBBcnJbaV0gPSBpbnN0YW5jZS5jb2VmZmljaWVudHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2VmZmljaWVudHNUbXBBcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQG5hbWUgY2xvbmVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnR9XG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcbiAgICAgKi9cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBbWJpZW50U0hMaWdodDtcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcblxudmFyIFRleHR1cmVQb29sID0gZnVuY3Rpb24gKCkge1xuXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xuXG4gICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcbn07XG5cblRleHR1cmVQb29sLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBUZXh0dXJlUG9vbCxcblxuICAgIGdldDogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpO1xuICAgICAgICBpZiAoIXRoaXMuX3Bvb2wuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9wb29sW2tleV07XG4gICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzLnB1c2godGV4dHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdC5wb3AoKTtcbiAgICB9LFxuXG4gICAgcHV0OiBmdW5jdGlvbiAodGV4dHVyZSkge1xuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkodGV4dHVyZSk7XG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wb29sW2tleV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcbiAgICAgICAgbGlzdC5wdXNoKHRleHR1cmUpO1xuICAgIH0sXG5cbiAgICBjbGVhcjogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzW2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Bvb2wgPSB7fTtcbiAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcbiAgICB9XG59O1xuXG52YXIgZGVmYXVsdFBhcmFtcyA9IHtcbiAgICB3aWR0aDogNTEyLFxuICAgIGhlaWdodDogNTEyLFxuICAgIHR5cGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXG4gICAgd3JhcFM6IGdsZW51bS5DTEFNUF9UT19FREdFLFxuICAgIHdyYXBUOiBnbGVudW0uQ0xBTVBfVE9fRURHRSxcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxuICAgIGFuaXNvdHJvcGljOiAxLFxuICAgIGZsaXBZOiB0cnVlLFxuICAgIHVucGFja0FsaWdubWVudDogNCxcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZVxufTtcblxudmFyIGRlZmF1bHRQYXJhbVByb3BMaXN0ID0gT2JqZWN0LmtleXMoZGVmYXVsdFBhcmFtcyk7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpIHtcbiAgICB1dGlsLmRlZmF1bHRzV2l0aFByb3BMaXN0KHBhcmFtZXRlcnMsIGRlZmF1bHRQYXJhbXMsIGRlZmF1bHRQYXJhbVByb3BMaXN0KTtcbiAgICBmYWxsQmFjayhwYXJhbWV0ZXJzKTtcblxuICAgIHZhciBrZXkgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRQYXJhbVByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gZGVmYXVsdFBhcmFtUHJvcExpc3RbaV07XG4gICAgICAgIHZhciBjaHVuayA9IHBhcmFtZXRlcnNbbmFtZV0udG9TdHJpbmcoKTtcbiAgICAgICAga2V5ICs9IGNodW5rO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xufVxuXG5mdW5jdGlvbiBmYWxsQmFjayh0YXJnZXQpIHtcblxuICAgIHZhciBJUE9UID0gaXNQb3dlck9mVHdvKHRhcmdldC53aWR0aCwgdGFyZ2V0LmhlaWdodCk7XG5cbiAgICBpZiAodGFyZ2V0LmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xuICAgICAgICB0YXJnZXQudXNlTWlwbWFwID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFJUE9UIHx8ICF0YXJnZXQudXNlTWlwbWFwKSB7XG4gICAgICAgIGlmICh0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVIpIHtcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1RcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLkxJTkVBUjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIUlQT1QpIHtcbiAgICAgICAgdGFyZ2V0LndyYXBTID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XG4gICAgICAgIHRhcmdldC53cmFwVCA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNQb3dlck9mVHdvKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gKHdpZHRoICYgKHdpZHRoLTEpKSA9PT0gMCAmJlxuICAgICAgICAgICAgKGhlaWdodCAmIChoZWlnaHQtMSkpID09PSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlUG9vbDtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNtLmRlcHRoLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbiNpZmRlZiBTSEFET1dfVFJBTlNQQVJFTlRcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XX1RSQU5TUEFSRU5UXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxudm9pZCBtYWluKCl7XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiAgICB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB2X1ZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XX1RSQU5TUEFSRU5UXFxuICAgIHZfVGV4Y29vcmQgPSB0ZXhjb29yZDtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZXB0aC5mcmFnbWVudFxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XX1RSQU5TUEFSRU5UXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBiaWFzIDogMC4wMDE7XFxudW5pZm9ybSBmbG9hdCBzbG9wZVNjYWxlIDogMS4wO1xcbiNpZmRlZiBTSEFET1dfVFJBTlNQQVJFTlRcXG51bmlmb3JtIHNhbXBsZXIyRCB0cmFuc3BhcmVudE1hcDtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gICAgZmxvYXQgZGVwdGggPSB2X1ZpZXdQb3NpdGlvbi56IC8gdl9WaWV3UG9zaXRpb24udztcXG4jaWZkZWYgVVNFX1ZTTVxcbiAgICBkZXB0aCA9IGRlcHRoICogMC41ICsgMC41O1xcbiAgICBmbG9hdCBtb21lbnQxID0gZGVwdGg7XFxuICAgIGZsb2F0IG1vbWVudDIgPSBkZXB0aCAqIGRlcHRoO1xcbiAgICBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiAgICBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiAgICBtb21lbnQyICs9IDAuMjUqKGR4KmR4K2R5KmR5KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChtb21lbnQxLCBtb21lbnQyLCAwLjAsIDEuMCk7XFxuI2Vsc2VcXG4gICAgZmxvYXQgZHggPSBkRmR4KGRlcHRoKTtcXG4gICAgZmxvYXQgZHkgPSBkRmR5KGRlcHRoKTtcXG4gICAgZGVwdGggKz0gc3FydChkeCpkeCArIGR5KmR5KSAqIHNsb3BlU2NhbGUgKyBiaWFzO1xcbiNpZmRlZiBTSEFET1dfVFJBTlNQQVJFTlRcXG4gICAgaWYgKHRleHR1cmUyRCh0cmFuc3BhcmVudE1hcCwgdl9UZXhjb29yZCkuYSA8PSAwLjEpIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KDAuOTk5OSk7XFxuICAgICAgICByZXR1cm47XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZGVwdGggKiAwLjUgKyAwLjUpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRlYnVnX2RlcHRoXFxudW5pZm9ybSBzYW1wbGVyMkQgZGVwdGhNYXA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRChkZXB0aE1hcCwgdl9UZXhjb29yZCk7XFxuI2lmZGVmIFVTRV9WU01cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXgucmdiLCAxLjApO1xcbiNlbHNlXFxuICAgIGZsb2F0IGRlcHRoID0gZGVjb2RlRmxvYXQodGV4KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChkZXB0aCwgZGVwdGgsIGRlcHRoLCAxLjApO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRpc3RhbmNlLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbiAoKXtcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uICwgMS4wKTtcXG4gICAgdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kaXN0YW5jZS5mcmFnbWVudFxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcmFuZ2UgOiAxMDA7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKGxpZ2h0UG9zaXRpb24sIHZfV29ybGRQb3NpdGlvbik7XFxuI2lmZGVmIFVTRV9WU01cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChkaXN0LCBkaXN0ICogZGlzdCwgMC4wLCAwLjApO1xcbiNlbHNlXFxuICAgIGRpc3QgPSBkaXN0IC8gcmFuZ2U7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGRpc3QpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IHRhcFNoYWRvd01hcChzYW1wbGVyMkQgbWFwLCB2ZWMyIHV2LCBmbG9hdCB6KXtcXG4gICAgdmVjNCB0ZXggPSB0ZXh0dXJlMkQobWFwLCB1dik7XFxuICAgIHJldHVybiBzdGVwKHosIGRlY29kZUZsb2F0KHRleCkgKiAyLjAgLSAxLjApO1xcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUsIHZlYzIgc2NhbGUpIHtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYiA9IHRhcFNoYWRvd01hcChtYXAsIHV2LCB6KTtcXG4gICAgdmVjMiBvZmZzZXQgPSB2ZWMyKDEuMCAvIHRleHR1cmVTaXplKSAqIHNjYWxlO1xcbiNpZmRlZiBQQ0ZfS0VSTkVMX1NJWkVcXG4gICAgZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFBDRl9LRVJORUxfU0laRTsgX2lkeF8rKykge3tcXG4gICAgICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYgKyBvZmZzZXQgKiBwY2ZLZXJuZWxbX2lkeF9dLCB6KTtcXG4gICAgfX1cXG4gICAgcmV0dXJuIHNoYWRvd0NvbnRyaWIgLyBmbG9hdChQQ0ZfS0VSTkVMX1NJWkUgKyAxKTtcXG4jZWxzZVxcbiAgICBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIDAuMCksIHopO1xcbiAgICBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIG9mZnNldC55KSwgeik7XFxuICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIDAuMCksIHopO1xcbiAgICBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gICAgc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gICAgc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKDAuMCwgLW9mZnNldC55KSwgeik7XFxuICAgIHJldHVybiBzaGFkb3dDb250cmliIC8gOS4wO1xcbiNlbmRpZlxcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gICAgcmV0dXJuIHBjZihtYXAsIHV2LCB6LCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTtcXG59XFxuZmxvYXQgY2hlYnlzaGV2VXBwZXJCb3VuZCh2ZWMyIG1vbWVudHMsIGZsb2F0IHope1xcbiAgICBmbG9hdCBwID0gMC4wO1xcbiAgICB6ID0geiAqIDAuNSArIDAuNTtcXG4gICAgaWYgKHogPD0gbW9tZW50cy54KSB7XFxuICAgICAgICBwID0gMS4wO1xcbiAgICB9XFxuICAgIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiAgICB2YXJpYW5jZSA9IG1heCh2YXJpYW5jZSwgMC4wMDAwMDAxKTtcXG4gICAgZmxvYXQgbUQgPSBtb21lbnRzLnggLSB6O1xcbiAgICBmbG9hdCBwTWF4ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBtRCAqIG1EKTtcXG4gICAgcE1heCA9IGNsYW1wKChwTWF4LTAuNCkvKDEuMC0wLjQpLCAwLjAsIDEuMCk7XFxuICAgIHJldHVybiBtYXgocCwgcE1heCk7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiAgICBzYW1wbGVyMkQgbWFwLCBtYXQ0IGxpZ2h0VlBNLCB2ZWMzIHBvc2l0aW9uLCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSwgdmVjMiBvZmZzZXRcXG4pIHtcXG4gICAgdmVjNCBwb3NJbkxpZ2h0U3BhY2UgPSBsaWdodFZQTSAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICAgIHBvc0luTGlnaHRTcGFjZS54eXogLz0gcG9zSW5MaWdodFNwYWNlLnc7XFxuICAgIGZsb2F0IHogPSBwb3NJbkxpZ2h0U3BhY2UuejtcXG4gICAgaWYoYWxsKGdyZWF0ZXJUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoLTAuOTksIC0wLjk5LCAtMS4wKSkpICYmXFxuICAgICAgICBhbGwobGVzc1RoYW4ocG9zSW5MaWdodFNwYWNlLnh5eiwgdmVjMygwLjk5LCAwLjk5LCAxLjApKSkpe1xcbiAgICAgICAgdmVjMiB1diA9IChwb3NJbkxpZ2h0U3BhY2UueHkrMS4wKSAvIDIuMDtcXG4gICAgICAgICNpZmRlZiBVU0VfVlNNXFxuICAgICAgICAgICAgdmVjMiBtb21lbnRzID0gdGV4dHVyZTJEKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCkueHk7XFxuICAgICAgICAgICAgcmV0dXJuIGNoZWJ5c2hldlVwcGVyQm91bmQobW9tZW50cywgeik7XFxuICAgICAgICAjZWxzZVxcbiAgICAgICAgICAgIHJldHVybiBwY2YobWFwLCB1diAqIHNjYWxlICsgb2Zmc2V0LCB6LCB0ZXh0dXJlU2l6ZSwgc2NhbGUpO1xcbiAgICAgICAgI2VuZGlmXFxuICAgIH1cXG4gICAgcmV0dXJuIDEuMDtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoc2FtcGxlcjJEIG1hcCwgbWF0NCBsaWdodFZQTSwgdmVjMyBwb3NpdGlvbiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gICAgcmV0dXJuIGNvbXB1dGVTaGFkb3dDb250cmliKG1hcCwgbGlnaHRWUE0sIHBvc2l0aW9uLCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApLCB2ZWMyKDAuMCkpO1xcbn1cXG5mbG9hdCBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoc2FtcGxlckN1YmUgbWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgcmFuZ2UpXFxue1xcbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGRpcmVjdGlvbik7XFxuICAgIHZlYzQgc2hhZG93VGV4ID0gdGV4dHVyZUN1YmUobWFwLCBkaXJlY3Rpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuICAgIHZlYzIgbW9tZW50cyA9IHNoYWRvd1RleC54eTtcXG4gICAgZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuICAgIGZsb2F0IG1EID0gbW9tZW50cy54IC0gZGlzdDtcXG4gICAgZmxvYXQgcCA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgbUQgKiBtRCk7XFxuICAgIGlmKG1vbWVudHMueCArIDAuMDAxIDwgZGlzdCl7XFxuICAgICAgICByZXR1cm4gY2xhbXAocCwgMC4wLCAxLjApO1xcbiAgICB9ZWxzZXtcXG4gICAgICAgIHJldHVybiAxLjA7XFxuICAgIH1cXG4jZWxzZVxcbiAgICByZXR1cm4gc3RlcChkaXN0LCAoZGVjb2RlRmxvYXQoc2hhZG93VGV4KSArIDAuMDAwMikgKiByYW5nZSk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKSB8fCBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVCkgfHwgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuI2lmZGVmIFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxudW5pZm9ybSBzYW1wbGVyMkQgc3BvdExpZ2h0U2hhZG93TWFwc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IHNwb3RMaWdodE1hdHJpY2VzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNwb3RMaWdodFNoYWRvd01hcFNpemVzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxuI2lmIGRlZmluZWQoU0hBRE9XX0NBU0NBREUpXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxuI2Vsc2VcXG51bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG51bmlmb3JtIHNhbXBsZXJDdWJlIHBvaW50TGlnaHRTaGFkb3dNYXBzW1BPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxudW5pZm9ybSBib29sIHNoYWRvd0VuYWJsZWQgOiB0cnVlO1xcbiNpZmRlZiBQQ0ZfS0VSTkVMX1NJWkVcXG51bmlmb3JtIHZlYzIgcGNmS2VybmVsW1BDRl9LRVJORUxfU0laRV07XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mU3BvdExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tTUE9UX0xJR0hUX0NPVU5UXSApIHtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIHNwb3RMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbX2lkeF9dXFxuICAgICAgICApO1xcbiAgICAgICAgc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gICAgfX1cXG4gICAgZm9yKGludCBfaWR4XyA9IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFNQT1RfTElHSFRfQ09VTlQ7IF9pZHhfKyspe3tcXG4gICAgICAgIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gICAgfX1cXG59XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTSEFET1dfQ0FTQ0FERVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gICAgZmxvYXQgZGVwdGggPSAoMi4wICogZ2xfRnJhZ0Nvb3JkLnogLSBnbF9EZXB0aFJhbmdlLm5lYXIgLSBnbF9EZXB0aFJhbmdlLmZhcilcXG4gICAgICAgICAgICAgICAgICAgIC8gKGdsX0RlcHRoUmFuZ2UuZmFyIC0gZ2xfRGVwdGhSYW5nZS5uZWFyKTtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gICAgc2hhZG93Q29udHJpYnNbMF0gPSAxLjA7XFxuICAgIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTSEFET1dfQ0FTQ0FERTsgX2lkeF8rKykge3tcXG4gICAgICAgIGlmIChcXG4gICAgICAgICAgICBkZXB0aCA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiAgICAgICAgICAgIGRlcHRoIDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gICAgICAgICkge1xcbiAgICAgICAgICAgIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMF0sIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMF0sXFxuICAgICAgICAgICAgICAgIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiAgICAgICAgICAgICAgICB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgc2hhZG93Q29udHJpYnNbMF0gPSBzaGFkb3dDb250cmliO1xcbiAgICAgICAgfVxcbiAgICB9fVxcbiAgICBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiAgICAgICAgc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiAgICB9fVxcbn1cXG4jZWxzZVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiAgICAgICAgc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW19pZHhfXVxcbiAgICAgICAgKTtcXG4gICAgICAgIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IHNoYWRvd0NvbnRyaWI7XFxuICAgIH19XFxuICAgIGZvcihpbnQgX2lkeF8gPSBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuICAgIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1BPSU5UX0xJR0hUX0NPVU5UXSApe1xcbiAgICB2ZWMzIGxpZ2h0UG9zaXRpb247XFxuICAgIHZlYzMgZGlyZWN0aW9uO1xcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gICAgICAgIGRpcmVjdGlvbiA9IHBvc2l0aW9uIC0gbGlnaHRQb3NpdGlvbjtcXG4gICAgICAgIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IGNvbXB1dGVTaGFkb3dDb250cmliT21uaShwb2ludExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIGRpcmVjdGlvbiwgcG9pbnRMaWdodFJhbmdlW19pZHhfXSk7XFxuICAgIH19XFxuICAgIGZvcihpbnQgX2lkeF8gPSBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuICAgIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcIjtcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuLi9tYXRoL0ZydXN0dW0nO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBSZW5kZXJlciBmcm9tICcuLi9SZW5kZXJlcic7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4uL2xpZ2h0L1Nwb3QnO1xuaW1wb3J0IERpcmVjdGlvbmFsTGlnaHQgZnJvbSAnLi4vbGlnaHQvRGlyZWN0aW9uYWwnO1xuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi4vbGlnaHQvUG9pbnQnO1xuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi4vc2hhZGVyL2xpYnJhcnknO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcblxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcbmltcG9ydCBUZXh0dXJlUG9vbCBmcm9tICcuLi9jb21wb3NpdG9yL1RleHR1cmVQb29sJztcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xuXG5pbXBvcnQgc2hhZG93bWFwRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL3NoYWRvd21hcC5nbHNsLmpzJztcblNoYWRlclsnaW1wb3J0J10oc2hhZG93bWFwRXNzbCk7XG5cbi8qKlxuICogUGFzcyByZW5kZXJpbmcgc2hhZG93IG1hcC5cbiAqXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLlNoYWRvd01hcFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqIEBleGFtcGxlXG4gKiAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLlNoYWRvd01hcCh7XG4gKiAgICAgICAgIHNvZnRTaGFkb3c6IGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNXG4gKiAgICAgfSk7XG4gKiAgICAgLi4uXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcbiAqICAgICAgICAgc2hhZG93TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgfSk7XG4gKi9cbnZhciBTaGFkb3dNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNvZnQgc2hhZG93IHRlY2huaXF1ZS5cbiAgICAgICAgICogQ2FuIGJlIHtAbGluayBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRn0gb3Ige0BsaW5rIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNfVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc29mdFNoYWRvdzogU2hhZG93TWFwUGFzcy5QQ0YsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNvZnQgc2hhZG93IGJsdXIgc2l6ZVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc2hhZG93Qmx1cjogMS4wLFxuXG4gICAgICAgIGxpZ2h0RnJ1c3R1bUJpYXM6ICdhdXRvJyxcblxuICAgICAgICBrZXJuZWxQQ0Y6IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAgICAgMSwgMCxcbiAgICAgICAgICAgIDEsIDEsXG4gICAgICAgICAgICAtMSwgMSxcbiAgICAgICAgICAgIDAsIDEsXG4gICAgICAgICAgICAtMSwgMCxcbiAgICAgICAgICAgIC0xLCAtMSxcbiAgICAgICAgICAgIDEsIC0xLFxuICAgICAgICAgICAgMCwgLTFcbiAgICAgICAgXSksXG5cbiAgICAgICAgcHJlY2lzaW9uOiAnbWVkaXVtcCcsXG5cbiAgICAgICAgX2xhc3RSZW5kZXJOb3RDYXN0U2hhZG93OiBmYWxzZSxcblxuICAgICAgICBfZnJhbWVCdWZmZXI6IG5ldyBGcmFtZUJ1ZmZlcigpLFxuXG4gICAgICAgIF90ZXh0dXJlczoge30sXG4gICAgICAgIF9zaGFkb3dNYXBOdW1iZXI6IHtcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXG4gICAgICAgICAgICAnRElSRUNUSU9OQUxfTElHSFQnOiAwLFxuICAgICAgICAgICAgJ1NQT1RfTElHSFQnOiAwXG4gICAgICAgIH0sXG5cbiAgICAgICAgX2RlcHRoTWF0ZXJpYWxzOiB7fSxcbiAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxzOiB7fSxcblxuICAgICAgICBfb3BhcXVlQ2FzdGVyczogW10sXG4gICAgICAgIF9yZWNlaXZlcnM6IFtdLFxuICAgICAgICBfbGlnaHRzQ2FzdFNoYWRvdzogW10sXG5cbiAgICAgICAgX2xpZ2h0Q2FtZXJhczoge30sXG4gICAgICAgIF9saWdodE1hdGVyaWFsczoge30sXG5cbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gR2F1c3NpYW4gZmlsdGVyIHBhc3MgZm9yIFZTTVxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc0ggPSBuZXcgUGFzcyh7XG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXG4gICAgfSk7XG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzViA9IG5ldyBQYXNzKHtcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyJylcbiAgICB9KTtcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJTaXplJywgdGhpcy5zaGFkb3dCbHVyKTtcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJEaXInLCAwLjApO1xuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1ckRpcicsIDEuMCk7XG5cbiAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MgPSBuZXcgUGFzcyh7XG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LnNtLmRlYnVnX2RlcHRoJylcbiAgICB9KTtcbn0sIHtcbiAgICAvKipcbiAgICAgKiBSZW5kZXIgc2NlbmUgdG8gc2hhZG93IHRleHR1cmVzXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSBzY2VuZUNhbWVyYVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xuICAgICAgICBpZiAoIXNjZW5lQ2FtZXJhKSB7XG4gICAgICAgICAgICBzY2VuZUNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xuICAgICAgICB0aGlzLl9yZW5kZXJTaGFkb3dQYXNzKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZWJ1ZyByZW5kZXJpbmcgb2Ygc2hhZG93IHRleHR1cmVzXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNpemVcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XG4gICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xuICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcbiAgICAgICAgdmFyIHggPSAwLCB5ID0gMDtcbiAgICAgICAgdmFyIHdpZHRoID0gc2l6ZSB8fCB2aWV3cG9ydC53aWR0aCAvIDQ7XG4gICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDtcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbbmFtZV07XG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5zZXRVbmlmb3JtKCdkZXB0aE1hcCcsIHRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLnJlbmRlcihyZW5kZXJlcik7XG4gICAgICAgICAgICB4ICs9IHdpZHRoICogdGV4dHVyZS53aWR0aCAvIHRleHR1cmUuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XG4gICAgfSxcblxuICAgIF91cGRhdGVDYXN0ZXJBbmRSZWNlaXZlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBtZXNoKSB7XG4gICAgICAgIGlmIChtZXNoLmNhc3RTaGFkb3cpIHtcbiAgICAgICAgICAgIHRoaXMuX29wYXF1ZUNhc3RlcnMucHVzaChtZXNoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzaC5yZWNlaXZlU2hhZG93KSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNlaXZlcnMucHVzaChtZXNoKTtcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMSk7XG5cbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdwY2ZLZXJuZWwnLCB0aGlzLmtlcm5lbFBDRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtZXNoLm1hdGVyaWFsLnNoYWRlciAmJiBtZXNoLm1hdGVyaWFsLnVwZGF0ZVNoYWRlcikge1xuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51cGRhdGVTaGFkZXIocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUENGX0tFUk5FTF9TSVpFJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XG4gICAgICAgICAgICB2YXIga2VybmVsUENGID0gdGhpcy5rZXJuZWxQQ0Y7XG4gICAgICAgICAgICBpZiAoa2VybmVsUENGICYmIGtlcm5lbFBDRi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUENGX0tFUk5FTF9TSVpFJywga2VybmVsUENGLmxlbmd0aCAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUENGX0tFUk5FTF9TSVpFJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLm9wYXF1ZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNhc3RlckFuZFJlY2VpdmVyKHJlbmRlcmVyLCBzY2VuZS5vcGFxdWVMaXN0W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLnRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gVE9ETyBUcmFuc3BhcmVudCBvYmplY3QgcmVjZWl2ZSBzaGFkb3cgd2lsbCBiZSB2ZXJ5IHNsb3dcbiAgICAgICAgICAgIC8vIGluIHN0ZWFsdGggZGVtbywgc3RpbGwgbm90IGZpbmQgdGhlIHJlYXNvblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ2FzdGVyQW5kUmVjZWl2ZXIocmVuZGVyZXIsIHNjZW5lLnRyYW5zcGFyZW50TGlzdFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcbiAgICAgICAgICAgIGlmIChsaWdodC5jYXN0U2hhZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5wdXNoKGxpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfcmVuZGVyU2hhZG93UGFzczogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKSB7XG4gICAgICAgIC8vIHJlc2V0XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbmFtZV0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fb3BhcXVlQ2FzdGVycy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoID0gMDtcblxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xuICAgICAgICAgICAgc2NlbmUudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjZW5lQ2FtZXJhKSB7XG4gICAgICAgICAgICBzY2VuZUNhbWVyYS51cGRhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZShyZW5kZXJlciwgc2NlbmUpO1xuXG4gICAgICAgIC8vIE5lZWRzIHRvIHVwZGF0ZSB0aGUgcmVjZWl2ZXJzIGFnYWluIGlmIHNoYWRvd3MgY29tZSBmcm9tIDEgdG8gMC5cbiAgICAgICAgaWYgKCF0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aCAmJiB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93ID09PSAwO1xuXG4gICAgICAgIF9nbC5lbmFibGUoX2dsLkRFUFRIX1RFU1QpO1xuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xuICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuQkxFTkQpO1xuXG4gICAgICAgIC8vIENsZWFyIHdpdGggaGlnaC16LCBzbyB0aGUgcGFydCBub3QgcmVuZGVyZWQgd2lsbCBub3QgYmVlbiBzaGFkb3dlZFxuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIFRPRE8gcmVzdG9yZVxuICAgICAgICBfZ2wuY2xlYXJDb2xvcigxLjAsIDEuMCwgMS4wLCAxLjApO1xuXG4gICAgICAgIC8vIFNoYWRvdyB1bmlmb3Jtc1xuICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwcyA9IFtdO1xuICAgICAgICB2YXIgc3BvdExpZ2h0TWF0cmljZXMgPSBbXTtcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0gW107XG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMgPSBbXTtcbiAgICAgICAgdmFyIHNoYWRvd0Nhc2NhZGVDbGlwcyA9IFtdO1xuICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvd01hcHMgPSBbXTtcblxuICAgICAgICB2YXIgZGlyTGlnaHRIYXNDYXNjYWRlO1xuICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIHNoYWRvdyBtYXBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbGlnaHQgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93W2ldO1xuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdESVJFQ1RJT05BTF9MSUdIVCcpIHtcblxuICAgICAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdPbmx5IG9uZSBkaXJlZWN0aW9uYWwgbGlnaHQgc3VwcG9ydGVkIHdpdGggc2hhZG93IGNhc2NhZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gNCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N1cHBvcnQgYXQgbW9zdCA0IGNhc2NhZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJMaWdodEhhc0Nhc2NhZGUgPSBsaWdodC5zaGFkb3dDYXNjYWRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYSxcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wYXF1ZUNhc3RlcnMsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcyxcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLFxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChsaWdodC50eXBlID09PSAnU1BPVF9MSUdIVCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BhcXVlQ2FzdGVycyxcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMsXG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BhcXVlQ2FzdGVycyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHQudHlwZV0rKztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGxpZ2h0VHlwZSBpbiB0aGlzLl9zaGFkb3dNYXBOdW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHRUeXBlXTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBsaWdodFR5cGUgKyAnX1NIQURPV01BUF9DT1VOVCc7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlY2VpdmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lc1trZXldICE9PSBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBrZXksIG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgZGlyTGlnaHRIYXNDYXNjYWRlLnNoYWRvd0Nhc2NhZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hhZG93VW5pZm9ybXMgPSBzY2VuZS5zaGFkb3dVbmlmb3JtcztcblxuICAgICAgICBmdW5jdGlvbiBnZXRTaXplKHRleHR1cmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplcyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzLm1hcChnZXRTaXplKTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplcywgdHlwZTogJzFmdicgfTtcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSBzaGFkb3dDYXNjYWRlQ2xpcHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzRmFyLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNOZWFyID0geyB2YWx1ZTogc2hhZG93Q2FzY2FkZUNsaXBzTmVhciwgdHlwZTogJzFmdicgfTtcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIsIHR5cGU6ICcxZnYnIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3BvdExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXMgPSBzcG90TGlnaHRTaGFkb3dNYXBzLm1hcChnZXRTaXplKTtcbiAgICAgICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnNwb3RMaWdodE1hdHJpY2VzID0geyB2YWx1ZTogc3BvdExpZ2h0TWF0cmljZXMsIHR5cGU6ICdtNHYnIH07XG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvaW50TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogcG9pbnRMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93OiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBzcGxpdEZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xuICAgICAgICB2YXIgc3BsaXRQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGNyb3BCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciBjcm9wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGxpZ2h0Vmlld01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIHZhciBsaWdodFZpZXdQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGxpZ2h0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBsaWdodCwgY2FzdGVycywgc2hhZG93Q2FzY2FkZUNsaXBzLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzKSB7XG5cbiAgICAgICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gRmlyc3QgZnJhbWVcbiAgICAgICAgICAgIGlmICghc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLmlzRmluaXRlKCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZVxuICAgICAgICAgICAgICAgICAgICAuY29weShib3VuZGluZ0JveCkuYXBwbHlUcmFuc2Zvcm0oc2NlbmVDYW1lcmEudmlld01hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb25zaWRlcmluZyBtb3Zpbmcgc3BlZWQgc2luY2UgdGhlIGJvdW5kaW5nIGJveCBpcyBmcm9tIGxhc3QgZnJhbWVcbiAgICAgICAgICAgIC8vIFRPRE86IGFkZCBhIGJpYXNcbiAgICAgICAgICAgIHZhciBjbGlwcGVkRmFyID0gTWF0aC5taW4oLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4ueiwgc2NlbmVDYW1lcmEuZmFyKTtcbiAgICAgICAgICAgIHZhciBjbGlwcGVkTmVhciA9IE1hdGgubWF4KC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnosIHNjZW5lQ2FtZXJhLm5lYXIpO1xuXG4gICAgICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xuXG4gICAgICAgICAgICB2YXIgbHZwTWF0NEFyciA9IGxpZ2h0Vmlld1Byb2pNYXRyaXguYXJyYXk7XG4gICAgICAgICAgICBsaWdodFByb2pNYXRyaXguY29weShsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsdnBNYXQ0QXJyLCBsaWdodFByb2pNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSk7XG5cbiAgICAgICAgICAgIHZhciBjbGlwUGxhbmVzID0gW107XG4gICAgICAgICAgICB2YXIgaXNQZXJzcGVjdGl2ZSA9IHNjZW5lQ2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmE7XG5cbiAgICAgICAgICAgIHZhciBzY2FsZVogPSAoc2NlbmVDYW1lcmEubmVhciArIHNjZW5lQ2FtZXJhLmZhcikgLyAoc2NlbmVDYW1lcmEubmVhciAtIHNjZW5lQ2FtZXJhLmZhcik7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0WiA9IDIgKiBzY2VuZUNhbWVyYS5uZWFyICogc2NlbmVDYW1lcmEuZmFyIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsb2cgPSBjbGlwcGVkTmVhciAqIE1hdGgucG93KGNsaXBwZWRGYXIgLyBjbGlwcGVkTmVhciwgaSAvIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xuICAgICAgICAgICAgICAgIHZhciBjdW5pID0gY2xpcHBlZE5lYXIgKyAoY2xpcHBlZEZhciAtIGNsaXBwZWROZWFyKSAqIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlO1xuICAgICAgICAgICAgICAgIHZhciBjID0gY2xvZyAqIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3RvciArIGN1bmkgKiAoMSAtIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3Rvcik7XG4gICAgICAgICAgICAgICAgY2xpcFBsYW5lcy5wdXNoKGMpO1xuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcy5wdXNoKC0oLWMgKiBzY2FsZVogKyBvZmZzZXRaKSAvIC1jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCwgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XG4gICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xuXG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcblxuICAgICAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGxpdHRlZCBmcnVzdHVtXG4gICAgICAgICAgICAgICAgdmFyIG5lYXJQbGFuZSA9IGNsaXBQbGFuZXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGZhclBsYW5lID0gY2xpcFBsYW5lc1tpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKGlzUGVyc3BlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZShzcGxpdFByb2pNYXRyaXguYXJyYXksIHNjZW5lQ2FtZXJhLmZvdiAvIDE4MCAqIE1hdGguUEksIHNjZW5lQ2FtZXJhLmFzcGVjdCwgbmVhclBsYW5lLCBmYXJQbGFuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtYXQ0Lm9ydGhvKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9qTWF0cml4LmFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDYW1lcmEubGVmdCwgc2NlbmVDYW1lcmEucmlnaHQsIHNjZW5lQ2FtZXJhLmJvdHRvbSwgc2NlbmVDYW1lcmEudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVhclBsYW5lLCBmYXJQbGFuZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uc2V0RnJvbVByb2plY3Rpb24oc3BsaXRQcm9qTWF0cml4KTtcbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveChjcm9wQkJveCwgbGlnaHRWaWV3TWF0cml4KTtcbiAgICAgICAgICAgICAgICBjcm9wQkJveC5hcHBseVByb2plY3Rpb24obGlnaHRQcm9qTWF0cml4KTtcbiAgICAgICAgICAgICAgICB2YXIgX21pbiA9IGNyb3BCQm94Lm1pbi5hcnJheTtcbiAgICAgICAgICAgICAgICB2YXIgX21heCA9IGNyb3BCQm94Lm1heC5hcnJheTtcbiAgICAgICAgICAgICAgICBfbWluWzBdID0gTWF0aC5tYXgoX21pblswXSwgLTEpO1xuICAgICAgICAgICAgICAgIF9taW5bMV0gPSBNYXRoLm1heChfbWluWzFdLCAtMSk7XG4gICAgICAgICAgICAgICAgX21heFswXSA9IE1hdGgubWluKF9tYXhbMF0sIDEpO1xuICAgICAgICAgICAgICAgIF9tYXhbMV0gPSBNYXRoLm1pbihfbWF4WzFdLCAxKTtcbiAgICAgICAgICAgICAgICBjcm9wTWF0cml4Lm9ydGhvKF9taW5bMF0sIF9tYXhbMF0sIF9taW5bMV0sIF9tYXhbMV0sIDEsIC0xKTtcbiAgICAgICAgICAgICAgICBsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TGVmdChjcm9wTWF0cml4KTtcblxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dTaXplID0gbGlnaHQuc2hhZG93UmVzb2x1dGlvbiB8fCA1MTI7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlZCwgbGVmdCB0byByaWdodCA9PiBmYXIgdG8gbmVhclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KChsaWdodC5zaGFkb3dDYXNjYWRlIC0gaSAtIDEpICogc2hhZG93U2l6ZSwgMCwgc2hhZG93U2l6ZSwgc2hhZG93U2l6ZSwgMSk7XG5cbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGNhc3RlcnMsIGxpZ2h0Q2FtZXJhLCBwYXNzQ29uZmlnKTtcblxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciBmb3IgVlNNXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICAgICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpXG4gICAgICAgICAgICAgICAgICAgIC5tdWx0aXBseUxlZnQobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGxpZ2h0UHJvak1hdHJpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgcmVuZGVyU3BvdExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgY2FzdGVycywgc3BvdExpZ2h0TWF0cmljZXMsIHNwb3RMaWdodFNoYWRvd01hcHMpIHtcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dldFRleHR1cmUobGlnaHQpO1xuICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXRTcG90TGlnaHRDYW1lcmEobGlnaHQpO1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyZXIuY3VsbFJlbmRlckxpc3QoY2FzdGVycywgbnVsbCwgbGlnaHRDYW1lcmEpLCBsaWdodENhbWVyYSwgcGFzc0NvbmZpZyk7XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBGaWx0ZXIgZm9yIFZTTVxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xuICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtKVxuICAgICAgICAgICAgLmludmVydCgpXG4gICAgICAgICAgICAubXVsdGlwbHlMZWZ0KGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcbiAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xuICAgIH0sXG5cbiAgICByZW5kZXJQb2ludExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgY2FzdGVycywgcG9pbnRMaWdodFNoYWRvd01hcHMpIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBwb2ludExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xuXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcbiAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fZ2V0UG9pbnRMaWdodENhbWVyYShsaWdodCwgdGFyZ2V0KTtcblxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGkpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyZXIuY3VsbFJlbmRlckxpc3QoY2FzdGVycywgbnVsbCwgY2FtZXJhKSwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XG4gICAgfSxcblxuICAgIF9nZXREZXB0aE1hdGVyaWFsOiBmdW5jdGlvbiAobGlnaHQpIHtcbiAgICAgICAgdmFyIHNoYWRvd01hdGVyaWFsID0gdGhpcy5fbGlnaHRNYXRlcmlhbHNbbGlnaHQuX191aWRfX107XG4gICAgICAgIHZhciBpc1BvaW50TGlnaHQgPSBsaWdodCBpbnN0YW5jZW9mIFBvaW50TGlnaHQ7XG4gICAgICAgIGlmICghc2hhZG93TWF0ZXJpYWwpIHtcbiAgICAgICAgICAgIHZhciBzaGFkZXJQcmVmaXggPSBpc1BvaW50TGlnaHQgPyAnY2xheS5zbS5kaXN0YW5jZS4nIDogJ2NsYXkuc20uZGVwdGguJztcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHRoaXMucHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICd2ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZShzaGFkZXJQcmVmaXggKyAnZnJhZ21lbnQnKSlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXSA9IHNoYWRvd01hdGVyaWFsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWdodC5zaGFkb3dTbG9wZVNjYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ3Nsb3BlU2NhbGUnLCBsaWdodC5zaGFkb3dTbG9wZVNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGlnaHQuc2hhZG93QmlhcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dCaWFzJywgbGlnaHQuc2hhZG93Qmlhcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldCgnbGlnaHRQb3NpdGlvbicsIGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oKS5hcnJheSk7XG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ3JhbmdlJywgbGlnaHQucmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNoYWRvd01hdGVyaWFsO1xuICAgIH0sXG5cbiAgICBfZ2F1c3NpYW5GaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2l6ZSkge1xuICAgICAgICB2YXIgcGFyYW1ldGVyID0ge1xuICAgICAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemUsXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXG4gICAgICAgIH07XG4gICAgICAgIHZhciB0bXBUZXh0dXJlID0gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcik7XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRtcFRleHR1cmUpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0guc2V0VW5pZm9ybSgndGV4dHVyZVdpZHRoJywgc2l6ZSk7XG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0gucmVuZGVyKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZScsIHRtcFRleHR1cmUpO1xuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmVIZWlnaHQnLCBzaXplKTtcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5yZW5kZXIocmVuZGVyZXIpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgIHRoaXMuX3RleHR1cmVQb29sLnB1dCh0bXBUZXh0dXJlKTtcbiAgICB9LFxuXG4gICAgX2dldFRleHR1cmU6IGZ1bmN0aW9uIChsaWdodCwgY2FzY2FkZSkge1xuICAgICAgICB2YXIga2V5ID0gbGlnaHQuX191aWRfXztcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1trZXldO1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gfHwgNTEyO1xuICAgICAgICBjYXNjYWRlID0gY2FzY2FkZSB8fCAxO1xuICAgICAgICBpZiAoIXRleHR1cmUpIHtcbiAgICAgICAgICAgIGlmIChsaWdodCBpbnN0YW5jZW9mIFBvaW50TGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXQgbW9zdCA0IGNhc2NhZGVcbiAgICAgICAgICAgIC8vIFRPRE8gc2hhcmUgd2l0aCBoZWlnaHQgP1xuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHJlc29sdXRpb24gKiBjYXNjYWRlO1xuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBUZXh0dXJlLkZMT0FUO1xuICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9waWMgPSA0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLm1hZ0ZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xuICAgICAgICAgICAgICAgIHRleHR1cmUudXNlTWlwbWFwID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1trZXldID0gdGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgIH0sXG5cbiAgICBfZ2V0UG9pbnRMaWdodENhbWVyYTogZnVuY3Rpb24gKGxpZ2h0LCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMucG9pbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5wb2ludCA9IHtcbiAgICAgICAgICAgICAgICBweDogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCksXG4gICAgICAgICAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxuICAgICAgICAgICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcbiAgICAgICAgICAgICAgICBueTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCksXG4gICAgICAgICAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxuICAgICAgICAgICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50W3RhcmdldF07XG5cbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgICAgICAgICBjYXNlICdweCc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdueCc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdweSc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdueSc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1ksIFZlY3RvcjMuTkVHQVRJVkVfWik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdweic6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdueic6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGlnaHQuZ2V0V29ybGRQb3NpdGlvbihjYW1lcmEucG9zaXRpb24pO1xuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcbiAgICB9LFxuXG4gICAgX2dldERpcmVjdGlvbmFsTGlnaHRDYW1lcmE6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICB2YXIgc2NlbmVWaWV3Qm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgdmFyIGxpZ2h0Vmlld0JCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgLy8gQ2FtZXJhIG9mIGRpcmVjdGlvbmFsIGxpZ2h0IHdpbGwgYmUgYWRqdXN0ZWRcbiAgICAgICAgLy8gdG8gY29udGFpbiB0aGUgdmlldyBmcnVzdHVtIGFuZCBzY2VuZSBib3VuZGluZyBib3ggYXMgdGlnaHRseSBhcyBwb3NzaWJsZVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsID0gbmV3IE9ydGhvQ2FtZXJhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsO1xuXG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5jb3B5KHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZSk7XG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5pbnRlcnNlY3Rpb24oc2NlbmVDYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZnJ1c3R1bShpbiB3b3JsZCBzcGFjZSlcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvblxuICAgICAgICAgICAgICAgIC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94Lm1pbilcbiAgICAgICAgICAgICAgICAuYWRkKHNjZW5lVmlld0JvdW5kaW5nQm94Lm1heClcbiAgICAgICAgICAgICAgICAuc2NhbGUoMC41KVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5jb3B5KGxpZ2h0LnJvdGF0aW9uKTtcbiAgICAgICAgICAgIGNhbWVyYS5zY2FsZS5jb3B5KGxpZ2h0LnNjYWxlKTtcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdG8gbGlnaHQgdmlldyBzcGFjZVxuICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXgsIGxpZ2h0Vmlld01hdHJpeCwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICBsaWdodFZpZXdCQm94LmNvcHkoc2NlbmVWaWV3Qm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKGxpZ2h0Vmlld01hdHJpeCk7XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSBsaWdodFZpZXdCQm94Lm1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXggPSBsaWdodFZpZXdCQm94Lm1heC5hcnJheTtcblxuICAgICAgICAgICAgLy8gTW92ZSBjYW1lcmEgdG8gYWRqdXN0IHRoZSBuZWFyIHRvIDBcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoKG1pblswXSArIG1heFswXSkgLyAyLCAobWluWzFdICsgbWF4WzFdKSAvIDIsIG1heFsyXSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgY2FtZXJhLm5lYXIgPSAwO1xuICAgICAgICAgICAgY2FtZXJhLmZhciA9IC1taW5bMl0gKyBtYXhbMl07XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcmVjZWl2ZXJzIG5vdCBpbiB0aGUgZnJ1c3R1bSB3aWxsIHN0aWwgcmVjZWl2ZSB0aGUgc2hhZG93LlxuICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMubGlnaHRGcnVzdHVtQmlhcykpIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICo9IDQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICs9IHRoaXMubGlnaHRGcnVzdHVtQmlhcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbWVyYS5sZWZ0ID0gbWluWzBdO1xuICAgICAgICAgICAgY2FtZXJhLnJpZ2h0ID0gbWF4WzBdO1xuICAgICAgICAgICAgY2FtZXJhLnRvcCA9IG1heFsxXTtcbiAgICAgICAgICAgIGNhbWVyYS5ib3R0b20gPSBtaW5bMV07XG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2FtZXJhO1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICBfZ2V0U3BvdExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMuc3BvdCkge1xuICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3QgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3Q7XG4gICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgICAgIGNhbWVyYS5mb3YgPSBsaWdodC5wZW51bWJyYUFuZ2xlICogMjtcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xuICAgICAgICBjYW1lcmEud29ybGRUcmFuc2Zvcm0uY29weShsaWdodC53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG4gICAgICAgIG1hdDQuaW52ZXJ0KGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuXG4gICAgICAgIHJldHVybiBjYW1lcmE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ8V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBbcmVuZGVyZXJdXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXG4gICAgICovXG4gICAgLy8gUEVORElORyBSZW5kZXJlciBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsIHx8IHJlbmRlcmVyO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShfZ2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZShfZ2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIuZ2wpO1xuXG4gICAgICAgIHRoaXMuX2RlcHRoTWF0ZXJpYWxzID0ge307XG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlTWF0ZXJpYWxzID0ge307XG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XG4gICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcyA9IHt9O1xuICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXIgPSB7XG4gICAgICAgICAgICAnUE9JTlRfTElHSFQnOiAwLFxuICAgICAgICAgICAgJ0RJUkVDVElPTkFMX0xJR0hUJzogMCxcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzID0ge307XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xuICAgICAgICAgICAgLy8gTWVzaCBtYXkgYmUgZGlzcG9zZWRcbiAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsICYmIG1lc2gubWF0ZXJpYWwuc2hhZGVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcbiAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xuICAgICAgICAgICAgICAgIHNoYWRlci51bmRlZmluZSgnZnJhZ21lbnQnLCAnUE9JTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XG4gICAgICAgICAgICAgICAgc2hhZGVyLnVuZGVmaW5lKCdmcmFnbWVudCcsICdESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcbiAgICAgICAgICAgICAgICBzaGFkZXIudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FNQklFTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcGFxdWVDYXN0ZXJzID0gW107XG4gICAgICAgIHRoaXMuX3JlY2VpdmVycyA9IFtdO1xuICAgICAgICB0aGlzLl9saWdodHNDYXN0U2hhZG93ID0gW107XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblNoYWRvd01hcFBhc3MuVlNNID0gMTtcblxuLyoqXG4gKiBAbmFtZSBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuU2hhZG93TWFwUGFzcy5QQ0YgPSAyO1xuXG5leHBvcnQgZGVmYXVsdCBTaGFkb3dNYXBQYXNzO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi4vUmVuZGVyYWJsZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcbmltcG9ydCBnbG1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xuXG52YXIgdmVjMyA9IGdsbWF0cml4LnZlYzM7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgUmF5UGlja2luZyA9IEJhc2UuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5LnBpY2tpbmcuUmF5UGlja2luZyMgKi9cbntcbiAgICAvKipcbiAgICAgKiBUYXJnZXQgc2NlbmVcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgKi9cbiAgICBzY2VuZTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBUYXJnZXQgY2FtZXJhXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxuICAgICAqL1xuICAgIGNhbWVyYTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBUYXJnZXQgcmVuZGVyZXJcbiAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cbiAgICAgKi9cbiAgICByZW5kZXJlcjogbnVsbFxufSwgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3JheSA9IG5ldyBSYXkoKTtcbiAgICB0aGlzLl9uZGMgPSBuZXcgVmVjdG9yMigpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcucHJvdG90eXBlICovXG57XG5cbiAgICAvKipcbiAgICAgKiBQaWNrIHRoZSBuZWFyZXN0IGludGVyc2VjdGlvbiBvYmplY3QgaW4gdGhlIHNjZW5lXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB4IE1vdXNlIHBvc2l0aW9uIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXG4gICAgICogQHJldHVybiB7Y2xheS5waWNraW5nLlJheVBpY2tpbmd+SW50ZXJzZWN0aW9ufVxuICAgICAqL1xuICAgIHBpY2s6IGZ1bmN0aW9uICh4LCB5LCBmb3JjZVBpY2tBbGwpIHtcbiAgICAgICAgdmFyIG91dCA9IHRoaXMucGlja0FsbCh4LCB5LCBbXSwgZm9yY2VQaWNrQWxsKTtcbiAgICAgICAgcmV0dXJuIG91dFswXSB8fCBudWxsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQaWNrIGFsbCBpbnRlcnNlY3Rpb24gb2JqZWN0cywgd2ljaCB3aWxsIGJlIHNvcnRlZCBmcm9tIG5lYXIgdG8gZmFyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB4IE1vdXNlIHBvc2l0aW9uIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxuICAgICAqIEBwYXJhbSAge0FycmF5fSBbb3V0cHV0XVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXG4gICAgICogQHJldHVybiB7QXJyYXkuPGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbj59XG4gICAgICovXG4gICAgcGlja0FsbDogZnVuY3Rpb24gKHgsIHksIG91dHB1dCwgZm9yY2VQaWNrQWxsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9OREMoeCwgeSwgdGhpcy5fbmRjKTtcbiAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheSh0aGlzLl9uZGMsIHRoaXMuX3JheSk7XG5cbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xuXG4gICAgICAgIHRoaXMuX2ludGVyc2VjdE5vZGUodGhpcy5zY2VuZSwgb3V0cHV0LCBmb3JjZVBpY2tBbGwgfHwgZmFsc2UpO1xuXG4gICAgICAgIG91dHB1dC5zb3J0KHRoaXMuX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jKTtcblxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH0sXG5cbiAgICBfaW50ZXJzZWN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIG91dCwgZm9yY2VQaWNrQWxsKSB7XG4gICAgICAgIGlmICgobm9kZSBpbnN0YW5jZW9mIFJlbmRlcmFibGUpICYmIG5vZGUuaXNSZW5kZXJhYmxlKCkpIHtcbiAgICAgICAgICAgIGlmICgoIW5vZGUuaWdub3JlUGlja2luZyB8fCBmb3JjZVBpY2tBbGwpXG4gICAgICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHRyaWFuZ2xlIG1lc2ggc3VwcG9ydCByYXkgcGlja2luZ1xuICAgICAgICAgICAgICAgICAgICAobm9kZS5tb2RlID09PSBnbGVudW0uVFJJQU5HTEVTICYmIG5vZGUuZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCkpXG4gICAgICAgICAgICAgICAgICAgIC8vIE9yIGlmIGdlb21ldHJ5IGhhcyBpdCdzIG93biBwaWNrQnlSYXksIHBpY2ssIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja0J5UmF5XG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ludGVyc2VjdFJlbmRlcmFibGUobm9kZSwgb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKG5vZGUuX2NoaWxkcmVuW2ldLCBvdXQsIGZvcmNlUGlja0FsbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2ludGVyc2VjdFJlbmRlcmFibGU6IChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHYzID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcbiAgICAgICAgdmFyIHdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBvdXQpIHtcblxuICAgICAgICAgICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcbiAgICAgICAgICAgIHJheS5jb3B5KHRoaXMuX3JheSk7XG4gICAgICAgICAgICBNYXRyaXg0LmludmVydCh3b3JsZEludmVyc2UsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCBpZ25vcmUgdGhlIHdvcmxkIHRyYW5zZm9ybS5cbiAgICAgICAgICAgIGlmICghaXNTa2lubmVkTWVzaCkge1xuICAgICAgICAgICAgICAgIHJheS5hcHBseVRyYW5zZm9ybSh3b3JsZEludmVyc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuICAgICAgICAgICAgLy8gSWdub3JlIGJvdW5kaW5nIGJveCBvZiBza2lubmVkIG1lc2g/XG4gICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyYXkuaW50ZXJzZWN0Qm91bmRpbmdCb3goZ2VvbWV0cnkuYm91bmRpbmdCb3gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHBpY2tpbmcgYWxnb3JpdGhtXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkucGljaykge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2soXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25kYy54LCB0aGlzLl9uZGMueSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG91dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdlb21ldHJ5LnBpY2tCeVJheSkge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2tCeVJheShyYXksIHJlbmRlcmFibGUsIG91dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VsbEJhY2sgPSAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkJBQ0sgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DQ1cpXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkZST05UICYmIHJlbmRlcmFibGUuZnJvbnRGYWNlID09PSBnbGVudW0uQ1cpO1xuXG4gICAgICAgICAgICB2YXIgcG9pbnQ7XG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGljZXM7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcbiAgICAgICAgICAgIHZhciB3ZWlnaHRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy53ZWlnaHQ7XG4gICAgICAgICAgICB2YXIgam9pbnRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludDtcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheTtcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXMgPSBbXTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHZhbGlkLlxuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbkF0dHIgfHwgIXBvc2l0aW9uQXR0ci52YWx1ZSB8fCAhaW5kaWNlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XG4gICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzQXJyYXkgPSByZW5kZXJhYmxlLnNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIHJlbmRlcmFibGUuam9pbnRzKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXSA9IHNraW5NYXRyaWNlc1tpXSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAxNjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2luTWF0cmljZXNbaV1ba10gPSBza2luTWF0cmljZXNBcnJheVtpICogMTYgKyBrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHdlaWdodCA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XG4gICAgICAgICAgICAgICAgaWYgKCFza2lubmVkUG9zaXRpb25BdHRyIHx8ICFza2lubmVkUG9zaXRpb25BdHRyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNyZWF0ZUF0dHJpYnV0ZSgnc2tpbm5lZFBvc2l0aW9uJywgJ2YnLCAzKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLmluaXQoZ2VvbWV0cnkudmVydGV4Q291bnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLmdldChpLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBdHRyLmdldChpLCB3ZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBqb2ludEF0dHIuZ2V0KGksIGpvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0WzNdID0gMSAtIHdlaWdodFswXSAtIHdlaWdodFsxXSAtIHdlaWdodFsyXTtcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zZXQoc2tpbm5lZFBvcywgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoam9pbnRba10gPj0gMCAmJiB3ZWlnaHRba10gPiAxZS00KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRtcCwgcG9zLCBza2luTWF0cmljZXNbam9pbnRba11dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNraW5uZWRQb3MsIHNraW5uZWRQb3MsIHRtcCwgd2VpZ2h0W2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLnNldChpLCBza2lubmVkUG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMV07XG4gICAgICAgICAgICAgICAgdmFyIGkzID0gaW5kaWNlc1tpICsgMl07XG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsUG9zQXR0ciA9IGlzU2tpbm5lZE1lc2hcbiAgICAgICAgICAgICAgICAgICAgPyBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHBvc2l0aW9uQXR0cjtcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkxLCB2MS5hcnJheSk7XG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMiwgdjIuYXJyYXkpO1xuICAgICAgICAgICAgICAgIGZpbmFsUG9zQXR0ci5nZXQoaTMsIHYzLmFycmF5KTtcblxuICAgICAgICAgICAgICAgIGlmIChjdWxsQmFjaykge1xuICAgICAgICAgICAgICAgICAgICBwb2ludCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSh2MSwgdjIsIHYzLCByZW5kZXJhYmxlLmN1bGxpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUodjEsIHYzLCB2MiwgcmVuZGVyYWJsZS5jdWxsaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwb2ludFcgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NChwb2ludFcsIHBvaW50LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gcG9pbnQgbWF5YmUgbm90IHJpZ2h0LlxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy5jb3B5KHBvaW50VywgcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBSYXlQaWNraW5nLkludGVyc2VjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LCBwb2ludFcsIHJlbmRlcmFibGUsIFtpMSwgaTIsIGkzXSwgaSAvIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmRpc3QocG9pbnRXLCB0aGlzLl9yYXkub3JpZ2luKVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIF9pbnRlcnNlY3Rpb25Db21wYXJlRnVuYzogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb25cbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IHBvaW50XG4gKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBwb2ludFdvcmxkXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gdGFyZ2V0XG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB0cmlhbmdsZVxuICogQHBhcmFtIHtudW1iZXJ9IHRyaWFuZ2xlSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICovXG5SYXlQaWNraW5nLkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChwb2ludCwgcG9pbnRXb3JsZCwgdGFyZ2V0LCB0cmlhbmdsZSwgdHJpYW5nbGVJbmRleCwgZGlzdGFuY2UpIHtcbiAgICAvKipcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gbG9jYWwgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnQgPSBwb2ludDtcbiAgICAvKipcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gd29ybGQgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRXb3JsZCA9IHBvaW50V29ybGQ7XG4gICAgLyoqXG4gICAgICogSW50ZXJzZWN0aW9uIHNjZW5lIG5vZGVcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIC8qKlxuICAgICAqIEludGVyc2VjdGlvbiB0cmlhbmdsZSwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgdmVydGV4IGluZGV4XG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxuICAgICAqL1xuICAgIHRoaXMudHJpYW5nbGUgPSB0cmlhbmdsZTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiBpbnRlcnNlY3Rpb24gdHJpYW5nbGUuXG4gICAgICovXG4gICAgdGhpcy50cmlhbmdsZUluZGV4ID0gdHJpYW5nbGVJbmRleDtcbiAgICAvKipcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGludGVyc2VjdGlvbiBwb2ludCB0byByYXkgb3JpZ2luXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSYXlQaWNraW5nO1xuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xudmFyIHZlYzIgPSBnbE1hdHJpeC52ZWMyO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkNvbmVcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQudG9wUmFkaXVzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuYm90dG9tUmFkaXVzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuY2FwU2VnbWVudHNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cbiAqL1xudmFyIENvbmUgPSBHZW9tZXRyeS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZSMgKi9cbntcbiAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRvcFJhZGl1czogMCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgYm90dG9tUmFkaXVzOiAxLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBoZWlnaHQ6IDIsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGNhcFNlZ21lbnRzOiAyMCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYnVpbGQoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBCdWlsZCBjb25lIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcbiAgICAgICAgdmFyIGZhY2VzID0gW107XG4gICAgICAgIHBvc2l0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICB0ZXhjb29yZHMubGVuZ3RoID0gMDtcbiAgICAgICAgZmFjZXMubGVuZ3RoID0gMDtcbiAgICAgICAgLy8gVG9wIGNhcFxuICAgICAgICB2YXIgY2FwU2VnUmFkaWFsID0gTWF0aC5QSSAqIDIgLyB0aGlzLmNhcFNlZ21lbnRzO1xuXG4gICAgICAgIHZhciB0b3BDYXAgPSBbXTtcbiAgICAgICAgdmFyIGJvdHRvbUNhcCA9IFtdO1xuXG4gICAgICAgIHZhciByMSA9IHRoaXMudG9wUmFkaXVzO1xuICAgICAgICB2YXIgcjIgPSB0aGlzLmJvdHRvbVJhZGl1cztcbiAgICAgICAgdmFyIHkgPSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICAgICAgdmFyIGMxID0gdmVjMy5mcm9tVmFsdWVzKDAsIHksIDApO1xuICAgICAgICB2YXIgYzIgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgLXksIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FwU2VnbWVudHM7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRoZXRhID0gaSAqIGNhcFNlZ1JhZGlhbDtcbiAgICAgICAgICAgIHZhciB4ID0gcjEgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgICAgICAgICB2YXIgeiA9IHIxICogTWF0aC5jb3ModGhldGEpO1xuICAgICAgICAgICAgdG9wQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIHksIHopKTtcblxuICAgICAgICAgICAgeCA9IHIyICogTWF0aC5zaW4odGhldGEpO1xuICAgICAgICAgICAgeiA9IHIyICogTWF0aC5jb3ModGhldGEpO1xuICAgICAgICAgICAgYm90dG9tQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIC15LCB6KSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCdWlsZCB0b3AgY2FwXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMxKTtcbiAgICAgICAgLy8gRklYTUVcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNhcFNlZ21lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godG9wQ2FwW2ldKTtcbiAgICAgICAgICAgIC8vIEZJWE1FXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcbiAgICAgICAgICAgIGZhY2VzLnB1c2goWzAsIGkrMSwgKGkrMSkgJSBuICsgMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnVpbGQgYm90dG9tIGNhcFxuICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYzIpO1xuICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoMCwgMSkpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goYm90dG9tQ2FwW2ldKTtcbiAgICAgICAgICAgIC8vIEZJWE1FXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcbiAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCwgb2Zmc2V0KygoaSsxKSAlIG4gKyAxKSwgb2Zmc2V0K2krMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnVpbGQgc2lkZVxuICAgICAgICBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xuICAgICAgICB2YXIgbjIgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMisxOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyBuMjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh2ZWMzLmxlcnAodmVjMy5jcmVhdGUoKSwgdG9wQ2FwW2ldLCBib3R0b21DYXBbaV0sIHYpKTtcbiAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIHYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGkxID0gaSAqIChuMiArIDEpICsgajtcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKGkgKyAxKSAlIG4pICogKG4yICsgMSkgKyBqO1xuICAgICAgICAgICAgICAgIHZhciBpMyA9ICgoaSArIDEpICUgbikgKiAobjIgKyAxKSArIGogKyAxO1xuICAgICAgICAgICAgICAgIHZhciBpNCA9IGkgKiAobjIgKyAxKSArIGogKyAxO1xuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpMiwgb2Zmc2V0K2kxLCBvZmZzZXQraTRdKTtcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTQsIG9mZnNldCtpMywgb2Zmc2V0K2kyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uZnJvbUFycmF5KHBvc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XG5cbiAgICAgICAgdGhpcy5pbml0SW5kaWNlc0Zyb21BcnJheShmYWNlcyk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcblxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciByID0gTWF0aC5tYXgodGhpcy50b3BSYWRpdXMsIHRoaXMuYm90dG9tUmFkaXVzKTtcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC1yLCAtdGhpcy5oZWlnaHQvMiwgLXIpO1xuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQociwgdGhpcy5oZWlnaHQvMiwgcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmU7XG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IENvbmVHZW9tZXRyeSBmcm9tICcuL0NvbmUnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnJhZGl1c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmNhcFNlZ21lbnRzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXG4gKi9cbnZhciBDeWxpbmRlciA9IEdlb21ldHJ5LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DeWxpbmRlciMgKi9cbntcbiAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhZGl1czogMSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgaGVpZ2h0OiAyLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBjYXBTZWdtZW50czogNTAsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGhlaWdodFNlZ21lbnRzOiAxXG59LCBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmJ1aWxkKCk7XG59LFxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyLnByb3RvdHlwZSAqL1xue1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGN5bGluZGVyIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY29uZSA9IG5ldyBDb25lR2VvbWV0cnkoe1xuICAgICAgICAgICAgdG9wUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgICAgIGJvdHRvbVJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgICAgICBjYXBTZWdtZW50czogdGhpcy5jYXBTZWdtZW50cyxcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiB0aGlzLmhlaWdodFNlZ21lbnRzLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gY29uZS5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZTtcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gY29uZS5pbmRpY2VzO1xuXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBjb25lLmJvdW5kaW5nQm94O1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDeWxpbmRlcjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0O1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxudmFyeWluZyB2ZWMzIHZfVGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9CaXRhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiAgICB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuICAgIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4gICAgYm9vbCBoYXNUYW5nZW50ID0gZG90KHRhbmdlbnQsIHRhbmdlbnQpID4gMC4wO1xcbiNlbmRpZlxcbiNpZmRlZiBTS0lOTklOR1xcbiAgICBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gICAgc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gICAgI2lmZGVmIEZJUlNUX1BBU1NcXG4gICAgc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiAgICBpZiAoaGFzVGFuZ2VudCkge1xcbiAgICAgICAgc2tpbm5lZFRhbmdlbnQgPSAoc2tpbk1hdHJpeFdTICogdmVjNCh0YW5nZW50Lnh5eiwgMC4wKSkueHl6O1xcbiAgICB9XFxuICAgICNlbmRpZlxcbiNlbmRpZlxcbiAgICBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gICAgdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiAgICB2X05vcm1hbCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApKS54eXopO1xcbiAgICBpZiAoaGFzVGFuZ2VudCkge1xcbiAgICAgICAgdl9UYW5nZW50ID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWRUYW5nZW50LCAwLjApKS54eXopO1xcbiAgICAgICAgdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiAgICB9XFxuICAgIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnRcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdobmVzcztcXG51bmlmb3JtIGJvb2wgZG91YmxlU2lkZWQ7XFxudW5pZm9ybSBpbnQgcm91Z2hHbG9zc0NoYW5uZWw6IDA7XFxuZmxvYXQgaW5kZXhpbmdUZXhlbChpbiB2ZWM0IHRleGVsLCBpbiBpbnQgaWR4KSB7XFxuICAgIGlmIChpZHggPT0gMykgcmV0dXJuIHRleGVsLmE7XFxuICAgIGVsc2UgaWYgKGlkeCA9PSAxKSByZXR1cm4gdGV4ZWwuZztcXG4gICAgZWxzZSBpZiAoaWR4ID09IDIpIHJldHVybiB0ZXhlbC5iO1xcbiAgICBlbHNlIHJldHVybiB0ZXhlbC5yO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBOID0gdl9Ob3JtYWw7XFxuICAgIGlmIChkb3VibGVTaWRlZCkge1xcbiAgICAgICAgdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuICAgICAgICB2ZWMzIFYgPSBleWVQb3MgLSB2X1dvcmxkUG9zaXRpb247XFxuICAgICAgICBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuICAgICAgICAgICAgTiA9IC1OO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmIChkb3Qodl9UYW5nZW50LCB2X1RhbmdlbnQpID4gMC4wKSB7XFxuICAgICAgICB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdl9UZXhjb29yZCkueHl6O1xcbiAgICAgICAgaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7ICAgICAgICAgICAgTiA9IG5vcm1hbFRleGVsICogMi4wIC0gMS4wO1xcbiAgICAgICAgICAgIG1hdDMgdGJuID0gbWF0Myh2X1RhbmdlbnQsIHZfQml0YW5nZW50LCB2X05vcm1hbCk7XFxuICAgICAgICAgICAgTiA9IG5vcm1hbGl6ZSh0Ym4gKiBOKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gKE4gKyAxLjApICogMC41O1xcbiAgICBmbG9hdCBnID0gZ2xvc3NpbmVzcztcXG4gICAgaWYgKHVzZVJvdWdoR2xvc3NNYXApIHtcXG4gICAgICAgIGZsb2F0IGcyID0gaW5kZXhpbmdUZXhlbCh0ZXh0dXJlMkQocm91Z2hHbG9zc01hcCwgdl9UZXhjb29yZCksIHJvdWdoR2xvc3NDaGFubmVsKTtcXG4gICAgICAgIGlmICh1c2VSb3VnaG5lc3MpIHtcXG4gICAgICAgICAgICBnMiA9IDEuMCAtIGcyO1xcbiAgICAgICAgfVxcbiAgICAgICAgZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICAgIH1cXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSBnICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XFxudW5pZm9ybSBib29sIHVzZU1ldGFsbmVzc01hcDtcXG51bmlmb3JtIGJvb2wgbGluZWFyO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52b2lkIG1haW4gKClcXG57XFxuICAgIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICAgIGlmICh1c2VNZXRhbG5lc3NNYXApIHtcXG4gICAgICAgIHZlYzQgbWV0YWxuZXNzVGV4ZWwgPSB0ZXh0dXJlMkQobWV0YWxuZXNzTWFwLCB2X1RleGNvb3JkKTtcXG4gICAgICAgIG0gPSBjbGFtcChtZXRhbG5lc3NUZXhlbC5yICsgKG0gKiAyLjAgLSAxLjApLCAwLjAsIDEuMCk7XFxuICAgIH1cXG4gICAgdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKTtcXG4gICAgaWYgKGxpbmVhcikge1xcbiAgICAgICAgdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiAgICB9XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2IgKiBjb2xvcjtcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSBtICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1Z1xcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSBpbnQgZGVidWc6IDA7XFxudm9pZCBtYWluICgpXFxue1xcbiAgICBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuICAgIGlmIChkZWJ1ZyA9PSAwKSB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KE4sIDEuMCk7XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoZGVidWcgPT0gMSkge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKHopLCAxLjApO1xcbiAgICB9XFxuICAgIGVsc2UgaWYgKGRlYnVnID09IDIpIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoZGVidWcgPT0gMykge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGdsb3NzaW5lc3MpLCAxLjApO1xcbiAgICB9XFxuICAgIGVsc2UgaWYgKGRlYnVnID09IDQpIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhtZXRhbG5lc3MpLCAxLjApO1xcbiAgICB9XFxuICAgIGVsc2Uge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChhbGJlZG8sIDEuMCk7XFxuICAgIH1cXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTI7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ6IFZJRVdQT1JUO1xcbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbkludjtcXG4jaWZkZWYgREVQVEhfRU5DT0RFRFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiAgICB2ZWMyIHV2MiA9IChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dztcXG4gICAgdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuICAgIHZlYzQgdGV4ZWwzID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpO1xcbiAgICBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuICAgICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIGZsb2F0IGdsb3NzaW5lc3MgPSB0ZXhlbDEuYTtcXG4gICAgZmxvYXQgbWV0YWxuZXNzID0gdGV4ZWwzLmE7XFxuICAgIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuICAgIGZsb2F0IHogPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUyLCB1dikuciAqIDIuMCAtIDEuMDtcXG4gICAgdmVjMiB4eSA9IHV2MiAqIDIuMCAtIDEuMDtcXG4gICAgdmVjNCBwcm9qZWN0ZWRQb3MgPSB2ZWM0KHh5LCB6LCAxLjApO1xcbiAgICB2ZWM0IHA0ID0gdmlld1Byb2plY3Rpb25JbnYgKiBwcm9qZWN0ZWRQb3M7XFxuICAgIHZlYzMgcG9zaXRpb24gPSBwNC54eXogLyBwNC53O1xcbiAgICB2ZWMzIGFsYmVkbyA9IHRleGVsMy5yZ2I7XFxuICAgIHZlYzMgZGlmZnVzZUNvbG9yID0gYWxiZWRvICogKDEuMCAtIG1ldGFsbmVzcyk7XFxuICAgIHZlYzMgc3BlY3VsYXJDb2xvciA9IG1peCh2ZWMzKDAuMDQpLCBhbGJlZG8sIG1ldGFsbmVzcyk7XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbmZsb2F0IERfUGhvbmcoaW4gZmxvYXQgZywgaW4gZmxvYXQgbmRoKSB7XFxuICAgIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gICAgcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gICAgZmxvYXQgciA9IDEuMCAtIGc7XFxuICAgIGZsb2F0IGEgPSByICogcjtcXG4gICAgZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiAgICByZXR1cm4gYSAvICgzLjE0MTU5MjYgKiB0bXAgKiB0bXApO1xcbn1cXG52ZWMzIEZfU2NobGljayhpbiBmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiAgICByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbnZlYzMgbGlnaHRFcXVhdGlvbihcXG4gICAgaW4gdmVjMyBsaWdodENvbG9yLCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwgaW4gdmVjMyBzcGVjdWxhckNvbG9yLFxcbiAgICBpbiBmbG9hdCBuZGwsIGluIGZsb2F0IG5kaCwgaW4gZmxvYXQgbmR2LCBpbiBmbG9hdCBnXFxuKVxcbntcXG4gICAgcmV0dXJuIG5kbCAqIGxpZ2h0Q29sb3JcXG4gICAgICAgICogKGRpZmZ1c2VDb2xvciArIERfUGhvbmcoZywgbmRoKSAqIEZfU2NobGljayhuZHYsIHNwZWN1bGFyQ29sb3IpKTtcXG59XFxuQGVuZFwiO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgRm9yd2FyZFJlbmRlcmVyIGZyb20gJy4uL1JlbmRlcmVyJztcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuXG5pbXBvcnQgZ2J1ZmZlckVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9nYnVmZmVyLmdsc2wuanMnO1xuaW1wb3J0IGNodW5rRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2NodW5rLmdsc2wuanMnO1xuXG5TaGFkZXIuaW1wb3J0KGdidWZmZXJFc3NsKTtcblNoYWRlci5pbXBvcnQoY2h1bmtFc3NsKTtcblxuZnVuY3Rpb24gY3JlYXRlRmlsbENhbnZhcyhjb2xvcikge1xuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMTtcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yIHx8ICcjMDAwJztcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XG5cbiAgICByZXR1cm4gY2FudmFzO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hUZXh0dXJlVG9TbG90KHJlbmRlcmVyLCBwcm9ncmFtLCBzeW1ib2wsIHRleHR1cmUsIHNsb3QpIHtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcbiAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxaScsIHN5bWJvbCwgc2xvdCk7XG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgc2xvdCk7XG4gICAgLy8gTWF5YmUgdGV4dHVyZSBpcyBub3QgbG9hZGVkIHlldDtcbiAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcbiAgICAgICAgdGV4dHVyZS51bmJpbmQocmVuZGVyZXIpO1xuICAgIH1cbn1cblxuLy8gVE9ETyBVc2UgZ2xvYmFsU2hhZGVyIGluc3RlYWRvZiBnbG9iYWxNYXRlcmlhbD9cbmZ1bmN0aW9uIGdldEJlZm9yZVJlbmRlckhvb2sxIChnbCwgZGVmYXVsdE5vcm1hbE1hcCwgZGVmYXVsdFJvdWdobmVzc01hcCkge1xuXG4gICAgdmFyIHByZXZpb3VzTm9ybWFsTWFwO1xuICAgIHZhciBwcmV2aW91c1JvdWdHbG9zc01hcDtcbiAgICB2YXIgcHJldmlvdXNSZW5kZXJhYmxlO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBwcmV2TWF0ZXJpYWwpIHtcbiAgICAgICAgLy8gTWF0ZXJpYWwgbm90IGNoYW5nZVxuICAgICAgICBpZiAocHJldmlvdXNSZW5kZXJhYmxlICYmIHByZXZpb3VzUmVuZGVyYWJsZS5tYXRlcmlhbCA9PT0gcmVuZGVyYWJsZS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xuICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmFibGUuX19wcm9ncmFtO1xuXG4gICAgICAgIHZhciBnbG9zc2luZXNzO1xuICAgICAgICB2YXIgcm91Z2hHbG9zc01hcDtcbiAgICAgICAgdmFyIHVzZVJvdWdobmVzc1dvcmtmbG93ID0gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcbiAgICAgICAgdmFyIGRvdWJsZVNpZGVkID0gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xuICAgICAgICB2YXIgcm91Z2hHbG9zc0NoYW5uZWw7XG4gICAgICAgIGlmICh1c2VSb3VnaG5lc3NXb3JrZmxvdykge1xuICAgICAgICAgICAgZ2xvc3NpbmVzcyA9IDEuMCAtIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdyb3VnaG5lc3MnKTtcbiAgICAgICAgICAgIHJvdWdoR2xvc3NNYXAgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzTWFwJyk7XG4gICAgICAgICAgICByb3VnaEdsb3NzQ2hhbm5lbCA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0RGVmaW5lKCdmcmFnbWVudCcsICdST1VHSE5FU1NfQ0hBTk5FTCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvc3NpbmVzcyA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdnbG9zc2luZXNzJyk7XG4gICAgICAgICAgICByb3VnaEdsb3NzTWFwID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3NNYXAnKTtcbiAgICAgICAgICAgIHJvdWdoR2xvc3NDaGFubmVsID0gc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ0dMT1NTSU5FU1NfQ0hBTk5FTCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VSb3VnaEdsb3NzTWFwID0gISFyb3VnaEdsb3NzTWFwO1xuXG4gICAgICAgIHZhciBub3JtYWxNYXAgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgnbm9ybWFsTWFwJykgfHwgZGVmYXVsdE5vcm1hbE1hcDtcbiAgICAgICAgdmFyIHV2UmVwZWF0ID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XG4gICAgICAgIHZhciB1dk9mZnNldCA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCd1dk9mZnNldCcpO1xuXG4gICAgICAgIHJvdWdoR2xvc3NNYXAgPSByb3VnaEdsb3NzTWFwIHx8IGRlZmF1bHRSb3VnaG5lc3NNYXA7XG5cbiAgICAgICAgaWYgKHByZXZNYXRlcmlhbCAhPT0gZ0J1ZmZlck1hdCkge1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCdub3JtYWxNYXAnLCBub3JtYWxNYXApO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3JvdWdoR2xvc3NNYXAnLCByb3VnaEdsb3NzTWFwKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1c2VSb3VnaEdsb3NzTWFwJywgK3VzZVJvdWdoR2xvc3NNYXApO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3VzZVJvdWdobmVzcycsICt1c2VSb3VnaG5lc3NXb3JrZmxvdyk7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnZG91YmxlU2lkZWQnLCArZG91YmxlU2lkZWQpO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3JvdWdoR2xvc3NDaGFubmVsJywgK3JvdWdoR2xvc3NDaGFubmVsIHx8IDApO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3V2UmVwZWF0JywgdXZSZXBlYXQpO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3V2T2Zmc2V0JywgdXZPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKFxuICAgICAgICAgICAgICAgIGdsLCAnMWYnLCAnZ2xvc3NpbmVzcycsIGdsb3NzaW5lc3NcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c05vcm1hbE1hcCAhPT0gbm9ybWFsTWFwKSB7XG4gICAgICAgICAgICAgICAgYXR0YWNoVGV4dHVyZVRvU2xvdCh0aGlzLCBwcm9ncmFtLCAnbm9ybWFsTWFwJywgbm9ybWFsTWFwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1JvdWdHbG9zc01hcCAhPT0gcm91Z2hHbG9zc01hcCkge1xuICAgICAgICAgICAgICAgIGF0dGFjaFRleHR1cmVUb1Nsb3QodGhpcywgcHJvZ3JhbSwgJ3JvdWdoR2xvc3NNYXAnLCByb3VnaEdsb3NzTWFwLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzFpJywgJ3VzZVJvdWdoR2xvc3NNYXAnLCArdXNlUm91Z2hHbG9zc01hcCk7XG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxaScsICd1c2VSb3VnaG5lc3MnLCArdXNlUm91Z2huZXNzV29ya2Zsb3cpO1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKGdsLCAnMWknLCAnZG91YmxlU2lkZWQnLCArZG91YmxlU2lkZWQpO1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKGdsLCAnMWknLCAncm91Z2hHbG9zc0NoYW5uZWwnLCArcm91Z2hHbG9zc0NoYW5uZWwgfHwgMCk7XG4gICAgICAgICAgICBpZiAodXZSZXBlYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzJmJywgJ3V2UmVwZWF0JywgdXZSZXBlYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHV2T2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcyZicsICd1dk9mZnNldCcsIHV2T2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTm9ybWFsTWFwID0gbm9ybWFsTWFwO1xuICAgICAgICBwcmV2aW91c1JvdWdHbG9zc01hcCA9IHJvdWdoR2xvc3NNYXA7XG5cbiAgICAgICAgcHJldmlvdXNSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCZWZvcmVSZW5kZXJIb29rMihnbCwgZGVmYXVsdERpZmZ1c2VNYXAsIGRlZmF1bHRNZXRhbG5lc3NNYXApIHtcbiAgICB2YXIgcHJldmlvdXNEaWZmdXNlTWFwO1xuICAgIHZhciBwcmV2aW91c1JlbmRlcmFibGU7XG4gICAgdmFyIHByZXZpb3VzTWV0YWxuZXNzTWFwO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBwcmV2TWF0ZXJpYWwpIHtcbiAgICAgICAgLy8gTWF0ZXJpYWwgbm90IGNoYW5nZVxuICAgICAgICBpZiAocHJldmlvdXNSZW5kZXJhYmxlICYmIHByZXZpb3VzUmVuZGVyYWJsZS5tYXRlcmlhbCA9PT0gcmVuZGVyYWJsZS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJhYmxlLl9fcHJvZ3JhbTtcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xuXG4gICAgICAgIHZhciBjb2xvciA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdjb2xvcicpO1xuICAgICAgICB2YXIgbWV0YWxuZXNzID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ21ldGFsbmVzcycpO1xuXG4gICAgICAgIHZhciBkaWZmdXNlTWFwID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcbiAgICAgICAgdmFyIG1ldGFsbmVzc01hcCA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3NNYXAnKTtcblxuICAgICAgICB2YXIgdXZSZXBlYXQgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcbiAgICAgICAgdmFyIHV2T2Zmc2V0ID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XG5cbiAgICAgICAgdmFyIHVzZU1ldGFsbmVzc01hcCA9ICEhbWV0YWxuZXNzTWFwO1xuXG4gICAgICAgIGRpZmZ1c2VNYXAgPSBkaWZmdXNlTWFwIHx8IGRlZmF1bHREaWZmdXNlTWFwO1xuICAgICAgICBtZXRhbG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgfHwgZGVmYXVsdE1ldGFsbmVzc01hcDtcblxuICAgICAgICBpZiAocHJldk1hdGVyaWFsICE9PSBnQnVmZmVyTWF0KSB7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnY29sb3InLCBjb2xvcik7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnbWV0YWxuZXNzJywgbWV0YWxuZXNzKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCk7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnbWV0YWxuZXNzTWFwJywgbWV0YWxuZXNzTWFwKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1c2VNZXRhbG5lc3NNYXAnLCArdXNlTWV0YWxuZXNzTWFwKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1dlJlcGVhdCcsIHV2UmVwZWF0KTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1dk9mZnNldCcsIHV2T2Zmc2V0KTtcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCdsaW5lYXInLCArc3RhbmRhcmRNYXRlcmlhbC5saW5lYXIgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxZicsICdtZXRhbG5lc3MnLCBtZXRhbG5lc3MpO1xuXG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICczZicsICdjb2xvcicsIGNvbG9yKTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0RpZmZ1c2VNYXAgIT09IGRpZmZ1c2VNYXApIHtcbiAgICAgICAgICAgICAgICBhdHRhY2hUZXh0dXJlVG9TbG90KHRoaXMsIHByb2dyYW0sICdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlvdXNNZXRhbG5lc3NNYXAgIT09IG1ldGFsbmVzc01hcCkge1xuICAgICAgICAgICAgICAgIGF0dGFjaFRleHR1cmVUb1Nsb3QodGhpcywgcHJvZ3JhbSwgJ21ldGFsbmVzc01hcCcsIG1ldGFsbmVzc01hcCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxaScsICd1c2VNZXRhbG5lc3NNYXAnLCArdXNlTWV0YWxuZXNzTWFwKTtcbiAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzJmJywgJ3V2UmVwZWF0JywgdXZSZXBlYXQpO1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKGdsLCAnMmYnLCAndXZPZmZzZXQnLCB1dk9mZnNldCk7XG5cbiAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzFpJywgJ2xpbmVhcicsICtzdGFuZGFyZE1hdGVyaWFsLmxpbmVhciB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzRGlmZnVzZU1hcCA9IGRpZmZ1c2VNYXA7XG4gICAgICAgIHByZXZpb3VzTWV0YWxuZXNzTWFwID0gbWV0YWxuZXNzTWFwO1xuXG4gICAgICAgIHByZXZpb3VzUmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBHQnVmZmVyIGlzIHByb3ZpZGVkIGZvciBkZWZlcnJlZCByZW5kZXJpbmcgYW5kIFNTQU8sIFNTUiBwYXNzLlxuICogSXQgd2lsbCBkbyB0d28gcGFzc2VzIHJlbmRlcmluZyB0byB0aHJlZSB0YXJnZXQgdGV4dHVyZXMuIFNlZVxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUxfVxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUyfVxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUzfVxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5HQnVmZmVyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgR0J1ZmZlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcblxuICAgIHJldHVybiB7XG5cbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTE6IHRydWUsXG5cbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTI6IHRydWUsXG5cbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTM6IHRydWUsXG5cbiAgICAgICAgcmVuZGVyVHJhbnNwYXJlbnQ6IGZhbHNlLFxuXG4gICAgICAgIF9yZW5kZXJMaXN0OiBbXSxcbiAgICAgICAgLy8gLSBSOiBub3JtYWwueFxuICAgICAgICAvLyAtIEc6IG5vcm1hbC55XG4gICAgICAgIC8vIC0gQjogbm9ybWFsLnpcbiAgICAgICAgLy8gLSBBOiBnbG9zc2luZXNzXG4gICAgICAgIF9nQnVmZmVyVGV4MTogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxuICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FUXG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIC0gUjogZGVwdGhcbiAgICAgICAgX2dCdWZmZXJUZXgyOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXG4gICAgICAgICAgICAvLyBmb3JtYXQ6IFRleHR1cmUuREVQVEhfQ09NUE9ORU5ULFxuICAgICAgICAgICAgLy8gdHlwZTogVGV4dHVyZS5VTlNJR05FRF9JTlRcblxuICAgICAgICAgICAgZm9ybWF0OiBUZXh0dXJlLkRFUFRIX1NURU5DSUwsXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMXG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIC0gUjogYWxiZWRvLnJcbiAgICAgICAgLy8gLSBHOiBhbGJlZG8uZ1xuICAgICAgICAvLyAtIEI6IGFsYmVkby5iXG4gICAgICAgIC8vIC0gQTogbWV0YWxuZXNzXG4gICAgICAgIF9nQnVmZmVyVGV4MzogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNUXG4gICAgICAgIH0pLFxuXG4gICAgICAgIF9kZWZhdWx0Tm9ybWFsTWFwOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjMDAwJylcbiAgICAgICAgfSksXG4gICAgICAgIF9kZWZhdWx0Um91Z2huZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcbiAgICAgICAgfSksXG4gICAgICAgIF9kZWZhdWx0TWV0YWxuZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcbiAgICAgICAgfSksXG4gICAgICAgIF9kZWZhdWx0RGlmZnVzZU1hcDogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICBpbWFnZTogY3JlYXRlRmlsbENhbnZhcygnI2ZmZicpXG4gICAgICAgIH0pLFxuXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXG5cbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDE6IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnQnKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHZlcnRleERlZmluZXM6IHtcbiAgICAgICAgICAgICAgICBGSVJTVF9QQVNTOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDI6IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnQnKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KSxcblxuICAgICAgICBfZGVidWdQYXNzOiBuZXcgUGFzcyh7XG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLmRlYnVnJylcbiAgICAgICAgfSlcbiAgICB9O1xufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICove1xuXG4gICAgLyoqXG4gICAgICogU2V0IEcgQnVmZmVyIHNpemUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgICAqL1xuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2dCdWZmZXJUZXgxLndpZHRoID09PSB3aWR0aFxuICAgICAgICAgICAgJiYgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID09PSBoZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfSxcblxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xuICAgICAgICB2YXIgdmlld3BvcnQ7XG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZpZXdwb3J0ID0geDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZpZXdwb3J0ID0ge1xuICAgICAgICAgICAgICAgIHg6IHgsIHk6IHksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiBkcHIgfHwgMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgIH0sXG5cbiAgICBnZXRWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogMCwgeTogMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fZ0J1ZmZlclRleDEud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgRyBCdWZmZXJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICogQHBhcmFtIHtjbGF5LlNjZW5lfSBzY2VuZVxuICAgICAqIEBwYXJhbSB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9IGNhbWVyYVxuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XG5cbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIGZyYW1lQnVmZmVyID0gdGhpcy5fZnJhbWVCdWZmZXI7XG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGZyYW1lQnVmZmVyLnZpZXdwb3J0O1xuICAgICAgICB2YXIgb3BhcXVlTGlzdCA9IHNjZW5lLm9wYXF1ZUxpc3Q7XG4gICAgICAgIHZhciB0cmFuc3BhcmVudExpc3QgPSBzY2VuZS50cmFuc3BhcmVudExpc3Q7XG5cbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gdGhpcy5fcmVuZGVyTGlzdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGFxdWVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIW9wYXF1ZUxpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xuICAgICAgICAgICAgICAgIHJlbmRlckxpc3Rbb2Zmc2V0KytdID0gb3BhcXVlTGlzdFtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUcmFuc3BhcmVudCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc3BhcmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcGFyZW50TGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3Rbb2Zmc2V0KytdID0gdHJhbnNwYXJlbnRMaXN0W2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZW5kZXJMaXN0Lmxlbmd0aCA9IG9mZnNldDtcblxuICAgICAgICBnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApO1xuICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5CTEVORCk7XG5cbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMTtcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUyID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMjtcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUzID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMztcbiAgICAgICAgaWYgKCFlbmFibGVUYXJnZXRUZXh0dXJlMSAmJiAhZW5hYmxlVGFyZ2V0VGV4dHVyZTMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2FuXFwndCBkaXNhYmxlIHRhcmdldFRleHR1cmUxIHRhcmdldFRleHR1cmUzIGJvdGgnKTtcbiAgICAgICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMikge1xuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX2dCdWZmZXJUZXgyLCByZW5kZXJlci5nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUEVORElORywgc2NlbmUuYm91bmRpbmdCb3hMYXN0RnJhbWUgbmVlZHMgYmUgdXBkYXRlZCBpZiBoYXZlIHNoYWRvd1xuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcoc2NlbmUpO1xuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTEpIHtcbiAgICAgICAgICAgIC8vIFBhc3MgMVxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX2dCdWZmZXJUZXgxKTtcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICAgICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpO1xuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGdCdWZmZXJNYXRlcmlhbDEgPSB0aGlzLl9nQnVmZmVyTWF0ZXJpYWwxO1xuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCdWZmZXJNYXRlcmlhbDE7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiZWZvcmVSZW5kZXI6IGdldEJlZm9yZVJlbmRlckhvb2sxKGdsLCB0aGlzLl9kZWZhdWx0Tm9ybWFsTWFwLCB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwKSxcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBGSVhNRSBVc2UgTVJUIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XG5cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTMpIHtcblxuICAgICAgICAgICAgLy8gUGFzcyAyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGhpcy5fZ0J1ZmZlclRleDMpO1xuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG5cbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIHZhciBkcHIgPSB2aWV3cG9ydC5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICAgICAgICAgIGdsLnNjaXNzb3Iodmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwciwgdmlld3BvcnQud2lkdGggKiBkcHIsIHZpZXdwb3J0LmhlaWdodCAqIGRwcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG4gICAgICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwyID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMjtcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwyO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVuZGVyOiBnZXRCZWZvcmVSZW5kZXJIb29rMihnbCwgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAsIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXApLFxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiByZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmJpbmRTY2VuZVJlbmRlcmluZyhudWxsKTtcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGVidWc6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB0eXBlLCB2aWV3cG9ydCkge1xuICAgICAgICB2YXIgZGVidWdUeXBlcyA9IHtcbiAgICAgICAgICAgIG5vcm1hbDogMCxcbiAgICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgICAgICBnbG9zc2luZXNzOiAzLFxuICAgICAgICAgICAgbWV0YWxuZXNzOiA0LFxuICAgICAgICAgICAgYWxiZWRvOiA1XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkZWJ1Z1R5cGVzW3R5cGVdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xuICAgICAgICAgICAgLy8gRGVmYXVsdCB1c2Ugbm9ybWFsXG4gICAgICAgICAgICB0eXBlID0gJ25vcm1hbCc7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XG4gICAgICAgIHJlbmRlcmVyLmNsZWFyQml0ID0gcmVuZGVyZXIuZ2wuREVQVEhfQlVGRkVSX0JJVDtcblxuICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcblxuICAgICAgICB2YXIgZGVidWdQYXNzID0gdGhpcy5fZGVidWdQYXNzO1xuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgW3JlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpXSk7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTEnLCB0aGlzLl9nQnVmZmVyVGV4MSk7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyVGV4Mik7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyVGV4Myk7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdkZWJ1ZycsIGRlYnVnVHlwZXNbdHlwZV0pO1xuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XG4gICAgICAgIGRlYnVnUGFzcy5yZW5kZXIocmVuZGVyZXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVWaWV3cG9ydCgpO1xuICAgICAgICByZW5kZXJlci5yZXN0b3JlQ2xlYXIoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGZpcnN0IHRhcmdldCB0ZXh0dXJlLlxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcbiAgICAgKiArIFI6IG5vcm1hbC54ICogMC41ICsgMC41XG4gICAgICogKyBHOiBub3JtYWwueSAqIDAuNSArIDAuNVxuICAgICAqICsgQjogbm9ybWFsLnogKiAwLjUgKyAwLjVcbiAgICAgKiArIEE6IGdsb3NzaW5lc3NcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgKi9cbiAgICBnZXRUYXJnZXRUZXh0dXJlMTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBzZWNvbmQgdGFyZ2V0IHRleHR1cmUuXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxuICAgICAqICsgUjogZGVwdGhcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgKi9cbiAgICBnZXRUYXJnZXRUZXh0dXJlMjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDI7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGlyZCB0YXJnZXQgdGV4dHVyZS5cbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XG4gICAgICogKyBSOiBhbGJlZG8uclxuICAgICAqICsgRzogYWxiZWRvLmdcbiAgICAgKiArIEI6IGFsYmVkby5iXG4gICAgICogKyBBOiBtZXRhbG5lc3NcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgKi9cbiAgICBnZXRUYXJnZXRUZXh0dXJlMzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDM7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgR0J1ZmZlcjsiLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5saWdodF92b2x1bWUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICAgIHZfUG9zaXRpb24gPSBwb3NpdGlvbjtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BvdF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0RGlyZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgdW1icmFBbmdsZUNvc2luZTtcXG51bmlmb3JtIGZsb2F0IHBlbnVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgZmFsbG9mZkZhY3RvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gICAgQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiAgICB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuICAgIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gICAgTCAvPSBkaXN0O1xcbiAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuICAgIGZsb2F0IGMgPSBkb3QoLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiksIEwpO1xcbiAgICBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoKGMgLSB1bWJyYUFuZ2xlQ29zaW5lKSAvIChwZW51bWJyYUFuZ2xlQ29zaW5lIC0gdW1icmFBbmdsZUNvc2luZSksIDAuMCwgMS4wKTtcXG4gICAgZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gICAgdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9ICgxLjAgLSBmYWxsb2ZmKSAqIGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gICAgICAgIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiAgICApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiAgICBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuICAgICAgICBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaXgsIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemVcXG4gICAgKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSBzaGFkb3dDb250cmliO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFxcblwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV07XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gICAgQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiAgICB2ZWMzIEwgPSAtbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG4gICAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRFcXVhdGlvbihcXG4gICAgICAgIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiAgICApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiAgICBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiAgICBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuICAgICAgICBpZiAoXFxuICAgICAgICAgICAgeiA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiAgICAgICAgICAgIHogPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiAgICAgICAgKSB7XFxuICAgICAgICAgICAgc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiAgICAgICAgICAgICAgICBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemUsXFxuICAgICAgICAgICAgICAgIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiAgICAgICAgICAgICAgICB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgIH19XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuICAgIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiAgICBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuICAgICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG87XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUxO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2VmZmljaWVudHNbOV07XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KHZlYzMgTikge1xcbiAgICByZXR1cm4gbGlnaHRDb2VmZmljaWVudHNbMF1cXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbMl0gKiBOLnlcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbM10gKiBOLnpcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbNV0gKiBOLnogKiBOLnlcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbNl0gKiBOLnkgKiBOLnhcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiAgICAgICAgKyBsaWdodENvZWZmaWNpZW50c1s4XSAqIChOLnggKiBOLnggLSBOLnkgKiBOLnkpO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuICAgIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiAgICBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuICAgICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuICAgIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG8gKiBjYWxjQW1iaWVudFNITGlnaHQoTik7XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRDdWJlbWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuICAgIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAgICBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnbG9zc2luZXNzLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGJpYXMgPSByb3VnaCAqIDUuMDtcXG4gICAgdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuICAgIHZlYzMgZW52V2VpZ2h0ID0gc3BlY3VsYXJDb2xvciAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuICAgIHZlYzMgZW52VGV4ZWwgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlTG9kRVhUKGxpZ2h0Q3ViZW1hcCwgTCwgYmlhcyksIDUxLjUpO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGVudlRleGVsICogZW52V2VpZ2h0O1xcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQucG9pbnRfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBsaWdodFNoYWRvd01hcDtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0U2hhZG93TWFwU2l6ZTtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuICAgIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gICAgdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuICAgIEwgLz0gZGlzdDtcXG4gICAgdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gYXR0ZW51YXRpb24gKiBsaWdodEVxdWF0aW9uKFxcbiAgICAgICAgbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICAgICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoXFxuICAgICAgICBsaWdodFNoYWRvd01hcCwgLUwgKiBkaXN0LCBsaWdodFJhbmdlXFxuICAgICk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gY2xhbXAoc2hhZG93Q29udHJpYiwgMC4wLCAxLjApO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BoZXJlX2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFuZ2U7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhZGl1cztcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuICAgIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gICAgdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuICAgIHZlYzMgUiA9IHJlZmxlY3QoViwgTik7XFxuICAgIGZsb2F0IHRtcCA9IGRvdChMLCBSKTtcXG4gICAgdmVjMyBjVG9SID0gdG1wICogUiAtIEw7XFxuICAgIGZsb2F0IGQgPSBsZW5ndGgoY1RvUik7XFxuICAgIEwgPSBMICsgY1RvUiAqIGNsYW1wKGxpZ2h0UmFkaXVzIC8gZCwgMC4wLCAxLjApO1xcbiAgICBMID0gbm9ybWFsaXplKEwpO1xcbiAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogbmRsICogYXR0ZW51YXRpb247XFxuICAgIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gbGlnaHRSYWRpdXMgLyAyLjAgLyBkaXN0LCAwLjAsIDEuMCk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuICAgICAgICBsaWdodENvbG9yLCBkaWZmdXNlQ29sb3IsIHNwZWN1bGFyQ29sb3IsIG5kbCwgbmRoLCBuZHYsIGdsb3NzaW5lc3NcXG4gICAgKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnR1YmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgbGlnaHRFeHRlbmQ7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuICAgIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gICAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiAgICB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiAgICB2ZWMzIEwwID0gbGlnaHRQb3NpdGlvbiAtIGxpZ2h0RXh0ZW5kIC0gcG9zaXRpb247XFxuICAgIHZlYzMgTDEgPSBsaWdodFBvc2l0aW9uICsgbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gICAgdmVjMyBMRCA9IEwxIC0gTDA7XFxuICAgIGZsb2F0IGxlbjAgPSBsZW5ndGgoTDApO1xcbiAgICBmbG9hdCBsZW4xID0gbGVuZ3RoKEwxKTtcXG4gICAgZmxvYXQgaXJyYSA9IDIuMCAqIGNsYW1wKGRvdChOLCBMMCkgLyAoMi4wICogbGVuMCkgKyBkb3QoTiwgTDEpIC8gKDIuMCAqIGxlbjEpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IExERG90UiA9IGRvdChSLCBMRCk7XFxuICAgIGZsb2F0IHQgPSAoTEREb3RSICogZG90KFIsIEwwKSAtIGRvdChMMCwgTEQpKSAvIChkb3QoTEQsIExEKSAtIExERG90UiAqIExERG90Uik7XFxuICAgIHQgPSBjbGFtcCh0LCAwLjAsIDEuMCk7XFxuICAgIEwgPSBMMCArIHQgKiBMRDtcXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gICAgTCAvPSBkaXN0O1xcbiAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuICAgIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gMC4wIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGlycmEgKiBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpXFxuICAgICAgICAqIChkaWZmdXNlQ29sb3IgKyBEX1Bob25nKGdsb3NzaW5lc3MsIG5kaCkgKiBGX1NjaGxpY2sobmR2LCBzcGVjdWxhckNvbG9yKSk7XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XG4iLCIvLyBMaWdodC1wcmUgcGFzcyBkZWZlcnJlZCByZW5kZXJpbmdcbi8vIGh0dHA6Ly93d3cucmVhbHRpbWVyZW5kZXJpbmcuY29tL2Jsb2cvZGVmZXJyZWQtbGlnaHRpbmctYXBwcm9hY2hlcy9cbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcbmltcG9ydCBGdWxsUXVhZFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XG5pbXBvcnQgQ29uZUdlbyBmcm9tICcuLi9nZW9tZXRyeS9Db25lJztcbmltcG9ydCBDeWxpbmRlckdlbyBmcm9tICcuLi9nZW9tZXRyeS9DeWxpbmRlcic7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcbmltcG9ydCBHQnVmZmVyIGZyb20gJy4vR0J1ZmZlcic7XG5cbmltcG9ydCBwcmV6R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL3ByZXouZ2xzbC5qcyc7XG5pbXBvcnQgdXRpbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMnO1xuXG5pbXBvcnQgbGlnaHR2b2x1bWVHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvbGlnaHR2b2x1bWUuZ2xzbC5qcyc7XG4vLyBMaWdodCBzaGFkZXJzXG5pbXBvcnQgc3BvdEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcG90Lmdsc2wuanMnO1xuaW1wb3J0IGRpcmVjdGlvbmFsR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2RpcmVjdGlvbmFsLmdsc2wuanMnO1xuaW1wb3J0IGFtYmllbnRHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudC5nbHNsLmpzJztcbmltcG9ydCBhbWJpZW50c2hHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudHNoLmdsc2wuanMnO1xuaW1wb3J0IGFtYmllbnRjdWJlbWFwR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRjdWJlbWFwLmdsc2wuanMnO1xuaW1wb3J0IHBvaW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMnO1xuaW1wb3J0IHNwaGVyZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyc7XG5pbXBvcnQgdHViZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC90dWJlLmdsc2wuanMnO1xuXG5TaGFkZXIuaW1wb3J0KHByZXpHbHNsKTtcblNoYWRlci5pbXBvcnQodXRpbEdsc2wpO1xuU2hhZGVyLmltcG9ydChsaWdodHZvbHVtZUdsc2wpO1xuXG4vLyBMaWdodCBzaGFkZXJzXG5TaGFkZXIuaW1wb3J0KHNwb3RHbHNsKTtcblNoYWRlci5pbXBvcnQoZGlyZWN0aW9uYWxHbHNsKTtcblNoYWRlci5pbXBvcnQoYW1iaWVudEdsc2wpO1xuU2hhZGVyLmltcG9ydChhbWJpZW50c2hHbHNsKTtcblNoYWRlci5pbXBvcnQoYW1iaWVudGN1YmVtYXBHbHNsKTtcblNoYWRlci5pbXBvcnQocG9pbnRHbHNsKTtcblNoYWRlci5pbXBvcnQoc3BoZXJlR2xzbCk7XG5TaGFkZXIuaW1wb3J0KHR1YmVHbHNsKTtcblxuU2hhZGVyLmltcG9ydChwcmV6R2xzbCk7XG5cbi8qKlxuICogRGVmZXJyZWQgcmVuZGVyZXJcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuZGVmZXJyZWQuUmVuZGVyZXJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBEZWZlcnJlZFJlbmRlcmVyID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGZ1bGxRdWFkVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpO1xuICAgIHZhciBsaWdodFZvbHVtZVZlcnRleCA9IFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQubGlnaHRfdm9sdW1lLnZlcnRleCcpO1xuXG4gICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIgPSBuZXcgU2hhZGVyKGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0JykpO1xuXG4gICAgdmFyIGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyA9IGZ1bmN0aW9uIChnbCkge1xuICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKGdsLkZVTkNfQUREKTtcbiAgICAgICAgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FKTtcbiAgICB9O1xuXG4gICAgdmFyIGNyZWF0ZUxpZ2h0UGFzc01hdCA9IGZ1bmN0aW9uIChzaGFkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IHNoYWRlcixcbiAgICAgICAgICAgIGJsZW5kOiBsaWdodEFjY3VtdWxhdGVCbGVuZEZ1bmMsXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBjcmVhdGVWb2x1bWVTaGFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNoYWRlcihsaWdodFZvbHVtZVZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC4nICsgbmFtZSkpO1xuICAgIH07XG5cbiAgICAvLyBSb3RhdGUgYW5kIHBvc2l0aW9uaW5nIHRvIGZpdCB0aGUgc3BvdCBsaWdodFxuICAgIC8vIFdoaWNoIHRoZSBjdXNwIG9mIGNvbmUgcG9pbnRpbmcgdG8gdGhlIHBvc2l0aXZlIHpcbiAgICAvLyBhbmQgcG9zaXRpb25lZCBvbiB0aGUgb3JpZ2luXG4gICAgdmFyIGNvbmVHZW8gPSBuZXcgQ29uZUdlbyh7XG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxuICAgIH0pO1xuICAgIHZhciBtYXQgPSBuZXcgTWF0cml4NCgpO1xuICAgIG1hdC5yb3RhdGVYKE1hdGguUEkgLyAyKVxuICAgICAgICAudHJhbnNsYXRlKG5ldyBWZWN0b3IzKDAsIC0xLCAwKSk7XG5cbiAgICBjb25lR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XG5cbiAgICB2YXIgY3lsaW5kZXJHZW8gPSBuZXcgQ3lsaW5kZXJHZW8oe1xuICAgICAgICBjYXBTZWdtZW50czogMTBcbiAgICB9KTtcbiAgICAvLyBBbGlnbiB3aXRoIHggYXhpc1xuICAgIG1hdC5pZGVudGl0eSgpLnJvdGF0ZVooTWF0aC5QSSAvIDIpO1xuICAgIGN5bGluZGVyR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XG5cbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb3ZpZGUgU2hhZG93TWFwUGFzcyBmb3Igc2hhZG93IHJlbmRlcmluZy5cbiAgICAgICAgICogQHR5cGUge2NsYXkucHJlUGFzcy5TaGFkb3dNYXB9XG4gICAgICAgICAqL1xuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgZW5hYmxlIGF1dG8gcmVzaXppbmcgZnJvbSBnaXZlbiBkZWZ1YWx0IHJlbmRlcmVyIHNpemUuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcblxuICAgICAgICBfY3JlYXRlTGlnaHRQYXNzTWF0OiBjcmVhdGVMaWdodFBhc3NNYXQsXG5cbiAgICAgICAgX2dCdWZmZXI6IG5ldyBHQnVmZmVyKCksXG5cbiAgICAgICAgX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKHtcbiAgICAgICAgICAgIGRlcHRoQnVmZmVyOiBmYWxzZVxuICAgICAgICB9KSxcblxuICAgICAgICBfbGlnaHRBY2N1bVRleDogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICAvLyBGSVhNRSBEZXZpY2Ugbm90IHN1cHBvcnQgZmxvYXQgdGV4dHVyZVxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxuICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVFxuICAgICAgICB9KSxcblxuICAgICAgICBfZnVsbFF1YWRQYXNzOiBuZXcgRnVsbFF1YWRQYXNzKHtcbiAgICAgICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiB0cnVlXG4gICAgICAgIH0pLFxuXG4gICAgICAgIF9kaXJlY3Rpb25hbExpZ2h0TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQoZGlyZWN0aW9uYWxMaWdodFNoYWRlciksXG5cbiAgICAgICAgX2FtYmllbnRNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxuICAgICAgICAgICAgZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodCcpXG4gICAgICAgICkpLFxuICAgICAgICBfYW1iaWVudFNITWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfc2hfbGlnaHQnKVxuICAgICAgICApKSxcbiAgICAgICAgX2FtYmllbnRDdWJlbWFwTWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodCcpXG4gICAgICAgICkpLFxuXG4gICAgICAgIF9zcG90TGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BvdF9saWdodCcpLFxuICAgICAgICBfcG9pbnRMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdwb2ludF9saWdodCcpLFxuXG4gICAgICAgIF9zcGhlcmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdzcGhlcmVfbGlnaHQnKSxcbiAgICAgICAgX3R1YmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCd0dWJlX2xpZ2h0JyksXG5cbiAgICAgICAgX2xpZ2h0U3BoZXJlR2VvOiBuZXcgU3BoZXJlR2VvKHtcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDEwLFxuICAgICAgICAgICAgaGVpZ2h0U2VnZW1lbnRzOiAxMFxuICAgICAgICB9KSxcblxuICAgICAgICBfbGlnaHRDb25lR2VvOiBjb25lR2VvLFxuXG4gICAgICAgIF9saWdodEN5bGluZGVyR2VvOiBjeWxpbmRlckdlbyxcblxuICAgICAgICBfb3V0cHV0UGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLm91dHB1dCcpXG4gICAgICAgIH0pXG4gICAgfTtcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5SZW5kZXJlciMgKi8ge1xuICAgIC8qKlxuICAgICAqIERvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVuZGVyVG9UYXJnZXQgPSBmYWxzZV0gSWYgbm90IG91cHV0IGFuZCByZW5kZXIgdG8gdGhlIHRhcmdldCB0ZXh0dXJlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTaGFkb3cgPSB0cnVlXSBJZiBub3QgdXBkYXRlIHRoZSBzaGFkb3cuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTY2VuZSA9IHRydWVdIElmIG5vdCB1cGRhdGUgdGhlIHNjZW5lLlxuICAgICAqL1xuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XG5cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIG9wdHMucmVuZGVyVG9UYXJnZXQgPSBvcHRzLnJlbmRlclRvVGFyZ2V0IHx8IGZhbHNlO1xuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNoYWRvdyA9IG9wdHMubm90VXBkYXRlU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNjZW5lID0gb3B0cy5ub3RVcGRhdGVTY2VuZSB8fCBmYWxzZTtcblxuICAgICAgICBpZiAoIW9wdHMubm90VXBkYXRlU2NlbmUpIHtcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xuXG4gICAgICAgIC8vIFBFTkRJTkcgRm9yIHN0ZXJlbyByZW5kZXJpbmdcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVxuICAgICAgICAgICAgJiYgKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGhcbiAgICAgICAgICAgIHx8IHJlbmRlcmVyLmdldEhlaWdodCgpICogZHByICE9PSB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci5nZXRXaWR0aCgpICogZHByLCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nQnVmZmVyLnVwZGF0ZShyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICAgICAgLy8gQWNjdW11bGF0ZSBsaWdodCBidWZmZXJcbiAgICAgICAgdGhpcy5fYWNjdW11bGF0ZUxpZ2h0QnVmZmVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCAhb3B0cy5ub3RVcGRhdGVTaGFkb3cpO1xuXG4gICAgICAgIGlmICghb3B0cy5yZW5kZXJUb1RhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGhpcy5fbGlnaHRBY2N1bVRleCk7XG5cbiAgICAgICAgICAgIHRoaXMuX291dHB1dFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX2dCdWZmZXIucmVuZGVyRGVidWcocmVuZGVyZXIsIGNhbWVyYSwgJ25vcm1hbCcpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxuICAgICAqL1xuICAgIGdldFRhcmdldFRleHR1cmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1UZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2NsYXkuRnJhbWVCdWZmZXJ9XG4gICAgICovXG4gICAgZ2V0VGFyZ2V0RnJhbWVCdWZmZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5kZWZlcnJlZC5HQnVmZmVyfVxuICAgICAqL1xuICAgIGdldEdCdWZmZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXI7XG4gICAgfSxcblxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xuICAgICAgICB0aGlzLl9nQnVmZmVyLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcik7XG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydCA9IHRoaXMuX2dCdWZmZXIuZ2V0Vmlld3BvcnQoKTtcbiAgICB9LFxuXG4gICAgLy8gZ2V0RnVsbFF1YWRMaWdodFBhc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Z1bGxRdWFkUGFzcztcbiAgICAvLyB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHJlbmRlcmVyIHNpemUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgICAqL1xuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICAvLyBQRU5ESU5HIHZpZXdwb3J0ID9cbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgfSxcblxuICAgIF9hY2N1bXVsYXRlTGlnaHRCdWZmZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KSB7XG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgbGlnaHRBY2N1bVRleCA9IHRoaXMuX2xpZ2h0QWNjdW1UZXg7XG4gICAgICAgIHZhciBsaWdodEFjY3VtRnJhbWVCdWZmZXIgPSB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXI7XG5cbiAgICAgICAgdmFyIGV5ZVBvc2l0aW9uID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcblxuICAgICAgICAvLyBVcGRhdGUgdm9sdW1lIG1lc2hlc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTGlnaHRQcm94eShzY2VuZS5saWdodHNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSB0aGlzLnNoYWRvd01hcFBhc3M7XG4gICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIHVwZGF0ZVNoYWRvdykge1xuICAgICAgICAgICAgZ2wuY2xlYXJDb2xvcigxLCAxLCAxLCAxKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVMaWdodFNoYWRvdyhyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZWxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpO1xuXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5hdHRhY2gobGlnaHRBY2N1bVRleCk7XG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSByZW5kZXJlci5jbGVhckNvbG9yO1xuXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydDtcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xuICAgICAgICB9XG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XG4gICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgICAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xuICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlcignc3RhcnRsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2aWV3UHJvamVjdGlvbkludiwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLCBjYW1lcmEuaW52UHJvamVjdGlvbk1hdHJpeCk7XG5cbiAgICAgICAgdmFyIHZvbHVtZU1lc2hMaXN0ID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcbiAgICAgICAgICAgIHZhciB1VHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlcztcblxuICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcblxuICAgICAgICAgICAgaWYgKHZvbHVtZU1lc2gpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB2b2x1bWVNZXNoLm1hdGVyaWFsO1xuICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIHdpbGwgYWZmZWN0IHRoZSBzY2VuZSBib3VuZGluZyBib3ggd2hlbiByZW5kZXJpbmdcbiAgICAgICAgICAgICAgICAvLyBpZiBjYXN0U2hhZG93IGlzIHRydWVcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHZhciB1bmtub3duTGlnaHRUeXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnBvaW50TGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwucG9pbnRMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5wb2ludExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwb3RMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5zcG90TGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BvdExpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RGlyZWN0aW9uJywgdVRwbC5zcG90TGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3VtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3BlbnVtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2ZhbGxvZmZGYWN0b3InLCB1VHBsLnNwb3RMaWdodEZhbGxvZmZGYWN0b3IudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BoZXJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BoZXJlTGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYWRpdXMnLCB1VHBsLnNwaGVyZUxpZ2h0UmFkaXVzLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5zcGhlcmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC50dWJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwudHViZUxpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RXh0ZW5kJywgdVRwbC50dWJlTGlnaHRFeHRlbmQudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnR1YmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25MaWdodFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2V5ZVBvc2l0aW9uJywgZXllUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMigpKTtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xuXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaExpc3QucHVzaCh2b2x1bWVNZXNoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSB0aGlzLl9mdWxsUXVhZFBhc3M7XG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBGdWxsIHF1YWQgbGlnaHRcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudE1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX1NIX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50U0hNYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2VmZmljaWVudHMnLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9DVUJFTUFQX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50Q3ViZW1hcE1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q3ViZW1hcCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXAudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnYnJkZkxvb2t1cCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXAudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU2hhZG93ID0gc2hhZG93TWFwUGFzcyAmJiBsaWdodC5jYXN0U2hhZG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2hhZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmRpcmVjdGlvbmFsTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodERpcmVjdGlvbicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtvbncgbGlnaHQgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBwYXNzTWF0ZXJpYWwgPSBwYXNzLm1hdGVyaWFsO1xuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdleWVQb3NpdGlvbicsIGV5ZVBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMicsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTIoKSk7XG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTMoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdykge1xuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBsaWdodC5fX3NoYWRvd01hcCk7XG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodE1hdHJpY2VzJywgbGlnaHQuX19saWdodE1hdHJpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3NoYWRvd0Nhc2NhZGVDbGlwc05lYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIpO1xuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2hhZG93Q2FzY2FkZUNsaXBzRmFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXNzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyVm9sdW1lTWVzaExpc3QocmVuZGVyZXIsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignbGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xuXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICB9LFxuXG4gICAgX3ByZXBhcmVMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdvcmxkVmlldyA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpIHtcbiAgICAgICAgICAgIHZhciBzaGFkb3dDYXN0ZXJzO1xuXG4gICAgICAgICAgICBzaGFkb3dDYXN0ZXJzID0gdGhpcy5fc2hhZG93Q2FzdGVycyB8fCAodGhpcy5fc2hhZG93Q2FzdGVycyA9IFtdKTtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICB2YXIgbGlzdCA9IHNjZW5lLm9wYXF1ZUxpc3Q7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdFtpXS5jYXN0U2hhZG93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc3RlcnNbY291bnQrK10gPSBsaXN0W2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWRvd0Nhc3RlcnMubGVuZ3RoID0gY291bnQ7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gbGlnaHQudm9sdW1lTWVzaCB8fCBsaWdodC5fX3ZvbHVtZU1lc2g7XG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodC5jYXN0U2hhZG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLmlzRnJ1c3R1bUN1bGxlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLCBudWxsLCBjYW1lcmEsIHdvcmxkVmlldy5hcnJheSwgY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgc2hhZG93Q2FzdGVycywgdm9sdW1lTWVzaC5tYXRlcmlhbFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmVwYXJlU2luZ2xlTGlnaHRTaGFkb3coXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBzaGFkb3dDYXN0ZXJzLCBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgY2FzdGVycywgbWF0ZXJpYWwpIHtcbiAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgY2FzdGVycywgc2hhZG93TWFwc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBzaGFkb3dNYXBzWzBdKTtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dNYXBzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyU3BvdExpZ2h0U2hhZG93KFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBjYXN0ZXJzLCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIHNoYWRvd01hcHNbMF0pO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cml4JywgbGlnaHRNYXRyaWNlc1swXSk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRNYXRyaWNlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBjYXN0ZXJzLCBjYXNjYWRlQ2xpcHMsIGxpZ2h0TWF0cmljZXMsIHNoYWRvd01hcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucG9wKCk7XG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIGZyb20gZmFyIHRvIG5lYXJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNGYXIucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGxpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xuXG4gICAgICAgICAgICAgICAgbGlnaHQuX19jYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzTmVhcjtcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwc0ZhcjtcbiAgICAgICAgICAgICAgICBsaWdodC5fX3NoYWRvd01hcCA9IHNoYWRvd01hcHNbMF07XG4gICAgICAgICAgICAgICAgbGlnaHQuX19saWdodE1hdHJpY2VzID0gbGlnaHRNYXRyaWNlcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBVcGRhdGUgbGlnaHQgdm9sdW1lIG1lc2hcbiAgICAvLyBMaWdodCB2b2x1bWUgbWVzaCBpcyByZW5kZXJlZCBpbiBsaWdodCBhY2N1bXVsYXRlIHBhc3MgaW5zdGVhZCBvZiBmdWxsIHF1YWQuXG4gICAgLy8gSXQgd2lsbCByZWR1Y2UgcGl4ZWxzIHNpZ25pZmljYW50bHkgd2hlbiBsb2NhbCBsaWdodCBpcyByZWxhdGl2ZWx5IHNtYWxsLlxuICAgIC8vIEFuZCB3ZSBjYW4gdXNlIGN1c3RvbSB2b2x1bWUgbWVzaCB0byBzaGFwZSB0aGUgbGlnaHQuXG4gICAgLy9cbiAgICAvLyBTZWUgXCJEZWZlcnJlZCBTaGFkaW5nIE9wdGltaXphdGlvbnNcIiBpbiBHREMyMDExXG4gICAgX3VwZGF0ZUxpZ2h0UHJveHk6IGZ1bmN0aW9uIChsaWdodCkge1xuICAgICAgICB2YXIgdm9sdW1lTWVzaDtcbiAgICAgICAgaWYgKGxpZ2h0LnZvbHVtZU1lc2gpIHtcbiAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBsb2NhbCBsaWdodCAocG9pbnQgYW5kIHNwb3QpIG5lZWRzIHZvbHVtZSBtZXNoLlxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbmFsIGFuZCBhbWJpZW50IGxpZ2h0IHJlbmRlcnMgaW4gZnVsbCBxdWFkXG4gICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1NQSEVSRV9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGFkZXIgPSBsaWdodC50eXBlID09PSAnU1BIRVJFX0xJR0hUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zcGhlcmVMaWdodFNoYWRlciA6IHRoaXMuX3BvaW50TGlnaHRTaGFkZXI7XG4gICAgICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIGNyZWF0ZWQgYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0Ll9fdm9sdW1lTWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbmV3IE1lc2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQoc2hhZGVyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRTcGhlcmVHZW8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbGlnaHQgdm9sdW1lIG1lc2ggaW50ZXJzZWN0IGNhbWVyYSBuZWFyIHBsYW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBtZXNoIGluc2lkZSBjYW4gc3RpbGwgYmUgcmVuZGVyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBsaWdodC5yYW5nZSArIChsaWdodC5yYWRpdXMgfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KHIsIHIsIHIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQodGhpcy5fc3BvdExpZ2h0U2hhZGVyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLl9saWdodENvbmVHZW8sXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IE1hdGgudGFuKGxpZ2h0LnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KGFzcGVjdCAqIHJhbmdlLCBhc3BlY3QgKiByYW5nZSwgcmFuZ2UgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0Ll9fdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaCB8fCBuZXcgTWVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHRoaXMuX3R1YmVMaWdodFNoYWRlciksXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDeWxpbmRlckdlbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQobGlnaHQubGVuZ3RoIC8gMiArIHJhbmdlLCByYW5nZSwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xuICAgICAgICAgICAgdm9sdW1lTWVzaC51cGRhdGUoKTtcbiAgICAgICAgICAgIC8vIEFwcGx5IGxpZ2h0IHRyYW5zZm9ybVxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtLCBsaWdodC53b3JsZFRyYW5zZm9ybSwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgICAgICB2YXIgaGFzU2hhZG93ID0gdGhpcy5zaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3c7XG4gICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3JlbmRlclZvbHVtZU1lc2hMaXN0OiAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd29ybGRWaWV3UHJvamVjdGlvbiA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICB2YXIgcHJlWk1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB2b2x1bWVNZXNoTGlzdCkge1xuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xuICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSwgZ2wuT05FKTtcbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVFVQUwpO1xuXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5ERVBUSF9CVUZGRVJfQklUKTtcblxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XG4gICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydFVuaWZvcm0gPSBbXG4gICAgICAgICAgICAgICAgdmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwcixcbiAgICAgICAgICAgICAgICB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCxcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodFxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2b2x1bWVNZXNoTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gdm9sdW1lTWVzaExpc3RbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBGcnVzdHVtIGN1bGxpbmdcbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlci5pc0ZydXN0dW1DdWxsZWQoXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2gsIG51bGwsIGNhbWVyYSwgd29ybGRWaWV3LmFycmF5LCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheVxuICAgICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVXNlIHByZXogdG8gYXZvaWQgb25lIHBpeGVsIHJlbmRlcmVkIHR3aWNlXG4gICAgICAgICAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2xlYXIgREVQVEhfQlVGRkVSXG4gICAgICAgICAgICAgICAgZ2wuY2xlYXIoZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlld1Byb2plY3Rpb24sIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCB3b3JsZFZpZXcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHByZVpQcm9ncmFtID0gcmVuZGVyZXIuZ2V0UHJvZ3JhbSh2b2x1bWVNZXNoLCBwcmVaTWF0ZXJpYWwpO1xuICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guX19wcm9ncmFtID0gcHJlWlByb2dyYW07XG4gICAgICAgICAgICAgICAgcmVuZGVyZXIudmFsaWRhdGVQcm9ncmFtKHByZVpQcm9ncmFtKTtcbiAgICAgICAgICAgICAgICBwcmVaUHJvZ3JhbS5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBwcmVaTWF0ZXJpYWwuc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OO1xuICAgICAgICAgICAgICAgIHByZVpQcm9ncmFtLnNldFVuaWZvcm0oZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB3b3JsZFZpZXdQcm9qZWN0aW9uLmFycmF5KTtcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnJlbmRlcihyZW5kZXJlciwgcHJlWk1hdGVyaWFsLCBwcmVaUHJvZ3JhbSk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgbGlnaHRcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmVyLmdldFByb2dyYW0odm9sdW1lTWVzaCwgdm9sdW1lTWVzaC5tYXRlcmlhbCk7XG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5fX3Byb2dyYW0gPSBwcm9ncmFtO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHZvbHVtZU1lc2gubWF0ZXJpYWwuc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OO1xuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIHdvcmxkVmlld1Byb2plY3Rpb24uYXJyYXkpO1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoZ2wsICdXSU5ET1dfU0laRScsIHdpbmRvd1NpemVVbmlmb3JtKTtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKGdsLCAnVklFV1BPUlQnLCB2aWV3cG9ydFVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbC5iaW5kKHJlbmRlcmVyLCBwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnJlbmRlcihyZW5kZXJlciwgdm9sdW1lTWVzaC5tYXRlcmlhbCwgcHJvZ3JhbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVNTKTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICAgICAgdGhpcy5fbGlnaHRDb25lR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB0aGlzLl9saWdodEN5bGluZGVyR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB0aGlzLl9saWdodFNwaGVyZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLl9mdWxsUXVhZFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgICAgIHRoaXMuX291dHB1dFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICAgICAgdGhpcy5fZGlyZWN0aW9uYWxMaWdodE1hdC5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IERlZmVycmVkUmVuZGVyZXI7XG4iLCIvLyBTcGhlcmljYWwgSGFybW9uaWMgSGVscGVyc1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcbmltcG9ydCBTa3lkb21lIGZyb20gJy4uL3BsdWdpbi9Ta3lkb21lJztcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xuaW1wb3J0IGdsbWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9IGdsbWF0cml4LnZlYzM7XG52YXIgc2ggPSB7fTtcblxuaW1wb3J0IHByb2plY3RFbnZNYXBTaGFkZXJDb2RlIGZyb20gJy4vc2hhZGVyL3Byb2plY3RFbnZNYXAuZ2xzbC5qcyc7XG5cbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xuXG4vLyBQcm9qZWN0IG9uIGdwdSwgYnV0IG5lZWRzIGJyb3dzZXIgdG8gc3VwcG9ydCByZWFkUGl4ZWxzIGFzIEZsb2F0MzJBcnJheS5cbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcEdQVShyZW5kZXJlciwgZW52TWFwKSB7XG4gICAgdmFyIHNoVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICB3aWR0aDogOSxcbiAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXG4gICAgfSk7XG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XG4gICAgICAgIGZyYWdtZW50OiBwcm9qZWN0RW52TWFwU2hhZGVyQ29kZVxuICAgIH0pO1xuICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdURVhUVVJFX1NJWkUnLCBlbnZNYXAud2lkdGgpO1xuICAgIHBhc3Muc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XG4gICAgZnJhbWVidWZmZXIuYXR0YWNoKHNoVGV4dHVyZSk7XG4gICAgcGFzcy5yZW5kZXIocmVuZGVyZXIsIGZyYW1lYnVmZmVyKTtcblxuICAgIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgIC8vIFRPRE8gT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggc3VwcG9ydCBGbG9hdDMyQXJyYXlcbiAgICB2YXIgcGl4ZWxzID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDQpO1xuICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoMCwgMCwgOSwgMSwgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLkZMT0FULCBwaXhlbHMpO1xuXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgIGNvZWZmW2kgKiAzXSA9IHBpeGVsc1tpICogNF07XG4gICAgICAgIGNvZWZmW2kgKiAzICsgMV0gPSBwaXhlbHNbaSAqIDQgKyAxXTtcbiAgICAgICAgY29lZmZbaSAqIDMgKyAyXSA9IHBpeGVsc1tpICogNCArIDJdO1xuICAgIH1cbiAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgcGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICByZXR1cm4gY29lZmY7XG59XG5cbmZ1bmN0aW9uIGhhcm1vbmljcyhub3JtYWwsIGluZGV4KXtcbiAgICB2YXIgeCA9IG5vcm1hbFswXTtcbiAgICB2YXIgeSA9IG5vcm1hbFsxXTtcbiAgICB2YXIgeiA9IG5vcm1hbFsyXTtcblxuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMS4wO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAzKSB7XG4gICAgICAgIHJldHVybiB6O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNCkge1xuICAgICAgICByZXR1cm4geCAqIHo7XG4gICAgfVxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA1KSB7XG4gICAgICAgIHJldHVybiB5ICogejtcbiAgICB9XG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDYpIHtcbiAgICAgICAgcmV0dXJuIHggKiB5O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNykge1xuICAgICAgICByZXR1cm4gMy4wICogeiAqIHogLSAxLjA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geCAqIHggLSB5ICogeTtcbiAgICB9XG59XG5cbnZhciBub3JtYWxUcmFuc2Zvcm0gPSB7XG4gICAgcHg6IFsyLCAxLCAwLCAtMSwgLTEsIDFdLFxuICAgIG54OiBbMiwgMSwgMCwgMSwgLTEsIC0xXSxcbiAgICBweTogWzAsIDIsIDEsIDEsIC0xLCAtMV0sXG4gICAgbnk6IFswLCAyLCAxLCAxLCAxLCAxXSxcbiAgICBwejogWzAsIDEsIDIsIC0xLCAtMSwgLTFdLFxuICAgIG56OiBbMCwgMSwgMiwgMSwgLTEsIDFdXG59O1xuXG4vLyBQcm9qZWN0IG9uIGNwdS5cbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcENQVShyZW5kZXJlciwgY3ViZVBpeGVscywgd2lkdGgsIGhlaWdodCkge1xuICAgIHZhciBjb2VmZiA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KDkgKiAzKTtcbiAgICB2YXIgbm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcbiAgICB2YXIgdGV4ZWwgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgIHZhciBmZXRjaE5vcm1hbCA9IHZlYzMuY3JlYXRlKCk7XG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCA5OyBtKyspIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGFyZ2V0cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIHBpeGVscyA9IGN1YmVQaXhlbHNbdGFyZ2V0c1trXV07XG5cbiAgICAgICAgICAgIHZhciBzaWRlUmVzdWx0ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gMDtcbiAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSBub3JtYWxUcmFuc2Zvcm1bdGFyZ2V0c1trXV07XG4gICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzBdID0geCAvICh3aWR0aCAtIDEuMCkgKiAyLjAgLSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gRmxpcCB5P1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxbMV0gPSB5IC8gKGhlaWdodCAtIDEuMCkgKiAyLjAgLSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsyXSA9IC0xLjA7XG4gICAgICAgICAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG5vcm1hbCwgbm9ybWFsKTtcblxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFswXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMF1dICogdHJhbnNmb3JtWzNdO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsxXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMV1dICogdHJhbnNmb3JtWzRdO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsyXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMl1dICogdHJhbnNmb3JtWzVdO1xuXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdID0gcGl4ZWxzW2krK10gLyAyNTU7XG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdID0gcGl4ZWxzW2krK10gLyAyNTU7XG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdID0gcGl4ZWxzW2krK10gLyAyNTU7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJHQk0gRGVjb2RlXG4gICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHBpeGVsc1tpKytdIC8gMjU1ICogNTEuNTtcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gKj0gc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdICo9IHNjYWxlO1xuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsyXSAqPSBzY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNpZGVSZXN1bHQsIHNpZGVSZXN1bHQsIHRleGVsLCBoYXJtb25pY3MoZmV0Y2hOb3JtYWwsIG0pICogLW5vcm1hbFsyXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIC1ub3JtYWwueiBlcXVhbHMgY29zKHRoZXRhKSBvZiBMYW1iZXJ0aWFuXG4gICAgICAgICAgICAgICAgICAgIGRpdmlkZXIgKz0gLW5vcm1hbFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHJlc3VsdCwgcmVzdWx0LCBzaWRlUmVzdWx0LCAxIC8gZGl2aWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb2VmZlttICogM10gPSByZXN1bHRbMF0gLyA2LjA7XG4gICAgICAgIGNvZWZmW20gKiAzICsgMV0gPSByZXN1bHRbMV0gLyA2LjA7XG4gICAgICAgIGNvZWZmW20gKiAzICsgMl0gPSByZXN1bHRbMl0gLyA2LjA7XG4gICAgfVxuICAgIHJldHVybiBjb2VmZjtcbn1cblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHMubG9kXVxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk1dXG4gKi9cbnNoLnByb2plY3RFbnZpcm9ubWVudE1hcCA9IGZ1bmN0aW9uIChyZW5kZXJlciwgZW52TWFwLCBvcHRzKSB7XG5cbiAgICAvLyBUT0RPIHNSR0JcblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIG9wdHMubG9kID0gb3B0cy5sb2QgfHwgMDtcblxuICAgIHZhciBza3lib3g7XG4gICAgdmFyIGR1bW15U2NlbmUgPSBuZXcgU2NlbmUoKTtcbiAgICB2YXIgc2l6ZSA9IDY0O1xuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lkb21lKHtcbiAgICAgICAgICAgIHNjZW5lOiBkdW1teVNjZW5lLFxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudk1hcFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNpemUgPSAoZW52TWFwLmltYWdlICYmIGVudk1hcC5pbWFnZS5weCkgPyBlbnZNYXAuaW1hZ2UucHgud2lkdGggOiBlbnZNYXAud2lkdGg7XG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lib3goe1xuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52TWFwXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IHRvIHJnYm1cbiAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoc2l6ZSAvIE1hdGgucG93KDIsIG9wdHMubG9kKSk7XG4gICAgdmFyIGhlaWdodCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcbiAgICB2YXIgcmdibVRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH0pO1xuICAgIHZhciBmcmFtZWJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xuICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XG4gICAgaWYgKG9wdHMuZGVjb2RlUkdCTSkge1xuICAgICAgICBza3lib3gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0RFQ09ERScpO1xuICAgIH1cbiAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdsb2QnLCBvcHRzLmxvZCk7XG4gICAgdmFyIGVudk1hcFBhc3MgPSBuZXcgRW52aXJvbm1lbnRNYXBQYXNzKHtcbiAgICAgICAgdGV4dHVyZTogcmdibVRleHR1cmVcbiAgICB9KTtcbiAgICB2YXIgY3ViZVBpeGVscyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjdWJlUGl4ZWxzW3RhcmdldHNbaV1dID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcbiAgICAgICAgdmFyIGNhbWVyYSA9IGVudk1hcFBhc3MuZ2V0Q2FtZXJhKHRhcmdldHNbaV0pO1xuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XG4gICAgICAgIGZyYW1lYnVmZmVyLmF0dGFjaChyZ2JtVGV4dHVyZSk7XG4gICAgICAgIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcbiAgICAgICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscyhcbiAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQsXG4gICAgICAgICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuVU5TSUdORURfQllURSwgY3ViZVBpeGVsc1t0YXJnZXRzW2ldXVxuICAgICAgICApO1xuICAgICAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHNreWJveC5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICBmcmFtZWJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICByZ2JtVGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgIHJldHVybiBwcm9qZWN0RW52aXJvbm1lbnRNYXBDUFUocmVuZGVyZXIsIGN1YmVQaXhlbHMsIHdpZHRoLCBoZWlnaHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgc2g7XG4iLCJcbi8qKlxuICogSGVscGVycyBmb3IgY3JlYXRpbmcgYSBjb21tb24gM2QgYXBwbGljYXRpb24uXG4gKiBAbmFtZXNwYWNlIGNsYXkuYXBwbGljYXRpb25cbiAqL1xuXG4gLy8gVE9ETyBjcmVhdGVDb21wb3NpdG9yXG4gLy8gVE9ETyBEaXNwb3NlIHRlc3QuIGdlb0NhY2hlIHRlc3QuXG4gLy8gVE9ETyBUb25lbWFwcGluZyBleHBvc3VyZVxuIC8vIFRPRE8gZml0TW9kZWwuXG4gLy8gVE9ETyBQYXJ0aWNsZSA/XG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi9SZW5kZXJlcic7XG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9TY2VuZSc7XG5pbXBvcnQgVGltZWxpbmUgZnJvbSAnLi9hbmltYXRpb24vVGltZWxpbmUnO1xuaW1wb3J0IEN1YmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9DdWJlJztcbmltcG9ydCBTcGhlcmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9TcGhlcmUnO1xuaW1wb3J0IFBsYW5lR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4vR2VvbWV0cnknO1xuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi9zaGFkZXIvbGlicmFyeSc7XG5pbXBvcnQgTWVzaCBmcm9tICcuL01lc2gnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcbmltcG9ydCBHTFRGTG9hZGVyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcbmltcG9ydCBEaXJlY3Rpb25hbExpZ2h0IGZyb20gJy4vbGlnaHQvRGlyZWN0aW9uYWwnO1xuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi9saWdodC9Qb2ludCc7XG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4vbGlnaHQvU3BvdCc7XG5pbXBvcnQgQW1iaWVudExpZ2h0IGZyb20gJy4vbGlnaHQvQW1iaWVudCc7XG5pbXBvcnQgQW1iaWVudEN1YmVtYXBMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcbmltcG9ydCBBbWJpZW50U0hMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XG5pbXBvcnQgU2hhZG93TWFwUGFzcyBmcm9tICcuL3ByZVBhc3MvU2hhZG93TWFwJztcbmltcG9ydCBSYXlQaWNraW5nIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcbmltcG9ydCBEZWZlcnJlZFJlbmRlcmVyIGZyb20gJy4vZGVmZXJyZWQvUmVuZGVyZXInO1xuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHNoVXRpbCBmcm9tICcuL3V0aWwvc2gnO1xuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcblxuaW1wb3J0IGNvbG9yVXRpbCBmcm9tICcuL2NvcmUvY29sb3InO1xudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xuXG5pbXBvcnQgJy4vc2hhZGVyL2J1aWx0aW4nO1xuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XG5cbnZhciBFVkVfTkFNRVMgPSBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLFxuICAgICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZScsXG4gICAgJ21vdXNld2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnXG5dO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR8SFRNTEltYWdlRWxlbWVudHxIVE1MVmlkZW9FbGVtZW50fSBJbWFnZUxpa2VcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEFycmF5LjxudW1iZXI+fSBDb2xvclxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtIVE1MRG9tRWxlbWVudHxzdHJpbmd9IERvbVF1ZXJ5XG4gKi9cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEXG4gKiBAcGFyYW0ge0RvbVF1ZXJ5fSBkb20gQ29udGFpbmVyIGRvbSBlbGVtZW50IG9yIGEgc2VsZWN0b3Igc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gYHF1ZXJ5U2VsZWN0b3JgXG4gKiBAcGFyYW0ge09iamVjdH0gYXBwTlNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFwcE5TLmluaXQgSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGluaXRpbmcgYXBwLlxuICogICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZXR1cm4gYSBwcm9taXNlIGluIGluaXQgdG8gc3RhcnQgdGhlIGxvb3AgYXN5bmNocm9ub3VzbHkgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFwcE5TLmxvb3AgTG9vcCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGVhY2ggZnJhbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhcHBOUy5iZWZvcmVSZW5kZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFwcE5TLmFmdGVyUmVuZGVyXG4gKiBAcGFyYW0ge251bWJlcn0gW2FwcE5TLndpZHRoXSBDb250YWluZXIgd2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gW2FwcE5TLmhlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXBwTlMuZGV2aWNlUGl4ZWxSYXRpb11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXBwTlMuZ3JhcGhpY10gR3JhcGhpYyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBzaGFkb3csIHBvc3RFZmZlY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FwcE5TLmdyYXBoaWMuc2hhZG93PWZhbHNlXSBJZiBlbmFibGUgc2hhZG93XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcHBOUy5ncmFwaGljLmxpbmVhcj1mYWxzZV0gSWYgdXNlIGxpbmVhciBzcGFjZVxuICogQHBhcmFtIHtib29sZWFufSBbYXBwTlMuZ3JhcGhpYy50b25lbWFwcGluZz1mYWxzZV0gSWYgZW5hYmxlIEFDRVMgdG9uZSBtYXBwaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBbYXBwTlMuZXZlbnQ9ZmFsc2VdIElmIGVuYWJsZSBtb3VzZS90b3VjaCBldmVudC4gSXQgd2lsbCBzbG93IGRvd24gdGhlIHN5c3RlbSBpZiBnZW9tZXRyaWVzIGFyZSBjb21wbGV4LlxuICovXG5mdW5jdGlvbiBBcHAzRChkb20sIGFwcE5TKSB7XG5cbiAgICBhcHBOUyA9IGFwcE5TIHx8IHt9O1xuICAgIGFwcE5TLmdyYXBoaWMgPSBhcHBOUy5ncmFwaGljIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBkb20gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvbSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZG9tJyk7IH1cblxuICAgIHZhciBpc0RvbUNhbnZhcyA9IGRvbS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FOVkFTJztcbiAgICB2YXIgcmVuZGVyZXJPcHRzID0ge307XG4gICAgaXNEb21DYW52YXMgJiYgKHJlbmRlcmVyT3B0cy5jYW52YXMgPSBkb20pO1xuICAgIGFwcE5TLmRldmljZVBpeGVsUmF0aW8gJiYgKHJlbmRlcmVyT3B0cy5kZXZpY2VQaXhlbFJhdGlvID0gYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyk7XG5cbiAgICB2YXIgZ1JlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHJlbmRlcmVyT3B0cyk7XG4gICAgdmFyIGdXaWR0aCA9IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcbiAgICB2YXIgZ0hlaWdodCA9IGFwcE5TLmhlaWdodCB8fCBkb20uY2xpZW50SGVpZ2h0O1xuXG4gICAgdmFyIGdTY2VuZSA9IG5ldyBTY2VuZSgpO1xuICAgIHZhciBnVGltZWxpbmUgPSBuZXcgVGltZWxpbmUoKTtcbiAgICB2YXIgZ1NoYWRvd1Bhc3MgPSBhcHBOUy5ncmFwaGljLnNoYWRvdyAmJiBuZXcgU2hhZG93TWFwUGFzcygpO1xuICAgIHZhciBnUmF5UGlja2luZyA9IGFwcE5TLmV2ZW50ICYmIG5ldyBSYXlQaWNraW5nKHtcbiAgICAgICAgc2NlbmU6IGdTY2VuZSxcbiAgICAgICAgcmVuZGVyZXI6IGdSZW5kZXJlclxuICAgIH0pO1xuXG4gICAgIWlzRG9tQ2FudmFzICYmIGRvbS5hcHBlbmRDaGlsZChnUmVuZGVyZXIuY2FudmFzKTtcblxuICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcblxuICAgIHZhciBnRnJhbWVUaW1lID0gMDtcbiAgICB2YXIgZ0VsYXBzZWRUaW1lID0gMDtcblxuICAgIGdUaW1lbGluZS5zdGFydCgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29udGFpbmVyIGRvbSBlbGVtZW50XG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjY29udGFpbmVyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRG9tRWxlbWVudH1cbiAgICAgICAgICovXG4gICAgICAgIGNvbnRhaW5lcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbTsgfSB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNyZW5kZXJlclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcmVyOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyOyB9fSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjc2NlbmVcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBzY2VuZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTY2VuZTsgfX0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3RpbWVsaW5lXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgdGltZWxpbmU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnVGltZWxpbmU7IH19LFxuICAgICAgICAvKipcbiAgICAgICAgICogVGltZSBlbGFwc2VkIHNpbmNlIGxhc3QgZnJhbWUuIENhbiBiZSB1c2VkIGluIGxvb3AgdG8gY2FsY3VsYXRlIHRoZSBtb3ZlbWVudC5cbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNmcmFtZVRpbWVcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGZyYW1lVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdGcmFtZVRpbWU7IH19LFxuICAgICAgICAvKipcbiAgICAgICAgICogVGltZSBlbGFwc2VkIHNpbmNlIGFwcGxpY2F0aW9uIGNyZWF0ZWQuXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZWxhcHNlZFRpbWVcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGVsYXBzZWRUaW1lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ0VsYXBzZWRUaW1lOyB9fVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBhcHBsaWNhdGlvbi4gV2lsbCB1c2UgdGhlIGNvbnRhaW5lciBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgaWYgd2lkdGgvaGVpZ2h0IGluIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbi5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAbWVtYmVyT2Yge2NsYXkuYXBwbGljYXRpb24uQXBwM0R9XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cbiAgICAgKi9cbiAgICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGdXaWR0aCA9IHdpZHRoIHx8IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcbiAgICAgICAgZ0hlaWdodCA9IGhlaWdodCB8fCBkb20uaGVpZ2h0IHx8IGRvbS5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSB0aGUgYXBwbGljYXRpb25cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cbiAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoYXBwTlMuZGlzcG9zZSkge1xuICAgICAgICAgICAgYXBwTlMuZGlzcG9zZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnVGltZWxpbmUuc3RvcCgpO1xuICAgICAgICBnUmVuZGVyZXIuZGlzcG9zZVNjZW5lKGdTY2VuZSk7XG4gICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLmRpc3Bvc2UoZ1JlbmRlcmVyKTtcblxuICAgICAgICBkb20uaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVUeXBlKSB7XG4gICAgICAgICAgICB0aGlzW21ha2VIYW5kbGVyTmFtZShldmVUeXBlKV0gJiYgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIobWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdSYXlQaWNraW5nICYmIHRoaXMuX2luaXRNb3VzZUV2ZW50cyhnUmF5UGlja2luZyk7XG5cbiAgICB0aGlzLl9nZW9DYWNoZSA9IG5ldyBMUlVDYWNoZSgyMCk7XG4gICAgdGhpcy5fdGV4Q2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xuXG4gICAgLy8gRG8gaW5pdCB0aGUgYXBwbGljYXRpb24uXG4gICAgdmFyIGluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGFwcE5TLmluaXQgJiYgYXBwTlMuaW5pdCh0aGlzKSk7XG4gICAgLy8gVXNlIHRoZSBpbml0ZWQgY2FtZXJhLlxuICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpKTtcblxuICAgIHZhciBnVGV4dHVyZXNMaXN0ID0ge307XG4gICAgdmFyIGdHZW9tZXRyaWVzTGlzdCA9IHt9O1xuXG4gICAgaWYgKCFhcHBOUy5sb29wKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTWlzcyBsb29wIG1ldGhvZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFwcE5TLmxvb3AgJiYgZ1RpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcbiAgICAgICAgICAgIGdGcmFtZVRpbWUgPSBmcmFtZVRpbWU7XG4gICAgICAgICAgICBnRWxhcHNlZFRpbWUgKz0gZnJhbWVUaW1lO1xuICAgICAgICAgICAgYXBwTlMubG9vcChzZWxmKTtcblxuICAgICAgICAgICAgZ1NjZW5lLnVwZGF0ZSgpO1xuXG4gICAgICAgICAgICBzZWxmLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCBnU2NlbmUub3BhcXVlTGlzdCwgZmFsc2UpO1xuICAgICAgICAgICAgc2VsZi5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgZ1NjZW5lLnRyYW5zcGFyZW50TGlzdCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFyIHNreWJveExpc3QgPSBbXTtcbiAgICAgICAgICAgIGdTY2VuZS5za3lib3ggJiYgc2t5Ym94TGlzdC5wdXNoKGdTY2VuZS5za3lib3gpO1xuICAgICAgICAgICAgZ1NjZW5lLnNreWRvbWUgJiYgc2t5Ym94TGlzdC5wdXNoKGdTY2VuZS5za3lkb21lKTtcbiAgICAgICAgICAgIHNlbGYuX3VwZGF0ZUdyYXBoaWNPcHRpb25zKGFwcE5TLmdyYXBoaWMsIHNreWJveExpc3QsIHRydWUpO1xuXG4gICAgICAgICAgICBnUmF5UGlja2luZyAmJiAoZ1JheVBpY2tpbmcuY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKSk7XG4gICAgICAgICAgICAvLyBSZW5kZXIgc2hhZG93IHBhc3NcbiAgICAgICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLnJlbmRlcihnUmVuZGVyZXIsIGdTY2VuZSwgbnVsbCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGFwcE5TLmJlZm9yZVJlbmRlciAmJiBhcHBOUy5iZWZvcmVSZW5kZXIoc2VsZik7XG4gICAgICAgICAgICBzZWxmLl9kb1JlbmRlcihnUmVuZGVyZXIsIGdTY2VuZSwgdHJ1ZSk7XG4gICAgICAgICAgICBhcHBOUy5hZnRlclJlbmRlciAmJiBhcHBOUy5hZnRlclJlbmRlcihzZWxmKTtcblxuICAgICAgICAgICAgLy8gTWFyayBhbGwgcmVzb3VyY2VzIHVudXNlZDtcbiAgICAgICAgICAgIG1hcmtVbnVzZWQoZ1RleHR1cmVzTGlzdCk7XG4gICAgICAgICAgICBtYXJrVW51c2VkKGdHZW9tZXRyaWVzTGlzdCk7XG5cbiAgICAgICAgICAgIC8vIENvbGxlY3QgcmVzb3VyY2VzIHVzZWQgaW4gdGhpcyBmcmFtZS5cbiAgICAgICAgICAgIHZhciBuZXdUZXh0dXJlc0xpc3QgPSBbXTtcbiAgICAgICAgICAgIHZhciBuZXdHZW9tZXRyaWVzTGlzdCA9IFtdO1xuICAgICAgICAgICAgY29sbGVjdFJlc291cmNlcyhnU2NlbmUsIG5ld1RleHR1cmVzTGlzdCwgbmV3R2VvbWV0cmllc0xpc3QpO1xuXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHRob3NlIHVuc2VkIHJlc291cmNlcy5cbiAgICAgICAgICAgIGNoZWNrQW5kRGlzcG9zZShnUmVuZGVyZXIsIGdUZXh0dXJlc0xpc3QpO1xuICAgICAgICAgICAgY2hlY2tBbmREaXNwb3NlKGdSZW5kZXJlciwgZ0dlb21ldHJpZXNMaXN0KTtcblxuICAgICAgICAgICAgZ1RleHR1cmVzTGlzdCA9IG5ld1RleHR1cmVzTGlzdDtcbiAgICAgICAgICAgIGdHZW9tZXRyaWVzTGlzdCA9IG5ld0dlb21ldHJpZXNMaXN0O1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNJbWFnZUxpa2VFbGVtZW50KHZhbCkge1xuICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBJbWFnZVxuICAgICAgICB8fCB2YWwgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudFxuICAgICAgICB8fCB2YWwgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRLZXlGcm9tSW1hZ2VMaWtlKHZhbCkge1xuICAgIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXG4gICAgICAgID8gdmFsIDogKHZhbC5fX2tleV9fIHx8ICh2YWwuX19rZXlfXyA9IHV0aWwuZ2VuR1VJRCgpKSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSB7XG4gICAgcmV0dXJuICdfJyArIGV2ZVR5cGUgKyAnSGFuZGxlcic7XG59XG5cbmZ1bmN0aW9uIHBhY2thZ2VFdmVudChldmVudFR5cGUsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFksIHdoZWVsRGVsdGEpIHtcbiAgICB2YXIgZXZlbnQgPSB1dGlsLmNsb25lKHBpY2tSZXN1bHQpO1xuICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XG4gICAgZXZlbnQub2Zmc2V0WCA9IG9mZnNldFg7XG4gICAgZXZlbnQub2Zmc2V0WSA9IG9mZnNldFk7XG4gICAgaWYgKHdoZWVsRGVsdGEgIT09IG51bGwpIHtcbiAgICAgICAgZXZlbnQud2hlZWxEZWx0YSA9IHdoZWVsRGVsdGE7XG4gICAgfVxuICAgIHJldHVybiBldmVudDtcbn1cblxuZnVuY3Rpb24gYnViYmxpbmdFdmVudCh0YXJnZXQsIGV2ZW50KSB7XG4gICAgd2hpbGUgKHRhcmdldCAmJiAhZXZlbnQuY2FuY2VsQnViYmxlKSB7XG4gICAgICAgIHRhcmdldC50cmlnZ2VyKGV2ZW50LnR5cGUsIGV2ZW50KTtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmdldFBhcmVudCgpO1xuICAgIH1cbn1cblxuQXBwM0QucHJvdG90eXBlLl9pbml0TW91c2VFdmVudHMgPSBmdW5jdGlvbiAocmF5UGlja2luZykge1xuICAgIHZhciBkb20gPSB0aGlzLmNvbnRhaW5lcjtcblxuICAgIHZhciBvbGRUYXJnZXQgPSBudWxsO1xuICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChfZXZlVHlwZSkge1xuICAgICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihfZXZlVHlwZSwgdGhpc1ttYWtlSGFuZGxlck5hbWUoX2V2ZVR5cGUpXSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoIXJheVBpY2tpbmcuY2FtZXJhKSB7IC8vIE5vdCBoYXZlIGNhbWVyYSB5ZXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB2YXIgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdmFyIG9mZnNldFgsIG9mZnNldFk7XG4gICAgICAgICAgICB2YXIgZXZlVHlwZSA9IF9ldmVUeXBlO1xuXG4gICAgICAgICAgICBpZiAoZXZlVHlwZS5pbmRleE9mKCd0b3VjaCcpID49IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgdG91Y2ggPSBldmVUeXBlICE9ICd0b3VjaGVuZCdcbiAgICAgICAgICAgICAgICA/IGUudGFyZ2V0VG91Y2hlc1swXVxuICAgICAgICAgICAgICAgIDogZS5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZVR5cGUgPSAnbW91c2Vkb3duJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNldXAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVUeXBlID09PSAndG91Y2htb3ZlJykge1xuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlbW92ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldFggPSB0b3VjaC5jbGllbnRYIC0gYm94LmxlZnQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHRvdWNoLmNsaWVudFkgLSBib3gudG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IGUuY2xpZW50WCAtIGJveC5sZWZ0O1xuICAgICAgICAgICAgICAgIG9mZnNldFkgPSBlLmNsaWVudFkgLSBib3gudG9wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHJheVBpY2tpbmcucGljayhvZmZzZXRYLCBvZmZzZXRZKTtcblxuICAgICAgICAgICAgdmFyIGRlbHRhO1xuICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdET01Nb3VzZVNjcm9sbCcgfHwgZXZlVHlwZSA9PT0gJ21vdXNld2hlZWwnKSB7XG4gICAgICAgICAgICAgICAgZGVsdGEgPSAoZS53aGVlbERlbHRhKSA/IGUud2hlZWxEZWx0YSAvIDEyMCA6IC0oZS5kZXRhaWwgfHwgMCkgLyAzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGlja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIHNpbGVudCBlbGVtZW50LlxuICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0LnRhcmdldC5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChldmVUeXBlID09PSAnbW91c2Vtb3ZlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIHRvdWNoZG93biBzaG91bGQgdHJpZ2dlciBtb3VzZW92ZXIgZXZlbnQgP1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9IHBpY2tSZXN1bHQudGFyZ2V0ICE9PSBvbGRUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRUYXJnZXQgJiYgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9mZnNldFgsIG9mZnNldFkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlbW92ZScsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdmVyJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoZXZlVHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgZGVsdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gcGlja1Jlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvbGRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KG9sZFRhcmdldCwgcGFja2FnZUV2ZW50KCdtb3VzZW91dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcbiAgICAgICAgICAgICAgICB9LCBvZmZzZXRYLCBvZmZzZXRZKSk7XG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgdGhpcyk7XG59O1xuXG5BcHAzRC5wcm90b3R5cGUuX3VwZGF0ZUdyYXBoaWNPcHRpb25zID0gZnVuY3Rpb24gKGdyYXBoaWNPcHRzLCBsaXN0LCBpc1NreWJveCkge1xuICAgIHZhciBlbmFibGVUb25lbWFwcGluZyA9ICEhZ3JhcGhpY09wdHMudG9uZW1hcHBpbmc7XG4gICAgdmFyIGlzTGluZWFyU3BhY2UgPSAhIWdyYXBoaWNPcHRzLmxpbmVhcjtcblxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG1hdCA9IGxpc3RbaV0ubWF0ZXJpYWw7XG4gICAgICAgIGlmIChtYXQgPT09IHByZXZNYXRlcmlhbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlbmFibGVUb25lbWFwcGluZyA/IG1hdC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJykgOiBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJyk7XG4gICAgICAgIGlmIChpc0xpbmVhclNwYWNlKSB7XG4gICAgICAgICAgICB2YXIgZGVjb2RlU1JHQiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaXNTa3lib3ggJiYgbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKSAmJiAhbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKS5zUkdCKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlU1JHQiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVjb2RlU1JHQiAmJiBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xuICAgICAgICAgICAgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdDtcbiAgICB9XG59O1xuXG5BcHAzRC5wcm90b3R5cGUuX2RvUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xuICAgIHZhciBjYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XG4gICAgY2FtZXJhLmFzcGVjdCA9IHJlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XG4gICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lKTtcbn07XG5cblxuZnVuY3Rpb24gbWFya1VudXNlZChyZXNvdXJjZUxpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXNvdXJjZUxpc3RbaV0uX191c2VkX18gPSAwO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tBbmREaXNwb3NlKHJlbmRlcmVyLCByZXNvdXJjZUxpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXJlc291cmNlTGlzdFtpXS5fX3VzZWRfXykge1xuICAgICAgICAgICAgcmVzb3VyY2VMaXN0W2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVVc2VkKHJlc291cmNlLCBsaXN0KSB7XG4gICAgcmVzb3VyY2UuX191c2VkX18gPSByZXNvdXJjZS5fX3VzZWRfXyB8fCAwO1xuICAgIHJlc291cmNlLl9fdXNlZF9fKys7XG4gICAgaWYgKHJlc291cmNlLl9fdXNlZF9fID09PSAxKSB7XG4gICAgICAgIC8vIERvbid0IHB1c2ggdG8gdGhlIGxpc3QgdHdpY2UuXG4gICAgICAgIGxpc3QucHVzaChyZXNvdXJjZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29sbGVjdFJlc291cmNlcyhzY2VuZSwgdGV4dHVyZVJlc291cmNlTGlzdCwgZ2VvbWV0cnlSZXNvdXJjZUxpc3QpIHtcbiAgICBmdW5jdGlvbiB0cmFja1F1ZXVlKHF1ZXVlKSB7XG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XG4gICAgICAgIHZhciBwcmV2R2VvbWV0cnk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gcXVldWVbaV07XG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcblxuICAgICAgICAgICAgLy8gVE9ETyBvcHRpbWl6ZSEhXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwgIT09IHByZXZNYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybU5hbWUgPSB0ZXh0dXJlVW5pZm9ybXNbdV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcgJiYgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbFtrXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbFtrXSwgdGV4dHVyZVJlc291cmNlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ICE9PSBwcmV2R2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKGdlb21ldHJ5LCBnZW9tZXRyeVJlc291cmNlTGlzdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgICAgICAgICAgcHJldkdlb21ldHJ5ID0gZ2VvbWV0cnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja1F1ZXVlKHNjZW5lLm9wYXF1ZUxpc3QpO1xuICAgIHRyYWNrUXVldWUoc2NlbmUudHJhbnNwYXJlbnRMaXN0KTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIC8vIFRyYWNrIEFtYmllbnRDdWJlbWFwXG4gICAgICAgIGlmIChzY2VuZS5saWdodHNba10uY3ViZW1hcCkge1xuICAgICAgICAgICAgdXBkYXRlVXNlZChzY2VuZS5saWdodHNba10uY3ViZW1hcCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIExvYWQgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nLlxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxuICogQHBhcmFtIHtib29sZWFufSBbdXNlQ2FjaGVdIElmIHVzZSBjYWNoZS5cbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiBAZXhhbXBsZVxuICogIGFwcC5sb2FkVGV4dHVyZSgnZGlmZnVzZU1hcC5qcGcnKVxuICogICAgICAudGhlbihmdW5jdGlvbiAodGV4dHVyZSkge1xuICogICAgICAgICAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XG4gKiAgICAgIH0pO1xuICovXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMsIHVzZUNhY2hlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSW1hZ2VMaWtlKHVybE9ySW1nKTtcbiAgICBpZiAodXNlQ2FjaGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RleENhY2hlLmdldChrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4Q2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETyBQcm9taXNlID9cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBzZWxmLmxvYWRUZXh0dXJlU3luYyh1cmxPckltZywgb3B0cyk7XG4gICAgICAgIGlmICghdGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh1c2VDYWNoZSkge1xuICAgICAgICB0aGlzLl90ZXhDYWNoZS5wdXQoa2V5LCBwcm9taXNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5mdW5jdGlvbiBuZWFyZXN0UG93ZXJPZlR3byh2YWwpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5yb3VuZChNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUZXh0dXJlVG9Qb3dlck9mVHdvKHRleHR1cmUpIHtcbiAgICBpZiAoKHRleHR1cmUud3JhcFMgPT09IFRleHR1cmUuUkVQRUFUIHx8IHRleHR1cmUud3JhcFQgPT09IFRleHR1cmUuUkVQRUFUKVxuICAgICAmJiB0ZXh0dXJlLmltYWdlXG4gICAgICkge1xuICAgICAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIHZhciB3aWR0aCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gbmVhcmVzdFBvd2VyT2ZUd28odGV4dHVyZS5oZWlnaHQpO1xuICAgICAgICBpZiAod2lkdGggIT09IHRleHR1cmUud2lkdGggfHwgaGVpZ2h0ICE9PSB0ZXh0dXJlLmhlaWdodCkge1xuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZSh0ZXh0dXJlLmltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNhbnZhcy5zcmNJbWFnZSA9IHRleHR1cmUuaW1hZ2U7XG4gICAgICAgICAgICB0ZXh0dXJlLmltYWdlID0gY2FudmFzO1xuICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XG4gKiBAZXhhbXBsZVxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycsIHtcbiAqICAgICAgYW5pc290cm9waWM6IDgsXG4gKiAgICAgIGZsaXBZOiBmYWxzZVxuICogIH0pO1xuICogIG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIHRleHR1cmUpO1xuICovXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVTeW5jID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzKSB7XG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKG9wdHMpO1xuICAgIGlmICh0eXBlb2YgdXJsT3JJbWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh1cmxPckltZy5tYXRjaCgvLmhkciR8XmRhdGE6YXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vKSkge1xuICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVVdGlsLmxvYWRUZXh0dXJlKHVybE9ySW1nLCB7XG4gICAgICAgICAgICAgICAgZXhwb3N1cmU6IG9wdHMgJiYgb3B0cy5leHBvc3VyZSxcbiAgICAgICAgICAgICAgICBmaWxlVHlwZTogJ2hkcidcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS50cmlnZ2VyKCdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZVtrZXldID0gb3B0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGV4dHVyZS5sb2FkKHVybE9ySW1nKTtcbiAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY29udmVydFRvUE9UKSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNJbWFnZUxpa2VFbGVtZW50KHVybE9ySW1nKSkge1xuICAgICAgICB0ZXh0dXJlLmltYWdlID0gdXJsT3JJbWc7XG4gICAgICAgIHRleHR1cmUuZHluYW1pYyA9IHVybE9ySW1nIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPWZhbHNlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQGV4YW1wbGVcbiAqICBhcHAubG9hZFRleHR1cmVDdWJlKHtcbiAqICAgICAgcHg6ICdza3lib3gvcHguanBnJywgcHk6ICdza3lib3gvcHkuanBnJywgcHo6ICdza3lib3gvcHouanBnJyxcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xuICogIH0pLnRoZW4oZnVuY3Rpb24gKHRleHR1cmUpIHtcbiAqICAgICAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xuICogIH0pXG4gKi9cbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IHRoaXMubG9hZFRleHR1cmVDdWJlU3luYyhpbWdMaXN0LCBvcHRzKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAodGV4dHVyZUN1YmUuaXNSZW5kZXJhYmxlKCkpIHtcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGV4dHVyZUN1YmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlQ3ViZSk7XG4gICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT1mYWxzZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlQ3ViZX1cbiAqIEBleGFtcGxlXG4gKiAgdmFyIHRleHR1cmUgPSBhcHAubG9hZFRleHR1cmVDdWJlU3luYyh7XG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXG4gKiAgICAgIG54OiAnc2t5Ym94L254LmpwZycsIG55OiAnc2t5Ym94L255LmpwZycsIG56OiAnc2t5Ym94L256LmpwZydcbiAqICB9KTtcbiAqICBza3lib3guc2V0RW52aXJvbm1lbnRNYXAodGV4dHVyZSk7XG4gKi9cbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmVTeW5jID0gZnVuY3Rpb24gKGltZ0xpc3QsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBvcHRzLmZsaXBZID0gb3B0cy5mbGlwWSB8fCBmYWxzZTtcbiAgICB2YXIgdGV4dHVyZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmUob3B0cyk7XG4gICAgaWYgKCFpbWdMaXN0IHx8ICFpbWdMaXN0LnB4IHx8ICFpbWdMaXN0Lm54IHx8ICFpbWdMaXN0LnB5IHx8ICFpbWdMaXN0Lm55IHx8ICFpbWdMaXN0LnB6IHx8ICFpbWdMaXN0Lm56KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjdWJlbWFwIGZvcm1hdC4gU2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgcHgsbngscHksbnkscHosbnonKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbWdMaXN0LnB4ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0ZXh0dXJlQ3ViZS5sb2FkKGltZ0xpc3QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGV4dHVyZUN1YmUuaW1hZ2UgPSB1dGlsLmNsb25lKGltZ0xpc3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dHVyZUN1YmU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIG1hdGVyaWFsLlxuICogQHBhcmFtIHtPYmplY3R9IG1hdGVyaWFsQ29uZmlnLiBtYXRlcmlhbENvbmZpZyBjb250YWlucyBgc2hhZGVyYCwgYHRyYW5zcGFyZW50YCBhbmQgdW5pZm9ybXMgdGhhdCB1c2VkIGluIGNvcnJlc3BvbmRpbmcgdW5pZm9ybXMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWZvcm1zIGNhbiBiZSBgY29sb3JgLCBgYWxwaGFgIGBkaWZmdXNlTWFwYCBldGMuXG4gKiBAcGFyYW0ge3N0cmluZ3xjbGF5LlNoYWRlcn0gW3NoYWRlcj0nY2xheS5zdGFuZGFyZE1SJ10gRGVmYXVsdCB0byBiZSBzdGFuZGFyZCBzaGFkZXIgd2l0aCBtZXRhbG5lc3MgYW5kIHJvdWdobmVzcyB3b3JrZmxvdy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50PWZhbHNlXSBJZiBtYXRlcmlhbCBpcyB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbnZlcnRUZXh0dXJlVG9QT1Q9ZmFsc2VdIEZvcmNlIGNvbnZlcnQgTm9uZSBQb3dlciBvZiBUd28gdGV4dHVyZSB0byBQb3dlciBvZiB0d28gc28gaXQgY2FuIGJlIHRpbGVkLlxuICogQHJldHVybiB7Y2xheS5NYXRlcmlhbH1cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1hdGVyaWFsID0gZnVuY3Rpb24gKG1hdENvbmZpZykge1xuICAgIG1hdENvbmZpZyA9IG1hdENvbmZpZyB8fCB7fTtcbiAgICBtYXRDb25maWcuc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZE1SJztcbiAgICB2YXIgc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciBpbnN0YW5jZW9mIFNoYWRlciA/IG1hdENvbmZpZy5zaGFkZXIgOiBzaGFkZXJMaWJyYXJ5LmdldChtYXRDb25maWcuc2hhZGVyKTtcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICBzaGFkZXI6IHNoYWRlclxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIG1ha2VUZXh0dXJlU2V0dGVyKGtleSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRleHR1cmUpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB0ZXh0dXJlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIG1hdENvbmZpZykge1xuICAgICAgICBpZiAobWF0ZXJpYWwudW5pZm9ybXNba2V5XSkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IG1hdENvbmZpZ1trZXldO1xuICAgICAgICAgICAgaWYgKChtYXRlcmlhbC51bmlmb3Jtc1trZXldLnR5cGUgPT09ICd0JyB8fCBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSlcbiAgICAgICAgICAgICAgICAmJiAhKHZhbCBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBhIHRleHR1cmUuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGV4dHVyZSh2YWwsIHtcbiAgICAgICAgICAgICAgICAgICAgY29udmVydFRvUE9UOiBtYXRDb25maWcuY29udmVydFRleHR1cmVUb1BPVFxuICAgICAgICAgICAgICAgIH0pLnRoZW4obWFrZVRleHR1cmVTZXR0ZXIoa2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKGtleSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXRDb25maWcudHJhbnNwYXJlbnQpIHtcbiAgICAgICAgbWF0Q29uZmlnLmRlcHRoTWFzayA9IGZhbHNlO1xuICAgICAgICBtYXRDb25maWcudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gbWF0ZXJpYWw7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqIEBleGFtcGxlXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZS5cbiAqICBhcHAuY3JlYXRlQ3ViZSgpXG4gKi9cbkFwcDNELnByb3RvdHlwZS5jcmVhdGVDdWJlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBzdWJkaXYpIHtcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcbiAgICAgICAgc3ViZGl2ID0gMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcbiAgICB9XG5cbiAgICB2YXIgZ2VvS2V5ID0gJ2N1YmUtJyArIHN1YmRpdi5qb2luKCctJyk7XG4gICAgdmFyIGN1YmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcbiAgICBpZiAoIWN1YmUpIHtcbiAgICAgICAgY3ViZSA9IG5ldyBDdWJlR2VvKHtcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV0sXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cbiAgICAgICAgfSk7XG4gICAgICAgIGN1YmUuZ2VuZXJhdGVUYW5nZW50cygpO1xuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCB0aGF0IGNhbWVyYSBpcyBpbnNpZGUgdGhlIGN1YmUuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqIEBleGFtcGxlXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZSBpbnNpZGUuXG4gKiAgYXBwLmNyZWF0ZUN1YmVJbnNpZGUoKVxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZUluc2lkZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XG4gICAgICAgIHN1YmRpdiA9IDE7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xuICAgICAgICBzdWJkaXYgPSBbc3ViZGl2LCBzdWJkaXYsIHN1YmRpdl07XG4gICAgfVxuICAgIHZhciBnZW9LZXkgPSAnY3ViZUluc2lkZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcbiAgICB2YXIgY3ViZSA9IHRoaXMuX2dlb0NhY2hlLmdldChnZW9LZXkpO1xuICAgIGlmICghY3ViZSkge1xuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xuICAgICAgICAgICAgaW5zaWRlOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXSxcbiAgICAgICAgICAgIGRlcHRoU2VnbWVudHM6IHN1YmRpdlsyXVxuICAgICAgICB9KTtcbiAgICAgICAgY3ViZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIGN1YmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goY3ViZSwgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBzcGhlcmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdWJkaXZpc2lvbj0yMF0gU3ViZGl2aXNpb24gb2Ygc3BoZXJlLlxuICogQHJldHVybiB7Y2xheS5NZXNofVxuICogQGV4YW1wbGVcbiAqICAvLyBDcmVhdGUgYSBzZW1pLXRyYW5zcGFyZW50IHNwaGVyZS5cbiAqICBhcHAuY3JlYXRlU3BoZXJlKHtcbiAqICAgICAgY29sb3I6IFswLCAwLCAxXSxcbiAqICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gKiAgICAgIGFscGhhOiAwLjVcbiAqICB9KVxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlU3BoZXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBzdWJkaXZpc2lvbikge1xuICAgIGlmIChzdWJkaXZpc2lvbiA9PSBudWxsKSB7XG4gICAgICAgIHN1YmRpdmlzaW9uID0gMjA7XG4gICAgfVxuICAgIHZhciBnZW9LZXkgPSAnc3BoZXJlLScgKyBzdWJkaXZpc2lvbjtcbiAgICB2YXIgc3BoZXJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XG4gICAgaWYgKCFzcGhlcmUpIHtcbiAgICAgICAgc3BoZXJlID0gbmV3IFNwaGVyZUdlbyh7XG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZpc2lvbiAqIDIsXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2aXNpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHNwaGVyZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIHNwaGVyZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goc3BoZXJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHBsYW5lIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58bnVtYmVyfSBbc3ViZGl2aXNpb249MV0gU3ViZGl2aXNpb24gb2YgcGxhbmUuXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XG4gKiBAZXhhbXBsZVxuICogIC8vIENyZWF0ZSBhIHJlZCBjb2xvciBwbGFuZS5cbiAqICBhcHAuY3JlYXRlUGxhbmUoe1xuICogICAgICBjb2xvcjogWzEsIDAsIDBdXG4gKiAgfSlcbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBzdWJkaXYpIHtcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcbiAgICAgICAgc3ViZGl2ID0gMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdl07XG4gICAgfVxuICAgIHZhciBnZW9LZXkgPSAncGxhbmUtJyArIHN1YmRpdi5qb2luKCctJyk7XG4gICAgdmFyIHBsYW5lR2VvID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XG4gICAgaWYgKCFwbGFuZUdlbykge1xuICAgICAgICBwbGFuZUdlbyA9IG5ldyBQbGFuZUdlbyh7XG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdXG4gICAgICAgIH0pO1xuICAgICAgICBwbGFuZUdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIHBsYW5lR2VvKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChwbGFuZUdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgbWVzaCB3aXRoIHBhcmFtZXRyaWMgc3VyZmFjZSBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXG4gKiBAcGFyYW0ge09iamVjdH0gZ2VuZXJhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBhcmFtZXRyaWNTdXJmYWNlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBnZW5lcmF0b3IpIHtcbiAgICB2YXIgZ2VvID0gbmV3IFBhcmFtZXRyaWNTdXJmYWNlR2VvKHtcbiAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3JcbiAgICB9KTtcbiAgICBnZW8uZ2VuZXJhdGVUYW5nZW50cygpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goZ2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgZ2VuZXJhbCBtZXNoIHdpdGggZ2l2ZW4gZ2VvbWV0cnkgaW5zdGFuY2UgYW5kIG1hdGVyaWFsIGNvbmZpZy5cbiAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1lc2ggPSBmdW5jdGlvbiAoZ2VvbWV0cnksIG1hdCwgcGFyZW50Tm9kZSkge1xuICAgIHZhciBtZXNoID0gbmV3IE1lc2goe1xuICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXG4gICAgICAgIG1hdGVyaWFsOiBtYXQgaW5zdGFuY2VvZiBNYXRlcmlhbCA/IG1hdCA6IHRoaXMuY3JlYXRlTWF0ZXJpYWwobWF0KVxuICAgIH0pO1xuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XG4gICAgcGFyZW50Tm9kZS5hZGQobWVzaCk7XG4gICAgcmV0dXJuIG1lc2g7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBlbXB0eSBub2RlXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gcGFyZW50Tm9kZVxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XG4gICAgcGFyZW50Tm9kZS5hZGQobm9kZSk7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHBlcnNwZWN0aXZlIG9yIG9ydGhvZ3JhcGhpYyBjYW1lcmEgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkubWF0aC5WZWN0b3IzfSBwb3NpdGlvblxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5Lm1hdGguVmVjdG9yM30gdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9XCJwZXJzcGVjdGl2ZVwiXSBDYW4gYmUgJ3BlcnNwZWN0aXZlJyBvciAnb3J0aG9ncmFwaGljJyhpbiBzaG9ydCAnb3J0aG8nKVxuICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XG4gKi9cbkFwcDNELnByb3RvdHlwZS5jcmVhdGVDYW1lcmEgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRhcmdldCwgdHlwZSkge1xuICAgIHZhciBDYW1lcmFDdG9yO1xuICAgIGlmICh0eXBlID09PSAnb3J0aG8nIHx8IHR5cGUgPT09ICdvcnRob2dyYXBoaWMnKSB7XG4gICAgICAgIENhbWVyYUN0b3IgPSBPcnRob2dyYXBoaWNDYW1lcmE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAodHlwZSAmJiB0eXBlICE9PSAncGVyc3BlY3RpdmUnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtvd24gY2FtZXJhIHR5cGUgJyArIHR5cGUgKyAnLiBVc2UgZGVmYXVsdCBwZXJzcGVjdGl2ZSBjYW1lcmEnKTtcbiAgICAgICAgfVxuICAgICAgICBDYW1lcmFDdG9yID0gUGVyc3BlY3RpdmVDYW1lcmE7XG4gICAgfVxuXG4gICAgdmFyIGNhbWVyYSA9IG5ldyBDYW1lcmFDdG9yKCk7XG4gICAgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMykge1xuICAgICAgICBjYW1lcmEucG9zaXRpb24uY29weShwb3NpdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjModGFyZ2V0WzBdLCB0YXJnZXRbMV0sIHRhcmdldFsyXSk7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XG4gICAgICAgIGNhbWVyYS5sb29rQXQodGFyZ2V0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNjZW5lLmFkZChjYW1lcmEpO1xuXG4gICAgcmV0dXJuIGNhbWVyYTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkubWF0aC5WZWN0b3IzfSBkaXIgQSBWZWN0b3IzIG9yIGFycmF5IHRvIHJlcHJlc2VudCB0aGUgZGlyZWN0aW9uLlxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ludGVuc2l0eV0gSW50ZW5zaXR5IG9mIGRpcmVjdGlvbmFsIGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXG4gKlxuICogQGV4YW1wbGVcbiAqICBhcHAuY3JlYXRlRGlyZWN0aW9uYWxMaWdodChbLTEsIC0xLCAtMV0sICcjZmZmJywgMik7XG4gKi9cbkFwcDNELnByb3RvdHlwZS5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0ID0gZnVuY3Rpb24gKGRpciwgY29sb3IsIGludGVuc2l0eSkge1xuICAgIHZhciBsaWdodCA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0KCk7XG4gICAgaWYgKGRpciBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcbiAgICAgICAgZGlyID0gZGlyLmFycmF5O1xuICAgIH1cbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShkaXIpLm5lZ2F0ZSgpO1xuICAgIGxpZ2h0Lmxvb2tBdChWZWN0b3IzLlpFUk8pO1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XG4gICAgfVxuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQobGlnaHQpO1xuICAgIHJldHVybiBsaWdodDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgc3BvdCBsaWdodCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5tYXRoLlZlY3RvcjN9IHBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBzcG90IGxpZ2h0LlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5Lm1hdGguVmVjdG9yM30gW3RhcmdldF0gVGFyZ2V0IHBvc2l0aW9uIHdoZXJlIHNwb3QgbGlnaHQgcG9pbnRzIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtyYW5nZT0yMF0gRmFsbG9mZiByYW5nZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDIwLlxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2Ygc3BvdCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBzcG90IGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXG4gKiBAcGFyYW0ge251bWJlcn0gW3VtYnJhQW5nbGU9MzBdIFVtYnJhIGFuZ2xlIG9mIHNwb3QgbGlnaHQuIERlZmF1bHQgdG8gYmUgMzAgZGVncmVlIGZyb20gdGhlIG1pZGRsZSBsaW5lLlxuICogQHBhcmFtIHtudW1iZXJ9IFtwZW51bWJyYUFuZ2xlPTQ1XSBQZW51bWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDQ1IGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogIGFwcC5jcmVhdGVTcG90TGlnaHQoWzUsIDUsIDVdLCBbMCwgMCwgMF0sIDIwLCAjOTAwKTtcbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVNwb3RMaWdodCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgdGFyZ2V0LCByYW5nZSwgY29sb3IsIGludGVuc2l0eSwgdW1icmFBbmdsZSwgcGVudW1icmFBbmdsZSkge1xuICAgIHZhciBsaWdodCA9IG5ldyBTcG90TGlnaHQoKTtcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcblxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcbiAgICAgICAgbGlnaHQubG9va0F0KHRhcmdldCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yKGNvbG9yKTtcbiAgICB9XG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XG4gICAgaW50ZW5zaXR5ICE9IG51bGwgJiYgKGxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eSk7XG4gICAgdW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC51bWJyYUFuZ2xlID0gdW1icmFBbmdsZSk7XG4gICAgcGVudW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC5wZW51bWJyYUFuZ2xlID0gcGVudW1icmFBbmdsZSk7XG5cbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XG5cbiAgICByZXR1cm4gbGlnaHQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHBvaW50IGxpZ2h0LlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5Lm1hdGguVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgcG9pbnQgbGlnaHQuLlxuICogQHBhcmFtIHtudW1iZXJ9IFtyYW5nZT0xMDBdIEZhbGxvZmYgcmFuZ2Ugb2YgcG9pbnQgbGlnaHQuXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBwb2ludCBsaWdodC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBwb2ludCBsaWdodC5cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBvaW50TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5KSB7XG4gICAgdmFyIGxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcblxuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XG4gICAgfVxuICAgIHJhbmdlICE9IG51bGwgJiYgKGxpZ2h0LnJhbmdlID0gcmFuZ2UpO1xuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQobGlnaHQpO1xuXG4gICAgcmV0dXJuIGxpZ2h0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBhbWJpZW50IGxpZ2h0LlxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgYW1iaWVudCBsaWdodC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBhbWJpZW50IGxpZ2h0LlxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudExpZ2h0ID0gZnVuY3Rpb24gKGNvbG9yLCBpbnRlbnNpdHkpIHtcbiAgICB2YXIgbGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KCk7XG5cbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xuICAgIH1cbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcblxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcblxuICAgIHJldHVybiBsaWdodDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIGN1YmVtYXAgYW1iaWVudCBsaWdodCBhbmQgYW4gc3BoZXJpY2FsIGhhcm1vbmljIGFtYmllbnQgbGlnaHRcbiAqIGZvciBzcGVjdWxhciBhbmQgZGlmZnVzZSBsaWdodGluZyBpbiBQQlIgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge0ltYWdlTGlrZXxUZXh0dXJlQ3ViZX0gW2VudkltYWdlXSBQYW5vcmFtYSBlbnZpcm9ubWVudCBpbWFnZSwgSERSIGZvcm1hdCBpcyBiZXR0ZXIuIE9yIGEgcHJlIGxvYWRlZCB0ZXh0dXJlIGN1YmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlY3VsYXJJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIHNwZWN1bGFyIGxpZ2h0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtkaWZmdXNlSW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBkaWZmdXNlIGxpZ2h0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtleHBvc3VyZT0xXSBFeHBvc3VyZSBvZiBIRFIgaW1hZ2UuIE9ubHkgaWYgaW1hZ2UgaW4gZmlyc3QgcGFyYW10ZXIgaXMgSERSLlxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVmaWx0ZXJlZEN1YmVtYXBTaXplPTMyXSBUaGUgc2l6ZSBvZiBwcmVmaWxlcnRlZCBjdWJlbWFwLiBMYXJnZXIgdmFsdWUgd2lsbCB0YWtlIG1vcmUgdGltZSB0byBkbyBleHBlbnNpdmUgcHJlZmlsdGVyaW5nLlxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudEN1YmVtYXBMaWdodCA9IGZ1bmN0aW9uIChlbnZJbWFnZSwgc3BlY0ludGVuc2l0eSwgZGlmZkludGVuc2l0eSwgZXhwb3N1cmUsIHByZWZpbHRlcmVkQ3ViZW1hcFNpemUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcbiAgICAgICAgZXhwb3N1cmUgPSAxO1xuICAgIH1cbiAgICBpZiAocHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9PSBudWxsKSB7XG4gICAgICAgIHByZWZpbHRlcmVkQ3ViZW1hcFNpemUgPSAzMjtcbiAgICB9XG5cbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xuXG4gICAgdmFyIGxvYWRQcm9taXNlO1xuICAgIGlmIChlbnZJbWFnZS50ZXh0dXJlVHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgICBsb2FkUHJvbWlzZSA9IGVudkltYWdlLmlzUmVuZGVyYWJsZSgpXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShlbnZJbWFnZSlcbiAgICAgICAgICAgIDogbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIGVudkltYWdlLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVudkltYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRUZXh0dXJlKGVudkltYWdlLCB7XG4gICAgICAgICAgICBleHBvc3VyZTogZXhwb3N1cmVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvYWRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGVudlRleHR1cmUpIHtcbiAgICAgICAgdmFyIHNwZWNMaWdodCA9IG5ldyBBbWJpZW50Q3ViZW1hcExpZ2h0KHtcbiAgICAgICAgICAgIGludGVuc2l0eTogc3BlY0ludGVuc2l0eSAhPSBudWxsID8gc3BlY0ludGVuc2l0eSA6IDAuN1xuICAgICAgICB9KTtcbiAgICAgICAgc3BlY0xpZ2h0LmN1YmVtYXAgPSBlbnZUZXh0dXJlO1xuICAgICAgICBlbnZUZXh0dXJlLmZsaXBZID0gZmFsc2U7XG4gICAgICAgIC8vIFRPRE8gQ2FjaGUgcHJlZmlsdGVyID9cbiAgICAgICAgc3BlY0xpZ2h0LnByZWZpbHRlcihzZWxmLnJlbmRlcmVyLCAzMik7XG5cbiAgICAgICAgdmFyIGRpZmZMaWdodCA9IG5ldyBBbWJpZW50U0hMaWdodCh7XG4gICAgICAgICAgICBpbnRlbnNpdHk6IGRpZmZJbnRlbnNpdHkgIT0gbnVsbCA/IGRpZmZJbnRlbnNpdHkgOiAwLjcsXG4gICAgICAgICAgICBjb2VmZmljaWVudHM6IHNoVXRpbC5wcm9qZWN0RW52aXJvbm1lbnRNYXAoXG4gICAgICAgICAgICAgICAgc2VsZi5yZW5kZXJlciwgc3BlY0xpZ2h0LmN1YmVtYXAsIHtcbiAgICAgICAgICAgICAgICAgICAgbG9kOiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgICAgc2NlbmUuYWRkKHNwZWNMaWdodCk7XG4gICAgICAgIHNjZW5lLmFkZChkaWZmTGlnaHQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGVjdWxhcjogc3BlY0xpZ2h0LFxuICAgICAgICAgICAgZGlmZnVzZTogZGlmZkxpZ2h0LFxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgZW52aXJvbm1lbnQgbWFwXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52VGV4dHVyZVxuICAgICAgICB9O1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgZm9ybWF0IG1vZGVsLlxuICogWW91IGNhbiBjb252ZXJ0IEZCWC9EQUUvT0JKIGZvcm1hdCBtb2RlbHMgdG8gW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgd2l0aCBbZmJ4MmdsdGZdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXlnbCNmYngtdG8tZ2x0ZjIwLWNvbnZlcnRlcikgcHl0aG9uIHNjcmlwdCxcbiAqIG9yIHNpbXBseSB1c2luZyB0aGUgW0NsYXkgVmlld2VyXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5LXZpZXdlcikgY2xpZW50IGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7c3RyaW5nfGNsYXkuU2hhZGVyfSBbb3B0cy5zaGFkZXI9J2NsYXkuc3RhbmRhcmQnXSAnYmFzaWMnfCdsYW1iZXJ0J3wnc3RhbmRhcmQnLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy53YWl0VGV4dHVyZUxvYWRlZD1mYWxzZV0gSWYgYWRkIHRvIHNjZW5lIHV0aWwgdGV4dHVyZXMgYXJlIGFsbCBsb2FkZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmF1dG9QbGF5QW5pbWF0aW9uPXRydWVdIElmIGF1dG9wbGF5IHRoZSBhbmltYXRpb24gb2YgbW9kZWwuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVwQXhpcz0neSddIENoYW5nZSBtb2RlbCB0byB5IHVwIGlmIHVwQXhpcyBpcyAneidcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudGV4dHVyZUZsaXBZPWZhbHNlXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnRleHR1cmVSb290UGF0aF0gUm9vdCBwYXRoIG9mIHRleHR1cmUuIERlZmF1bHQgdG8gYmUgcmVsYXRpdmUgd2l0aCBnbFRGIGZpbGUuXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5BcHAzRC5wcm90b3R5cGUubG9hZE1vZGVsID0gZnVuY3Rpb24gKHVybCwgb3B0cykge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgVVJMLicpO1xuICAgIH1cblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID09IG51bGwpIHtcbiAgICAgICAgb3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIHZhciBzaGFkZXIgPSBvcHRzLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZCc7XG5cbiAgICB2YXIgbG9hZGVyT3B0cyA9IHtcbiAgICAgICAgcm9vdE5vZGU6IG5ldyBOb2RlKCksXG4gICAgICAgIHNoYWRlcjogc2hhZGVyLFxuICAgICAgICB0ZXh0dXJlUm9vdFBhdGg6IG9wdHMudGV4dHVyZVJvb3RQYXRoLFxuICAgICAgICBjcm9zc09yaWdpbjogJ0Fub255bW91cycsXG4gICAgICAgIHRleHR1cmVGbGlwWTogb3B0cy50ZXh0dXJlRmxpcFlcbiAgICB9O1xuICAgIGlmIChvcHRzLnVwQXhpcyAmJiBvcHRzLnVwQXhpcy50b0xvd2VyQ2FzZSgpID09PSAneicpIHtcbiAgICAgICAgbG9hZGVyT3B0cy5yb290Tm9kZS5yb3RhdGlvbi5pZGVudGl0eSgpLnJvdGF0ZVgoLU1hdGguUEkgLyAyKTtcbiAgICB9XG5cbiAgICB2YXIgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIobG9hZGVyT3B0cyk7XG5cbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xuICAgIHZhciB0aW1lbGluZSA9IHRoaXMudGltZWxpbmU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuX2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY2VuZS5hZGQocmVzdWx0LnJvb3ROb2RlKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuYWRkQ2xpcChjbGlwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBsb2FkZXIuc3VjY2VzcyhmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghb3B0cy53YWl0VGV4dHVyZUxvYWRlZCkge1xuICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocmVzdWx0LnRleHR1cmVzLm1hcChmdW5jdGlvbiAodGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3IocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhZnRlckxvYWQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvYWRlci5lcnJvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxvYWRlci5sb2FkKHVybCk7XG4gICAgfSk7XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBBcHAzRDogQXBwM0QsXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgM0QgYXBwbGljYXRpb24gdGhhdCB3aWxsIG1hbmFnZSB0aGUgYXBwIGluaXRpYWxpemF0aW9uIGFuZCBsb29wLlxuICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlXG4gICAgICogQHBhcmFtIHtIVE1MRG9tRWxlbWVudHxzdHJpbmd9IGRvbSBDb250YWluZXIgZG9tIGVsZW1lbnQgb3IgYSBzZWxlY3RvciBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBgcXVlcnlTZWxlY3RvcmBcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYXBwTlNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbml0IEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBpbml0aW5nIGFwcC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsb29wIExvb3AgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBlYWNoIGZyYW1lLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIENvbnRhaW5lciB3aWR0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RldmljZVBpeGVsUmF0aW9dXG4gICAgICogQHJldHVybiB7Y2xheS5hcHBsaWNhdGlvbi5BcHAzRH1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlKCcjYXBwJywge1xuICAgICAqICAgICAgaW5pdDogZnVuY3Rpb24gKGFwcCkge1xuICAgICAqICAgICAgICAgIGFwcC5jcmVhdGVDdWJlKCk7XG4gICAgICogICAgICAgICAgdmFyIGNhbWVyYSA9IGFwcC5jcmVhdGVDYW1lcmEoKTtcbiAgICAgKiAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDIpO1xuICAgICAqICAgICAgfSxcbiAgICAgKiAgICAgIGxvb3A6IGZ1bmN0aW9uICgpIHsgLy8gbm9vcCB9XG4gICAgICogIH0pXG4gICAgICovXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoZG9tLCBhcHBOUykge1xuICAgICAgICByZXR1cm4gbmV3IEFwcDNEKGRvbSwgYXBwTlMpO1xuICAgIH1cbn07IiwiaW1wb3J0IG5vdGlmaWVyIGZyb20gJy4uL2NvcmUvbWl4aW4vbm90aWZpZXInO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vY29yZS9yZXF1ZXN0JztcbmltcG9ydCB1dGlsICBmcm9tICcuLi9jb3JlL3V0aWwnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza1xuICogQG1peGVzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxuICovXG52YXIgVGFzayA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2Z1bGxmaWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xufTtcbi8qKlxuICogVGFzayBzdWNjZXNzZWRcbiAqIEBwYXJhbSB7fSBkYXRhXG4gKi9cblRhc2sucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IHRydWU7XG4gICAgdGhpcy5fcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcbn07XG4vKipcbiAqIFRhc2sgZmFpbGVkXG4gKiBAcGFyYW0ge30gZXJyXG4gKi9cblRhc2sucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKGVycikge1xuICAgIHRoaXMuX3JlamVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gZmFsc2U7XG4gICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycik7XG59O1xuLyoqXG4gKiBJZiB0YXNrIHN1Y2Nlc3NlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuVGFzay5wcm90b3R5cGUuaXNGdWxsZmlsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQ7XG59O1xuLyoqXG4gKiBJZiB0YXNrIGZhaWxlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuVGFzay5wcm90b3R5cGUuaXNSZWplY3RlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWplY3RlZDtcbn07XG4vKipcbiAqIElmIHRhc2sgZmluaXNoZWQsIGVpdGhlciBzdWNjZXNzZWQgb3IgZmFpbGVkXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5UYXNrLnByb3RvdHlwZS5pc1NldHRsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZCB8fCB0aGlzLl9yZWplY3RlZDtcbn07XG5cbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XG5cbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0VGFzayh1cmwsIHJlc3BvbnNlVHlwZSkge1xuICAgIHZhciB0YXNrID0gbmV3IFRhc2soKTtcbiAgICByZXF1ZXN0LmdldCh7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICByZXNwb25zZVR5cGU6IHJlc3BvbnNlVHlwZSxcbiAgICAgICAgb25sb2FkOiBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgdGFzay5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhc2s7XG59XG4vKipcbiAqIE1ha2UgYSByZXF1ZXN0IHRhc2tcbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R8b2JqZWN0W118c3RyaW5nW119IHVybFxuICogQHBhcmFtICB7c3RyaW5nfSBbcmVzcG9uc2VUeXBlXVxuICogQGV4YW1wbGVcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKCcuL2EuanNvbicpO1xuICogICAgIHZhciB0YXNrID0gVGFzay5tYWtlUmVxdWVzdFRhc2soe1xuICogICAgICAgICB1cmw6ICdiLmJpbicsXG4gKiAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xuICogICAgIH0pO1xuICogICAgIHZhciB0YXNrcyA9IFRhc2subWFrZVJlcXVlc3RUYXNrKFsnLi9hLmpzb24nLCAnLi9iLmpzb24nXSk7XG4gKiAgICAgdmFyIHRhc2tzID0gVGFzay5tYWtlUmVxdWVzdFRhc2soW1xuICogICAgICAgICB7dXJsOiAnYS5qc29uJ30sXG4gKiAgICAgICAgIHt1cmw6ICdiLmJpbicsIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ31cbiAqICAgICBdKTtcbiAqIEByZXR1cm4ge2NsYXkuYXN5bmMuVGFza3xjbGF5LmFzeW5jLlRhc2tbXX1cbiAqL1xuVGFzay5tYWtlUmVxdWVzdFRhc2sgPSBmdW5jdGlvbih1cmwsIHJlc3BvbnNlVHlwZSkge1xuICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKTtcbiAgICB9IGVsc2UgaWYgKHVybC51cmwpIHsgICAvLyAgQ29uZmlndXJlIG9iamVjdFxuICAgICAgICB2YXIgb2JqID0gdXJsO1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKG9iai51cmwsIG9iai5yZXNwb25zZVR5cGUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7ICAvLyBVcmwgbGlzdFxuICAgICAgICB2YXIgdXJsTGlzdCA9IHVybDtcbiAgICAgICAgdmFyIHRhc2tzID0gW107XG4gICAgICAgIHVybExpc3QuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHZhciB1cmwsIHJlc3BvbnNlVHlwZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHVybCA9IG9iajtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KG9iaikgPT09IG9iaikge1xuICAgICAgICAgICAgICAgIHVybCA9IG9iai51cmw7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlID0gb2JqLnJlc3BvbnNlVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzLnB1c2gobWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFza3M7XG4gICAgfVxufTtcbi8qKlxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfVxuICovXG5UYXNrLm1ha2VUYXNrID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBUYXNrKCk7XG59O1xuXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBUYXNrO1xuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcbmltcG9ydCBUYXNrIGZyb20gJy4vVGFzayc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrR3JvdXBcbiAqIEBleHRlbmRzIGNsYXkuYXN5bmMuVGFza1xuICovXG52YXIgVGFza0dyb3VwID0gZnVuY3Rpb24gKCkge1xuXG4gICAgVGFzay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5fdGFza3MgPSBbXTtcblxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XG5cbiAgICB0aGlzLl9yZWplY3RlZE51bWJlciA9IDA7XG59O1xuXG52YXIgQ3RvciA9IGZ1bmN0aW9uICgpe307XG5DdG9yLnByb3RvdHlwZSA9IFRhc2sucHJvdG90eXBlO1xuVGFza0dyb3VwLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XG5cblRhc2tHcm91cC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUYXNrR3JvdXA7XG5cbi8qKlxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIHN1Y2Nlc3NlZCwgdGFzayBjYW4gYWxzbyBiZSBhbnkgbm90aWZpZXIgb2JqZWN0IHdoaWNoIHdpbGwgdHJpZ2dlciBzdWNjZXNzIGFuZCBlcnJvciBldmVudHMuIExpa2Uge0BsaW5rIGNsYXkuVGV4dHVyZTJEfSwge0BsaW5rIGNsYXkuVGV4dHVyZUN1YmV9LCB7QGxpbmsgY2xheS5sb2FkZXIuR0xURn0uXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcbiAqIEBjaGFpbmFibGVcbiAqIEBleGFtcGxlXG4gKiAgICAgLy8gTG9hZCB0ZXh0dXJlIGxpc3RcbiAqICAgICB2YXIgbGlzdCA9IFsnYS5qcGcnLCAnYi5qcGcnLCAnYy5qcGcnXVxuICogICAgIHZhciB0ZXh0dXJlcyA9IGxpc3QubWFwKGZ1bmN0aW9uIChzcmMpIHtcbiAqICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcbiAqICAgICAgICAgdGV4dHVyZS5sb2FkKHNyYyk7XG4gKiAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICogICAgIH0pO1xuICogICAgIHZhciB0YXNrR3JvdXAgPSBuZXcgY2xheS5hc3luYy5UYXNrR3JvdXAoKTtcbiAqICAgICB0YXNrR3JvdXAuYWxsKHRleHR1cmVzKS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAqICAgICAgICAgLy8gRG8gc29tZSB0aGluZyBhZnRlciBhbGwgdGV4dHVyZXMgbG9hZGVkXG4gKiAgICAgfSk7XG4gKi9cblRhc2tHcm91cC5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBbXTtcbiAgICB0aGlzLl90YXNrcyA9IHRhc2tzO1xuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xuXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY291bnQrKztcbiAgICAgICAgdGFzay5vbmNlKCdzdWNjZXNzJywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgY291bnQtLTtcblxuICAgICAgICAgICAgc2VsZi5fZnVsZmlsbGVkTnVtYmVyKys7XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyBTb21lIHRhc2tzIGxpa2UgdGV4dHVyZSwgbG9hZGVyIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGFza1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHN0YXRlcyBoZXJlXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIgKys7XG5cbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBzZWxmLnJlamVjdCh0YXNrKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcbi8qKlxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxuICogQHBhcmFtICB7QXJyYXkuPGNsYXkuYXN5bmMuVGFzaz59IHRhc2tzXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2tHcm91cH1cbiAqL1xuVGFza0dyb3VwLnByb3RvdHlwZS5hbGxTZXR0bGVkID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBbXTtcbiAgICBpZiAodGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fdGFza3MgPSB0YXNrcztcblxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xuICAgICAgICBpZiAoIXRhc2sgfHwgIXRhc2sub25jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGNvdW50LS07XG5cbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xuXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNvdW50LS07XG5cbiAgICAgICAgICAgIHNlbGYuX3JlamVjdGVkTnVtYmVyKys7XG5cbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn07XG4vKipcbiAqIEdldCBzdWNjZXNzZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldEZ1bGZpbGxlZE51bWJlciA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcbiAgICBpZiAocmVjdXJzaXZlKSB7XG4gICAgICAgIHZhciBuRnVsZmlsbGVkID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgbkZ1bGZpbGxlZCArPSB0YXNrLmdldEZ1bGZpbGxlZE51bWJlcihyZWN1cnNpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX2Z1bGZpbGxlZCkge1xuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbkZ1bGZpbGxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyO1xuICAgIH1cbn07XG5cbi8qKlxuICogR2V0IGZhaWxlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0UmVqZWN0ZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgICAgICB2YXIgblJlamVjdGVkID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IHRhc2suZ2V0UmVqZWN0ZWROdW1iZXIocmVjdXJzaXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCkge1xuICAgICAgICAgICAgICAgIG5SZWplY3RlZCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuUmVqZWN0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xuICAgIH1cbn07XG5cbi8qKlxuICogR2V0IGZpbmlzaGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRTZXR0bGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xuXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgICAgICB2YXIgblNldHRsZWQgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSB0YXNrLmdldFNldHRsZWROdW1iZXIocmVjdXJzaXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCB8fCB0YXNrLl9mdWxmaWxsZWQpIHtcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuU2V0dGxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyICsgdGhpcy5fcmVqZWN0ZWROdW1iZXI7XG4gICAgfVxufTtcblxuLyoqXG4gKiBHZXQgYWxsIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRUYXNrTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xuICAgIGlmIChyZWN1cnNpdmUpIHtcbiAgICAgICAgdmFyIG5UYXNrID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgblRhc2sgKz0gdGFzay5nZXRUYXNrTnVtYmVyKHJlY3Vyc2l2ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5UYXNrICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5UYXNrO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrcy5sZW5ndGg7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFza0dyb3VwO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcblxudmFyIENhbnZhc01hdGVyaWFsID0gQmFzZS5leHRlbmQoe1xuXG4gICAgY29sb3I6IFsxLCAxLCAxLCAxXSxcblxuICAgIG9wYWNpdHk6IDEsXG5cbiAgICBwb2ludFNpemU6IDAsXG5cbiAgICBwb2ludFNoYXBlOiAncmVjdGFuZ2xlJ1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbnZhc01hdGVyaWFsO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG52YXIgdmVjNCA9IGdsTWF0cml4LnZlYzQ7XG5cbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XG52YXIgdmVjM0NyZWF0ZSA9IHZlYzMuY3JlYXRlO1xuXG52YXIgdmVjNENyZWF0ZSA9IHZlYzQuY3JlYXRlO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG52YXIgUFJJTUlUSVZFX1RSSUFOR0xFID0gMTtcbnZhciBQUklNSVRJVkVfTElORSA9IDI7XG52YXIgUFJJTUlUSVZFX1BPSU5UID0gMztcblxuZnVuY3Rpb24gUHJpbWl0aXZlUG9vbChjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY3RvciA9IGNvbnN0cnVjdG9yO1xuXG4gICAgdGhpcy5fZGF0YSA9IFtdO1xuXG4gICAgdGhpcy5fc2l6ZSA9IDA7XG59XG5cblByaW1pdGl2ZVBvb2wucHJvdG90eXBlID0ge1xuICAgIHBpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3NpemU7XG4gICAgICAgIHZhciBvYmogPSBkYXRhW3NpemVdO1xuICAgICAgICBpZiAoISBvYmopIHtcbiAgICAgICAgICAgIC8vIENvbnN0cnVjdG9yIG11c3QgaGF2ZSBubyBwYXJhbWV0ZXJzXG4gICAgICAgICAgICBvYmogPSBuZXcgdGhpcy5jdG9yKCk7XG4gICAgICAgICAgICBkYXRhW3NpemVdID0gb2JqO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpemUrKztcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgfSxcblxuICAgIHNocmluazogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9kYXRhLmxlbmd0aCA9IHRoaXMuX3NpemU7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBUcmlhbmdsZSgpIHtcbiAgICB0aGlzLnZlcnRpY2VzID0gW3ZlYzRDcmVhdGUoKSwgdmVjNENyZWF0ZSgpLCB2ZWM0Q3JlYXRlKCldO1xuICAgIHRoaXMuY29sb3IgPSB2ZWM0Q3JlYXRlKCk7XG5cbiAgICB0aGlzLmRlcHRoID0gMDtcbn1cblxuVHJpYW5nbGUucHJvdG90eXBlLnR5cGUgPSBQUklNSVRJVkVfVFJJQU5HTEU7XG5cbmZ1bmN0aW9uIFBvaW50KCkge1xuICAgIC8vIEhlcmUgdXNlIGFuIGFycmF5IHRvIG1ha2UgaXQgbW9yZSBjb252aW5pZW50IHRvIHByb2NjZXNzaW5nIGluIF9zZXRQcmltaXRpdmUgbWV0aG9kXG4gICAgdGhpcy52ZXJ0aWNlcyA9IFt2ZWM0Q3JlYXRlKCldO1xuXG4gICAgdGhpcy5jb2xvciA9IHZlYzRDcmVhdGUoKTtcblxuICAgIHRoaXMuZGVwdGggPSAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUudHlwZSA9IFBSSU1JVElWRV9QT0lOVDtcblxuZnVuY3Rpb24gTGluZSgpIHtcbiAgICB0aGlzLnZlcnRpY2VzID0gW3ZlYzRDcmVhdGUoKSwgdmVjNENyZWF0ZSgpXTtcbiAgICB0aGlzLmNvbG9yID0gdmVjNENyZWF0ZSgpO1xuXG4gICAgdGhpcy5kZXB0aCA9IDA7XG5cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDE7XG59XG5cbkxpbmUucHJvdG90eXBlLnR5cGUgPSBQUklNSVRJVkVfTElORTtcblxuZnVuY3Rpb24gZGVwdGhTb3J0RnVuYyh4LCB5KSB7XG4gICAgLy8gU29ydCBmcm9tIGZhciB0byBuZWFyLCB3aGljaCBpbiBkZXB0aCBvZiBwcm9qZWN0aW9uIHNwYWNlIGlzIGZyb20gbGFyZ2VyIHRvIHNtYWxsZXJcbiAgICByZXR1cm4geS5kZXB0aCAtIHguZGVwdGg7XG59XG5cbmZ1bmN0aW9uIHZlYzNUb0NvbG9yU3RyKHYzKSB7XG4gICAgcmV0dXJuICdyZ2IoJyArIHJvdW5kKHYzWzBdICogMjU1KSArICcsJyArIHJvdW5kKHYzWzFdICogMjU1KSArICcsJyArIHJvdW5kKHYzWzJdICogMjU1KSArICcpJztcbn1cblxuZnVuY3Rpb24gdmVjNFRvQ29sb3JTdHIodjQpIHtcbiAgICByZXR1cm4gJ3JnYmEoJyArIHJvdW5kKHY0WzBdICogMjU1KSArICcsJyArIHJvdW5kKHY0WzFdICogMjU1KSArICcsJyArIHJvdW5kKHY0WzJdICogMjU1KSArICcsJyArIHY0WzNdICsgJyknO1xufVxuXG52YXIgQ2FudmFzUmVuZGVyZXIgPSBCYXNlLmV4dGVuZCh7XG5cbiAgICBjYW52YXM6IG51bGwsXG5cbiAgICBfd2lkdGg6IDEwMCxcblxuICAgIF9oZWlnaHQ6IDEwMCxcblxuICAgIGRldmljZVBpeGVsUmF0aW86IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEuMCxcblxuICAgIGNvbG9yOiBbMC4wLCAwLjAsIDAuMCwgMC4wXSxcblxuICAgIGNsZWFyOiB0cnVlLFxuXG4gICAgY3R4OiBudWxsLFxuXG4gICAgLy8gQ2FjaGVkIHByaW1pdGl2ZSBsaXN0LCBpbmNsdWRpbmcgdHJpYW5nbGUsIGxpbmUsIHBvaW50XG4gICAgX3ByaW1pdGl2ZXM6IFtdLFxuXG4gICAgLy8gVHJpYW5nbGUgcG9vbFxuICAgIF90cmlhbmdsZXM6IG5ldyBQcmltaXRpdmVQb29sKFRyaWFuZ2xlKSxcblxuICAgIC8vIExpbmUgcG9vbFxuICAgIF9saW5lczogbmV3IFByaW1pdGl2ZVBvb2woTGluZSksXG5cbiAgICAvLyBQb2ludCBwb29sXG4gICAgX3BvaW50czogbmV3IFByaW1pdGl2ZVBvb2woUG9pbnQpXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCEgdGhpcy5jYW52YXMpIHtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB9XG4gICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgJ0Vycm9yIGNyZWF0aW5nIFdlYkdMIENvbnRleHQgJyArIGU7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUoKTtcbn0sIHtcblxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGRwcjtcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0V2lkdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH0sXG5cbiAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICB9LFxuXG4gICAgZ2V0Vmlld3BvcnRBc3BlY3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoIC8gdGhpcy5faGVpZ2h0O1xuICAgIH0sXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uIChzY2VuZSwgY2FtZXJhKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2xlYXIpIHtcbiAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICB2YXIgZHByID0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICAgICAgdmFyIHcgPSB0aGlzLl93aWR0aCAqIGRwcjtcbiAgICAgICAgICAgIHZhciBoID0gdGhpcy5faGVpZ2h0ICogZHByO1xuICAgICAgICAgICAgaWYgKGNvbG9yICYmIGNvbG9yWzNdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhhcyB0cmFuc3BhcmVuY3lcbiAgICAgICAgICAgICAgICBpZiAoY29sb3JbM10gPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvci5sZW5ndGggPT09IDQgPyB2ZWM0VG9Db2xvclN0cihjb2xvcikgOiB2ZWMzVG9Db2xvclN0cihjb2xvcik7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHcsIGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2NlbmUudXBkYXRlKCk7XG4gICAgICAgIGNhbWVyYS51cGRhdGUoKTtcblxuICAgICAgICB2YXIgb3BhcXVlTGlzdCA9IHNjZW5lLm9wYXF1ZUxpc3Q7XG4gICAgICAgIHZhciB0cmFuc3BhcmVudExpc3QgPSBzY2VuZS50cmFuc3BhcmVudExpc3Q7XG4gICAgICAgIHZhciBzY2VuZU1hdGVyaWFsID0gc2NlbmUubWF0ZXJpYWw7XG5cbiAgICAgICAgdmFyIGxpc3QgPSBvcGFxdWVMaXN0LmNvbmNhdCh0cmFuc3BhcmVudExpc3QpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhsaXN0LCBjYW1lcmEpO1xuICAgIH0sXG5cbiAgICByZW5kZXJQYXNzOiBmdW5jdGlvbiAobGlzdCwgY2FtZXJhKSB7XG4gICAgICAgIHZhciB2aWV3UHJvaiA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQubXVsdGlwbHkodmlld1Byb2osIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XG4gICAgICAgIHZhciB3b3JsZFZpZXdQcm9qTWF0ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHBvc1ZpZXdTcGFjZSA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgdmFyIHByaW1pdGl2ZXMgPSB0aGlzLl9wcmltaXRpdmVzO1xuICAgICAgICB2YXIgdHJpYW5nbGVzUG9vbCA9IHRoaXMuX3RyaWFuZ2xlcztcbiAgICAgICAgdmFyIGxpbmVzUG9vbCA9IHRoaXMuX2xpbmVzO1xuICAgICAgICB2YXIgcG9pbnRzUG9vbCA9IHRoaXMuX3BvaW50cztcblxuICAgICAgICB0cmlhbmdsZXNQb29sLnJlc2V0KCk7XG4gICAgICAgIGxpbmVzUG9vbC5yZXNldCgpO1xuICAgICAgICBwb2ludHNQb29sLnJlc2V0KCk7XG5cbiAgICAgICAgdmFyIG5QcmltaXRpdmUgPSAwO1xuXG4gICAgICAgIHZhciBpbmRpY2VzID0gWzAsIDAsIDBdO1xuICAgICAgICB2YXIgbWF0Q29sb3IgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XG5cbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkod29ybGRWaWV3UHJvak1hdCwgdmlld1Byb2osIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuICAgICAgICAgICAgLy8gYWxwaGEgaXMgZGVmYXVsdCAxXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuY29sb3IubGVuZ3RoID09IDMpIHtcbiAgICAgICAgICAgICAgICB2ZWMzLmNvcHkobWF0Q29sb3IsIG1hdGVyaWFsLmNvbG9yKTtcbiAgICAgICAgICAgICAgICBtYXRDb2xvclszXSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2ZWM0LmNvcHkobWF0Q29sb3IsIG1hdGVyaWFsLmNvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBnZW9tZXRyeS52ZXJ0ZXhDb3VudDtcbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBUUklBTkdMRVMsIExJTkVTLCBQT0lOVFMgZHJhdyBtb2Rlc1xuICAgICAgICAgICAgc3dpdGNoIChyZW5kZXJhYmxlLm1vZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIGdsZW51bS5UUklBTkdMRVM6XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tZXRyeS5pc1VzZUluZGljZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5GYWNlID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbkZhY2U7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmdldEZhY2UoaiwgaW5kaWNlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSB0cmlhbmdsZXNQb29sLnBpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZS5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXBwZWQgPSB0aGlzLl9zZXRQcmltaXRpdmUodHJpYW5nbGUsIGluZGljZXMsIDMsIGF0dHJpYnV0ZXMsIHdvcmxkVmlld1Byb2pNYXQsIG1hdENvbG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIGNsaXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlc1tuUHJpbWl0aXZlKytdID0gdHJpYW5nbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuVmVydGV4Oykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbMF0gPSBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1sxXSA9IGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzWzJdID0gaisrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyaWFuZ2xlID0gdHJpYW5nbGVzUG9vbC5waWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGUubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwcGVkID0gdGhpcy5fc2V0UHJpbWl0aXZlKHRyaWFuZ2xlLCBpbmRpY2VzLCAzLCBhdHRyaWJ1dGVzLCB3b3JsZFZpZXdQcm9qTWF0LCBtYXRDb2xvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISBjbGlwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZXNbblByaW1pdGl2ZSsrXSA9IHRyaWFuZ2xlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGdsZW51bS5MSU5FUzpcbiAgICAgICAgICAgICAgICAgICAgLy8gTElORVMgbW9kZSBjYW4ndCB1c2UgZmFjZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5WZXJ0ZXg7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzWzBdID0gaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1sxXSA9IGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNQb29sLnBpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUubWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUubGluZVdpZHRoID0gcmVuZGVyYWJsZS5saW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwcGVkID0gdGhpcy5fc2V0UHJpbWl0aXZlKGxpbmUsIGluZGljZXMsIDIsIGF0dHJpYnV0ZXMsIHdvcmxkVmlld1Byb2pNYXQsIG1hdENvbG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgY2xpcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZXNbblByaW1pdGl2ZSsrXSA9IGxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBnbGVudW0uUE9JTlRTOlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5WZXJ0ZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1swXSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwb2ludHNQb29sLnBpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwcGVkID0gdGhpcy5fc2V0UHJpbWl0aXZlKHBvaW50LCBpbmRpY2VzLCAxLCBhdHRyaWJ1dGVzLCB3b3JsZFZpZXdQcm9qTWF0LCBtYXRDb2xvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIGNsaXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVzW25QcmltaXRpdmUrK10gPSBwb2ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBQT0lOVFMgbW9kZSBjYW4ndCB1c2UgZmFjZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyaWFuZ2xlc1Bvb2wuc2hyaW5rKCk7XG4gICAgICAgIGxpbmVzUG9vbC5zaHJpbmsoKTtcbiAgICAgICAgcG9pbnRzUG9vbC5zaHJpbmsoKTtcblxuICAgICAgICBwcmltaXRpdmVzLmxlbmd0aCA9IG5QcmltaXRpdmU7XG5cbiAgICAgICAgcHJpbWl0aXZlcy5zb3J0KGRlcHRoU29ydEZ1bmMpO1xuICAgICAgICB0aGlzLl9kcmF3UHJpbWl0aXZlcyhwcmltaXRpdmVzKTtcbiAgICB9LFxuXG4gICAgX3NldFByaW1pdGl2ZTogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZlcnRleENvbG9yID0gdmVjNENyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHByaW1pdGl2ZSwgaW5kaWNlcywgc2l6ZSwgYXR0cmlidXRlcywgd29ybGRWaWV3UHJvak1hdCwgbWF0Q29sb3IpIHtcbiAgICAgICAgICAgIHZhciBjb2xvckF0dHJpYiA9IGF0dHJpYnV0ZXMuY29sb3I7XG4gICAgICAgICAgICB2YXIgdXNlVmVydGV4Q29sb3IgPSBjb2xvckF0dHJpYi52YWx1ZSAmJiBjb2xvckF0dHJpYi52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgdmFyIHByaUNvbG9yID0gcHJpbWl0aXZlLmNvbG9yO1xuXG4gICAgICAgICAgICBwcmltaXRpdmUuZGVwdGggPSAwO1xuICAgICAgICAgICAgaWYgKHVzZVZlcnRleENvbG9yKSB7XG4gICAgICAgICAgICAgICAgdmVjNC5zZXQocHJpQ29sb3IsIDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2xpcHBlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHZhciBwZXJjZW50ID0gMSAvIHNpemU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBjb29yZCA9IHByaW1pdGl2ZS52ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmdldChpbmRpY2VzW2ldLCBjb29yZCk7XG4gICAgICAgICAgICAgICAgY29vcmRbM10gPSAxO1xuICAgICAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChjb29yZCwgY29vcmQsIHdvcmxkVmlld1Byb2pNYXQpO1xuICAgICAgICAgICAgICAgIGlmICh1c2VWZXJ0ZXhDb2xvcikge1xuICAgICAgICAgICAgICAgICAgICBjb2xvckF0dHJpYi5nZXQoaW5kaWNlc1tpXSwgdmVydGV4Q29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBdmVyYWdlIHZlcnRleCBjb2xvclxuICAgICAgICAgICAgICAgICAgICAvLyBFYWNoIHByaW1pdGl2ZSBvbmx5IGNhbGwgZmlsbCBvciBzdHJva2Ugb25jZVxuICAgICAgICAgICAgICAgICAgICAvLyBTbyBjb2xvciBtdXN0IGJlIHRoZSBzYW1lXG4gICAgICAgICAgICAgICAgICAgIHZlYzQuc2NhbGVBbmRBZGQocHJpQ29sb3IsIHByaUNvbG9yLCB2ZXJ0ZXhDb2xvciwgcGVyY2VudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2xpcHBpbmdcbiAgICAgICAgICAgICAgICB2YXIgeCA9IGNvb3JkWzBdO1xuICAgICAgICAgICAgICAgIHZhciB5ID0gY29vcmRbMV07XG4gICAgICAgICAgICAgICAgdmFyIHogPSBjb29yZFsyXTtcbiAgICAgICAgICAgICAgICB2YXIgdyA9IGNvb3JkWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBQb2ludCBjbGlwcGluZ1xuICAgICAgICAgICAgICAgIGlmICh4ID4gLXcgJiYgeCA8IHcgJiYgeSA+IC13ICYmIHkgPCB3ICYmIHogPiAtdyAmJiB6IDwgdykge1xuICAgICAgICAgICAgICAgICAgICBjbGlwcGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGludlcgPSAxIC8gdztcbiAgICAgICAgICAgICAgICBjb29yZFswXSA9IHggKiBpbnZXO1xuICAgICAgICAgICAgICAgIGNvb3JkWzFdID0geSAqIGludlc7XG4gICAgICAgICAgICAgICAgY29vcmRbMl0gPSB6ICogaW52VztcbiAgICAgICAgICAgICAgICAvLyBVc2UgcHJpbWl0aXZlIGF2ZXJhZ2UgZGVwdGg7XG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlLmRlcHRoICs9IGNvb3JkWzJdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISBjbGlwcGVkKSB7XG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlLmRlcHRoIC89IHNpemU7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlVmVydGV4Q29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmVjNC5tdWwocHJpQ29sb3IsIHByaUNvbG9yLCBtYXRDb2xvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2ZWM0LmNvcHkocHJpQ29sb3IsIG1hdENvbG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbGlwcGVkO1xuICAgICAgICB9XG4gICAgfSkoKSxcblxuICAgIF9kcmF3UHJpbWl0aXZlczogZnVuY3Rpb24gKHByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XG5cbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGggKiBkcHI7XG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQgKiBkcHI7XG4gICAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcblxuICAgICAgICB2YXIgcHJldkxpbmVXaWR0aDtcbiAgICAgICAgdmFyIHByZXZTdHJva2VDb2xvcjtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW1pdGl2ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwcmltaXRpdmUgPSBwcmltaXRpdmVzW2ldO1xuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gcHJpbWl0aXZlLnZlcnRpY2VzO1xuXG4gICAgICAgICAgICB2YXIgcHJpbWl0aXZlVHlwZSA9IHByaW1pdGl2ZS50eXBlO1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcHJpbWl0aXZlLm1hdGVyaWFsO1xuICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBTZXQgbWF0ZXJpYWxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSBtYXRlcmlhbC5vcGFjaXR5O1xuICAgICAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY29sb3JTdHIgPSB2ZWM0VG9Db2xvclN0cihwcmltaXRpdmUuY29sb3IpO1xuICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQUklNSVRJVkVfVFJJQU5HTEU6XG4gICAgICAgICAgICAgICAgICAgIHZhciB2MCA9IHZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdjEgPSB2ZXJ0aWNlc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYyID0gdmVydGljZXNbMl07XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvclN0cjtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKCh2MFswXSArIDEpICogaGFsZldpZHRoLCAoLXYwWzFdICsgMSkgKiBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbygodjFbMF0gKyAxKSAqIGhhbGZXaWR0aCwgKC12MVsxXSArIDEpICogaGFsZkhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oKHYyWzBdICsgMSkgKiBoYWxmV2lkdGgsICgtdjJbMV0gKyAxKSAqIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUFJJTUlUSVZFX0xJTkU6XG4gICAgICAgICAgICAgICAgICAgIHZhciB2MCA9IHZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdjEgPSB2ZXJ0aWNlc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHByaW1pdGl2ZS5saW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2U3Ryb2tlQ29sb3IgIT09IGNvbG9yU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2U3Ryb2tlQ29sb3IgPSBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvclN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGluZVdpZHRoICE9PSBwcmV2TGluZVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gcHJldkxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oKHYwWzBdICsgMSkgKiBoYWxmV2lkdGgsICgtdjBbMV0gKyAxKSAqIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKCh2MVswXSArIDEpICogaGFsZldpZHRoLCAoLXYxWzFdICsgMSkgKiBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBSSU1JVElWRV9QT0lOVDpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50U2l6ZSA9IG1hdGVyaWFsLnBvaW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50U2hhcGUgPSBtYXRlcmlhbC5wb2ludFNoYXBlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFsZlNpemUgPSBwb2ludFNpemUgLyAyO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYwID0gdmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ggPSAodjBbMF0gKyAxKSAqIGhhbGZXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeSA9ICgtdjBbMV0gKyAxKSAqIGhhbGZIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvclN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludFNoYXBlID09PSAncmVjdGFuZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChjeCAtIGhhbGZTaXplLCBjeSAtIGhhbGZTaXplLCBwb2ludFNpemUsIHBvaW50U2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludFNoYXBlID09PSAnY2lyY2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYXJjKGN4LCBjeSwgaGFsZlNpemUsIDAsIE1hdGguUEkgKiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9LFxuXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl90cmlhbmdsZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fbGluZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fcG9pbnRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3ByaW1pdGl2ZXMgPSBbXTtcblxuICAgICAgICB0aGlzLmN0eCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzUmVuZGVyZXI7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuXG4vLyBQRU5ESU5HXG4vLyBVc2UgdG9wb2xvZ2ljYWwgc29ydCA/XG5cbi8qKlxuICogTm9kZSBvZiBncmFwaCBiYXNlZCBwb3N0IHByb2Nlc3NpbmcuXG4gKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5Ob2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICpcbiAqL1xudmFyIE5vZGUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLk5vZGUjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcbiAgICAgICAgICogQGV4YW1wbGU6XG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgaW5wdXRMaW5rczoge30sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxuICAgICAgICAgKiBAZXhhbXBsZTpcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxuXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXG4gICAgICAgIC8vIFdpbGwgYmUgdXNlZCB3aGVuIHRoZXJlIGV4aXN0IGEgY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxuXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcblxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxuICAgICAgICBfcmVuZGVyZWQ6IGZhbHNlLFxuXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXG4gICAgfTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Ob2RlLnByb3RvdHlwZSAqL1xue1xuXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyLmdsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgcGFyYW1ldGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcbiAgICAgKi9cbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge30sXG4gICAgLyoqXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxuICAgICAqIEByZXR1cm4ge31cbiAgICAgKi9cbiAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lKSB7fSxcbiAgICAvKipcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAgICAgKi9cbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSB7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcihuYW1lLCBvYmpbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge30sXG5cbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciAvKm9wdGlvbmFsKi8sIG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBvdXRwdXQgdGV4dHVyZSB3aXRob3V0IHJlbmRlcmluZ1xuICAgICAgICAgICAgbmFtZSA9IHJlbmRlcmVyO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xuICAgICAgICBpZiAoIW91dHB1dEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbHJlYWR5IGJlZW4gcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHJldHVybiB0ZXh0dXJlIGluIGxhc3QgZnJhbWVcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgICAvLyBTb2x2ZSBDaXJjdWxhciBSZWZlcmVuY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJsYW5rIHRleHR1cmUgYXQgZmlyc3QgcGFzc1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKG91dHB1dEluZm8ucGFyYW1ldGVycyB8fCB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXIocmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xuICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdLS07XG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBsaW5rOiBmdW5jdGlvbiAoaW5wdXRQaW5OYW1lLCBmcm9tTm9kZSwgZnJvbVBpbk5hbWUpIHtcblxuICAgICAgICAvLyBUaGUgcmVsYXRpb25zaGlwIGZyb20gb3V0cHV0IHBpbiB0byBpbnB1dCBwaW4gaXMgb25lLW9uLW11bHRpcGxlXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rc1tpbnB1dFBpbk5hbWVdID0ge1xuICAgICAgICAgICAgbm9kZTogZnJvbU5vZGUsXG4gICAgICAgICAgICBwaW46IGZyb21QaW5OYW1lXG4gICAgICAgIH07XG4gICAgICAgIGlmICghZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdKSB7XG4gICAgICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0ucHVzaCh7XG4gICAgICAgICAgICBub2RlOiB0aGlzLFxuICAgICAgICAgICAgcGluOiBpbnB1dFBpbk5hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW5hYmxlZCB0aGUgcGluIHRleHR1cmUgaW4gc2hhZGVyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKGlucHV0UGluTmFtZSk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5wdXRMaW5rcyA9IHt9O1xuICAgICAgICB0aGlzLm91dHB1dExpbmtzID0ge307XG4gICAgfSxcblxuICAgIHVwZGF0ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmlucHV0TGlua3NbaW5wdXROYW1lXTtcbiAgICAgICAgICAgICAgICBsaW5rLm5vZGUudXBkYXRlUmVmZXJlbmNlKGxpbmsucGluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRwdXROYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdICsrO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dExpbmtzKSB7XG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID0gMDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhZnRlckZyYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdGV4dHVyZXMgdG8gcG9vbFxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0TGlua3MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGU7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IEdyYXBoTm9kZSBmcm9tICcuL05vZGUnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBHcmFwaCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGgjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5jb21wb3NpdG9yLk5vZGU+fVxuICAgICAgICAgKi9cbiAgICAgICAgbm9kZXM6IFtdXG4gICAgfTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaC5wcm90b3R5cGUgKi9cbntcblxuICAgIC8qKlxuICAgICAqIE1hcmsgdG8gdXBkYXRlXG4gICAgICovXG4gICAgZGlydHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtjbGF5LmNvbXBvc2l0b3IuTm9kZX0gbm9kZVxuICAgICAqL1xuICAgIGFkZE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZXMuaW5kZXhPZihub2RlKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5jb21wb3NpdG9yLk5vZGV8c3RyaW5nfSBub2RlXG4gICAgICovXG4gICAgcmVtb3ZlTm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5TmFtZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLk5vZGV9XG4gICAgICovXG4gICAgZ2V0Tm9kZUJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlc1tpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBsaW5rcyBvZiBncmFwaFxuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmF2ZXJzZSBhbGwgdGhlIG5vZGVzIGFuZCBidWlsZCB0aGUgZ3JhcGhcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZXNbaV07XG5cbiAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHMpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xuICAgICAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHNbaW5wdXROYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFzcyAmJiAhbm9kZS5wYXNzLm1hdGVyaWFsLmlzVW5pZm9ybUVuYWJsZWQoaW5wdXROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiAnICArIG5vZGUubmFtZSArICcuJyArIGlucHV0TmFtZSArICcgbm90IHVzZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbkluZm8gPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZyb21QaW4gPSB0aGlzLmZpbmRQaW4oZnJvbVBpbkluZm8pO1xuICAgICAgICAgICAgICAgIGlmIChmcm9tUGluKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGluayhpbnB1dE5hbWUsIGZyb21QaW4ubm9kZSwgZnJvbVBpbi5waW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmcm9tUGluSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSAnICsgZnJvbVBpbkluZm8gKyAnIG5vdCBleGlzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaW4gb2YgJyArIGZyb21QaW5JbmZvLm5vZGUgKyAnLicgKyBmcm9tUGluSW5mby5waW4gKyAnIG5vdCBleGlzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpbmRQaW46IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgbm9kZTtcbiAgICAgICAgLy8gVHJ5IHRvIHRha2UgaW5wdXQgYXMgYSBkaXJlY3RseSBhIG5vZGVcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBHcmFwaE5vZGUpIHtcbiAgICAgICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgICAgICAgIG5vZGU6IGlucHV0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5ub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMubm9kZXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRtcC5uYW1lID09PSBpbnB1dC5ub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0bXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm9kZSA9IGlucHV0Lm5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dFBpbiA9IGlucHV0LnBpbjtcbiAgICAgICAgICAgIGlmICghaW5wdXRQaW4pIHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgZmlyc3QgcGluIGRlZmF1bHRseVxuICAgICAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQaW4gPSBPYmplY3Qua2V5cyhub2RlLm91dHB1dHMpWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHNbaW5wdXRQaW5dKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgcGluOiBpbnB1dFBpblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgR3JhcGg7XG4iLCJpbXBvcnQgR3JhcGggZnJvbSAnLi9HcmFwaCc7XG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi9UZXh0dXJlUG9vbCc7XG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xuXG4vKipcbiAqIENvbXBvc2l0b3IgcHJvdmlkZSBncmFwaCBiYXNlZCBwb3N0IHByb2Nlc3NpbmdcbiAqXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaFxuICpcbiAqL1xudmFyIENvbXBvc2l0b3IgPSBHcmFwaC5leHRlbmQoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLy8gT3V0cHV0IG5vZGVcbiAgICAgICAgX291dHB1dHM6IFtdLFxuXG4gICAgICAgIF90ZXh0dXJlUG9vbDogbmV3IFRleHR1cmVQb29sKCksXG5cbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoe1xuICAgICAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yLnByb3RvdHlwZSAqL1xue1xuICAgIGFkZE5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgR3JhcGgucHJvdG90eXBlLmFkZE5vZGUuY2FsbCh0aGlzLCBub2RlKTtcbiAgICAgICAgbm9kZS5fY29tcG9zaXRvciA9IHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2Rlc1tpXS5vdXRwdXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh0aGlzLm5vZGVzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmZXJlbmNlIG51bWJlciBvZiBlYWNoIG91dHB1dCB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmJlZm9yZUZyYW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0udXBkYXRlUmVmZXJlbmNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0ucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIENsZWFyIHVwXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmFmdGVyRnJhbWUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhbGxvY2F0ZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlUG9vbC5nZXQocGFyYW1ldGVycyk7XG4gICAgfSxcblxuICAgIHJlbGVhc2VUZXh0dXJlOiBmdW5jdGlvbiAocGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQocGFyYW1ldGVycyk7XG4gICAgfSxcblxuICAgIGdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBjb21wb3NpdG9yXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3I7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuU2NlbmVOb2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuTm9kZVxuICovXG52YXIgU2NlbmVOb2RlID0gTm9kZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGUjICovXG57XG4gICAgbmFtZTogJ3NjZW5lJyxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgKi9cbiAgICBzY2VuZTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5DYW1lcmF9XG4gICAgICovXG4gICAgY2FtZXJhOiBudWxsLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGF1dG9VcGRhdGVTY2VuZTogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwcmVaOiBmYWxzZVxuXG59LCBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XG59LCB7XG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlcikge1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicpO1xuXG4gICAgICAgIHZhciByZW5kZXJJbmZvO1xuXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XG5cbiAgICAgICAgICAgIHJlbmRlckluZm8gPSByZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEsICF0aGlzLmF1dG9VcGRhdGVTY2VuZSwgdGhpcy5wcmVaKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLmZyYW1lQnVmZmVyO1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcblxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50IHx8IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGF0dGFjaG1lbnQpID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBfZ2xbYXR0YWNobWVudF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XG4gICAgICAgICAgICBpZiAoZXh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gcGFyc2VJbnQoYXR0YWNobWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDw9IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCArIDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyBjbGVhclxuICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XG4gICAgICAgICAgICByZW5kZXJlci5jbGVhckJpdCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUIHwgZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XG4gICAgICAgICAgICByZW5kZXJlci5yZXN0b3JlQ2xlYXIoKTtcblxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCByZW5kZXJJbmZvKTtcblxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTY2VuZU5vZGU7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGVcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5Ob2RlXG4gKi9cbnZhciBUZXh0dXJlTm9kZSA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZSMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cbiAgICAgICAgdGV4dHVyZTogbnVsbCxcblxuICAgICAgICAvLyBUZXh0dXJlIG5vZGUgbXVzdCBoYXZlIG91dHB1dCB3aXRob3V0IHBhcmFtZXRlcnNcbiAgICAgICAgb3V0cHV0czoge1xuICAgICAgICAgICAgY29sb3I6IHt9XG4gICAgICAgIH1cbiAgICB9O1xufSwgZnVuY3Rpb24gKCkge1xufSwge1xuXG4gICAgZ2V0T3V0cHV0OiBmdW5jdGlvbiAocmVuZGVyZXIsIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZTtcbiAgICB9LFxuXG4gICAgLy8gRG8gbm90aGluZ1xuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7fSxcbiAgICBhZnRlckZyYW1lOiBmdW5jdGlvbiAoKSB7fVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmVOb2RlO1xuIiwiLy8gVE9ETyBTaGFkZXIgbGlicmFyeVxuaW1wb3J0IFBhc3MgZnJvbSAnLi9QYXNzJztcbmltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XG5cbi8vIFRPRE8gY3VybG5vaXNlIGRlbW8gd3JvbmdcblxuLy8gUEVORElOR1xuLy8gVXNlIHRvcG9sb2dpY2FsIHNvcnQgP1xuXG4vKipcbiAqIEZpbHRlciBub2RlXG4gKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5GaWx0ZXJOb2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuTm9kZVxuICpcbiAqIEBleGFtcGxlXG4gICAgdmFyIG5vZGUgPSBuZXcgY2xheS5jb21wb3NpdG9yLk5vZGUoe1xuICAgICAgICBuYW1lOiAnZnhhYScsXG4gICAgICAgIHNoYWRlcjogY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZnhhYScpLFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogJ3NjZW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcGluOiAnY29sb3InXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIE11bHRpcGxlIG91dHB1dHMgaXMgcHJlc2VydmVkIGZvciBNUlQgc3VwcG9ydCBpbiBXZWJHTDIuMFxuICAgICAgICBvdXRwdXRzOiB7XG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IGNsYXkuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDBcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogY2xheS5UZXh0dXJlLlJHQkEsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MTIsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTEyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBOb2RlIHdpbGwga2VlcCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcbiAgICAgICAgICAgICAgICBrZWVwTGFzdEZyYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBub2RlIG91dHB1dCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcbiAgICAgICAgICAgICAgICBvdXRwdXRMYXN0RnJhbWU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgICpcbiAgICAqL1xudmFyIEZpbHRlck5vZGUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLk5vZGUjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGlucHV0czoge30sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBvdXRwdXRzOiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgc2hhZGVyOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcbiAgICAgICAgICogQGV4YW1wbGU6XG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgaW5wdXRMaW5rczoge30sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxuICAgICAgICAgKiBAZXhhbXBsZTpcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5jb21wb3NpdG9yLlBhc3N9XG4gICAgICAgICAqL1xuICAgICAgICBwYXNzOiBudWxsLFxuXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXG4gICAgICAgIC8vIFdpbGwgYmUgdXNlZCB3aGVuIHRoZXJlIGV4aXN0IGEgY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxuXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcblxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxuICAgICAgICBfcmVuZGVyZWQ6IGZhbHNlLFxuXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXG4gICAgfTtcbn0sIGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBwYXNzID0gbmV3IFBhc3Moe1xuICAgICAgICBmcmFnbWVudDogdGhpcy5zaGFkZXJcbiAgICB9KTtcbiAgICB0aGlzLnBhc3MgPSBwYXNzO1xufSxcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLk5vZGUucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCByZW5kZXJlcik7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xuICAgICAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmlucHV0TGlua3NbaW5wdXROYW1lXTtcbiAgICAgICAgICAgIHZhciBpbnB1dFRleHR1cmUgPSBsaW5rLm5vZGUuZ2V0T3V0cHV0KHJlbmRlcmVyLCBsaW5rLnBpbik7XG4gICAgICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShpbnB1dE5hbWUsIGlucHV0VGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3V0cHV0XG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyYW1ldGVycy53aWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudCB8fCBfZ2wuQ09MT1JfQVRUQUNITUVOVDA7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gX2dsW2F0dGFjaG1lbnRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdID0gdGV4dHVyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgLy8gRklYTUUgYXR0YWNobWVudCBjaGFuZ2VzIGluIGRpZmZlcmVudCBub2Rlc1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0sIGF0dGFjaG1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyKTtcblxuICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxuICAgICAgICAgICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XG4gICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLmdldEZyYW1lQnVmZmVyKCkudXBkYXRlTWlwbWFwKHJlbmRlcmVyLmdsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiB0aGlzLmlucHV0TGlua3MpIHtcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XG4gICAgICAgICAgICBsaW5rLm5vZGUucmVtb3ZlUmVmZXJlbmNlKGxpbmsucGluKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlcmVyKTtcbiAgICB9LFxuXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgcGFyYW1ldGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcbiAgICAgKi9cbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgcGFyYW1ldGVyIHZhbHVlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7fVxuICAgICAqL1xuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFzcy5nZXRVbmlmb3JtKG5hbWUpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0IHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gICAgICovXG4gICAgc2V0UGFyYW1ldGVyczogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8gLyoqXG4gICAgLy8gICogU2V0IHNoYWRlciBjb2RlXG4gICAgLy8gICogQHBhcmFtIHtzdHJpbmd9IHNoYWRlclN0clxuICAgIC8vICAqL1xuICAgIC8vIHNldFNoYWRlcjogZnVuY3Rpb24gKHNoYWRlclN0cikge1xuICAgIC8vICAgICB2YXIgbWF0ZXJpYWwgPSB0aGlzLnBhc3MubWF0ZXJpYWw7XG4gICAgLy8gICAgIG1hdGVyaWFsLnNoYWRlci5zZXRGcmFnbWVudChzaGFkZXJTdHIpO1xuICAgIC8vICAgICBtYXRlcmlhbC5hdHRhY2hTaGFkZXIobWF0ZXJpYWwuc2hhZGVyLCB0cnVlKTtcbiAgICAvLyB9LFxuICAgIC8qKlxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIHh4eCk7XG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXG4gICAgICovXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc3ltYm9sLCB2YWwpIHtcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wsIHZhbCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXG4gICAgICovXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIHN5bWJvbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXG4gICAgICAgICAgICAgICAgLy8gUHV0IHRoZSB0ZXh0dXJlIGJhY2sgdG8gdGhlIHBvb2wuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgTm9kZS5wcm90b3R5cGUuY2xlYXIuY2FsbCh0aGlzKTtcblxuICAgICAgICAvLyBEZWZhdWx0IGRpc2FibGUgYWxsIHRleHR1cmVcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRpc2FibGVUZXh0dXJlc0FsbCgpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJOb2RlO1xuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcbmltcG9ydCBDb21wb3NpdG9yIGZyb20gJy4vQ29tcG9zaXRvcic7XG5pbXBvcnQgQ29tcG9TY2VuZU5vZGUgZnJvbSAnLi9TY2VuZU5vZGUnO1xuaW1wb3J0IENvbXBvVGV4dHVyZU5vZGUgZnJvbSAnLi9UZXh0dXJlTm9kZSc7XG5pbXBvcnQgQ29tcG9GaWx0ZXJOb2RlIGZyb20gJy4vRmlsdGVyTm9kZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5cbnZhciBzaGFkZXJTb3VyY2VSZWcgPSAvXiNzb3VyY2VcXCgoLio/KVxcKS87XG5cbi8qKlxuICogQG5hbWUgY2xheS5jb21wb3NpdG9yLmNyZWF0ZUNvbXBvc2l0b3JcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGpzb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yfVxuICovXG5mdW5jdGlvbiBjcmVhdGVDb21wb3NpdG9yKGpzb24sIG9wdHMpIHtcbiAgICB2YXIgY29tcG9zaXRvciA9IG5ldyBDb21wb3NpdG9yKCk7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICB2YXIgbGliID0ge1xuICAgICAgICB0ZXh0dXJlczoge30sXG4gICAgICAgIHBhcmFtZXRlcnM6IHt9XG4gICAgfTtcbiAgICB2YXIgYWZ0ZXJMb2FkID0gZnVuY3Rpb24oc2hhZGVyTGliLCB0ZXh0dXJlTGliKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG5vZGVJbmZvID0ganNvbi5ub2Rlc1tpXTtcbiAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlTm9kZShub2RlSW5mbywgbGliLCBvcHRzKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zaXRvci5hZGROb2RlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4ganNvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHZhciBwYXJhbUluZm8gPSBqc29uLnBhcmFtZXRlcnNbbmFtZV07XG4gICAgICAgIGxpYi5wYXJhbWV0ZXJzW25hbWVdID0gY29udmVydFBhcmFtZXRlcihwYXJhbUluZm8pO1xuICAgIH1cbiAgICAvLyBUT0RPIGxvYWQgdGV4dHVyZSBhc3luY2hyb25vdXNcbiAgICBsb2FkVGV4dHVyZXMoanNvbiwgbGliLCBvcHRzLCBmdW5jdGlvbih0ZXh0dXJlTGliKSB7XG4gICAgICAgIGxpYi50ZXh0dXJlcyA9IHRleHR1cmVMaWI7XG4gICAgICAgIGFmdGVyTG9hZCgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBvc2l0b3I7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cykge1xuICAgIHZhciB0eXBlID0gbm9kZUluZm8udHlwZSB8fCAnZmlsdGVyJztcbiAgICB2YXIgc2hhZGVyU291cmNlO1xuICAgIHZhciBpbnB1dHM7XG4gICAgdmFyIG91dHB1dHM7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgdmFyIHNoYWRlckV4cCA9IG5vZGVJbmZvLnNoYWRlci50cmltKCk7XG4gICAgICAgIHZhciByZXMgPSBzaGFkZXJTb3VyY2VSZWcuZXhlYyhzaGFkZXJFeHApO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBTaGFkZXIuc291cmNlKHJlc1sxXS50cmltKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYWRlckV4cC5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gbGliLnNoYWRlcnNbc2hhZGVyRXhwLnN1YnN0cigxKV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaGFkZXJTb3VyY2UpIHtcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IHNoYWRlckV4cDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGVJbmZvLmlucHV0cykge1xuICAgICAgICBpbnB1dHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5pbnB1dHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZUluZm8uaW5wdXRzW25hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IG5vZGVJbmZvLmlucHV0c1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZUluZm8uaW5wdXRzW25hbWVdLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHBpbjogbm9kZUluZm8uaW5wdXRzW25hbWVdLnBpblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVJbmZvLm91dHB1dHMpIHtcbiAgICAgICAgb3V0cHV0cyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLm91dHB1dHMpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gbm9kZUluZm8ub3V0cHV0c1tuYW1lXTtcbiAgICAgICAgICAgIG91dHB1dHNbbmFtZV0gPSB7fTtcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmF0dGFjaG1lbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0uYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ua2VlcExhc3RGcmFtZSA9IG91dHB1dEluZm8ua2VlcExhc3RGcmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5vdXRwdXRMYXN0RnJhbWUgPSBvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLnBhcmFtZXRlcnMgPSBjb252ZXJ0UGFyYW1ldGVyKG91dHB1dEluZm8ucGFyYW1ldGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKHR5cGUgPT09ICdzY2VuZScpIHtcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb1NjZW5lTm9kZSh7XG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxuICAgICAgICAgICAgc2NlbmU6IG9wdHMuc2NlbmUsXG4gICAgICAgICAgICBjYW1lcmE6IG9wdHMuY2FtZXJhLFxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmUnKSB7XG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9UZXh0dXJlTm9kZSh7XG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gRGVmYXVsdCBpcyBmaWx0ZXJcbiAgICBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb0ZpbHRlck5vZGUoe1xuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyU291cmNlLFxuICAgICAgICAgICAgaW5wdXRzOiBpbnB1dHMsXG4gICAgICAgICAgICBvdXRwdXRzOiBvdXRwdXRzXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZUluZm8ucGFyYW1ldGVycykge1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGVJbmZvLnBhcmFtZXRlcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZih2YWwpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBsaWIudGV4dHVyZXNbdmFsLnN1YnN0cigxKV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmVyZW5kZXInLCBjcmVhdGVTaXplU2V0SGFuZGxlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZUluZm8uZGVmaW5lcyAmJiBub2RlLnBhc3MpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8uZGVmaW5lcykge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5kZWZpbmVzW25hbWVdO1xuICAgICAgICAgICAgICAgIG5vZGUucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgbmFtZSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gY29udmVydFBhcmFtZXRlcihwYXJhbUluZm8pIHtcbiAgICB2YXIgcGFyYW0gPSB7fTtcbiAgICBpZiAoIXBhcmFtSW5mbykge1xuICAgICAgICByZXR1cm4gcGFyYW07XG4gICAgfVxuICAgIFsndHlwZScsICdtaW5GaWx0ZXInLCAnbWFnRmlsdGVyJywgJ3dyYXBTJywgJ3dyYXBUJywgJ2ZsaXBZJywgJ3VzZU1pcG1hcCddXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XG4gICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBlbnVtXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IFRleHR1cmVbdmFsXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIFsnd2lkdGgnLCAnaGVpZ2h0J11cbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgaWYgKHBhcmFtSW5mb1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHBhcmFtSW5mb1tuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSBjcmVhdGVTaXplUGFyc2VyKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICBpZiAocGFyYW1JbmZvLnVzZU1pcG1hcCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtLnVzZU1pcG1hcCA9IHBhcmFtSW5mby51c2VNaXBtYXA7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbn1cblxuZnVuY3Rpb24gbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIWpzb24udGV4dHVyZXMpIHtcbiAgICAgICAgY2FsbGJhY2soe30pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0ZXh0dXJlcyA9IHt9O1xuICAgIHZhciBsb2FkaW5nID0gMDtcblxuICAgIHZhciBjYmQgPSBmYWxzZTtcbiAgICB2YXIgdGV4dHVyZVJvb3RQYXRoID0gb3B0cy50ZXh0dXJlUm9vdFBhdGg7XG4gICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uKHRleHR1cmVJbmZvLCBuYW1lKSB7XG4gICAgICAgIHZhciB0ZXh0dXJlO1xuICAgICAgICB2YXIgcGF0aCA9IHRleHR1cmVJbmZvLnBhdGg7XG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcih0ZXh0dXJlSW5mby5wYXJhbWV0ZXJzKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkgJiYgcGF0aC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShpdGVtLCB0ZXh0dXJlUm9vdFBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZShwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHRleHR1cmVSb290UGF0aCkge1xuICAgICAgICAgICAgICAgIHBhdGggPSB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHRleHR1cmVSb290UGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcbiAgICAgICAgbG9hZGluZysrO1xuICAgICAgICB0ZXh0dXJlLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcbiAgICAgICAgICAgIGxvYWRpbmctLTtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodGV4dHVyZXMpO1xuICAgICAgICAgICAgICAgIGNiZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGxvYWRpbmcgPT09IDAgJiYgIWNiZCkge1xuICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTaXplU2V0SGFuZGxlcihuYW1lLCBleHByRnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCBzaXplIG9yIHdpbmRvdyBzaXplXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgICAgIC8vIFBFTkRJTkcgSWYgbXVsdGlwbHkgZHByID9cbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gZXhwckZ1bmMod2lkdGgsIGhlaWdodCwgZHByKTtcbiAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgcmVzdWx0KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTaXplUGFyc2VyKG5hbWUsIGV4cHJGdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB2YXIgZHByID0gcmVuZGVyZXIuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xuICAgICAgICB2YXIgd2lkdGggPSByZW5kZXJlci5nZXRXaWR0aCgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XG4gICAgICAgIHJldHVybiBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHRyeUNvbnZlcnRFeHByKHN0cmluZykge1xuICAgIC8vIFBFTkRJTkdcbiAgICB2YXIgZXhwclJlcyA9IC9eZXhwclxcKCguKilcXCkkLy5leGVjKHN0cmluZyk7XG4gICAgaWYgKGV4cHJSZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBmdW5jID0gbmV3IEZ1bmN0aW9uKCd3aWR0aCcsICdoZWlnaHQnLCAnZHByJywgJ3JldHVybiAnICsgZXhwclJlc1sxXSk7XG4gICAgICAgICAgICAvLyBUcnkgcnVuIHRcbiAgICAgICAgICAgIGZ1bmMoMSwgMSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BoZXJlXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cbiAqL1xudmFyIFNwaGVyZUxpZ2h0ID0gTGlnaHQuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlNwaGVyZSMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhbmdlOiAxMDAsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhZGl1czogNVxufSwge1xuXG4gICAgdHlwZTogJ1NQSEVSRV9MSUdIVCcsXG5cbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XG4gICAgICAgIHNwaGVyZUxpZ2h0UG9zaXRpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcGhlcmVMaWdodFJhbmdlOiB7XG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcGhlcmVMaWdodFJhZGl1czoge1xuICAgICAgICAgICAgdHlwZTogJzFmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYWRpdXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNwaGVyZUxpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlTGlnaHQ7XG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5UdWJlXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cbiAqL1xudmFyIFR1YmVMaWdodCA9IExpZ2h0LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5saWdodC5UdWJlIyAqL1xue1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcmFuZ2U6IDEwMCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbGVuZ3RoOiAxMFxufSwge1xuXG4gICAgdHlwZTogJ1RVQkVfTElHSFQnLFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICB0dWJlTGlnaHRQb3NpdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHViZUxpZ2h0RXh0ZW5kOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4dGVuZCBpbiB4IGF4aXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS54KVxuICAgICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgpLnNjYWxlKGluc3RhbmNlLmxlbmd0aCAvIDIpLmFycmF5O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSgpXG4gICAgICAgIH0sXG5cbiAgICAgICAgdHViZUxpZ2h0UmFuZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHViZUxpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVHViZUxpZ2h0O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2NvcmUvcmVxdWVzdCc7XG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciBmcm9tICcuLi9jb21wb3NpdG9yL2NyZWF0ZUNvbXBvc2l0b3InO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5GWFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEZYTG9hZGVyID0gQmFzZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkubG9hZGVyLkZYIyAqL1xue1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgcm9vdFBhdGg6ICcnLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGV4dHVyZVJvb3RQYXRoOiAnJyxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNoYWRlclJvb3RQYXRoOiAnJyxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxuICAgICAqL1xuICAgIHNjZW5lOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxuICAgICAqL1xuICAgIGNhbWVyYTogbnVsbFxufSxcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuRlgucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB1cmxcbiAgICAgKi9cbiAgICBsb2FkOiBmdW5jdGlvbih1cmwpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghdGhpcy5yb290UGF0aCkge1xuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmdldCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uKHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3NpdG9yKEpTT04ucGFyc2UoZGF0YSksIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVJvb3RQYXRoOiB0aGlzLnRleHR1cmVSb290UGF0aCB8fCB0aGlzLnJvb3RQYXRoLFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhLFxuICAgICAgICAgICAgICAgICAgICBzY2VuZTogdGhpcy5zY2VuZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRlhMb2FkZXI7XG4iLCJpbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQyID0gZ2xNYXRyaXgubWF0MjtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguTWF0cml4MlxuICovXG52YXIgTWF0cml4MiA9IGZ1bmN0aW9uKCkge1xuXG4gICAgLyoqXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXgyXG4gICAgICogQG5hbWUgYXJyYXlcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguTWF0cml4MiNcbiAgICAgKi9cbiAgICB0aGlzLmFycmF5ID0gbWF0Mi5jcmVhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIF9kaXJ0eVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguTWF0cml4MiNcbiAgICAgKi9cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG59O1xuXG5NYXRyaXgyLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyLFxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXG4gICAgICovXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyKCkpLmNvcHkodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDIuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICAgICAqL1xuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyLmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnZlcnQgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICAgICAqL1xuICAgIGludmVydDogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDIuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgbWF0Mi5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgbWF0Mi5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgc2VsZiBieSBzXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9ICBzXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgbWF0Mi5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyLnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xuICAgIH0sXG5cbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge01hdHJpeDJ9IG91dFxuICogQHBhcmFtICB7TWF0cml4Mn0gYVxuICogQHJldHVybiB7TWF0cml4Mn1cbiAqL1xuTWF0cml4Mi5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0Mi5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBtYXQyLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5NYXRyaXgyLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBtYXQyLmRldGVybWluYW50KGEuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAqL1xuTWF0cml4Mi5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xuICAgIG1hdDIuaWRlbnRpdHkob3V0LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gKi9cbk1hdHJpeDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0Mi5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG1hdDIubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLm11bHRpcGx5ID0gTWF0cml4Mi5tdWw7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gICByYWRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XG4gICAgbWF0Mi5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIHZcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XG4gICAgbWF0Mi5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBvdXRcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcbiAqIEByZXR1cm4ge01hdHJpeDJ9XG4gKi9cbk1hdHJpeDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0Mi50cmFuc3Bvc2Uob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcbiIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIG1hdDJkID0gZ2xNYXRyaXgubWF0MmQ7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLk1hdHJpeDJkXG4gKi9cbnZhciBNYXRyaXgyZCA9IGZ1bmN0aW9uKCkge1xuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MmRcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXgyZCNcbiAgICAgKi9cbiAgICB0aGlzLmFycmF5ID0gbWF0MmQuY3JlYXRlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBfZGlydHlcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDJkI1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cbk1hdHJpeDJkLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyZCxcblxuICAgIC8qKlxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgTWF0cml4MmRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyZCgpKS5jb3B5KHRoaXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IGZyb20gYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDJkLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDJkLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnZlcnQgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyZC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICAgICAqL1xuICAgIG11bDogZnVuY3Rpb24oYikge1xuICAgICAgICBtYXQyZC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYikge1xuICAgICAgICBtYXQyZC5tdWwodGhpcy5hcnJheSwgYi5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgbWF0MmQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDJkLm11bHRpcGx5KHRoaXMuYXJyYXksIGIuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhblxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgbWF0MmQucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgc1xuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xuICAgICAgICBtYXQyZC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgbWF0MmQudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0MmQuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5NYXRyaXgyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gKi9cbk1hdHJpeDJkLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XG4gICAgbWF0MmQuaWRlbnRpdHkob3V0LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gKi9cbk1hdHJpeDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG1hdDJkLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBtYXQyZC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC5tdWx0aXBseSA9IE1hdHJpeDJkLm11bDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gKi9cbk1hdHJpeDJkLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XG4gICAgbWF0MmQucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIHZcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAqL1xuTWF0cml4MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQyZC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgdlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQyZC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MmQ7XG4iLCJpbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQzID0gZ2xNYXRyaXgubWF0MztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguTWF0cml4M1xuICovXG52YXIgTWF0cml4MyA9IGZ1bmN0aW9uICgpIHtcblxuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4M1xuICAgICAqIEBuYW1lIGFycmF5XG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDMjXG4gICAgICovXG4gICAgdGhpcy5hcnJheSA9IG1hdDMuY3JlYXRlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBfZGlydHlcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDMjXG4gICAgICovXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xufTtcblxuTWF0cml4My5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MyxcblxuICAgIC8qKlxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIGFkam9pbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWF0My5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgzXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MygpKS5jb3B5KHRoaXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IGZyb20gYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgbWF0My5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGRldGVybWluYW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBNYXRyaXgyZCBhXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICBtYXQzLmZyb21NYXQyZCh0aGlzLmFycmF5LCBhLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgb2YgTWF0cml4NFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgZnJvbU1hdDQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIG1hdDMuZnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBxXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIG1hdDMuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1hdDMuaWRlbnRpdHkodGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEludmVydCBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1hdDMuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBhXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgbWF0My5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xuICAgICAgICBtYXQzLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAgICAgKi9cbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIHJvdGF0ZTogZnVuY3Rpb24gKHJhZCkge1xuICAgICAgICBtYXQzLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIHNcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgbWF0My5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgbWF0My50cmFuc2xhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICAgICAqL1xuICAgIG5vcm1hbEZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xuICAgICAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KHRoaXMuYXJyYXksIGEuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUcmFuc3Bvc2Ugc2VsZiwgaW4tcGxhY2UuXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1hdDMudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xuICAgIH0sXG5cbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcbiAgICB9XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMuYWRqb2ludCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmFkam9pbnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMuY29weSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5NYXRyaXgzLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudChhLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IG91dFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMuaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgbWF0My5pZGVudGl0eShvdXQuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgbWF0My5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLm11bCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICBtYXQzLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My5tdWx0aXBseSA9IE1hdHJpeDMubXVsO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSAgb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLmZyb21NYXQyZCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmZyb21NYXQyZChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My5mcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9ICAgIG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLmZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSkge1xuICAgIG1hdDMuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMubm9ybWFsRnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgbWF0My5ub3JtYWxGcm9tTWF0NChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xuICAgIG1hdDMucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IHZcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLnNjYWxlID0gZnVuY3Rpb24gKG91dCwgYSwgdikge1xuICAgIG1hdDMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMudHJhbnNwb3NlID0gZnVuY3Rpb24gKG91dCwgYSkge1xuICAgIG1hdDMudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSB2XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XG4gICAgbWF0My50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL1ZlY3RvcjInO1xuXG4vKipcbiAqIFJhbmRvbSBvciBjb25zdGFudCAxZCwgMmQsIDNkIHZlY3RvciBnZW5lcmF0b3JcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkubWF0aC5WYWx1ZVxuICovXG52YXIgVmFsdWUgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8Y2xheS5tYXRoLlZlY3RvcjJ8Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gKiBAcmV0dXJuIHtudW1iZXJ8Y2xheS5tYXRoLlZlY3RvcjJ8Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZhbHVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihvdXQpIHt9O1xuXG4vLyBDb25zdGFudFxudmFyIENvbnN0YW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG59O1xuQ29uc3RhbnRWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RhbnRWYWx1ZTtcblxuLy8gVmVjdG9yXG52YXIgVmVjdG9yVmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB2YWwuY29uc3RydWN0b3I7XG4gICAgdGhpcy5nZXQgPSBmdW5jdGlvbihvdXQpIHtcbiAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgIG91dCA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICB9XG4gICAgICAgIG91dC5jb3B5KHZhbCk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfTtcbn07XG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcblZlY3RvclZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlY3RvclZhbHVlO1xuLy9SYW5kb20gMURcbnZhciBSYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgdmFyIHJhbmdlID0gbWF4IC0gbWluO1xuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2UgKyBtaW47XG4gICAgfTtcbn07XG5SYW5kb20xRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcblJhbmRvbTFELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTFEO1xuXG4vLyBSYW5kb20yRFxudmFyIFJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcblxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XG4gICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMigpO1xuICAgICAgICB9XG4gICAgICAgIFZlY3RvcjIuc2V0KFxuICAgICAgICAgICAgb3V0LFxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH07XG59O1xuUmFuZG9tMkQucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XG5SYW5kb20yRC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5kb20yRDtcblxudmFyIFJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcbiAgICB2YXIgcmFuZ2VaID0gbWF4LnogLSBtaW4uejtcblxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XG4gICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB9XG4gICAgICAgIFZlY3RvcjMuc2V0KFxuICAgICAgICAgICAgb3V0LFxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV0sXG4gICAgICAgICAgICByYW5nZVogKiBNYXRoLnJhbmRvbSgpICsgbWluLmFycmF5WzJdXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9O1xufTtcblJhbmRvbTNELnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xuUmFuZG9tM0QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tM0Q7XG5cbi8vIEZhY3RvcnkgbWV0aG9kc1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0YW50IDFkIHZhbHVlIGdlbmVyYXRvclxuICogQHBhcmFtICB7bnVtYmVyfSBjb25zdGFudFxuICogQHJldHVybiB7Y2xheS5tYXRoLlZhbHVlfVxuICovXG5WYWx1ZS5jb25zdGFudCA9IGZ1bmN0aW9uKGNvbnN0YW50KSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdGFudFZhbHVlKGNvbnN0YW50KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3JcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfGNsYXkubWF0aC5WZWN0b3IzfSB2ZWN0b3JcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WYWx1ZX1cbiAqL1xuVmFsdWUudmVjdG9yID0gZnVuY3Rpb24odmVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBWZWN0b3JWYWx1ZSh2ZWN0b3IpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1pblxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WYWx1ZX1cbiAqL1xuVmFsdWUucmFuZG9tMUQgPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIHJldHVybiBuZXcgUmFuZG9tMUQobWluLCBtYXgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gbWluXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gbWF4XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmFsdWV9XG4gKi9cblZhbHVlLnJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbmV3IFJhbmRvbTJEKG1pbiwgbWF4KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvclxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG1pblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG1heFxuICogQHJldHVybiB7Y2xheS5tYXRoLlZhbHVlfVxuICovXG5WYWx1ZS5yYW5kb20zRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIG5ldyBSYW5kb20zRChtaW4sIG1heCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWYWx1ZTtcbiIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzQgPSBnbE1hdHJpeC52ZWM0O1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkubWF0aC5WZWN0b3I0XG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XG4gKiBAcGFyYW0ge251bWJlcn0gd1xuICovXG52YXIgVmVjdG9yNCA9IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcblxuICAgIHggPSB4IHx8IDA7XG4gICAgeSA9IHkgfHwgMDtcbiAgICB6ID0geiB8fCAwO1xuICAgIHcgPSB3IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjQsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHksIHosIHcgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3I0I1xuICAgICAqL1xuICAgIHRoaXMuYXJyYXkgPSB2ZWM0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XG5cbiAgICAvKipcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxuICAgICAqIEBuYW1lIF9kaXJ0eVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yNCNcbiAgICAgKi9cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG59O1xuXG5WZWN0b3I0LnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3I0LFxuXG4gICAgLyoqXG4gICAgICogQWRkIGIgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSB6O1xuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBzZXRBcnJheTogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XG5cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgVmVjdG9yNFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGlzdDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdmVjNC5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0YW5jZTogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdmVjNC5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgZGl2OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBkaXZpZGU6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjNC5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgbGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuKHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBsZW5ndGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjNC5sZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIGxlcnA6IGZ1bmN0aW9uKGEsIGIsIHQpIHtcbiAgICAgICAgdmVjNC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNaW5pbXVtIG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIG1pbjogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWM0Lm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBtYXg6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjNC5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgbmVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmVjNC5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmVjNC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIHJhbmRvbSB4LCB5LCB6LCB3IGNvbXBvbmVudHMgd2l0aCBhIGdpdmVuIHNjYWxlXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIHJhbmRvbTogZnVuY3Rpb24oc2NhbGUpIHtcbiAgICAgICAgdmVjNC5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTY2FsZSBzZWxmXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xuICAgICAgICB2ZWM0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uKGIsIHMpIHtcbiAgICAgICAgdmVjNC5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjNC5zcXJMZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjNC5zdWJ0cmFjdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDQgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBRdWF0ZXJuaW9uIHFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gcVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIHRyYW5zZm9ybVF1YXQ6IGZ1bmN0aW9uKHEpIHtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1RdWF0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHEuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIEdldHRlciBhbmQgU2V0dGVyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcblxuICAgIHZhciBwcm90byA9IFZlY3RvcjQucHJvdG90eXBlO1xuICAgIC8qKlxuICAgICAqIEBuYW1lIHhcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yNFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgeVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3I0XG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSB6XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjRcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHdcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yNFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxuICogQHBhcmFtICB7bnVtYmVyfSAgeVxuICogQHBhcmFtICB7bnVtYmVyfSAgelxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XG4gICAgdmVjNC5zZXQob3V0LmFycmF5LCB4LCB5LCB6LCB3KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcbiAgICB2ZWM0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yNC5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWM0LmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3I0LmRpc3RhbmNlID0gVmVjdG9yNC5kaXN0O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjNC5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuZGl2aWRlID0gVmVjdG9yNC5kaXY7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjQuZG90ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWM0LmRvdChhLmFycmF5LCBiLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yNC5sZW4gPSBmdW5jdGlvbihiKSB7XG4gICAgcmV0dXJuIHZlYzQubGVuZ3RoKGIuYXJyYXkpO1xufTtcblxuLy8gVmVjdG9yNC5sZW5ndGggPSBWZWN0b3I0LmxlbjtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcbiAgICB2ZWM0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0Lm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzQubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWM0Lm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjNC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5tdWx0aXBseSA9IFZlY3RvcjQubXVsO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2ZWM0Lm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5ub3JtYWxpemUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XG4gICAgdmVjNC5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcbiAgICB2ZWM0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LnNjYWxlQW5kQWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBzY2FsZSkge1xuICAgIHZlYzQuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjQuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gdmVjNC5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3I0LnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjQuc3FyRGlzdDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3I0LnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gdmVjNC5zcXJMZW4oYS5hcnJheSk7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjQuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjQuc3FyTGVuO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjNC5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuc3VidHJhY3QgPSBWZWN0b3I0LnN1YjtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1cbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2ZWM0LnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcbiAgICB2ZWM0LnRyYW5zZm9ybVF1YXQob3V0LmFycmF5LCBhLmFycmF5LCBxLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yNDtcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlXG4gKi9cbnZhciBQYXJ0aWNsZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblxuICAgIC8qKlxuICAgICAqIFVzZSBldWxlciBhbmdsZSB0byByZXByZXNlbnQgcGFydGljbGUgcm90YXRpb25cbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHRoaXMudmVsb2NpdHkgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUgez9jbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGlmZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWdlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zcHJpdGVTaXplID0gMTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53ZWlnaHQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2NsYXkucGFydGljbGUuRW1pdHRlcn1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXR0ZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgcGFydGljbGUgcG9zaXRpb25cbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXG4gKi9cblBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihkZWx0YVRpbWUpIHtcbiAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMucG9zaXRpb24uYXJyYXksIHRoaXMucG9zaXRpb24uYXJyYXksIHRoaXMudmVsb2NpdHkuYXJyYXksIGRlbHRhVGltZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMucm90YXRpb24uYXJyYXksIHRoaXMucm90YXRpb24uYXJyYXksIHRoaXMuYW5ndWxhclZlbG9jaXR5LmFycmF5LCBkZWx0YVRpbWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgUGFydGljbGUgZnJvbSAnLi9QYXJ0aWNsZSc7XG5pbXBvcnQgVmFsdWUgZnJvbSAnLi4vbWF0aC9WYWx1ZSc7XG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gIGdsTWF0cml4LnZlYzM7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRW1pdHRlclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEVtaXR0ZXIgPSBCYXNlLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5FbWl0dGVyIyAqL1xue1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyBjcmVhdGVkIGJ5IHRoaXMgZW1pdHRlclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbWF4OiAxMDAwLFxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXIgZWFjaCBzaG90XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBhbW91bnQ6IDIwLFxuXG4gICAgLy8gSW5pdCBzdGF0dXMgZm9yIGVhY2ggcGFydGljbGVcbiAgICAvKipcbiAgICAgKiBQYXJ0aWNsZSBsaWZlIGdlbmVyYXRvclxuICAgICAqIEB0eXBlIHs/Y2xheS5tYXRoLlZhbHVlLjxudW1iZXI+fVxuICAgICAqL1xuICAgIGxpZmU6IG51bGwsXG4gICAgLyoqXG4gICAgICogUGFydGljbGUgcG9zaXRpb24gZ2VuZXJhdG9yXG4gICAgICogQHR5cGUgez9jbGF5Lm1hdGguVmFsdWUuPGNsYXkubWF0aC5WZWN0b3IzPn1cbiAgICAgKi9cbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBQYXJ0aWNsZSByb3RhdGlvbiBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48Y2xheS5tYXRoLlZlY3RvcjM+fVxuICAgICAqL1xuICAgIHJvdGF0aW9uOiBudWxsLFxuICAgIC8qKlxuICAgICAqIFBhcnRpY2xlIHZlbG9jaXR5IGdlbmVyYXRvclxuICAgICAqIEB0eXBlIHs/Y2xheS5tYXRoLlZhbHVlLjxjbGF5Lm1hdGguVmVjdG9yMz59XG4gICAgICovXG4gICAgdmVsb2NpdHk6IG51bGwsXG4gICAgLyoqXG4gICAgICogUGFydGljbGUgYW5ndWxhciB2ZWxvY2l0eSBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48Y2xheS5tYXRoLlZlY3RvcjM+fVxuICAgICAqL1xuICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBQYXJ0aWNsZSBzcHJpdGUgc2l6ZSBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48bnVtYmVyPn1cbiAgICAgKi9cbiAgICBzcHJpdGVTaXplOiBudWxsLFxuICAgIC8qKlxuICAgICAqIFBhcnRpY2xlIHdlaWdodCBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48bnVtYmVyPn1cbiAgICAgKi9cbiAgICB3ZWlnaHQ6IG51bGwsXG5cbiAgICBfcGFydGljbGVQb29sOiBudWxsXG5cbn0sIGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5fcGFydGljbGVQb29sID0gW107XG5cbiAgICAvLyBUT0RPIFJlZHVjZSBoZWFwIG1lbW9yeVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXg7IGkrKykge1xuICAgICAgICB2YXIgcGFydGljbGUgPSBuZXcgUGFydGljbGUoKTtcbiAgICAgICAgcGFydGljbGUuZW1pdHRlciA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3BhcnRpY2xlUG9vbC5wdXNoKHBhcnRpY2xlKTtcblxuICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xuICAgICAgICAgICAgcGFydGljbGUudmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xuICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgfVxuICAgIH1cbn0sXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlci5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBFbWl0dGVyIG51bWJlciBvZiBwYXJ0aWNsZXMgYW5kIHB1c2ggdGhlbSB0byBhIGdpdmVuIHBhcnRpY2xlIGxpc3QuIEVtbWl0IG51bWJlciBpcyBkZWZpbmVkIGJ5IGFtb3VudCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSAge0FycmF5LjxjbGF5LnBhcnRpY2xlLlBhcnRpY2xlPn0gb3V0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24ob3V0KSB7XG4gICAgICAgIHZhciBhbW91bnQgPSBNYXRoLm1pbih0aGlzLl9wYXJ0aWNsZVBvb2wubGVuZ3RoLCB0aGlzLmFtb3VudCk7XG5cbiAgICAgICAgdmFyIHBhcnRpY2xlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlUG9vbC5wb3AoKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgcGFydGljbGUgc3RhdHVzXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24uZ2V0KHBhcnRpY2xlLnBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5nZXQocGFydGljbGUucm90YXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudmVsb2NpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LmdldChwYXJ0aWNsZS52ZWxvY2l0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hbmd1bGFyVmVsb2NpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5nZXQocGFydGljbGUuYW5ndWxhclZlbG9jaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmxpZmUpIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlID0gdGhpcy5saWZlLmdldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3ByaXRlU2l6ZSkge1xuICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNwcml0ZVNpemUgPSB0aGlzLnNwcml0ZVNpemUuZ2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy53ZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS53ZWlnaHQgPSB0aGlzLndlaWdodC5nZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRpY2xlLmFnZSA9IDA7XG5cbiAgICAgICAgICAgIG91dC5wdXNoKHBhcnRpY2xlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogS2lsbCBhIGRlYWQgcGFydGljbGUgYW5kIHB1dCBpdCBiYWNrIGluIHRoZSBwb29sXG4gICAgICogQHBhcmFtICB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZX0gcGFydGljbGVcbiAgICAgKi9cbiAgICBraWxsOiBmdW5jdGlvbihwYXJ0aWNsZSkge1xuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ3JlYXRlIGEgY29uc3RhbnQgMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkubWF0aC5WYWx1ZS5jb25zdGFudH1cbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIuY29uc3RhbnRcbiAqL1xuRW1pdHRlci5jb25zdGFudCA9IFZhbHVlLmNvbnN0YW50O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0YW50IHZlY3RvciB2YWx1ZSgyZCBvciAzZCkgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkubWF0aC5WYWx1ZS52ZWN0b3J9XG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnZlY3RvclxuICovXG5FbWl0dGVyLnZlY3RvciA9IFZhbHVlLnZlY3RvcjtcblxuLyoqXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkubWF0aC5WYWx1ZS5yYW5kb20xRH1cbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMURcbiAqL1xuRW1pdHRlci5yYW5kb20xRCA9IFZhbHVlLnJhbmRvbTFEO1xuXG4vKipcbiAqIENyZWF0ZSBhIHJhbmRvbSAyZCB2YWx1ZSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5tYXRoLlZhbHVlLnJhbmRvbTJEfVxuICogQGZ1bmN0aW9uIGNsYXkucGFydGljbGUuRW1pdHRlci5yYW5kb20yRFxuICovXG5FbWl0dGVyLnJhbmRvbTJEID0gVmFsdWUucmFuZG9tMkQ7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5Lm1hdGguVmFsdWUucmFuZG9tM0R9XG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTNEXG4gKi9cbkVtaXR0ZXIucmFuZG9tM0QgPSBWYWx1ZS5yYW5kb20zRDtcblxuZXhwb3J0IGRlZmF1bHQgRW1pdHRlcjtcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZpZWxkXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgRmllbGQgPSBCYXNlLmV4dGVuZCh7fSwge1xuICAgIC8qKlxuICAgICAqIEFwcGx5IGEgZmllbGQgdG8gdGhlIHBhcnRpY2xlIGFuZCB1cGRhdGUgdGhlIHBhcnRpY2xlIHZlbG9jaXR5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHZlbG9jaXR5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHBvc2l0aW9uXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB3ZWlnaHRcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnBhcnRpY2xlLkZpZWxkLnByb3RvdHlwZVxuICAgICAqL1xuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHt9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XG4iLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9GaWVsZCc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9ICBnbE1hdHJpeC52ZWMzO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGRcbiAqIEBleHRlbmRzIGNsYXkucGFydGljbGUuRmllbGRcbiAqL1xudmFyIEZvcmNlRmllbGQgPSBGaWVsZC5leHRlbmQoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZm9yY2U6IG5ldyBWZWN0b3IzKClcbiAgICB9O1xufSwge1xuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHtcbiAgICAgICAgaWYgKHdlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodmVsb2NpdHkuYXJyYXksIHZlbG9jaXR5LmFycmF5LCB0aGlzLmZvcmNlLmFycmF5LCBkZWx0YVRpbWUgLyB3ZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlRmllbGQ7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wYXJ0aWNsZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3IDogV09STERWSUVXO1xcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uIDogUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQwIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDEgOiBURVhDT09SRF8xO1xcbnZhcnlpbmcgdmVjMiB2X1V2MDtcXG52YXJ5aW5nIHZlYzIgdl9VdjE7XFxuI2VuZGlmXFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG52b2lkIG1haW4oKSB7XFxuICAgIHZfQWdlID0gbm9ybWFsLng7XFxuICAgIGZsb2F0IHJvdGF0aW9uID0gbm9ybWFsLnk7XFxuICAgIHZlYzQgd29ybGRWaWV3UG9zaXRpb24gPSB3b3JsZFZpZXcgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB3b3JsZFZpZXdQb3NpdGlvbjtcXG4gICAgZmxvYXQgdyA9IGdsX1Bvc2l0aW9uLnc7XFxuICAgIGdsX1BvaW50U2l6ZSA9IG5vcm1hbC56ICogcHJvamVjdGlvblswXS54IC8gdztcXG4gICAgI2lmZGVmIFVWX0FOSU1BVElPTlxcbiAgICAgICAgdl9VdjAgPSB0ZXhjb29yZDA7XFxuICAgICAgICB2X1V2MSA9IHRleGNvb3JkMTtcXG4gICAgI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGFydGljbGUuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcHJpdGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnQ7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuICAgICNpZmRlZiBTUFJJVEVfRU5BQkxFRFxcbiAgICAgICAgI2lmZGVmIFVWX0FOSU1BVElPTlxcbiAgICAgICAgICAgIGNvbG9yICo9IHRleHR1cmUyRChzcHJpdGUsIG1peCh2X1V2MCwgdl9VdjEsIGdsX1BvaW50Q29vcmQpKTtcXG4gICAgICAgICNlbHNlXFxuICAgICAgICAgICAgY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgZ2xfUG9pbnRDb29yZCk7XFxuICAgICAgICAjZW5kaWZcXG4gICAgI2VuZGlmXFxuICAgICNpZmRlZiBHUkFESUVOVF9FTkFCTEVEXFxuICAgICAgICBjb2xvciAqPSB0ZXh0dXJlMkQoZ3JhZGllbnQsIHZlYzIodl9BZ2UsIDAuNSkpO1xcbiAgICAjZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcbkBlbmRcIjtcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xuXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcblxuaW1wb3J0IHBhcnRpY2xlRXNzbCBmcm9tICcuL3BhcnRpY2xlLmdsc2wuanMnO1xuU2hhZGVyWydpbXBvcnQnXShwYXJ0aWNsZUVzc2wpO1xuXG52YXIgcGFydGljbGVTaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUuZnJhZ21lbnQnKSk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlXG4gKiBAZXh0ZW5kcyBjbGF5LlJlbmRlcmFibGVcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGUoe1xuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogNCxcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDQsXG4gKiAgICAgICAgIHNwcml0ZUFuaW1hdGlvblJlcGVhdDogMVxuICogICAgIH0pO1xuICogICAgIHNjZW5lLmFkZChwYXJ0aWNsZVJlbmRlcmFibGUpO1xuICogICAgIC8vIEVuYWJsZSB1diBhbmltYXRpb24gaW4gdGhlIHNoYWRlclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5tYXRlcmlhbC5kZWZpbmUoJ2JvdGgnLCAnVVZfQU5JTUFUSU9OJyk7XG4gKiAgICAgdmFyIEVtaXR0ZXIgPSBjbGF5LnBhcnRpY2xlLkVtaXR0ZXI7XG4gKiAgICAgdmFyIFZlY3RvcjMgPSBjbGF5Lm1hdGguVmVjdG9yMztcbiAqICAgICB2YXIgZW1pdHRlciA9IG5ldyBFbWl0dGVyKHtcbiAqICAgICAgICAgbWF4OiAyMDAwLFxuICogICAgICAgICBhbW91bnQ6IDEwMCxcbiAqICAgICAgICAgbGlmZTogRW1pdHRlci5yYW5kb20xRCgxMCwgMjApLFxuICogICAgICAgICBwb3NpdGlvbjogRW1pdHRlci52ZWN0b3IobmV3IFZlY3RvcjMoKSksXG4gKiAgICAgICAgIHZlbG9jaXR5OiBFbWl0dGVyLnJhbmRvbTNEKG5ldyBWZWN0b3IzKC0xMCwgMCwgLTEwKSwgbmV3IFZlY3RvcjMoMTAsIDAsIDEwKSk7XG4gKiAgICAgfSk7XG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEVtaXR0ZXIoZW1pdHRlcik7XG4gKiAgICAgdmFyIGdyYXZpdHlGaWVsZCA9IG5ldyBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGQoKTtcbiAqICAgICBncmF2aXR5RmllbGQuZm9yY2UueSA9IC0xMDtcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkRmllbGQoZ3Jhdml0eUZpZWxkKTtcbiAqICAgICAuLi5cbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24oZnJhbWVUaW1lKSB7XG4gKiAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS51cGRhdGVQYXJ0aWNsZXMoZnJhbWVUaW1lKTtcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuICogICAgIH0pO1xuICovXG52YXIgUGFydGljbGVSZW5kZXJhYmxlID0gUmVuZGVyYWJsZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlIyAqL1xue1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGxvb3A6IHRydWUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgb25lc2hvdDogZmFsc2UsXG4gICAgLyoqXG4gICAgICogRHVyYXRpb24gb2YgcGFydGljbGUgc3lzdGVtIGluIG1pbGxpc2Vjb25kc1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZHVyYXRpb246IDEsXG5cbiAgICAvLyBVViBBbmltYXRpb25cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNwcml0ZUFuaW1hdGlvblRpbGVYOiAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDAsXG5cbiAgICBtb2RlOiBSZW5kZXJhYmxlLlBPSU5UUyxcblxuICAgIGlnbm9yZVBpY2tpbmc6IHRydWUsXG5cbiAgICBfZWxhcHNlZFRpbWU6IDAsXG5cbiAgICBfZW1pdHRpbmc6IHRydWVcblxufSwgZnVuY3Rpb24oKXtcblxuICAgIHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xuICAgICAgICBkeW5hbWljOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMubWF0ZXJpYWwpIHtcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IHBhcnRpY2xlU2hhZGVyLFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZSgnc3ByaXRlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGFydGljbGVzID0gW107XG4gICAgdGhpcy5fZmllbGRzID0gW107XG4gICAgdGhpcy5fZW1pdHRlcnMgPSBbXTtcbn0sXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlLnByb3RvdHlwZSAqL1xue1xuXG4gICAgY3VsbGluZzogZmFsc2UsXG5cbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2UsXG5cbiAgICBjYXN0U2hhZG93OiBmYWxzZSxcbiAgICByZWNlaXZlU2hhZG93OiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEFkZCBlbWl0dGVyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcbiAgICAgKi9cbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnB1c2goZW1pdHRlcik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBlbWl0dGVyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcbiAgICAgKi9cbiAgICByZW1vdmVFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnNwbGljZSh0aGlzLl9lbWl0dGVycy5pbmRleE9mKGVtaXR0ZXIpLCAxKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIGZpZWxkXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkZpZWxkfSBmaWVsZFxuICAgICAqL1xuICAgIGFkZEZpZWxkOiBmdW5jdGlvbihmaWVsZCkge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBmaWVsZFxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcbiAgICAgKi9cbiAgICByZW1vdmVGaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZSh0aGlzLl9maWVsZHMuaW5kZXhPZihmaWVsZCksIDEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgcGFydGljbGUgc3lzdGVtLlxuICAgICAqL1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gUHV0IGFsbCB0aGUgcGFydGljbGVzIGJhY2tcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xuICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGFydGljbGVzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxuICAgICAqL1xuICAgIHVwZGF0ZVBhcnRpY2xlczogZnVuY3Rpb24oZGVsdGFUaW1lKSB7XG5cbiAgICAgICAgLy8gTVMgPT4gU2Vjb25kc1xuICAgICAgICBkZWx0YVRpbWUgLz0gMTAwMDtcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgICAgIHZhciBwYXJ0aWNsZXMgPSB0aGlzLl9wYXJ0aWNsZXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2VtaXR0aW5nKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VtaXR0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlcnNbaV0uZW1pdChwYXJ0aWNsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub25lc2hvdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZ2luZ1xuICAgICAgICB2YXIgbGVuID0gcGFydGljbGVzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcbiAgICAgICAgICAgIHAuYWdlICs9IGRlbHRhVGltZTtcbiAgICAgICAgICAgIGlmIChwLmFnZSA+PSBwLmxpZmUpIHtcbiAgICAgICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZXNbaV0gPSBwYXJ0aWNsZXNbbGVuLTFdO1xuICAgICAgICAgICAgICAgIHBhcnRpY2xlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBsZW4tLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgLy8gVXBkYXRlXG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmllbGRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1tqXS5hcHBseVRvKHAudmVsb2NpdHksIHAucG9zaXRpb24sIHAud2VpZ2h0LCBkZWx0YVRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAudXBkYXRlKGRlbHRhVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVWZXJ0aWNlcygpO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuICAgICAgICAvLyBJZiBoYXMgdXYgYW5pbWF0aW9uXG4gICAgICAgIHZhciBhbmltVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xuICAgICAgICB2YXIgYW5pbVRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcbiAgICAgICAgdmFyIGFuaW1SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcbiAgICAgICAgdmFyIG5VdkFuaW1GcmFtZSA9IGFuaW1UaWxlWSAqIGFuaW1UaWxlWCAqIGFuaW1SZXBlYXQ7XG4gICAgICAgIHZhciBoYXNVdkFuaW1hdGlvbiA9IG5VdkFuaW1GcmFtZSA+IDE7XG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xuICAgICAgICAvLyBQdXQgcGFydGljbGUgc3RhdHVzIGluIG5vcm1hbFxuICAgICAgICB2YXIgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xuICAgICAgICB2YXIgdXZzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XG4gICAgICAgIHZhciB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWU7XG5cbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3BhcnRpY2xlcy5sZW5ndGg7XG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8IHBvc2l0aW9ucy5sZW5ndGggIT09IGxlbiAqIDMpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gT3B0aW1pemVcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xuICAgICAgICAgICAgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcbiAgICAgICAgICAgIGlmIChoYXNVdkFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAyKTtcbiAgICAgICAgICAgICAgICB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGludkFuaW1UaWxlWCA9IDEgLyBhbmltVGlsZVg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlc1tpXTtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpICogMztcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zW29mZnNldCArIGpdID0gcGFydGljbGUucG9zaXRpb24uYXJyYXlbal07XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXRdID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcbiAgICAgICAgICAgICAgICAvLyBub3JtYWxzW29mZnNldCArIDFdID0gcGFydGljbGUucm90YXRpb247XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAxXSA9IDA7XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAyXSA9IHBhcnRpY2xlLnNwcml0ZVNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb2Zmc2V0MiA9IGkgKiAyO1xuICAgICAgICAgICAgaWYgKGhhc1V2QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgIHZhciBwID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhZ2UgPSBNYXRoLnJvdW5kKHAgKiAoblV2QW5pbUZyYW1lIC0gMSkpICogYW5pbVJlcGVhdDtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IE1hdGguZmxvb3Ioc3RhZ2UgKiBpbnZBbmltVGlsZVgpO1xuICAgICAgICAgICAgICAgIHZhciB1ID0gc3RhZ2UgLSB2ICogYW5pbVRpbGVYO1xuICAgICAgICAgICAgICAgIHV2c1tvZmZzZXQyXSA9IHUgLyBhbmltVGlsZVg7XG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDIgKyAxXSA9IDEgLSB2IC8gYW5pbVRpbGVZO1xuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0Ml0gPSAodSArIDEpIC8gYW5pbVRpbGVYO1xuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0MiArIDFdID0gMSAtICh2ICsgMSkgLyBhbmltVGlsZVk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW9tZXRyeS5kaXJ0eSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzRmluaXNoZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWUgPiB0aGlzLmR1cmF0aW9uICYmICF0aGlzLmxvb3A7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcbiAgICAgICAgLy8gUHV0IGFsbCB0aGUgcGFydGljbGVzIGJhY2tcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xuICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICAgICAgLy8gVE9ETyBEaXNwb3NlIHRleHR1cmUgP1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZX1cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgUGFydGljbGVSZW5kZXJhYmxlKHtcbiAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLm1hdGVyaWFsXG4gICAgICAgIH0pO1xuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubG9vcCA9IHRoaXMubG9vcDtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLm9uZXNob3QgPSB0aGlzLm9uZXNob3Q7XG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVYID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWDtcblxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGQodGhpcy5fY2hpbGRyZW5baV0uY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRpY2xlUmVuZGVyYWJsZTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUGFydGljbGVSZW5kZXJhYmxlO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGlja2luZy5jb2xvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudm9pZCBtYWluKCl7XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICAgICNpZmRlZiBTS0lOTklOR1xcbiAgICAgICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgICAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAgICAjZW5kaWZcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzQgY29sb3IgOiBbMS4wLCAxLjAsIDEuMCwgMS4wXTtcXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XG5cbmltcG9ydCBjb2xvckVzc2wgZnJvbSAnLi9jb2xvci5nbHNsLmpzJztcblNoYWRlci5pbXBvcnQoY29sb3JFc3NsKTtcblxuLyoqXG4gKiBQaXhlbCBwaWNraW5nIGlzIGdwdSBiYXNlZCBwaWNraW5nLCB3aGljaCBpcyBmYXN0IGFuZCBhY2N1cmF0ZS5cbiAqIEJ1dCBub3QgbGlrZSByYXkgcGlja2luZywgaXQgY2FuJ3QgZ2V0IHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYW5kIHRyaWFuZ2xlLlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmdcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBQaXhlbFBpY2tpbmcgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBpY2tpbmcuUGl4ZWxQaWNraW5nIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYXJnZXQgcmVuZGVyZXJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XG4gICAgICAgICAqL1xuICAgICAgICByZW5kZXJlcjogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERvd25zYW1wbGUgcmF0aW8gb2YgaGlkZGVuIGZyYW1lIGJ1ZmZlclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgZG93blNhbXBsZVJhdGlvOiAxLFxuXG4gICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgIGhlaWdodDogMTAwLFxuXG4gICAgICAgIGxvb2t1cE9mZnNldDogMSxcblxuICAgICAgICBfZnJhbWVCdWZmZXI6IG51bGwsXG4gICAgICAgIF90ZXh0dXJlOiBudWxsLFxuICAgICAgICBfc2hhZGVyOiBudWxsLFxuXG4gICAgICAgIF9pZE1hdGVyaWFsczogW10sXG4gICAgICAgIF9sb29rdXBUYWJsZTogW10sXG5cbiAgICAgICAgX21lc2hNYXRlcmlhbHM6IFtdLFxuXG4gICAgICAgIF9pZE9mZnNldDogMFxuICAgIH07XG59LCBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5yZW5kZXJlci5nZXRXaWR0aCgpO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XG4gICAgfVxuICAgIHRoaXMuX2luaXQoKTtcbn0sIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZy5wcm90b3R5cGUgKi8ge1xuICAgIF9pbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbyxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgKiB0aGlzLmRvd25TYW1wbGVSYXRpb1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcblxuICAgICAgICB0aGlzLl9zaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGlja2luZy5jb2xvci52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5waWNraW5nLmNvbG9yLmZyYWdtZW50JykpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0IHBpY2tpbmcgcHJlc2lzaW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXG4gICAgICovXG4gICAgc2V0UHJlY2lzaW9uOiBmdW5jdGlvbihyYXRpbykge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gdGhpcy53aWR0aCAqIHJhdGlvO1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICogcmF0aW87XG4gICAgICAgIHRoaXMuZG93blNhbXBsZVJhdGlvID0gcmF0aW87XG4gICAgfSxcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS53aWR0aCA9IHdpZHRoICogdGhpcy5kb3duU2FtcGxlUmF0aW87XG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5kb3duU2FtcGxlUmF0aW87XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGlydHkoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgcGlja2luZyBmcmFtZWJ1ZmZlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSkge1xuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgICAgICBpZiAocmVuZGVyZXIuZ2V0V2lkdGgoKSAhPT0gdGhpcy53aWR0aCB8fCByZW5kZXJlci5nZXRIZWlnaHQoKSAhPT0gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX3RleHR1cmUpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgdGhpcy5faWRPZmZzZXQgPSB0aGlzLmxvb2t1cE9mZnNldDtcbiAgICAgICAgdGhpcy5fc2V0TWF0ZXJpYWwoc2NlbmUpO1xuICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVNYXRlcmlhbCgpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuICAgIH0sXG5cbiAgICBfc2V0TWF0ZXJpYWw6IGZ1bmN0aW9uKHJvb3QpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9MDsgaSA8IHJvb3QuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSByb290Ll9jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC5nZW9tZXRyeSAmJiBjaGlsZC5tYXRlcmlhbCAmJiBjaGlsZC5tYXRlcmlhbC5zaGFkZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9pZE9mZnNldCsrO1xuICAgICAgICAgICAgICAgIHZhciBpZHggPSBpZCAtIHRoaXMubG9va3VwT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF07XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX3NoYWRlclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gcGFja0lEKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMF0gLz0gMjU1O1xuICAgICAgICAgICAgICAgICAgICBjb2xvclsxXSAvPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzJdIC89IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbM10gPSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnY29sb3InLCBjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF0gPSBtYXRlcmlhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFsc1tpZHhdID0gY2hpbGQubWF0ZXJpYWw7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaWR4XSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hpbGQuX2NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQaWNrIHRoZSBvYmplY3RcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxuICAgICAqIEBwYXJhbSAge251bWJlcn0geSBNb3VzZSBwb3NpdGlvbiB5XG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIHBpY2s6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcblxuICAgICAgICB2YXIgcmF0aW8gPSB0aGlzLmRvd25TYW1wbGVSYXRpbztcbiAgICAgICAgeCA9IE1hdGguY2VpbChyYXRpbyAqIHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHJhdGlvICogKHRoaXMuaGVpZ2h0IC0geSkpO1xuXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICB2YXIgcGl4ZWwgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAvLyBUT0RPIG91dCBvZiBib3VuZHMgP1xuICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgP1xuICAgICAgICBfZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBfZ2wuUkdCQSwgX2dsLlVOU0lHTkVEX0JZVEUsIHBpeGVsKTtcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgLy8gU2tpcCBpbnRlcnBvbGF0ZWQgcGl4ZWwgYmVjYXVzZSBvZiBhbnRpIGFsaWFzXG4gICAgICAgIGlmIChwaXhlbFszXSA9PT0gMjU1KSB7XG4gICAgICAgICAgICB2YXIgaWQgPSB1bnBhY2tJRChwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTtcbiAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuX2xvb2t1cFRhYmxlW2lkIC0gdGhpcy5sb29rdXBPZmZzZXRdO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfcmVzdG9yZU1hdGVyaWFsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sb29rdXBUYWJsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaV0ubWF0ZXJpYWwgPSB0aGlzLl9tZXNoTWF0ZXJpYWxzW2ldO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgIH1cbn0pO1xuXG5mdW5jdGlvbiBwYWNrSUQoaWQpe1xuICAgIHZhciByID0gaWQgPj4gMTY7XG4gICAgdmFyIGcgPSAoaWQgLSAociA8PCA4KSkgPj4gODtcbiAgICB2YXIgYiA9IGlkIC0gKHIgPDwgMTYpIC0gKGc8PDgpO1xuICAgIHJldHVybiBbciwgZywgYl07XG59XG5cbmZ1bmN0aW9uIHVucGFja0lEKHIsIGcsIGIpe1xuICAgIHJldHVybiAociA8PCAxNikgKyAoZzw8OCkgKyBiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQaXhlbFBpY2tpbmc7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2xcbiAqIEBleGFtcGxlXG4gKiAgICAgdmFyIGNvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2woe1xuICogICAgICAgICB0YXJnZXQ6IGNhbWVyYSxcbiAqICAgICAgICAgZG9tRWxlbWVudDogcmVuZGVyZXIuY2FudmFzXG4gKiAgICAgfSk7XG4gKiAgICAgLi4uXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xuICogICAgICAgICBjb250cm9sLnVwZGF0ZShmcmFtZVRpbWUpO1xuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgfSk7XG4gKi9cbnZhciBGcmVlQ29udHJvbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkZyZWVDb250cm9sIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTY2VuZSBub2RlIHRvIGNvbnRyb2wsIG1vc3RseSBpdCBpcyBhIGNhbWVyYVxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxuICAgICAgICAgKi9cbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYXJnZXQgZG9tIHRvIGJpbmQgd2l0aCBtb3VzZSBldmVudHNcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAgICAgKi9cbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTW91c2UgbW92ZSBzZW5zaXRpdml0eVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc2Vuc2l0aXZpdHk6IDEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRhcmdldCBtb3ZlIHNwZWVkXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBzcGVlZDogMC40LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcCBheGlzXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgICAgICovXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgbG9jayB2ZXJ0aWNhbCBtb3ZlbWVudFxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHZlcnRpY2FsTW92ZUxvY2s6IGZhbHNlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5hbmltYXRpb24uQW5pbWF0aW9ufVxuICAgICAgICAgKi9cbiAgICAgICAgYW5pbWF0aW9uOiBudWxsLFxuXG4gICAgICAgIF9tb3ZlRm9yd2FyZDogZmFsc2UsXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxuICAgICAgICBfbW92ZUxlZnQ6IGZhbHNlLFxuICAgICAgICBfbW92ZVJpZ2h0OiBmYWxzZSxcblxuICAgICAgICBfb2Zmc2V0UGl0Y2g6IDAsXG4gICAgICAgIF9vZmZzZXRSb2xsOiAwXG4gICAgfTtcbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xvY2tDaGFuZ2UgPSB0aGlzLl9sb2NrQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fa2V5RG93biA9IHRoaXMuX2tleURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLl9rZXlVcCA9IHRoaXMuX2tleVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fbW91c2VNb3ZlID0gdGhpcy5fbW91c2VNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICBpZiAodGhpcy5kb21FbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgfVxufSxcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2wucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogRW5hYmxlIGNvbnRyb2xcbiAgICAgKi9cbiAgICBlbmFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBVc2UgcG9pbnRlciBsb2NrXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3BvaW50ZXJsb2NrL2ludHJvL1xuICAgICAgICB2YXIgZWwgPSB0aGlzLmRvbUVsZW1lbnQ7XG5cbiAgICAgICAgLy9NdXN0IHJlcXVlc3QgcG9pbnRlciBsb2NrIGFmdGVyIGNsaWNrIGV2ZW50LCBjYW4ndCBub3QgZG8gaXQgZGlyZWN0bHlcbiAgICAgICAgLy9XaHkgPyA/XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9rZXlVcCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5vbignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBjb250cm9sXG4gICAgICovXG4gICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdGhpcy50YXJnZXQub2ZmKCdiZWZvcmV1cGRhdGUnLCB0aGlzLl9iZWZvcmVVcGRhdGVDYW1lcmEpO1xuXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcblxuICAgICAgICBlbC5leGl0UG9pbnRlckxvY2sgPSBlbC5leGl0UG9pbnRlckxvY2tcbiAgICAgICAgICAgIHx8IGVsLm1vekV4aXRQb2ludGVyTG9ja1xuICAgICAgICAgICAgfHwgZWwud2Via2l0RXhpdFBvaW50ZXJMb2NrO1xuXG4gICAgICAgIGlmIChlbC5leGl0UG9pbnRlckxvY2spIHtcbiAgICAgICAgICAgIGVsLmV4aXRQb2ludGVyTG9jaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcblxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9rZXlVcCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5vZmYoJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9yZXF1ZXN0UG9pbnRlckxvY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSB0aGlzO1xuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2sgPSBlbC5yZXF1ZXN0UG9pbnRlckxvY2tcbiAgICAgICAgICAgIHx8IGVsLm1velJlcXVlc3RQb2ludGVyTG9ja1xuICAgICAgICAgICAgfHwgZWwud2Via2l0UmVxdWVzdFBvaW50ZXJMb2NrO1xuXG4gICAgICAgIGVsLnJlcXVlc3RQb2ludGVyTG9jaygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sIHVwZGF0ZS4gU2hvdWxkIGJlIGludm9rZWQgZXZlcnkgZnJhbWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uKGZyYW1lVGltZSkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG5cbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy50YXJnZXQucG9zaXRpb247XG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcblxuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbE1vdmVMb2NrKSB7XG4gICAgICAgICAgICB6QXhpcy55ID0gMDtcbiAgICAgICAgICAgIHpBeGlzLm5vcm1hbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNwZWVkID0gdGhpcy5zcGVlZCAqIGZyYW1lVGltZSAvIDIwO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xuICAgICAgICAgICAgLy8gT3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHpcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCAtc3BlZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tb3ZlQmFja3dhcmQpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBzcGVlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21vdmVMZWZ0KSB7XG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLXNwZWVkIC8gMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21vdmVSaWdodCkge1xuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIHNwZWVkIC8gMik7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgeEF4aXMsIC10aGlzLl9vZmZzZXRSb2xsICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XG5cbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCA9IHRoaXMuX29mZnNldFBpdGNoID0gMDtcbiAgICB9LFxuXG4gICAgX2xvY2tDaGFuZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkb2N1bWVudC5wb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxuICAgICAgICAgICAgfHwgZG9jdW1lbnQubW96UG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcbiAgICAgICAgICAgIHx8IGRvY3VtZW50LndlYmtpdFBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9tb3VzZU1vdmU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGR4ID0gZS5tb3ZlbWVudFggfHwgZS5tb3pNb3ZlbWVudFggfHwgZS53ZWJraXRNb3ZlbWVudFggfHwgMDtcbiAgICAgICAgdmFyIGR5ID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pNb3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgMDtcblxuICAgICAgICB0aGlzLl9vZmZzZXRQaXRjaCArPSBkeCAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XG4gICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZHkgKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xuXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGV2ZW50IHRvIHJlbWluZCByZW5kZXJlciBkbyByZW5kZXJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2RldGVjdE1vdmVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCB8fCB0aGlzLl9tb3ZlQmFja3dhcmQgfHwgdGhpcy5fbW92ZUxlZnQgfHwgdGhpcy5fbW92ZVJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9rZXlEb3duOiBmdW5jdGlvbihlKSB7XG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgODc6IC8vd1xuICAgICAgICAgICAgY2FzZSAzNzogLy91cCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgODM6IC8vc1xuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2ODogLy9kXG4gICAgICAgICAgICBjYXNlIDM5OiAvL3JpZ2h0IGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXG4gICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfSxcblxuICAgIF9rZXlVcDogZnVuY3Rpb24oZSkge1xuICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDg3OiAvL3dcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA4MzogLy9zXG4gICAgICAgICAgICBjYXNlIDQwOiAvL2Rvd24gYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjg6IC8vZFxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZyZWVDb250cm9sO1xuIiwidmFyIEdlc3R1cmVNZ3IgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICB0aGlzLl90cmFjayA9IFtdO1xufTtcblxuR2VzdHVyZU1nci5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogR2VzdHVyZU1ncixcblxuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcbiAgICAgICAgdGhpcy5fZG9UcmFjayhldmVudCwgdGFyZ2V0LCByb290KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZShldmVudCk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3RyYWNrLmxlbmd0aCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfZG9UcmFjazogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXG4gICAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYWNrSXRlbSA9IHtcbiAgICAgICAgICAgIHBvaW50czogW10sXG4gICAgICAgICAgICB0b3VjaGVzOiBbXSxcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvdWNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXNbaV07XG4gICAgICAgICAgICB0cmFja0l0ZW0ucG9pbnRzLnB1c2goW3RvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFldKTtcbiAgICAgICAgICAgIHRyYWNrSXRlbS50b3VjaGVzLnB1c2godG91Y2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhY2sucHVzaCh0cmFja0l0ZW0pO1xuICAgIH0sXG5cbiAgICBfcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHJlY29nbml6ZXJzKSB7XG4gICAgICAgICAgICBpZiAocmVjb2duaXplcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IHJlY29nbml6ZXJzW2V2ZW50TmFtZV0odGhpcy5fdHJhY2ssIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZ2VzdHVyZUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGRpc3QocG9pbnRQYWlyKSB7XG4gICAgdmFyIGR4ID0gcG9pbnRQYWlyWzFdWzBdIC0gcG9pbnRQYWlyWzBdWzBdO1xuICAgIHZhciBkeSA9IHBvaW50UGFpclsxXVsxXSAtIHBvaW50UGFpclswXVsxXTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuXG5mdW5jdGlvbiBjZW50ZXIocG9pbnRQYWlyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgKHBvaW50UGFpclswXVswXSArIHBvaW50UGFpclsxXVswXSkgLyAyLFxuICAgICAgICAocG9pbnRQYWlyWzBdWzFdICsgcG9pbnRQYWlyWzFdWzFdKSAvIDJcbiAgICBdO1xufVxuXG52YXIgcmVjb2duaXplcnMgPSB7XG5cbiAgICBwaW5jaDogZnVuY3Rpb24gKHRyYWNrLCBldmVudCkge1xuICAgICAgICB2YXIgdHJhY2tMZW4gPSB0cmFjay5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCF0cmFja0xlbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBpbmNoRW5kID0gKHRyYWNrW3RyYWNrTGVuIC0gMV0gfHwge30pLnBvaW50cztcbiAgICAgICAgdmFyIHBpbmNoUHJlID0gKHRyYWNrW3RyYWNrTGVuIC0gMl0gfHwge30pLnBvaW50cyB8fCBwaW5jaEVuZDtcblxuICAgICAgICBpZiAocGluY2hQcmVcbiAgICAgICAgICAgICYmIHBpbmNoUHJlLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICYmIHBpbmNoRW5kXG4gICAgICAgICAgICAmJiBwaW5jaEVuZC5sZW5ndGggPiAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgdmFyIHBpbmNoU2NhbGUgPSBkaXN0KHBpbmNoRW5kKSAvIGRpc3QocGluY2hQcmUpO1xuICAgICAgICAgICAgIWlzRmluaXRlKHBpbmNoU2NhbGUpICYmIChwaW5jaFNjYWxlID0gMSk7XG5cbiAgICAgICAgICAgIGV2ZW50LnBpbmNoU2NhbGUgPSBwaW5jaFNjYWxlO1xuXG4gICAgICAgICAgICB2YXIgcGluY2hDZW50ZXIgPSBjZW50ZXIocGluY2hFbmQpO1xuICAgICAgICAgICAgZXZlbnQucGluY2hYID0gcGluY2hDZW50ZXJbMF07XG4gICAgICAgICAgICBldmVudC5waW5jaFkgPSBwaW5jaENlbnRlclsxXTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncGluY2gnLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdHJhY2tbMF0udGFyZ2V0LFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdlc3R1cmVNZ3I7XG4iLCJpbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XG5pbXBvcnQgUGxhbmUgZnJvbSAnLi4vbWF0aC9QbGFuZSc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xuXG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciB2ZWM0ID0gZ2xNYXRyaXgudmVjNDtcblxudmFyIHV2cyA9IFtbMCwgMF0sIFswLCAxXSwgWzEsIDFdLCBbMSwgMF1dO1xudmFyIHRyaXMgPSBbMCwgMSwgMiwgMiwgMywgMF07XG5cbnZhciBJbmZpbml0ZVBsYW5lID0gTWVzaC5leHRlbmQoe1xuXG4gICAgY2FtZXJhOiBudWxsLFxuXG4gICAgcGxhbmU6IG51bGwsXG5cbiAgICBtYXhHcmlkOiAwLFxuXG4gICAgLy8gVE9ET1xuICAgIGZydXN0dW1DdWxsaW5nOiBmYWxzZVxuXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XG4gICAgICAgIGR5bmFtaWM6IHRydWVcbiAgICB9KTtcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmluaXQoNik7XG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwuaW5pdCg2KTtcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KDYpO1xuICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoNik7XG5cbiAgICB0aGlzLnBsYW5lID0gbmV3IFBsYW5lKCk7XG59LCB7XG5cbiAgICB1cGRhdGVHZW9tZXRyeTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBjb29yZHMgPSB0aGlzLl91blByb2plY3RHcmlkKCk7XG4gICAgICAgIGlmICghY29vcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcbiAgICAgICAgdmFyIG5vcm1hbEF0dHIgPSB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsO1xuICAgICAgICB2YXIgdGV4Y29vcmRzID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdlb21ldHJ5LmluZGljZXM7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpZHggPSB0cmlzW2ldO1xuICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChpLCBjb29yZHNbaWR4XS5hcnJheSk7XG4gICAgICAgICAgICBub3JtYWxBdHRyLnNldChpLCB0aGlzLnBsYW5lLm5vcm1hbC5hcnJheSk7XG4gICAgICAgICAgICB0ZXhjb29yZHMuc2V0KGksIHV2c1tpZHhdKTtcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlydHkoKTtcbiAgICB9LFxuXG4gICAgLy8gaHR0cDovL2ZpbGVhZG1pbi5jcy5sdGguc2UvZ3JhcGhpY3MvdGhlc2VzL3Byb2plY3RzL3Byb2pncmlkL1xuICAgIF91blByb2plY3RHcmlkOiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBwbGFuZVZpZXdTcGFjZSA9IG5ldyBQbGFuZSgpO1xuICAgICAgICB2YXIgbGluZXMgPSBbXG4gICAgICAgICAgICAwLCAxLCAwLCAyLCAxLCAzLCAyLCAzLFxuICAgICAgICAgICAgNCwgNSwgNCwgNiwgNSwgNywgNiwgNyxcbiAgICAgICAgICAgIDAsIDQsIDEsIDUsIDIsIDYsIDMsIDdcbiAgICAgICAgXTtcblxuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB2YXIgZW5kID0gbmV3IFZlY3RvcjMoKTtcblxuICAgICAgICB2YXIgcG9pbnRzID0gW107XG5cbiAgICAgICAgLy8gMS0tLS0yXG4gICAgICAgIC8vIHwgICAgfFxuICAgICAgICAvLyAwLS0tLTNcbiAgICAgICAgdmFyIGNvb3JkcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgY29vcmRzW2ldID0gbmV3IFZlY3RvcjMoMCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5jb3B5KHRoaXMucGxhbmUpO1xuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuYXBwbHlUcmFuc2Zvcm0odGhpcy5jYW1lcmEudmlld01hdHJpeCk7XG5cbiAgICAgICAgICAgIHZhciBmcnVzdHVtVmVydGljZXMgPSB0aGlzLmNhbWVyYS5mcnVzdHVtLnZlcnRpY2VzO1xuXG4gICAgICAgICAgICB2YXIgblBvaW50cyA9IDA7XG4gICAgICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCBsaW5lcyBvZiBmcnVzdHVtXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdGFydC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMl1dO1xuICAgICAgICAgICAgICAgIGVuZC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMiArIDFdXTtcblxuICAgICAgICAgICAgICAgIHZhciBwb2ludCA9IHBsYW5lVmlld1NwYWNlLmludGVyc2VjdExpbmUoc3RhcnQsIGVuZCwgcG9pbnRzW25Qb2ludHNdKTtcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2ludHNbblBvaW50c10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tuUG9pbnRzXSA9IHBvaW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5Qb2ludHMrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoblBvaW50cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzW2ldLmFwcGx5UHJvamVjdGlvbih0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtaW5YID0gcG9pbnRzWzBdLmFycmF5WzBdO1xuICAgICAgICAgICAgdmFyIG1pblkgPSBwb2ludHNbMF0uYXJyYXlbMV07XG4gICAgICAgICAgICB2YXIgbWF4WCA9IHBvaW50c1swXS5hcnJheVswXTtcbiAgICAgICAgICAgIHZhciBtYXhZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuUG9pbnRzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcbiAgICAgICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaW5YID09IG1heFggfHwgbWluWSA9PSBtYXhZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29vcmRzWzBdLmFycmF5WzBdID0gbWluWDtcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVsxXSA9IG1pblk7XG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMF0gPSBtaW5YO1xuICAgICAgICAgICAgY29vcmRzWzFdLmFycmF5WzFdID0gbWF4WTtcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVswXSA9IG1heFg7XG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMV0gPSBtYXhZO1xuICAgICAgICAgICAgY29vcmRzWzNdLmFycmF5WzBdID0gbWF4WDtcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVsxXSA9IG1pblk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheShjb29yZHNbaV0sIHJheSk7XG4gICAgICAgICAgICAgICAgcmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIGNvb3Jkc1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb29yZHM7XG4gICAgICAgIH07XG4gICAgfSkoKVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlUGxhbmU7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgR2VzdHVyZU1nciBmcm9tICcuL0dlc3R1cmVNZ3InO1xuXG5mdW5jdGlvbiBmaXJzdE5vdE51bGwoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUb0FycmF5KHZhbCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhbCA9IFt2YWwsIHZhbF07XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sXG4gKi9cbnZhciBPcmJpdENvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG5cbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcblxuICAgICAgICB0aW1lbGluZTogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0hUTUxEb21FbGVtZW50fVxuICAgICAgICAgKi9cbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cbiAgICAgICAgICovXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgICAgICovXG4gICAgICAgIF9jZW50ZXI6IG5ldyBWZWN0b3IzKCksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1pbmltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgICAgICovXG4gICAgICAgIG1pbkRpc3RhbmNlOiAwLjEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1heGltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAyXG4gICAgICAgICAqL1xuICAgICAgICBtYXhEaXN0YW5jZTogMTAwMCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTWluaW11bSBhbHBoYSByb3RhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbWluQWxwaGE6IC05MCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTWF4aW11bSBhbHBoYSByb3RhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbWF4QWxwaGE6IDkwLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNaW5pbXVtIGJldGEgcm90YXRpb25cbiAgICAgICAgICovXG4gICAgICAgIG1pbkJldGE6IC1JbmZpbml0eSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1heGltdW0gYmV0YSByb3RhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbWF4QmV0YTogSW5maW5pdHksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXJ0IGF1dG8gcm90YXRpbmcgYWZ0ZXIgc3RpbGwgZm9yIHRoZSBnaXZlbiB0aW1lXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvUm90YXRlQWZ0ZXJTdGlsbDogMCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRGlyZWN0aW9uIG9mIGF1dG9Sb3RhdGUuIGN3IG9yIGNjdyB3aGVuIGxvb2tpbmcgdG9wIGRvd24uXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvUm90YXRlRGlyZWN0aW9uOiAnY3cnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWdyZWUgcGVyIHNlY29uZFxuICAgICAgICAgKi9cbiAgICAgICAgYXV0b1JvdGF0ZVNwZWVkOiA2MCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUGFuIG9yIHJvdGF0ZVxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgX21vZGU6ICdyb3RhdGUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGRhbXBpbmc6IDAuOCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICByb3RhdGVTZW5zaXRpdml0eTogMSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICB6b29tU2Vuc2l0aXZpdHk6IDEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgcGFuU2Vuc2l0aXZpdHk6IDEsXG5cbiAgICAgICAgX25lZWRzVXBkYXRlOiBmYWxzZSxcblxuICAgICAgICBfcm90YXRpbmc6IGZhbHNlLFxuXG4gICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB5QXhpc1xuICAgICAgICBfcGhpOiAwLFxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeEF4aXNcbiAgICAgICAgX3RoZXRhOiAwLFxuXG4gICAgICAgIF9tb3VzZVg6IDAsXG4gICAgICAgIF9tb3VzZVk6IDAsXG5cbiAgICAgICAgX3JvdGF0ZVZlbG9jaXR5OiBuZXcgVmVjdG9yMigpLFxuXG4gICAgICAgIF9wYW5WZWxvY2l0eTogbmV3IFZlY3RvcjIoKSxcblxuICAgICAgICBfZGlzdGFuY2U6IDIwLFxuXG4gICAgICAgIF96b29tU3BlZWQ6IDAsXG5cbiAgICAgICAgX3N0aWxsVGltZW91dDogMCxcblxuICAgICAgICBfYW5pbWF0b3JzOiBbXSxcblxuICAgICAgICBfZ2VzdHVyZU1ncjogbmV3IEdlc3R1cmVNZ3IoKVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gRWFjaCBPcmJpdENvbnRyb2wgaGFzIGl0J3Mgb3duIGhhbmRsZXJcbiAgICB0aGlzLl9tb3VzZURvd25IYW5kbGVyID0gdGhpcy5fbW91c2VEb3duSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyID0gdGhpcy5fbW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX21vdXNlVXBIYW5kbGVyID0gdGhpcy5fbW91c2VVcEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9waW5jaEhhbmRsZXIgPSB0aGlzLl9waW5jaEhhbmRsZXIuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuaW5pdCgpO1xufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplLlxuICAgICAqIE1vdXNlIGV2ZW50IGJpbmRpbmdcbiAgICAgKi9cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XG5cbiAgICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcblxuICAgICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XG4gICAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9uKCdmcmFtZScsIHRoaXMudXBkYXRlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlLlxuICAgICAqIE1vdXNlIGV2ZW50IHVuYmluZGluZ1xuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcblxuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcblxuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcbiAgICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wQWxsQW5pbWF0aW9uKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBkaXN0YW5jZVxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBkaXN0YW5jZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIHNldERpc3RhbmNlOiBmdW5jdGlvbiAoZGlzdGFuY2UpIHtcbiAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxwaGEgcm90YXRpb25cbiAgICAgKiBBbHBoYSBhbmdsZSBmb3IgdG9wLWRvd24gcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byB0b3AuXG4gICAgICpcbiAgICAgKiBXaGljaCBtZWFucyBjYW1lcmEgcm90YXRpb24gYXJvdW5kIHggYXhpcy5cbiAgICAgKi9cbiAgICBnZXRBbHBoYTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhldGEgLyBNYXRoLlBJICogMTgwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYmV0YSByb3RhdGlvblxuICAgICAqIEJldGEgYW5nbGUgZm9yIGxlZnQtcmlnaHQgcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byByaWdodC5cbiAgICAgKlxuICAgICAqIFdoaWNoIG1lYW5zIGNhbWVyYSByb3RhdGlvbiBhcm91bmQgeSBheGlzLlxuICAgICAqL1xuICAgIGdldEJldGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIC10aGlzLl9waGkgLyBNYXRoLlBJICogMTgwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY29udHJvbCBjZW50ZXJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cbiAgICAgKi9cbiAgICBnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NlbnRlci50b0FycmF5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBhbHBoYSByb3RhdGlvbiBhbmdsZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbHBoYVxuICAgICAqL1xuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpIHtcbiAgICAgICAgYWxwaGEgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heEFscGhhLCBhbHBoYSksIHRoaXMubWluQWxwaGEpO1xuXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGEgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBiZXRhIHJvdGF0aW9uIGFuZ2xlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJldGFcbiAgICAgKi9cbiAgICBzZXRCZXRhOiBmdW5jdGlvbiAoYmV0YSkge1xuICAgICAgICBiZXRhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhCZXRhLCBiZXRhKSwgdGhpcy5taW5CZXRhKTtcblxuICAgICAgICB0aGlzLl9waGkgPSAtYmV0YSAvIDE4MCAqIE1hdGguUEk7XG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbnRyb2wgY2VudGVyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gY2VudGVyXG4gICAgICovXG4gICAgc2V0Q2VudGVyOiBmdW5jdGlvbiAoY2VudGVyQXJyKSB7XG4gICAgICAgIHRoaXMuX2NlbnRlci5zZXRBcnJheShjZW50ZXJBcnIpO1xuICAgIH0sXG5cbiAgICBzZXRPcHRpb246IGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIFsnYXV0b1JvdGF0ZScsICdhdXRvUm90YXRlQWZ0ZXJTdGlsbCcsXG4gICAgICAgICAgICAnYXV0b1JvdGF0ZURpcmVjdGlvbicsICdhdXRvUm90YXRlU3BlZWQnLFxuICAgICAgICAgICAgJ2RhbXBpbmcnLFxuICAgICAgICAgICAgJ21pbkRpc3RhbmNlJywgJ21heERpc3RhbmNlJyxcbiAgICAgICAgICAgICdtaW5BbHBoYScsICdtYXhBbHBoYScsICdtaW5CZXRhJywgJ21heEJldGEnLFxuICAgICAgICAgICAgJ3JvdGF0ZVNlbnNpdGl2aXR5JywgJ3pvb21TZW5zaXRpdml0eScsICdwYW5TZW5zaXRpdml0eSdcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzW2tleV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXREaXN0YW5jZShvcHRzLmRpc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmFscGhhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWxwaGEob3B0cy5hbHBoYSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldEJldGEob3B0cy5iZXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmNlbnRlcikge1xuICAgICAgICAgICAgdGhpcy5zZXRDZW50ZXIob3B0cy5jZW50ZXIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuZGlzdGFuY2VcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5hbHBoYVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmJldGFcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZHVyYXRpb249MTAwMF1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZWFzaW5nPSdsaW5lYXInXVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kb25lXVxuICAgICAqL1xuICAgIGFuaW1hdGVUbzogZnVuY3Rpb24gKG9wdHMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgdmFyIHRhcmdldCA9IHt9O1xuICAgICAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xuICAgICAgICBpZiAoIXRpbWVsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgb2JqLmRpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZSgpO1xuICAgICAgICAgICAgdGFyZ2V0LmRpc3RhbmNlID0gb3B0cy5kaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICBvYmouYWxwaGEgPSB0aGlzLmdldEFscGhhKCk7XG4gICAgICAgICAgICB0YXJnZXQuYWxwaGEgPSBvcHRzLmFscGhhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgb2JqLmJldGEgPSB0aGlzLmdldEJldGEoKTtcbiAgICAgICAgICAgIHRhcmdldC5iZXRhID0gb3B0cy5iZXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmNlbnRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBvYmouY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgIHRhcmdldC5jZW50ZXIgPSBvcHRzLmNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRBbmltYXRvcihcbiAgICAgICAgICAgIHRpbWVsaW5lLmFuaW1hdGUob2JqKVxuICAgICAgICAgICAgICAgIC53aGVuKG9wdHMuZHVyYXRpb24gfHwgMTAwMCwgdGFyZ2V0KVxuICAgICAgICAgICAgICAgIC5kdXJpbmcoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmFscGhhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QWxwaGEob2JqLmFscGhhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmJldGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRCZXRhKG9iai5iZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmRpc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGlzdGFuY2Uob2JqLmRpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmNlbnRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldENlbnRlcihvYmouY2VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLl9uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG9uZShvcHRzLmRvbmUpXG4gICAgICAgICkuc3RhcnQob3B0cy5lYXNpbmcgfHwgJ2xpbmVhcicpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGFsbCBhbmltYXRpb25zXG4gICAgICovXG4gICAgc3RvcEFsbEFuaW1hdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FuaW1hdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fYW5pbWF0b3JzW2ldLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID0gMDtcbiAgICB9LFxuXG4gICAgX2lzQW5pbWF0aW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID4gMDtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENhbGwgdXBkYXRlIGVhY2ggZnJhbWVcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZSBGcmFtZSB0aW1lXG4gICAgICovXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XG5cbiAgICAgICAgZGVsdGFUaW1lID0gZGVsdGFUaW1lIHx8IDE2O1xuXG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgdmFyIHJhZGlhbiA9ICh0aGlzLmF1dG9Sb3RhdGVEaXJlY3Rpb24gPT09ICdjdycgPyAxIDogLTEpXG4gICAgICAgICAgICAgICAgKiB0aGlzLmF1dG9Sb3RhdGVTcGVlZCAvIDE4MCAqIE1hdGguUEk7XG4gICAgICAgICAgICB0aGlzLl9waGkgLT0gcmFkaWFuICogZGVsdGFUaW1lIC8gMTAwMDtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9yb3RhdGVWZWxvY2l0eS5sZW4oKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLl96b29tU3BlZWQpID4gMC4wMSB8fCB0aGlzLl9wYW5WZWxvY2l0eS5sZW4oKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbmVlZHNVcGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpeGVkIGRlbHRhVGltZVxuICAgICAgICB0aGlzLl91cGRhdGVEaXN0YW5jZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhbihNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlUm90YXRlKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGUoKTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xuXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gZmFsc2U7XG4gICAgfSxcblxuICAgIF91cGRhdGVSb3RhdGU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcm90YXRlVmVsb2NpdHk7XG4gICAgICAgIHRoaXMuX3BoaSA9IHZlbG9jaXR5LnkgKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3BoaTtcbiAgICAgICAgdGhpcy5fdGhldGEgPSB2ZWxvY2l0eS54ICogZGVsdGFUaW1lIC8gMjAgKyB0aGlzLl90aGV0YTtcblxuICAgICAgICB0aGlzLnNldEFscGhhKHRoaXMuZ2V0QWxwaGEoKSk7XG4gICAgICAgIHRoaXMuc2V0QmV0YSh0aGlzLmdldEJldGEoKSk7XG5cbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgdGhpcy5kYW1waW5nKTtcbiAgICB9LFxuXG4gICAgX3VwZGF0ZURpc3RhbmNlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XG4gICAgICAgIHRoaXMuX3NldERpc3RhbmNlKHRoaXMuX2Rpc3RhbmNlICsgdGhpcy5fem9vbVNwZWVkICogZGVsdGFUaW1lIC8gMjApO1xuICAgICAgICB0aGlzLl96b29tU3BlZWQgKj0gdGhpcy5kYW1waW5nO1xuICAgIH0sXG5cbiAgICBfc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xuICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKGRpc3RhbmNlLCB0aGlzLm1heERpc3RhbmNlKSwgdGhpcy5taW5EaXN0YW5jZSk7XG4gICAgfSxcblxuICAgIF91cGRhdGVQYW46IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcGFuVmVsb2NpdHk7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9kaXN0YW5jZTtcblxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgICAgIHZhciB5QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS55O1xuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueDtcblxuICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgIHRoaXMuX2NlbnRlclxuICAgICAgICAgICAgLnNjYWxlQW5kQWRkKHhBeGlzLCAtdmVsb2NpdHkueCAqIGxlbiAvIDIwMClcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh5QXhpcywgLXZlbG9jaXR5LnkgKiBsZW4gLyAyMDApO1xuXG4gICAgICAgIHRoaXMuX3ZlY3RvckRhbXBpbmcodmVsb2NpdHksIDApO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcblxuICAgICAgICB2YXIgZGlyID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5fdGhldGEgKyBNYXRoLlBJIC8gMjtcbiAgICAgICAgdmFyIHBoaSA9IHRoaXMuX3BoaSArIE1hdGguUEkgLyAyO1xuICAgICAgICB2YXIgciA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgICAgICBkaXIueCA9IHIgKiBNYXRoLmNvcyhwaGkpO1xuICAgICAgICBkaXIueSA9IC1NYXRoLmNvcyh0aGV0YSk7XG4gICAgICAgIGRpci56ID0gciAqIE1hdGguc2luKHBoaSk7XG5cbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy5fY2VudGVyKS5zY2FsZUFuZEFkZChkaXIsIHRoaXMuX2Rpc3RhbmNlKTtcbiAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmlkZW50aXR5KClcbiAgICAgICAgICAgIC8vIEZpcnN0IGFyb3VuZCB5LCB0aGVuIGFyb3VuZCB4XG4gICAgICAgICAgICAucm90YXRlWSgtdGhpcy5fcGhpKVxuICAgICAgICAgICAgLnJvdGF0ZVgoLXRoaXMuX3RoZXRhKTtcbiAgICB9LFxuXG4gICAgX3N0YXJ0Q291bnRpbmdTdGlsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3RpbGxUaW1lb3V0KTtcblxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuYXV0b1JvdGF0ZUFmdGVyU3RpbGw7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3RpbGxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcm90YXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSwgdGltZSAqIDEwMDApO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF92ZWN0b3JEYW1waW5nOiBmdW5jdGlvbiAodiwgZGFtcGluZykge1xuICAgICAgICB2YXIgc3BlZWQgPSB2LmxlbigpO1xuICAgICAgICBzcGVlZCA9IHNwZWVkICogZGFtcGluZztcbiAgICAgICAgaWYgKHNwZWVkIDwgMWUtNCkge1xuICAgICAgICAgICAgc3BlZWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHYubm9ybWFsaXplKCkuc2NhbGUoc3BlZWQpO1xuICAgIH0sXG5cbiAgICBkZWNvbXBvc2VUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRklYTUUgZXVsZXIgb3JkZXIuLi4uLi5cbiAgICAgICAgLy8gRklYTUUgYWxwaGEgaXMgbm90IGNlcnRhaW4gd2hlbiBiZXRhIGlzIDkwIG9yIC05MFxuICAgICAgICAvLyB2YXIgZXVsZXIgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICAvLyBldWxlci5ldWxlckZyb21NYXQzKFxuICAgICAgICAvLyAgICBuZXcgTWF0cml4MygpLmZyb21RdWF0KHRoaXMudGFyZ2V0LnJvdGF0aW9uKSwgJ1pZWCdcbiAgICAgICAgLy8gKTtcbiAgICAgICAgLy8gZXVsZXIuZXVsZXJGcm9tUXVhdChcbiAgICAgICAgLy8gICAgIHRoaXMudGFyZ2V0LnJvdGF0aW9uLm5vcm1hbGl6ZSgpLCAnWllYJ1xuICAgICAgICAvLyApO1xuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHZhciBmb3J3YXJkID0gdGhpcy50YXJnZXQud29ybGRUcmFuc2Zvcm0uejtcbiAgICAgICAgdmFyIGFscGhhID0gTWF0aC5hc2luKGZvcndhcmQueSk7XG4gICAgICAgIHZhciBiZXRhID0gTWF0aC5hdGFuMihmb3J3YXJkLngsIGZvcndhcmQueik7XG5cbiAgICAgICAgdGhpcy5fdGhldGEgPSBhbHBoYTtcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGE7XG5cbiAgICAgICAgdGhpcy5zZXRCZXRhKHRoaXMuZ2V0QmV0YSgpKTtcbiAgICAgICAgdGhpcy5zZXRBbHBoYSh0aGlzLmdldEFscGhhKCkpO1xuXG4gICAgICAgIHRoaXMuX3NldERpc3RhbmNlKHRoaXMudGFyZ2V0LnBvc2l0aW9uLmRpc3QodGhpcy5fY2VudGVyKSk7XG4gICAgfSxcblxuICAgIF9tb3VzZURvd25IYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xuICAgICAgICB2YXIgeSA9IGUuY2xpZW50WTtcbiAgICAgICAgLy8gVG91Y2hcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcblxuICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdyb3RhdGUnO1xuXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnc3RhcnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XG4gICAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcbiAgICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xuXG4gICAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcbiAgICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XG5cbiAgICAgICAgaWYgKGUuYnV0dG9uID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlID0gJ3JvdGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZS5idXR0b24gPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncGFuJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2V0IHJvdGF0ZSB2ZWxvY2l0eVxuICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS5zZXQoMCwgMCk7XG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcbiAgICB9LFxuXG4gICAgX21vdXNlTW92ZUhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHggPSBlLmNsaWVudFg7XG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xuXG4gICAgICAgIHZhciBoYXZlR2VzdHVyZTtcbiAgICAgICAgLy8gVG91Y2hcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcblxuICAgICAgICAgICAgaGF2ZUdlc3R1cmUgPSB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFuU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnBhblNlbnNpdGl2aXR5KTtcbiAgICAgICAgdmFyIHJvdGF0ZVNlbnNpdGl2aXR5ID0gY29udmVydFRvQXJyYXkodGhpcy5yb3RhdGVTZW5zaXRpdml0eSk7XG5cbiAgICAgICAgaWYgKCFoYXZlR2VzdHVyZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgPT09ICdyb3RhdGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueSA9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQgKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueCA9ICh5IC0gdGhpcy5fbW91c2VZKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIDIgKiByb3RhdGVTZW5zaXRpdml0eVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX21vZGUgPT09ICdwYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFuVmVsb2NpdHkueCA9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHBhblNlbnNpdGl2aXR5WzBdICogNDAwO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhblZlbG9jaXR5LnkgPSAoLXkgKyB0aGlzLl9tb3VzZVkpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHBhblNlbnNpdGl2aXR5WzFdICogNDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcblxuICAgIF9tb3VzZVdoZWVsSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSBlLndoZWVsRGVsdGEgLy8gV2Via2l0XG4gICAgICAgICAgICAgICAgfHwgLWUuZGV0YWlsOyAvLyBGaXJlZm94XG4gICAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3pvb21IYW5kbGVyKGUsIGRlbHRhID4gMCA/IC0xIDogMSk7XG4gICAgfSxcblxuICAgIF9waW5jaEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fem9vbUhhbmRsZXIoZSwgZS5waW5jaFNjYWxlID4gMSA/IC0wLjQgOiAwLjQpO1xuICAgIH0sXG5cbiAgICBfem9vbUhhbmRsZXI6IGZ1bmN0aW9uIChlLCBkZWx0YSkge1xuXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKFxuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgLSB0aGlzLm1pbkRpc3RhbmNlLFxuICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSAtIHRoaXMuX2Rpc3RhbmNlXG4gICAgICAgICkpO1xuICAgICAgICB0aGlzLl96b29tU3BlZWQgPSBkZWx0YSAqIE1hdGgubWF4KGRpc3RhbmNlIC8gNDAgKiB0aGlzLnpvb21TZW5zaXRpdml0eSwgMC4yKTtcblxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUgJiYgdGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0sXG5cbiAgICBfbW91c2VVcEhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcbiAgICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShldmVudCwgJ2VuZCcpO1xuICAgIH0sXG5cbiAgICBfYWRkQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xuICAgICAgICB2YXIgYW5pbWF0b3JzID0gdGhpcy5fYW5pbWF0b3JzO1xuICAgICAgICBhbmltYXRvcnMucHVzaChhbmltYXRvcik7XG4gICAgICAgIGFuaW1hdG9yLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGlkeCA9IGFuaW1hdG9ycy5pbmRleE9mKGFuaW1hdG9yKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhbmltYXRvcjtcbiAgICB9LFxuXG5cbiAgICBfcHJvY2Vzc0dlc3R1cmU6IGZ1bmN0aW9uIChldmVudCwgc3RhZ2UpIHtcbiAgICAgICAgdmFyIGdlc3R1cmVNZ3IgPSB0aGlzLl9nZXN0dXJlTWdyO1xuXG4gICAgICAgIHN0YWdlID09PSAnc3RhcnQnICYmIGdlc3R1cmVNZ3IuY2xlYXIoKTtcblxuICAgICAgICB2YXIgZ2VzdHVyZUluZm8gPSBnZXN0dXJlTWdyLnJlY29nbml6ZShcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudFxuICAgICAgICApO1xuXG4gICAgICAgIHN0YWdlID09PSAnZW5kJyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gRG8gbm90IGRvIGFueSBwcmV2ZW50RGVmYXVsdCBoZXJlLiBVcHBlciBhcHBsaWNhdGlvbiBkbyB0aGF0IGlmIG5lY2Vzc2FyeS5cbiAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGdlc3R1cmVJbmZvLnR5cGU7XG4gICAgICAgICAgICBldmVudC5nZXN0dXJlRXZlbnQgPSB0eXBlO1xuXG4gICAgICAgICAgICB0aGlzLl9waW5jaEhhbmRsZXIoZ2VzdHVyZUluZm8uZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIElmIGF1dG8gcm90YXRlIHRoZSB0YXJnZXRcbiAqIEB0eXBlIHtib29sZWFufVxuICogQGRlZmF1bHQgZmFsc2VcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICdhdXRvUm90YXRlJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1JvdGF0ZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB0aGlzLl9hdXRvUm90YXRlID0gdmFsO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IHZhbDtcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICd0YXJnZXQnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCAmJiB2YWwudGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcih2YWwudGFyZ2V0LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdmFsO1xuICAgICAgICB0aGlzLmRlY29tcG9zZVRyYW5zZm9ybSgpO1xuICAgIH1cbn0pO1xuXG5cbmV4cG9ydCBkZWZhdWx0IE9yYml0Q29udHJvbDtcbiIsIi8qKlxuICogU3RhdGljR2VvbWV0cnkgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgdGhleSd2ZSBiZWVuIHNldHVwXG4gKi9cbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuL0dlb21ldHJ5Jztcbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuU3RhdGljR2VvbWV0cnlcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcbiAqL1xudmFyIFN0YXRpY0dlb21ldHJ5ID0gR2VvbWV0cnkuZXh0ZW5kKHtcbiAgICBkeW5hbWljOiBmYWxzZVxufSk7XG5leHBvcnQgZGVmYXVsdCBTdGF0aWNHZW9tZXRyeTtcbiIsIi8vIFRPRE8gdGVzdFxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XG5pbXBvcnQgU3RhbmRhcmRNYXRlcmlhbCBmcm9tICcuLi9TdGFuZGFyZE1hdGVyaWFsJztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIG1hdDQgPSBnbE1hdHJpeC5tYXQ0O1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgY2xheS51dGlsLm1lc2hcbiAqL1xudmFyIG1lc2hVdGlsID0ge1xuICAgIC8qKlxuICAgICAqIE1lcmdlIG11bHRpcGxlIG1lc2hlcyB0byBvbmUuXG4gICAgICogTm90ZSB0aGF0IHRoZXNlIG1lc2hlcyBtdXN0IGhhdmUgdGhlIHNhbWUgbWF0ZXJpYWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXkuPGNsYXkuTWVzaD59IG1lc2hlc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXBwbHlXb3JsZFRyYW5zZm9ybVxuICAgICAqIEByZXR1cm4gY2xheS5NZXNoXG4gICAgICogQG1lbWJlck9mIGNsYXkudXRpbC5tZXNoXG4gICAgICovXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChtZXNoZXMsIGFwcGx5V29ybGRUcmFuc2Zvcm0pIHtcblxuICAgICAgICBpZiAoISBtZXNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGVtcGxhdGVNZXNoID0gbWVzaGVzWzBdO1xuICAgICAgICB2YXIgdGVtcGxhdGVHZW8gPSB0ZW1wbGF0ZU1lc2guZ2VvbWV0cnk7XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IHRlbXBsYXRlTWVzaC5tYXRlcmlhbDtcblxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xuICAgICAgICAgICAgZHluYW1pYzogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG5cbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVzID0gdGVtcGxhdGVHZW8uZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW2ldO1xuICAgICAgICAgICAgdmFyIGF0dHIgPSB0ZW1wbGF0ZUdlby5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICAgICAgLy8gRXh0ZW5kIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW25hbWVdID0gYXR0ci5jbG9uZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IGRhdGEgYW5kIG1lcmdlIGJvdW5kaW5nIGJveFxuICAgICAgICB2YXIgblZlcnRleCA9IDA7XG4gICAgICAgIHZhciBuRmFjZSA9IDA7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzaGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEdlbyA9IG1lc2hlc1trXS5nZW9tZXRyeTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50R2VvLmJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdlby5ib3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybShhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaGVzW2tdLndvcmxkVHJhbnNmb3JtIDogbWVzaGVzW2tdLmxvY2FsVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC51bmlvbihjdXJyZW50R2VvLmJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5WZXJ0ZXggKz0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcbiAgICAgICAgICAgIG5GYWNlICs9IGN1cnJlbnRHZW8udHJpYW5nbGVDb3VudDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW25dO1xuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XG4gICAgICAgICAgICBhdHRyaWIuaW5pdChuVmVydGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoblZlcnRleCA+PSAweGZmZmYpIHtcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobkZhY2UgKiAzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobkZhY2UgKiAzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xuICAgICAgICB2YXIgaW5kaWNlc09mZnNldCA9IDA7XG4gICAgICAgIHZhciB1c2VJbmRpY2VzID0gdGVtcGxhdGVHZW8uaXNVc2VJbmRpY2VzKCk7XG5cbiAgICAgICAgZm9yICh2YXIgbW0gPSAwOyBtbSA8IG1lc2hlcy5sZW5ndGg7IG1tKyspIHtcbiAgICAgICAgICAgIHZhciBtZXNoID0gbWVzaGVzW21tXTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaC5nZW9tZXRyeTtcblxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xuXG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gYXBwbHlXb3JsZFRyYW5zZm9ybSA/IG1lc2gud29ybGRUcmFuc2Zvcm0uYXJyYXkgOiBtZXNoLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcbiAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBubiA9IDA7IG5uIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBubisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tubl07XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRBdHRyID0gY3VycmVudEdlby5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1bnVzZWQgYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRBdHRyLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnJlbnRBdHRyLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGN1cnJlbnRBdHRyLnNpemU7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZlcnRleE9mZnNldCAqIHNpemU7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gbGVuIC8gc2l6ZTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEF0dHIudmFsdWVbb2Zmc2V0ICsgaV0gPSBjdXJyZW50QXR0ci52YWx1ZVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvc2l0aW9uLCBub3JtYWwgYW5kIHRhbmdlbnRcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3Bvc2l0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB2ZWMzLmZvckVhY2godGFyZ2V0QXR0ci52YWx1ZSwgc2l6ZSwgb2Zmc2V0LCBjb3VudCwgdmVjMy50cmFuc2Zvcm1NYXQ0LCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnbm9ybWFsJyB8fCBuYW1lID09PSAndGFuZ2VudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5mb3JFYWNoKHRhcmdldEF0dHIudmFsdWUsIHNpemUsIG9mZnNldCwgY291bnQsIHZlYzMudHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXNlSW5kaWNlcykge1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50R2VvLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlc1tpICsgaW5kaWNlc09mZnNldF0gPSBjdXJyZW50R2VvLmluZGljZXNbaV0gKyB2ZXJ0ZXhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZGljZXNPZmZzZXQgKz0gbGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQgKz0gblZlcnRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTWVzaCh7XG4gICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXG4gICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNwbGl0IG1lc2ggaW50byBzdWIgbWVzaGVzLCBlYWNoIG1lc2ggd2lsbCBoYXZlIG1heEpvaW50TnVtYmVyIGpvaW50cy5cbiAgICAgKiBAcGFyYW0ge2NsYXkuTWVzaH0gbWVzaFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhKb2ludE51bWJlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5QbGFjZVxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxuICAgICAqL1xuXG4gICAgLy8gRklYTUUsIEhhdmUgaXNzdWVzIG9uIHNvbWUgbW9kZWxzXG4gICAgc3BsaXRCeUpvaW50czogZnVuY3Rpb24gKG1lc2gsIG1heEpvaW50TnVtYmVyLCBpblBsYWNlKSB7XG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG1lc2guZ2VvbWV0cnk7XG4gICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XG4gICAgICAgIHZhciBqb2ludHMgPSBtZXNoLmpvaW50cztcbiAgICAgICAgaWYgKCFnZW9tZXRyeSB8fCAhc2tlbGV0b24gfHwgIWpvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA8IG1heEpvaW50TnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzaDtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciBmYWNlTGVuID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcbiAgICAgICAgdmFyIHJlc3QgPSBmYWNlTGVuO1xuICAgICAgICB2YXIgaXNGYWNlQWRkZWQgPSBbXTtcbiAgICAgICAgdmFyIGpvaW50VmFsdWVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWNlTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlzRmFjZUFkZGVkW2ldID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkZGVkSm9pbnRJZHhQZXJGYWNlID0gW107XG5cbiAgICAgICAgdmFyIGJ1Y2tldHMgPSBbXTtcblxuICAgICAgICB2YXIgZ2V0Sm9pbnRCeUluZGV4ID0gZnVuY3Rpb24gKGlkeCkge1xuICAgICAgICAgICAgcmV0dXJuIGpvaW50c1tpZHhdO1xuICAgICAgICB9O1xuICAgICAgICB3aGlsZSAocmVzdCA+IDApIHtcbiAgICAgICAgICAgIHZhciBidWNrZXRUcmlhbmdsZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludFJldmVyc2VNYXAgPSBbXTtcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludHMgPSBbXTtcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtpXSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBmYWNlTGVuOyBmKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWNlQWRkZWRbZl0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjYW5BZGRUb0J1Y2tldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIGFkZGVkTnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBpbmRpY2VzW2YgKiAzICsgaV07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGpvaW50VmFsdWVzW2lkeCAqIDQgKyBqXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkpvaW50TnVtYmVyIDwgbWF4Sm9pbnROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF0gPSBzdWJKb2ludE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50c1tzdWJKb2ludE51bWJlcisrXSA9IGpvaW50SWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRKb2ludElkeFBlckZhY2VbYWRkZWROdW1iZXIrK10gPSBqb2ludElkeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkFkZFRvQnVja2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5BZGRUb0J1Y2tldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIG9wZXJhdGlvblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGVkTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFthZGRlZEpvaW50SWR4UGVyRmFjZVtpXV0gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YkpvaW50TnVtYmVyLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldFRyaWFuZ2xlcy5wdXNoKGluZGljZXMuc3ViYXJyYXkoZiAqIDMsIChmICsgMSkgKiAzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaXNGYWNlQWRkZWRbZl0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXN0LS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVja2V0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXM6IGJ1Y2tldFRyaWFuZ2xlcyxcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldEpvaW50cy5tYXAoZ2V0Sm9pbnRCeUluZGV4KSxcbiAgICAgICAgICAgICAgICBqb2ludFJldmVyc2VNYXA6IGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdCA9IG5ldyBOb2RlKHtcbiAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGF0dHJpYk5hbWVzID0gZ2VvbWV0cnkuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICBhdHRyaWJOYW1lcy5zcGxpY2UoYXR0cmliTmFtZXMuaW5kZXhPZignam9pbnQnKSwgMSk7XG4gICAgICAgIC8vIE1hcCBmcm9tIG9sZCB2ZXJ0ZXggaW5kZXggdG8gbmV3IHZlcnRleCBpbmRleFxuICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8IGJ1Y2tldHMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIHZhciBidWNrZXQgPSBidWNrZXRzW2JdO1xuICAgICAgICAgICAgdmFyIGpvaW50UmV2ZXJzZU1hcCA9IGJ1Y2tldC5qb2ludFJldmVyc2VNYXA7XG4gICAgICAgICAgICB2YXIgc3ViSm9pbnROdW1iZXIgPSBidWNrZXQuam9pbnRzLmxlbmd0aDtcblxuICAgICAgICAgICAgdmFyIHN1Yk1hdCA9IG1hdGVyaWFsLmNsb25lKCk7XG4gICAgICAgICAgICBzdWJNYXQubmFtZSA9IFttYXRlcmlhbC5uYW1lLCBiXS5qb2luKCctJyk7XG5cbiAgICAgICAgICAgIHZhciBzdWJHZW8gPSBuZXcgR2VvbWV0cnkoKTtcblxuICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgTWVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogW21lc2gubmFtZSwgaV0uam9pbignLScpLFxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBzdWJNYXQsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHN1YkdlbyxcbiAgICAgICAgICAgICAgICBza2VsZXRvbjogc2tlbGV0b24sXG4gICAgICAgICAgICAgICAgam9pbnRzOiBidWNrZXQuam9pbnRzLnNsaWNlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xuICAgICAgICAgICAgdmFyIG5WZXJ0ZXgyID0gZ2VvbWV0cnkudmVydGV4Q291bnQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXgyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3VudCBzdWIgZ2VvIG51bWJlclxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBidWNrZXQudHJpYW5nbGVzLmxlbmd0aDsgZisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBidWNrZXQudHJpYW5nbGVzW2ZdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBmYWNlW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SW5kaWNlc1tpZHhdID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmliTmFtZXMubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmliTmFtZSA9IGF0dHJpYk5hbWVzW2FdO1xuICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcbiAgICAgICAgICAgICAgICBzdWJBdHRyaWIuaW5pdChuVmVydGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XG5cbiAgICAgICAgICAgIGlmIChuVmVydGV4ID4gMHhmZmZmKSB7XG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoICogMyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIG5WZXJ0ZXggPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpXSA9IC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSBidWNrZXQudHJpYW5nbGVzW2ZdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IHRyaWFuZ2xlW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2lkeF0gPSBuVmVydGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJOYW1lID0gYXR0cmliTmFtZXNbYV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmliTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmliLnNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJBdHRyaWIudmFsdWVbblZlcnRleCAqIHNpemUgKyBqXSA9IGF0dHJpYi52YWx1ZVtpZHggKiBzaXplICsgal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRJZHggPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW2lkeCAqIDQgKyBqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gblZlcnRleCAqIDQgKyBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW29mZnNldF0gPSBqb2ludFJldmVyc2VNYXBbam9pbnRJZHhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbb2Zmc2V0XSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlc1tpbmRpY2VzT2Zmc2V0KytdID0gbmV3SW5kaWNlc1tpZHhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ykdlby51cGRhdGVCb3VuZGluZ0JveCgpO1xuXG4gICAgICAgICAgICByb290LmFkZChzdWJNZXNoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBtZXNoLmNoaWxkcmVuKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJvb3QuYWRkKGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByb290LnBvc2l0aW9uLmNvcHkobWVzaC5wb3NpdGlvbik7XG4gICAgICAgIHJvb3Qucm90YXRpb24uY29weShtZXNoLnJvdGF0aW9uKTtcbiAgICAgICAgcm9vdC5zY2FsZS5jb3B5KG1lc2guc2NhbGUpO1xuXG4gICAgICAgIGlmIChpblBsYWNlKSB7XG4gICAgICAgICAgICBpZiAobWVzaC5nZXRQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBtZXNoLmdldFBhcmVudCgpO1xuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmUobWVzaCk7XG4gICAgICAgICAgICAgICAgcGFyZW50LmFkZChyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNoVXRpbDtcbiIsImltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcblxudmFyIE1FVEEgPSB7XG4gICAgdmVyc2lvbjogMS4wLFxuICAgIHR5cGU6ICdHZW9tZXRyeScsXG4gICAgZ2VuZXJhdG9yOiAndXRpbC50cmFuc2ZlcmFibGUudG9PYmplY3QnXG59O1xuXG4vKipcbiAqIEBhbGlhcyBjbGF5LnV0aWwudHJhbnNmZXJhYmxlXG4gKi9cbnZhciB0cmFuc2ZlcmFibGVVdGlsID0ge1xuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZ2VvbWV0cnkgdG8gYSBvYmplY3QgY29udGFpbmluZyB0cmFuc2ZlcmFibGUgZGF0YVxuICAgICAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGdlb21ldHJ5XG4gICAgICogQHBhcmFtIHtCb29sZWFufSBzaGFsbG93IHdoZXRoZXIgc2hhbGxvdyBjb3B5XG4gICAgICogQHJldHVybnMge09iamVjdH0geyBkYXRhIDogZGF0YSwgYnVmZmVycyA6IGJ1ZmZlcnMgfSwgYnVmZmVycyBpcyB0aGUgdHJhbnNmZXJhYmxlIGxpc3RcbiAgICAgKi9cbiAgICB0b09iamVjdCA6IGZ1bmN0aW9uIChnZW9tZXRyeSwgc2hhbGxvdykge1xuICAgICAgICBpZiAoIWdlb21ldHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIG1ldGFkYXRhIDogdXRpbC5leHRlbmQoe30sIE1FVEEpXG4gICAgICAgIH07XG4gICAgICAgIC8vdHJhbnNmZXJhYmxlIGJ1ZmZlcnNcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcblxuICAgICAgICAvL2R5bmFtaWNcbiAgICAgICAgZGF0YS5keW5hbWljID0gZ2VvbWV0cnkuZHluYW1pYztcblxuICAgICAgICAvL2JvdW5kaW5nIGJveFxuICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIGRhdGEuYm91bmRpbmdCb3ggPSB7XG4gICAgICAgICAgICAgICAgbWluIDogZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICBtYXggOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgudG9BcnJheSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pbmRpY2VzXG4gICAgICAgIGlmIChnZW9tZXRyeS5pbmRpY2VzICYmIGdlb21ldHJ5LmluZGljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YS5pbmRpY2VzID0gY29weUlmTmVjZXNzYXJ5KGdlb21ldHJ5LmluZGljZXMsIHNoYWxsb3cpO1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGRhdGEuaW5kaWNlcy5idWZmZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9hdHRyaWJ1dGVzXG4gICAgICAgIGRhdGEuYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBwIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHsgXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShwKSkge1xuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1twXTtcbiAgICAgICAgICAgICAgICAvL2lnbm9yZSBlbXB0eSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgaWYgKGF0dHIgJiYgYXR0ci52YWx1ZSAmJiBhdHRyLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGRhdGEuYXR0cmlidXRlc1twXSA9IGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdyk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChhdHRyLnZhbHVlLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGEgOiBkYXRhLFxuICAgICAgICAgICAgYnVmZmVycyA6IGJ1ZmZlcnNcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJvZHVjZSBhIGdlb21ldHJ5IGZyb20gb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxuICAgICAqIEByZXR1cm5zIHtHZW9tZXRyeX0gZ2VvbWV0cnlcbiAgICAgKi9cbiAgICB0b0dlb21ldHJ5IDogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iamVjdC5kYXRhICYmIG9iamVjdC5idWZmZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlVXRpbC50b0dlb21ldHJ5KG9iamVjdC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9iamVjdC5tZXRhZGF0YSB8fCBvYmplY3QubWV0YWRhdGEuZ2VuZXJhdG9yICE9PSBNRVRBLmdlbmVyYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbdXRpbC50cmFuc2ZlcmFibGUudG9HZW9tZXRyeV0gdGhlIG9iamVjdCBpcyBub3QgZ2VuZXJhdGVkIGJ5IHV0aWwudHJhbnNmZXJhYmxlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9iYXNpYyBvcHRpb25zXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgZHluYW1pYyA6IG9iamVjdC5keW5hbWljLFxuICAgICAgICAgICAgaW5kaWNlcyA6IG9iamVjdC5pbmRpY2VzXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG9iamVjdC5ib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyBWZWN0b3IzKCkuc2V0QXJyYXkob2JqZWN0LmJvdW5kaW5nQm94Lm1pbik7XG4gICAgICAgICAgICB2YXIgbWF4ID0gbmV3IFZlY3RvcjMoKS5zZXRBcnJheShvYmplY3QuYm91bmRpbmdCb3gubWF4KTtcbiAgICAgICAgICAgIG9wdGlvbnMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3gobWluLCBtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkob3B0aW9ucyk7XG4gICAgICAgIFxuICAgICAgICAvL2F0dHJpYnV0ZXNcbiAgICAgICAgZm9yICh2YXIgcCBpbiBvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBvYmplY3QuYXR0cmlidXRlc1twXTtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdID0gbmV3IEdlb21ldHJ5LkF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudHlwZSwgYXR0ci5zaXplLCBhdHRyLnNlbWFudGljKTtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdLnZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICB9XG4gICAgXG59XG5cbmZ1bmN0aW9uIGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUgOiBhdHRyLm5hbWUsXG4gICAgICAgIHR5cGUgOiBhdHRyLnR5cGUsXG4gICAgICAgIHNpemUgOiBhdHRyLnNpemUsXG4gICAgICAgIHNlbWFudGljIDogYXR0ci5zZW1hbnRpYyxcbiAgICAgICAgdmFsdWUgOiBjb3B5SWZOZWNlc3NhcnkoYXR0ci52YWx1ZSwgc2hhbGxvdylcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjb3B5SWZOZWNlc3NhcnkoYXJyLCBzaGFsbG93KSB7XG4gICAgaWYgKCFzaGFsbG93KSB7XG4gICAgICAgIHJldHVybiBuZXcgYXJyLmNvbnN0cnVjdG9yKGFycik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zZmVyYWJsZVV0aWw7XG4iLCIvKipcbiAqIEBuYW1lIGNsYXkudmVyc2lvblxuICovXG5leHBvcnQgZGVmYXVsdCAnMS4wLjEnO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkudnIuZGlzb3J0ZXIub3V0cHV0LnZlcnRleFxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueHksIDAuNSwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxufVxcbkBlbmRcIjtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9ibG9iL21hc3Rlci9zcmMvY2FyZGJvYXJkLWRpc3RvcnRlci5qc1xuXG4vLyBVc2Ugd2VidnIgbWF5IGhhdmUgc2NhbGUgcHJvYmxlbS5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQwXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvc2VhcmNoP3E9U0NBTEUmdHlwZT1Jc3N1ZXMmdXRmOD0lRTIlOUMlOTNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQ3XG5cblxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcblxuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9vdXRwdXQuZ2xzbC5qcyc7XG5cblNoYWRlci5pbXBvcnQob3V0cHV0RXNzbCk7XG5cbmZ1bmN0aW9uIGxlcnAgKGEsIGIsIHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbn1cblxudmFyIENhcmRib2FyZERpc3RvcnRlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLCAwLCAwLCAxXSxcblxuICAgICAgICBfbWVzaDogbmV3IE1lc2goe1xuICAgICAgICAgICAgZ2VvbWV0cnk6IG5ldyBHZW9tZXRyeSh7XG4gICAgICAgICAgICAgICAgZHluYW1pYzogdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjdWxsaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIG1hdGVyaWFsOiBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICAgICAgICAgIC8vIEZJWE1FIFdoeSBkaXNhYmxlIGRlcHRoTWFzayB3aWxsIGJlIHdyb25nXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXB0aFRlc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4JyksXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LnZyLmRpc29ydGVyLm91dHB1dC5mcmFnbWVudCcpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pLFxuICAgICAgICBfZmFrZUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcbiAgICB9O1xufSwge1xuXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNvdXJjZVRleHR1cmUpIHtcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSB0aGlzLmNsZWFyQ29sb3I7XG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xuICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcblxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcblxuICAgICAgICB0aGlzLl9tZXNoLm1hdGVyaWFsLnNldCgndGV4dHVyZScsIHNvdXJjZVRleHR1cmUpO1xuXG4gICAgICAgIC8vIEZ1bGwgc2l6ZT9cbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHJlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpKTtcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpcy5fbWVzaF0sIHRoaXMuX2Zha2VDYW1lcmEpO1xuICAgICAgICByZW5kZXJlci5yZXN0b3JlVmlld3BvcnQoKTtcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5zaGFkZXIuYmluZChyZW5kZXJlcik7XG4gICAgICAgIC8vIHRoaXMuX21lc2gubWF0ZXJpYWwuYmluZChyZW5kZXJlcik7XG4gICAgICAgIC8vIHRoaXMuX21lc2gucmVuZGVyKHJlbmRlcmVyLmdsKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSkge1xuXG4gICAgICAgIC8vIEZJWE1FXG4gICAgICAgIGlmICh2ckRpc3BsYXkuZGV2aWNlSW5mb18pIHtcbiAgICAgICAgICAgIC8vIEhhcmRjb2RlZCBtZXNoIHNpemVcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU1lc2goMjAsIDIwLCB2ckRpc3BsYXkuZGV2aWNlSW5mb18pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW50IGdldCB2ckRpc3BsYXkuZGV2aWNlSW5mb18sIHNlZW1zIGNvZGUgY2hhbmdlZCcpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF91cGRhdGVNZXNoOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZGV2aWNlSW5mbykge1xuXG4gICAgICAgIHZhciBwb3NpdGlvbkF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIHZhciBsZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVUYW5BbmdsZXMoKTtcbiAgICAgICAgdmFyIG5vTGVuc0ZydXN0dW0gPSBkZXZpY2VJbmZvLmdldExlZnRFeWVOb0xlbnNUYW5BbmdsZXMoKTtcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVNjcmVlblJlY3Qobm9MZW5zRnJ1c3R1bSk7XG4gICAgICAgIHZhciB2aWR4ID0gMDtcblxuICAgICAgICB2YXIgcG9zID0gW107XG4gICAgICAgIHZhciB1diA9IFtdO1xuXG4gICAgICAgIC8vIFZlcnRpY2VzXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aDsgaSsrLCB2aWR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBpIC8gKHdpZHRoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gaiAvIChoZWlnaHQgLSAxKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBHcmlkIHBvaW50cyByZWd1bGFybHkgc3BhY2VkIGluIFN0cmVvU2NyZWVuLCBhbmQgYmFycmVsIGRpc3RvcnRlZCBpblxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWVzaC5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB1O1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHY7XG4gICAgICAgICAgICAgICAgICAgIHZhciB4ID0gbGVycChsZW5zRnJ1c3R1bVswXSwgbGVuc0ZydXN0dW1bMl0sIHUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGxlcnAobGVuc0ZydXN0dW1bM10sIGxlbnNGcnVzdHVtWzFdLCB2KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gZGV2aWNlSW5mby5kaXN0b3J0aW9uLmRpc3RvcnRJbnZlcnNlKGQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHggKiByIC8gZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB5ICogciAvIGQ7XG4gICAgICAgICAgICAgICAgICAgIHUgPSAocCAtIG5vTGVuc0ZydXN0dW1bMF0pIC8gKG5vTGVuc0ZydXN0dW1bMl0gLSBub0xlbnNGcnVzdHVtWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgdiA9IChxIC0gbm9MZW5zRnJ1c3R1bVszXSkgLyAobm9MZW5zRnJ1c3R1bVsxXSAtIG5vTGVuc0ZydXN0dW1bM10pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdSx2IHRvIG1lc2ggc2NyZWVuIGNvb3JkaW5hdGVzLlxuICAgICAgICAgICAgICAgICAgICB2YXIgYXNwZWN0ID0gZGV2aWNlSW5mby5kZXZpY2Uud2lkdGhNZXRlcnMgLyBkZXZpY2VJbmZvLmRldmljZS5oZWlnaHRNZXRlcnM7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBvcmlnaW5hbCBVbml0eSBwbHVnaW4gbXVsdGlwbGllZCBVIGJ5IHRoZSBhc3BlY3QgcmF0aW9cbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRpZG4ndCBtdWx0aXBseSBlaXRoZXIgdmFsdWUgYnkgMiwgYnV0IHRoYXQgc2VlbXMgdG8gZ2V0IGl0XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWxseSBjbG9zZSB0byBjb3JyZWN0IGxvb2tpbmcgZm9yIG1lLiBJIGhhdGUgdGhpcyBraW5kIG9mIFwiRG9uJ3RcbiAgICAgICAgICAgICAgICAgICAgLy8ga25vdyB3aHkgaXQgd29ya3NcIiBjb2RlIHRob3VnaCwgYW5kIHdvbGQgbG92ZSBhIG1vcmUgbG9naWNhbFxuICAgICAgICAgICAgICAgICAgICAvLyBleHBsYW5hdGlvbiBvZiB3aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlLlxuICAgICAgICAgICAgICAgICAgICB1ID0gKHZpZXdwb3J0LnggKyB1ICogdmlld3BvcnQud2lkdGggLSAwLjUpICogMi4wOyAvLyogYXNwZWN0O1xuICAgICAgICAgICAgICAgICAgICB2ID0gKHZpZXdwb3J0LnkgKyB2ICogdmlld3BvcnQuaGVpZ2h0IC0gMC41KSAqIDIuMDtcblxuICAgICAgICAgICAgICAgICAgICBwb3NbMF0gPSB1O1xuICAgICAgICAgICAgICAgICAgICBwb3NbMV0gPSB2O1xuICAgICAgICAgICAgICAgICAgICBwb3NbMl0gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIHV2WzBdID0gcyAqIDAuNSArIGUgKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgIHV2WzFdID0gdDtcblxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkF0dHIuc2V0KHZpZHgsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIHRleGNvb3JkQXR0ci5zZXQodmlkeCwgdXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHcgPSBsZW5zRnJ1c3R1bVsyXSAtIGxlbnNGcnVzdHVtWzBdO1xuICAgICAgICAgICAgbGVuc0ZydXN0dW1bMF0gPSAtKHcgKyBsZW5zRnJ1c3R1bVswXSk7XG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVsyXSA9IHcgLSBsZW5zRnJ1c3R1bVsyXTtcbiAgICAgICAgICAgIHcgPSBub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXTtcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMF0gPSAtKHcgKyBub0xlbnNGcnVzdHVtWzBdKTtcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMl0gPSB3IC0gbm9MZW5zRnJ1c3R1bVsyXTtcbiAgICAgICAgICAgIHZpZXdwb3J0LnggPSAxIC0gKHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmRpY2VzXG4gICAgICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDIgKiAod2lkdGggLSAxKSAqIChoZWlnaHQgLSAxKSAqIDYpO1xuICAgICAgICB2YXIgaGFsZndpZHRoID0gd2lkdGggLyAyO1xuICAgICAgICB2YXIgaGFsZmhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgICAgIHZhciB2aWR4ID0gMDtcbiAgICAgICAgdmFyIGlpZHggPSAwO1xuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IDI7IGUrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGogPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgcXVhZC4gIExvd2VyIHJpZ2h0IGFuZCB1cHBlciBsZWZ0IHF1YWRyYW50cyBoYXZlIHF1YWRzIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRyaWFuZ2xlIGRpYWdvbmFsIGZsaXBwZWQgdG8gZ2V0IHRoZSB2aWduZXR0ZSB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoaSA8PSBoYWxmd2lkdGgpID09IChqIDw9IGhhbGZoZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFkIGRpYWdvbmFsIGxvd2VyIGxlZnQgdG8gdXBwZXIgcmlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFkIGRpYWdvbmFsIHVwcGVyIGxlZnQgdG8gbG93ZXIgcmlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXNoLmdlb21ldHJ5LmluZGljZXMgPSBpbmRpY2VzO1xuXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuZGlydHkoKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FyZGJvYXJkRGlzdG9ydGVyO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vTm9kZSc7XG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuXG52YXIgdG1wUHJvamVjdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cbnZhciBTdGVyZW9DYW1lcmEgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcblxuICAgICAgICBhc3BlY3Q6IDAuNSxcblxuICAgICAgICBfbGVmdENhbWVyYTogbmV3IENhbWVyYSgpLFxuXG4gICAgICAgIF9yaWdodENhbWVyYTogbmV3IENhbWVyYSgpLFxuXG4gICAgICAgIF9leWVMZWZ0OiBuZXcgTWF0cml4NCgpLFxuICAgICAgICBfZXllUmlnaHQ6IG5ldyBNYXRyaXg0KCksXG5cbiAgICAgICAgX2ZyYW1lRGF0YTogbnVsbFxuICAgIH07XG59LCB7XG5cbiAgICB1cGRhdGVGcm9tQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhLCBmb2N1cywgem9vbSwgZXllU2VwKSB7XG4gICAgICAgIGlmIChjYW1lcmEudHJhbnNmb3JtTmVlZHNVcGRhdGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXMgPSBmb2N1cyA9PSBudWxsID8gMTAgOiBmb2N1cztcbiAgICAgICAgem9vbSA9IHpvb20gPT0gbnVsbCA/IDEgOiB6b29tO1xuICAgICAgICBleWVTZXAgPSBleWVTZXAgPT0gbnVsbCA/IDAuMDY0IDogZXllU2VwO1xuXG4gICAgICAgIHZhciBmb3YgPSBjYW1lcmEuZm92O1xuICAgICAgICB2YXIgYXNwZWN0ID0gY2FtZXJhLmFzcGVjdCAqIHRoaXMuYXNwZWN0O1xuICAgICAgICB2YXIgbmVhciA9IGNhbWVyYS5uZWFyO1xuXG4gICAgICAgIC8vIE9mZi1heGlzIHN0ZXJlb3Njb3BpYyBlZmZlY3QgYmFzZWQgb25cbiAgICAgICAgLy8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cblxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgICB2YXIgZXllU2VwID0gZXllU2VwIC8gMjtcbiAgICAgICAgdmFyIGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcCAqIG5lYXIgLyBmb2N1cztcbiAgICAgICAgdmFyIHltYXggPSAobmVhciAqIE1hdGgudGFuKE1hdGguUEkgLyAxODAgKiBmb3YgKiAwLjUgKSApIC8gem9vbTtcbiAgICAgICAgdmFyIHhtaW4sIHhtYXg7XG5cbiAgICAgICAgLy8gdHJhbnNsYXRlIHhPZmZzZXRcbiAgICAgICAgdGhpcy5fZXllTGVmdC5hcnJheVsxMl0gPSAtIGV5ZVNlcDtcbiAgICAgICAgdGhpcy5fZXllUmlnaHQuYXJyYXlbMTJdID0gZXllU2VwO1xuXG4gICAgICAgIC8vIGZvciBsZWZ0IGV5ZVxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xuICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCArIGV5ZVNlcE9uUHJvamVjdGlvbjtcblxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzhdID0gKHhtYXggKyB4bWluICkgLyAoeG1heCAtIHhtaW4pO1xuXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRtcFByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICAgIC8vIGZvciByaWdodCBleWVcbiAgICAgICAgeG1pbiA9IC0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcbiAgICAgICAgeG1heCA9IHltYXggKiBhc3BlY3QgLSBleWVTZXBPblByb2plY3Rpb247XG5cbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVswXSA9IDIgKiBuZWFyIC8gKHhtYXggLSB4bWluKTtcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVs4XSA9ICh4bWF4ICsgeG1pbiApIC8gKHhtYXggLSB4bWluKTtcblxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XG5cbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybVxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxuICAgICAgICAgICAgLm11bHRpcGx5KHRoaXMuX2V5ZUxlZnQpO1xuXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtXG4gICAgICAgICAgICAuY29weShjYW1lcmEud29ybGRUcmFuc2Zvcm0pXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllUmlnaHQpO1xuXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XG5cbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVGcm9tVlJEaXNwbGF5OiBmdW5jdGlvbiAodnJEaXNwbGF5LCBwYXJlbnROb2RlKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBWUkZyYW1lRGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZURhdGEgPSB0aGlzLl9mcmFtZURhdGEgfHwgKHRoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1lRGF0YSgpKTtcbiAgICAgICAgdnJEaXNwbGF5LmdldEZyYW1lRGF0YShmcmFtZURhdGEpO1xuICAgICAgICB2YXIgbGVmdENhbWVyYSA9IHRoaXMuX2xlZnRDYW1lcmE7XG4gICAgICAgIHZhciByaWdodENhbWVyYSA9IHRoaXMuX3JpZ2h0Q2FtZXJhO1xuXG4gICAgICAgIGxlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5zZXRBcnJheShmcmFtZURhdGEubGVmdFByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgbGVmdENhbWVyYS52aWV3TWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0Vmlld01hdHJpeCk7XG4gICAgICAgIGxlZnRDYW1lcmEuc2V0Vmlld01hdHJpeChsZWZ0Q2FtZXJhLnZpZXdNYXRyaXgpO1xuXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0UHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIHJpZ2h0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgcmlnaHRDYW1lcmEudmlld01hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRWaWV3TWF0cml4KTtcbiAgICAgICAgcmlnaHRDYW1lcmEuc2V0Vmlld01hdHJpeChyaWdodENhbWVyYS52aWV3TWF0cml4KTtcblxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICByaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldExlZnRDYW1lcmE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDYW1lcmE7XG4gICAgfSxcblxuICAgIGdldFJpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yaWdodENhbWVyYTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU3RlcmVvQ2FtZXJhO1xuIiwiLyoqIEBuYW1lc3BhY2UgY2xheSAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5tYXRoICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LmFuaW1hdGlvbiAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5hc3luYyAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5jYW1lcmEgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkuY29tcG9zaXRvciAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5jb3JlICovXG4vKiogQG5hbWVzcGFjZSBjbGF5Lmdlb21ldHJ5ICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LmhlbHBlciAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5saWdodCAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5sb2FkZXIgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkucGFydGljbGVTeXN0ZW0gKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkucGx1Z2luICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LnByZVBhc3MgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkuc2hhZGVyICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LnRleHR1cmUgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkudXRpbCAqL1xuXG5pbXBvcnQgQW5pbWF0b3IkMCBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XG5pbXBvcnQgQmxlbmQxRENsaXAkMSBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDFEQ2xpcCc7XG5pbXBvcnQgQmxlbmQyRENsaXAkMiBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcCc7XG5pbXBvcnQgQ2xpcCQzIGZyb20gJy4vYW5pbWF0aW9uL0NsaXAnO1xuaW1wb3J0IGVhc2luZyQ0IGZyb20gJy4vYW5pbWF0aW9uL2Vhc2luZyc7XG5pbXBvcnQgU2FtcGxlclRyYWNrJDUgZnJvbSAnLi9hbmltYXRpb24vU2FtcGxlclRyYWNrJztcbmltcG9ydCBUaW1lbGluZSQ2IGZyb20gJy4vYW5pbWF0aW9uL1RpbWVsaW5lJztcbmltcG9ydCBUcmFja0NsaXAkNyBmcm9tICcuL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xuaW1wb3J0IFRyYW5zZm9ybVRyYWNrJDggZnJvbSAnLi9hbmltYXRpb24vVHJhbnNmb3JtVHJhY2snO1xuaW1wb3J0IGFwcGxpY2F0aW9uJDkgZnJvbSAnLi9hcHBsaWNhdGlvbic7XG5pbXBvcnQgVGFzayQxMCBmcm9tICcuL2FzeW5jL1Rhc2snO1xuaW1wb3J0IFRhc2tHcm91cCQxMSBmcm9tICcuL2FzeW5jL1Rhc2tHcm91cCc7XG5pbXBvcnQgQ2FtZXJhJDEyIGZyb20gJy4vQ2FtZXJhJztcbmltcG9ydCBPcnRob2dyYXBoaWMkMTMgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBQZXJzcGVjdGl2ZSQxNCBmcm9tICcuL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XG5pbXBvcnQgTWF0ZXJpYWwkMTUgZnJvbSAnLi9jYW52YXMvTWF0ZXJpYWwnO1xuaW1wb3J0IFJlbmRlcmVyJDE2IGZyb20gJy4vY2FudmFzL1JlbmRlcmVyJztcbmltcG9ydCBDb21wb3NpdG9yJDE3IGZyb20gJy4vY29tcG9zaXRvci9Db21wb3NpdG9yJztcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yJDE4IGZyb20gJy4vY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yJztcbmltcG9ydCBGaWx0ZXJOb2RlJDE5IGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcbmltcG9ydCBHcmFwaCQyMCBmcm9tICcuL2NvbXBvc2l0b3IvR3JhcGgnO1xuaW1wb3J0IE5vZGUkMjEgZnJvbSAnLi9jb21wb3NpdG9yL05vZGUnO1xuaW1wb3J0IFBhc3MkMjIgZnJvbSAnLi9jb21wb3NpdG9yL1Bhc3MnO1xuaW1wb3J0IFNjZW5lTm9kZSQyMyBmcm9tICcuL2NvbXBvc2l0b3IvU2NlbmVOb2RlJztcbmltcG9ydCBUZXh0dXJlTm9kZSQyNCBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xuaW1wb3J0IFRleHR1cmVQb29sJDI1IGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlUG9vbCc7XG5pbXBvcnQgQmFzZSQyNiBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgQ2FjaGUkMjcgZnJvbSAnLi9jb3JlL0NhY2hlJztcbmltcG9ydCBjb2xvciQyOCBmcm9tICcuL2NvcmUvY29sb3InO1xuaW1wb3J0IGdsZW51bSQyOSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcbmltcG9ydCBHTEluZm8kMzAgZnJvbSAnLi9jb3JlL0dMSW5mbyc7XG5pbXBvcnQgTGlua2VkTGlzdCQzMSBmcm9tICcuL2NvcmUvTGlua2VkTGlzdCc7XG5pbXBvcnQgTFJVJDMyIGZyb20gJy4vY29yZS9MUlUnO1xuaW1wb3J0IGV4dGVuZCQzMyBmcm9tICcuL2NvcmUvbWl4aW4vZXh0ZW5kJztcbmltcG9ydCBub3RpZmllciQzNCBmcm9tICcuL2NvcmUvbWl4aW4vbm90aWZpZXInO1xuaW1wb3J0IHJlcXVlc3QkMzUgZnJvbSAnLi9jb3JlL3JlcXVlc3QnO1xuaW1wb3J0IHV0aWwkMzYgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHZlbmRvciQzNyBmcm9tICcuL2NvcmUvdmVuZG9yJztcbmltcG9ydCBHQnVmZmVyJDM4IGZyb20gJy4vZGVmZXJyZWQvR0J1ZmZlcic7XG5pbXBvcnQgUmVuZGVyZXIkMzkgZnJvbSAnLi9kZWZlcnJlZC9SZW5kZXJlcic7XG5pbXBvcnQgZ2xtYXRyaXgkNDAgZnJvbSAnLi9kZXAvZ2xtYXRyaXgnO1xuaW1wb3J0IEZyYW1lQnVmZmVyJDQxIGZyb20gJy4vRnJhbWVCdWZmZXInO1xuaW1wb3J0IEdlb21ldHJ5JDQyIGZyb20gJy4vR2VvbWV0cnknO1xuaW1wb3J0IENvbmUkNDMgZnJvbSAnLi9nZW9tZXRyeS9Db25lJztcbmltcG9ydCBDdWJlJDQ0IGZyb20gJy4vZ2VvbWV0cnkvQ3ViZSc7XG5pbXBvcnQgQ3lsaW5kZXIkNDUgZnJvbSAnLi9nZW9tZXRyeS9DeWxpbmRlcic7XG5pbXBvcnQgUGFyYW1ldHJpY1N1cmZhY2UkNDYgZnJvbSAnLi9nZW9tZXRyeS9QYXJhbWV0cmljU3VyZmFjZSc7XG5pbXBvcnQgUGxhbmUkNDcgZnJvbSAnLi9nZW9tZXRyeS9QbGFuZSc7XG5pbXBvcnQgU3BoZXJlJDQ4IGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcbmltcG9ydCBHTFByb2dyYW0kNDkgZnJvbSAnLi9ncHUvR0xQcm9ncmFtJztcbmltcG9ydCBQcm9ncmFtTWFuYWdlciQ1MCBmcm9tICcuL2dwdS9Qcm9ncmFtTWFuYWdlcic7XG5pbXBvcnQgSm9pbnQkNTEgZnJvbSAnLi9Kb2ludCc7XG5pbXBvcnQgTGlnaHQkNTIgZnJvbSAnLi9MaWdodCc7XG5pbXBvcnQgQW1iaWVudCQ1MyBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xuaW1wb3J0IEFtYmllbnRDdWJlbWFwJDU0IGZyb20gJy4vbGlnaHQvQW1iaWVudEN1YmVtYXAnO1xuaW1wb3J0IEFtYmllbnRTSCQ1NSBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XG5pbXBvcnQgRGlyZWN0aW9uYWwkNTYgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XG5pbXBvcnQgUG9pbnQkNTcgZnJvbSAnLi9saWdodC9Qb2ludCc7XG5pbXBvcnQgU3BoZXJlJDU4IGZyb20gJy4vbGlnaHQvU3BoZXJlJztcbmltcG9ydCBTcG90JDU5IGZyb20gJy4vbGlnaHQvU3BvdCc7XG5pbXBvcnQgVHViZSQ2MCBmcm9tICcuL2xpZ2h0L1R1YmUnO1xuaW1wb3J0IEZYJDYxIGZyb20gJy4vbG9hZGVyL0ZYJztcbmltcG9ydCBHTFRGJDYyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xuaW1wb3J0IE1hdGVyaWFsJDYzIGZyb20gJy4vTWF0ZXJpYWwnO1xuaW1wb3J0IEJvdW5kaW5nQm94JDY0IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgRnJ1c3R1bSQ2NSBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XG5pbXBvcnQgTWF0cml4MiQ2NiBmcm9tICcuL21hdGgvTWF0cml4Mic7XG5pbXBvcnQgTWF0cml4MmQkNjcgZnJvbSAnLi9tYXRoL01hdHJpeDJkJztcbmltcG9ydCBNYXRyaXgzJDY4IGZyb20gJy4vbWF0aC9NYXRyaXgzJztcbmltcG9ydCBNYXRyaXg0JDY5IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBQbGFuZSQ3MCBmcm9tICcuL21hdGgvUGxhbmUnO1xuaW1wb3J0IFF1YXRlcm5pb24kNzEgZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xuaW1wb3J0IFJheSQ3MiBmcm9tICcuL21hdGgvUmF5JztcbmltcG9ydCB1dGlsJDczIGZyb20gJy4vbWF0aC91dGlsJztcbmltcG9ydCBWYWx1ZSQ3NCBmcm9tICcuL21hdGgvVmFsdWUnO1xuaW1wb3J0IFZlY3RvcjIkNzUgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xuaW1wb3J0IFZlY3RvcjMkNzYgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IFZlY3RvcjQkNzcgZnJvbSAnLi9tYXRoL1ZlY3RvcjQnO1xuaW1wb3J0IE1lc2gkNzggZnJvbSAnLi9NZXNoJztcbmltcG9ydCBOb2RlJDc5IGZyb20gJy4vTm9kZSc7XG5pbXBvcnQgRW1pdHRlciQ4MCBmcm9tICcuL3BhcnRpY2xlL0VtaXR0ZXInO1xuaW1wb3J0IEZpZWxkJDgxIGZyb20gJy4vcGFydGljbGUvRmllbGQnO1xuaW1wb3J0IEZvcmNlRmllbGQkODIgZnJvbSAnLi9wYXJ0aWNsZS9Gb3JjZUZpZWxkJztcbmltcG9ydCBQYXJ0aWNsZSQ4MyBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlJztcbmltcG9ydCBQYXJ0aWNsZVJlbmRlcmFibGUkODQgZnJvbSAnLi9wYXJ0aWNsZS9QYXJ0aWNsZVJlbmRlcmFibGUnO1xuaW1wb3J0IFBpeGVsUGlja2luZyQ4NSBmcm9tICcuL3BpY2tpbmcvUGl4ZWxQaWNraW5nJztcbmltcG9ydCBSYXlQaWNraW5nJDg2IGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcbmltcG9ydCBGcmVlQ29udHJvbCQ4NyBmcm9tICcuL3BsdWdpbi9GcmVlQ29udHJvbCc7XG5pbXBvcnQgR2VzdHVyZU1nciQ4OCBmcm9tICcuL3BsdWdpbi9HZXN0dXJlTWdyJztcbmltcG9ydCBJbmZpbml0ZVBsYW5lJDg5IGZyb20gJy4vcGx1Z2luL0luZmluaXRlUGxhbmUnO1xuaW1wb3J0IE9yYml0Q29udHJvbCQ5MCBmcm9tICcuL3BsdWdpbi9PcmJpdENvbnRyb2wnO1xuaW1wb3J0IFNreWJveCQ5MSBmcm9tICcuL3BsdWdpbi9Ta3lib3gnO1xuaW1wb3J0IFNreWRvbWUkOTIgZnJvbSAnLi9wbHVnaW4vU2t5ZG9tZSc7XG5pbXBvcnQgRW52aXJvbm1lbnRNYXAkOTMgZnJvbSAnLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcbmltcG9ydCBTaGFkb3dNYXAkOTQgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XG5pbXBvcnQgUmVuZGVyYWJsZSQ5NSBmcm9tICcuL1JlbmRlcmFibGUnO1xuaW1wb3J0IFJlbmRlcmVyJDk2IGZyb20gJy4vUmVuZGVyZXInO1xuaW1wb3J0IFNjZW5lJDk3IGZyb20gJy4vU2NlbmUnO1xuaW1wb3J0IFNoYWRlciQ5OCBmcm9tICcuL1NoYWRlcic7XG5pbXBvcnQgbGlicmFyeSQ5OSBmcm9tICcuL3NoYWRlci9saWJyYXJ5JztcbmltcG9ydCBsaWdodCQxMDAgZnJvbSAnLi9zaGFkZXIvc291cmNlL2hlYWRlci9saWdodCc7XG5pbXBvcnQgU2tlbGV0b24kMTAxIGZyb20gJy4vU2tlbGV0b24nO1xuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwkMTAyIGZyb20gJy4vU3RhbmRhcmRNYXRlcmlhbCc7XG5pbXBvcnQgU3RhdGljR2VvbWV0cnkkMTAzIGZyb20gJy4vU3RhdGljR2VvbWV0cnknO1xuaW1wb3J0IFRleHR1cmUkMTA0IGZyb20gJy4vVGV4dHVyZSc7XG5pbXBvcnQgVGV4dHVyZTJEJDEwNSBmcm9tICcuL1RleHR1cmUyRCc7XG5pbXBvcnQgVGV4dHVyZUN1YmUkMTA2IGZyb20gJy4vVGV4dHVyZUN1YmUnO1xuaW1wb3J0IGN1YmVtYXAkMTA3IGZyb20gJy4vdXRpbC9jdWJlbWFwJztcbmltcG9ydCBkZHMkMTA4IGZyb20gJy4vdXRpbC9kZHMnO1xuaW1wb3J0IGRlbGF1bmF5JDEwOSBmcm9tICcuL3V0aWwvZGVsYXVuYXknO1xuaW1wb3J0IGhkciQxMTAgZnJvbSAnLi91dGlsL2hkcic7XG5pbXBvcnQgbWVzaCQxMTEgZnJvbSAnLi91dGlsL21lc2gnO1xuaW1wb3J0IHNoJDExMiBmcm9tICcuL3V0aWwvc2gnO1xuaW1wb3J0IHRleHR1cmUkMTEzIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcbmltcG9ydCB0cmFuc2ZlcmFibGUkMTE0IGZyb20gJy4vdXRpbC90cmFuc2ZlcmFibGUnO1xuaW1wb3J0IHZlcnNpb24kMTE1IGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQgQ2FyZGJvYXJkRGlzdG9ydGVyJDExNiBmcm9tICcuL3ZyL0NhcmRib2FyZERpc3RvcnRlcic7XG5pbXBvcnQgU3RlcmVvQ2FtZXJhJDExNyBmcm9tICcuL3ZyL1N0ZXJlb0NhbWVyYSc7XG5cblxudmFyIGFuaW1hdGlvbiA9IHtcbiAgICBBbmltYXRvciA6IEFuaW1hdG9yJDAsXG4gICAgQmxlbmQxRENsaXAgOiBCbGVuZDFEQ2xpcCQxLFxuICAgIEJsZW5kMkRDbGlwIDogQmxlbmQyRENsaXAkMixcbiAgICBDbGlwIDogQ2xpcCQzLFxuICAgIGVhc2luZyA6IGVhc2luZyQ0LFxuICAgIFNhbXBsZXJUcmFjayA6IFNhbXBsZXJUcmFjayQ1LFxuICAgIFRpbWVsaW5lIDogVGltZWxpbmUkNixcbiAgICBUcmFja0NsaXAgOiBUcmFja0NsaXAkNyxcbiAgICBUcmFuc2Zvcm1UcmFjayA6IFRyYW5zZm9ybVRyYWNrJDhcbn07XG5leHBvcnQgeyBhbmltYXRpb24gfTtcblxuZXhwb3J0IHsgYXBwbGljYXRpb24kOSBhcyBhcHBsaWNhdGlvbiB9O1xuXG52YXIgYXN5bmMgPSB7XG4gICAgVGFzayA6IFRhc2skMTAsXG4gICAgVGFza0dyb3VwIDogVGFza0dyb3VwJDExXG59O1xuZXhwb3J0IHsgYXN5bmMgfTtcblxuZXhwb3J0IHsgQ2FtZXJhJDEyIGFzIENhbWVyYSB9O1xuXG52YXIgY2FtZXJhID0ge1xuICAgIE9ydGhvZ3JhcGhpYyA6IE9ydGhvZ3JhcGhpYyQxMyxcbiAgICBQZXJzcGVjdGl2ZSA6IFBlcnNwZWN0aXZlJDE0XG59O1xuZXhwb3J0IHsgY2FtZXJhIH07XG5cblxudmFyIGNhbnZhcyA9IHtcbiAgICBNYXRlcmlhbCA6IE1hdGVyaWFsJDE1LFxuICAgIFJlbmRlcmVyIDogUmVuZGVyZXIkMTZcbn07XG5leHBvcnQgeyBjYW52YXMgfTtcblxuXG52YXIgY29tcG9zaXRvciA9IHtcbiAgICBDb21wb3NpdG9yIDogQ29tcG9zaXRvciQxNyxcbiAgICBjcmVhdGVDb21wb3NpdG9yIDogY3JlYXRlQ29tcG9zaXRvciQxOCxcbiAgICBGaWx0ZXJOb2RlIDogRmlsdGVyTm9kZSQxOSxcbiAgICBHcmFwaCA6IEdyYXBoJDIwLFxuICAgIE5vZGUgOiBOb2RlJDIxLFxuICAgIFBhc3MgOiBQYXNzJDIyLFxuICAgIFNjZW5lTm9kZSA6IFNjZW5lTm9kZSQyMyxcbiAgICBUZXh0dXJlTm9kZSA6IFRleHR1cmVOb2RlJDI0LFxuICAgIFRleHR1cmVQb29sIDogVGV4dHVyZVBvb2wkMjVcbn07XG5leHBvcnQgeyBjb21wb3NpdG9yIH07XG5cblxudmFyIGNvcmUgPSB7XG4gICAgQmFzZSA6IEJhc2UkMjYsXG4gICAgQ2FjaGUgOiBDYWNoZSQyNyxcbiAgICBjb2xvciA6IGNvbG9yJDI4LFxuICAgIGdsZW51bSA6IGdsZW51bSQyOSxcbiAgICBHTEluZm8gOiBHTEluZm8kMzAsXG4gICAgTGlua2VkTGlzdCA6IExpbmtlZExpc3QkMzEsXG4gICAgTFJVIDogTFJVJDMyLFxuICAgIG1peGluIDoge1xuICAgICAgICBleHRlbmQgOiBleHRlbmQkMzMsXG4gICAgICAgIG5vdGlmaWVyIDogbm90aWZpZXIkMzRcbiAgICB9LFxuICAgIHJlcXVlc3QgOiByZXF1ZXN0JDM1LFxuICAgIHV0aWwgOiB1dGlsJDM2LFxuICAgIHZlbmRvciA6IHZlbmRvciQzN1xufTtcbmV4cG9ydCB7IGNvcmUgfTtcblxuXG52YXIgZGVmZXJyZWQgPSB7XG4gICAgR0J1ZmZlciA6IEdCdWZmZXIkMzgsXG4gICAgUmVuZGVyZXIgOiBSZW5kZXJlciQzOVxufTtcbmV4cG9ydCB7IGRlZmVycmVkIH07XG5cblxudmFyIGRlcCA9IHtcbiAgICBnbG1hdHJpeCA6IGdsbWF0cml4JDQwXG59O1xuZXhwb3J0IHsgZGVwIH07XG5cbmV4cG9ydCB7IEZyYW1lQnVmZmVyJDQxIGFzIEZyYW1lQnVmZmVyIH07XG5leHBvcnQgeyBHZW9tZXRyeSQ0MiBhcyBHZW9tZXRyeSB9O1xuXG52YXIgZ2VvbWV0cnkgPSB7XG4gICAgQ29uZSA6IENvbmUkNDMsXG4gICAgQ3ViZSA6IEN1YmUkNDQsXG4gICAgQ3lsaW5kZXIgOiBDeWxpbmRlciQ0NSxcbiAgICBQYXJhbWV0cmljU3VyZmFjZSA6IFBhcmFtZXRyaWNTdXJmYWNlJDQ2LFxuICAgIFBsYW5lIDogUGxhbmUkNDcsXG4gICAgU3BoZXJlIDogU3BoZXJlJDQ4XG59O1xuZXhwb3J0IHsgZ2VvbWV0cnkgfTtcblxuXG52YXIgZ3B1ID0ge1xuICAgIEdMUHJvZ3JhbSA6IEdMUHJvZ3JhbSQ0OSxcbiAgICBQcm9ncmFtTWFuYWdlciA6IFByb2dyYW1NYW5hZ2VyJDUwXG59O1xuZXhwb3J0IHsgZ3B1IH07XG5cbmV4cG9ydCB7IEpvaW50JDUxIGFzIEpvaW50IH07XG5leHBvcnQgeyBMaWdodCQ1MiBhcyBMaWdodCB9O1xuXG52YXIgbGlnaHQgPSB7XG4gICAgQW1iaWVudCA6IEFtYmllbnQkNTMsXG4gICAgQW1iaWVudEN1YmVtYXAgOiBBbWJpZW50Q3ViZW1hcCQ1NCxcbiAgICBBbWJpZW50U0ggOiBBbWJpZW50U0gkNTUsXG4gICAgRGlyZWN0aW9uYWwgOiBEaXJlY3Rpb25hbCQ1NixcbiAgICBQb2ludCA6IFBvaW50JDU3LFxuICAgIFNwaGVyZSA6IFNwaGVyZSQ1OCxcbiAgICBTcG90IDogU3BvdCQ1OSxcbiAgICBUdWJlIDogVHViZSQ2MFxufTtcbmV4cG9ydCB7IGxpZ2h0IH07XG5cblxudmFyIGxvYWRlciA9IHtcbiAgICBGWCA6IEZYJDYxLFxuICAgIEdMVEYgOiBHTFRGJDYyXG59O1xuZXhwb3J0IHsgbG9hZGVyIH07XG5cbmV4cG9ydCB7IE1hdGVyaWFsJDYzIGFzIE1hdGVyaWFsIH07XG5cbnZhciBtYXRoID0ge1xuICAgIEJvdW5kaW5nQm94IDogQm91bmRpbmdCb3gkNjQsXG4gICAgRnJ1c3R1bSA6IEZydXN0dW0kNjUsXG4gICAgTWF0cml4MiA6IE1hdHJpeDIkNjYsXG4gICAgTWF0cml4MmQgOiBNYXRyaXgyZCQ2NyxcbiAgICBNYXRyaXgzIDogTWF0cml4MyQ2OCxcbiAgICBNYXRyaXg0IDogTWF0cml4NCQ2OSxcbiAgICBQbGFuZSA6IFBsYW5lJDcwLFxuICAgIFF1YXRlcm5pb24gOiBRdWF0ZXJuaW9uJDcxLFxuICAgIFJheSA6IFJheSQ3MixcbiAgICB1dGlsIDogdXRpbCQ3MyxcbiAgICBWYWx1ZSA6IFZhbHVlJDc0LFxuICAgIFZlY3RvcjIgOiBWZWN0b3IyJDc1LFxuICAgIFZlY3RvcjMgOiBWZWN0b3IzJDc2LFxuICAgIFZlY3RvcjQgOiBWZWN0b3I0JDc3XG59O1xuZXhwb3J0IHsgbWF0aCB9O1xuXG5leHBvcnQgeyBNZXNoJDc4IGFzIE1lc2ggfTtcbmV4cG9ydCB7IE5vZGUkNzkgYXMgTm9kZSB9O1xuXG52YXIgcGFydGljbGUgPSB7XG4gICAgRW1pdHRlciA6IEVtaXR0ZXIkODAsXG4gICAgRmllbGQgOiBGaWVsZCQ4MSxcbiAgICBGb3JjZUZpZWxkIDogRm9yY2VGaWVsZCQ4MixcbiAgICBQYXJ0aWNsZSA6IFBhcnRpY2xlJDgzLFxuICAgIFBhcnRpY2xlUmVuZGVyYWJsZSA6IFBhcnRpY2xlUmVuZGVyYWJsZSQ4NFxufTtcbmV4cG9ydCB7IHBhcnRpY2xlIH07XG5cblxudmFyIHBpY2tpbmcgPSB7XG4gICAgUGl4ZWxQaWNraW5nIDogUGl4ZWxQaWNraW5nJDg1LFxuICAgIFJheVBpY2tpbmcgOiBSYXlQaWNraW5nJDg2XG59O1xuZXhwb3J0IHsgcGlja2luZyB9O1xuXG5cbnZhciBwbHVnaW4gPSB7XG4gICAgRnJlZUNvbnRyb2wgOiBGcmVlQ29udHJvbCQ4NyxcbiAgICBHZXN0dXJlTWdyIDogR2VzdHVyZU1nciQ4OCxcbiAgICBJbmZpbml0ZVBsYW5lIDogSW5maW5pdGVQbGFuZSQ4OSxcbiAgICBPcmJpdENvbnRyb2wgOiBPcmJpdENvbnRyb2wkOTAsXG4gICAgU2t5Ym94IDogU2t5Ym94JDkxLFxuICAgIFNreWRvbWUgOiBTa3lkb21lJDkyXG59O1xuZXhwb3J0IHsgcGx1Z2luIH07XG5cblxudmFyIHByZVBhc3MgPSB7XG4gICAgRW52aXJvbm1lbnRNYXAgOiBFbnZpcm9ubWVudE1hcCQ5MyxcbiAgICBTaGFkb3dNYXAgOiBTaGFkb3dNYXAkOTRcbn07XG5leHBvcnQgeyBwcmVQYXNzIH07XG5cbmV4cG9ydCB7IFJlbmRlcmFibGUkOTUgYXMgUmVuZGVyYWJsZSB9O1xuZXhwb3J0IHsgUmVuZGVyZXIkOTYgYXMgUmVuZGVyZXIgfTtcbmV4cG9ydCB7IFNjZW5lJDk3IGFzIFNjZW5lIH07XG5leHBvcnQgeyBTaGFkZXIkOTggYXMgU2hhZGVyIH07XG5cbnZhciBzaGFkZXIgPSB7XG4gICAgbGlicmFyeSA6IGxpYnJhcnkkOTksXG4gICAgc291cmNlIDoge1xuICAgIGhlYWRlciA6IHtcbiAgICAgICAgbGlnaHQgOiBsaWdodCQxMDBcbiAgICB9XG4gICAgfVxufTtcbmV4cG9ydCB7IHNoYWRlciB9O1xuXG5leHBvcnQgeyBTa2VsZXRvbiQxMDEgYXMgU2tlbGV0b24gfTtcbmV4cG9ydCB7IFN0YW5kYXJkTWF0ZXJpYWwkMTAyIGFzIFN0YW5kYXJkTWF0ZXJpYWwgfTtcbmV4cG9ydCB7IFN0YXRpY0dlb21ldHJ5JDEwMyBhcyBTdGF0aWNHZW9tZXRyeSB9O1xuZXhwb3J0IHsgVGV4dHVyZSQxMDQgYXMgVGV4dHVyZSB9O1xuZXhwb3J0IHsgVGV4dHVyZTJEJDEwNSBhcyBUZXh0dXJlMkQgfTtcbmV4cG9ydCB7IFRleHR1cmVDdWJlJDEwNiBhcyBUZXh0dXJlQ3ViZSB9O1xuXG52YXIgdXRpbCA9IHtcbiAgICBjdWJlbWFwIDogY3ViZW1hcCQxMDcsXG4gICAgZGRzIDogZGRzJDEwOCxcbiAgICBkZWxhdW5heSA6IGRlbGF1bmF5JDEwOSxcbiAgICBoZHIgOiBoZHIkMTEwLFxuICAgIG1lc2ggOiBtZXNoJDExMSxcbiAgICBzaCA6IHNoJDExMixcbiAgICB0ZXh0dXJlIDogdGV4dHVyZSQxMTMsXG4gICAgdHJhbnNmZXJhYmxlIDogdHJhbnNmZXJhYmxlJDExNFxufTtcbmV4cG9ydCB7IHV0aWwgfTtcblxuZXhwb3J0IHsgdmVyc2lvbiQxMTUgYXMgdmVyc2lvbiB9O1xuXG52YXIgdnIgPSB7XG4gICAgQ2FyZGJvYXJkRGlzdG9ydGVyIDogQ2FyZGJvYXJkRGlzdG9ydGVyJDExNixcbiAgICBTdGVyZW9DYW1lcmEgOiBTdGVyZW9DYW1lcmEkMTE3XG59O1xuZXhwb3J0IHsgdnIgfTtcbjtcbiJdLCJuYW1lcyI6WyJlYXNpbmciLCJFYXNpbmciLCJlYXNpbmdGdW5jcyIsInRoaXMiLCJnbE1hdHJpeCIsInF1YXQiLCJ2ZWMzIiwidXRpbCIsIm5vdGlmaWVyTWl4aW4iLCJjYW52YXMiLCJwcm90byIsIm1hdDQiLCJkZWZpbmVQcm9wZXJ0eSIsIkxSVSIsInBhcnNlQ29sb3IiLCJnZXREZWZpbmVDb2RlIiwibWF0MyIsImxpZ2h0U2hhZGVyIiwicHJlekVzc2wiLCJub29wIiwidmVjNCIsIlBsYW5lIiwidmVjM1NldCIsInZlYzNDb3B5IiwiRVBTSUxPTiIsInByb2dyYW1LZXlDYWNoZSIsImdldFByb2dyYW1LZXkiLCJDdWJlIiwiU3BoZXJlIiwiUGFyYW1ldHJpY1N1cmZhY2UiLCJpc1Bvd2VyT2ZUd28iLCJQZXJzcGVjdGl2ZSIsIk9ydGhvZ3JhcGhpYyIsInV0aWxFc3NsIiwic2hhZGVyTGlicmFyeSIsIlBlcnNwZWN0aXZlQ2FtZXJhIiwiT3J0aG9ncmFwaGljQ2FtZXJhIiwiY2FtZXJhIiwiT3J0aG9DYW1lcmEiLCJDdWJlR2VvbWV0cnkiLCJ0YXJnZXRzIiwiU3BoZXJlR2VvbWV0cnkiLCJyZXQiLCJoZHIiLCJkZHMiLCJ2ZWMyIiwiQ29uZSIsIkN5bGluZGVyIiwiQ29uZUdlb21ldHJ5IiwiQ29uZUdlbyIsIkN5bGluZGVyR2VvIiwiRnVsbFF1YWRQYXNzIiwiU3BoZXJlR2VvIiwiTFJVQ2FjaGUiLCJDdWJlR2VvIiwiUGxhbmVHZW8iLCJQYXJhbWV0cmljU3VyZmFjZUdlbyIsInNoVXRpbCIsIk5vZGUiLCJHcmFwaE5vZGUiLCJTY2VuZU5vZGUiLCJUZXh0dXJlTm9kZSIsIkZpbHRlck5vZGUiLCJDb21wb1NjZW5lTm9kZSIsIkNvbXBvVGV4dHVyZU5vZGUiLCJDb21wb0ZpbHRlck5vZGUiLCJtYXQyIiwib3V0cHV0RXNzbCIsIkJhc2UiLCJDYW1lcmEiLCJBbmltYXRvciQwIiwiQmxlbmQxRENsaXAkMSIsIkJsZW5kMkRDbGlwJDIiLCJDbGlwJDMiLCJlYXNpbmckNCIsIlNhbXBsZXJUcmFjayQ1IiwiVGltZWxpbmUkNiIsIlRyYWNrQ2xpcCQ3IiwiVHJhbnNmb3JtVHJhY2skOCIsIlRhc2skMTAiLCJUYXNrR3JvdXAkMTEiLCJPcnRob2dyYXBoaWMkMTMiLCJQZXJzcGVjdGl2ZSQxNCIsIk1hdGVyaWFsJDE1IiwiUmVuZGVyZXIkMTYiLCJDb21wb3NpdG9yJDE3IiwiY3JlYXRlQ29tcG9zaXRvciQxOCIsIkZpbHRlck5vZGUkMTkiLCJHcmFwaCQyMCIsIk5vZGUkMjEiLCJQYXNzJDIyIiwiU2NlbmVOb2RlJDIzIiwiVGV4dHVyZU5vZGUkMjQiLCJUZXh0dXJlUG9vbCQyNSIsIkJhc2UkMjYiLCJDYWNoZSQyNyIsImNvbG9yJDI4IiwiZ2xlbnVtJDI5IiwiR0xJbmZvJDMwIiwiTGlua2VkTGlzdCQzMSIsIkxSVSQzMiIsImV4dGVuZCQzMyIsIm5vdGlmaWVyJDM0IiwicmVxdWVzdCQzNSIsInV0aWwkMzYiLCJ2ZW5kb3IkMzciLCJHQnVmZmVyJDM4IiwiUmVuZGVyZXIkMzkiLCJnbG1hdHJpeCQ0MCIsIkNvbmUkNDMiLCJDdWJlJDQ0IiwiQ3lsaW5kZXIkNDUiLCJQYXJhbWV0cmljU3VyZmFjZSQ0NiIsIlBsYW5lJDQ3IiwiU3BoZXJlJDQ4IiwiR0xQcm9ncmFtJDQ5IiwiUHJvZ3JhbU1hbmFnZXIkNTAiLCJBbWJpZW50JDUzIiwiQW1iaWVudEN1YmVtYXAkNTQiLCJBbWJpZW50U0gkNTUiLCJEaXJlY3Rpb25hbCQ1NiIsIlBvaW50JDU3IiwiU3BoZXJlJDU4IiwiU3BvdCQ1OSIsIlR1YmUkNjAiLCJGWCQ2MSIsIkdMVEYkNjIiLCJCb3VuZGluZ0JveCQ2NCIsIkZydXN0dW0kNjUiLCJNYXRyaXgyJDY2IiwiTWF0cml4MmQkNjciLCJNYXRyaXgzJDY4IiwiTWF0cml4NCQ2OSIsIlBsYW5lJDcwIiwiUXVhdGVybmlvbiQ3MSIsIlJheSQ3MiIsInV0aWwkNzMiLCJWYWx1ZSQ3NCIsIlZlY3RvcjIkNzUiLCJWZWN0b3IzJDc2IiwiVmVjdG9yNCQ3NyIsIkVtaXR0ZXIkODAiLCJGaWVsZCQ4MSIsIkZvcmNlRmllbGQkODIiLCJQYXJ0aWNsZSQ4MyIsIlBhcnRpY2xlUmVuZGVyYWJsZSQ4NCIsIlBpeGVsUGlja2luZyQ4NSIsIlJheVBpY2tpbmckODYiLCJGcmVlQ29udHJvbCQ4NyIsIkdlc3R1cmVNZ3IkODgiLCJJbmZpbml0ZVBsYW5lJDg5IiwiT3JiaXRDb250cm9sJDkwIiwiU2t5Ym94JDkxIiwiU2t5ZG9tZSQ5MiIsIkVudmlyb25tZW50TWFwJDkzIiwiU2hhZG93TWFwJDk0IiwibGlicmFyeSQ5OSIsImxpZ2h0JDEwMCIsImN1YmVtYXAkMTA3IiwiZGRzJDEwOCIsImRlbGF1bmF5JDEwOSIsImhkciQxMTAiLCJtZXNoJDExMSIsInNoJDExMiIsInRleHR1cmUkMTEzIiwidHJhbnNmZXJhYmxlJDExNCIsIkNhcmRib2FyZERpc3RvcnRlciQxMTYiLCJTdGVyZW9DYW1lcmEkMTE3Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFLQSxJQUFJLE1BQU0sR0FBRzs7Ozs7O0lBTVQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEI7Ozs7OztJQU1ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEM7Ozs7OztJQU1ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCOzs7Ozs7SUFNRCxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEIsT0FBT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UcsT0FBTyxFQUFFO1FBQ3pCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDL0I7O1NBRUk7UUFDRCxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRCxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUTtZQUN0QixFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUc7WUFDckIsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQ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0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEQ7U0FDSjs7O1FBR0QsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELFFBQVEsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O1FBRXZCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDL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0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDM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SxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOztRQUVULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUNoQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQztJQUNyQixJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLFdBQVc7SUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztJQUV4QixPQUFPLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDL0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNSLE1BQU0sR0FBRyxDQUFDLENBQUM7U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yxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDOzs7Ozs7OztBQVFwQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7O0FBUXZCLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7QUFTakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7O1FBRVQsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xELENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2hDLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDOztJQUVyQixJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7SUFFeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNuQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7OztJQUdyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzs7SUFHbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbEQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7TUFFZCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O01BR2pCL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ENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUduQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUdaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLFdBQVc7SUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztJQUV4QixPQUFPLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7UUFDL0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNSLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDZDs7UUFFRCxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ1IsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUNkOztRQUVELEdBQUcsS0FBSyxFQUFFO1lBQ04sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckQsTUFBTTtZQUNILENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ2hCOztRQUVELElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQ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UFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7OztBQVlGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Ozs7Ozs7O0FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7O0FBUXZCLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hDLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7O0FBU2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWixDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBR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UFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztRQUcxQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7O0lBR25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBR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UMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDZixNQUFNO1FBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztRQUcxQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU1QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7O0lBRW5CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDOztJQUViLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3BDLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDakMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDcEIsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUN6RSxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkcsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDcEIsQ0FBQzs7QUFFRixHQUFHLE9BQU8sT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCO0FBQ0QsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMENELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDL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UM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEIsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQ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UFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6RyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWxDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUUzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRWpCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3BCLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtvQkFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO29CQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMxRCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdk0sQ0FBQzs7O0FBR0YsR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtJQUNoQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2QjtBQUNELEFBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QkQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0FBT2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFL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yxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOztRQUVsRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRzs7O1FBRzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEYsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVwRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7OztJQUdoQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ2hGLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHdkQsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOztJQUUzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOztJQUUzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOztJQUU1QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25DLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7O0lBR2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7O0lBR2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7O0lBR25DLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDekMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFekMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7OztBQU16QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Ozs7Ozs7OztBQVNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7SUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNyRCxNQUFNO1FBQ0gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWpELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDOztRQUV6RCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2pEOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0lBQ3ZDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNQLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNiLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNiLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztJQUVsQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRTs7SUFFbkQsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNULENBQUMsSUFBSSxHQUFHLENBQUM7O0lBRVQsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVYsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUdqRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O0lBR3RFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUU1QyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ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UFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNqQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWYsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNuQjs7O0lBR0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkYsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7O0lBRWhELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztRQUVWLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUFFRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVgsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVgsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVosR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUMvRCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDdkIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDN0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDN0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDdkIsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYL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UksR0FBRyxDQUFDO0tBQ2I7O0lBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNwQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtvQkFDdEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7b0JBQ3JELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJO29CQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQzVFLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztDQUMxVixDQUFDOzs7QUFHRixHQUFHLE9BQU8sT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCO0FBQ0QsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCRCxJQ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ENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBV3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7Ozs7OztBQVV4QixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVYLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRTNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRVgsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFVBQ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UMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztLQUM5QixNQUFNOztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQ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1FBQ0QsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0tBQ0osQ0FBQyxDQUFDO0NBQ047Ozs7Ozs7Ozs7QUFVRCxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQ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SxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztRQUVsQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Ozs7UUFJcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNUQSxNQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDLE1BQU07WUFDSEEsTUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDQSxNQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUNBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztLQUNKLENBQUM7Q0FDTCxHQUFHLENBQUM7O0FBRUwsY0FBYyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3ZEQyxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbERBLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQ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UFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7SUFJckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5FLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBR3hDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FDYjs7SUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxRQUFRLEVBQUU7O1FBRTFCLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDL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ENBQUMsRUFBRSxFQUFFO1lBQ3hCLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3RTs7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJL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ENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQy9COzs7Ozs7SUFNRCxNQUFNLEVBQUUsWUFBWTtRQUNoQixPQUFPQSxNQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNsQzs7Ozs7Ozs7SUFRRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNyQkEsTUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2RBLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2RBLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2RBLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQ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ElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQ0EsTUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUJBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDO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SxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUM3QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7SUFFWixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVmLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQzs7SUFFM0MsUUFBUSxLQUFLO1FBQ1QsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNO1FBQ1Y7WUFDSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0lBRTdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7SUFFdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDaEM7aUJBQ0k7Z0JBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFDRCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLE1BQU0sQ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UcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQUV6QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JELElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOztnQkFFckQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JELElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUN4RDtZQUNELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0tBQ0o7Ozs7OztJQU1ELEtBQUssRUFBRSxVQUFVLElBQUksRUFBRTtRQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkJBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0NBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsWUFBWSxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQzFCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQkEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQ0EsTUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0Qsb0JBQW9CLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDbEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2VBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUU7Ozs7Ozs7SUFPRCxrQkFBa0IsRUFBRSxVQUFVLElBQUksRUFBRTs7UUFFaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxDQUFDLFlBQVk7O1FBRXpCLElBQUksRUFBRSxHQUFHQSxNQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUdBLE1BQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBR0EsTUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHQSxNQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUdBLE1BQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBR0EsTUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFO1lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztZQUV6QixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDOztZQUVyQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVwRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVwRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVyRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTFGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXZCLE9BQU8sSUFBSSxDQUFDO1NBQ2YsQ0FBQztLQUNMLEdBQUc7Ozs7OztJQU1KLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFekIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWpCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDO2FBQ0k7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRW5DLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUV4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7UUFFdkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxjQUFjLEVBQUUsWUFBWTtRQUN4QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUU7O1lBRVgsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBR0EsTUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzFDOzs7Ozs7WUFNRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtRQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7UUFHekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ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EMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3RCO1FBQ0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFOzs7WUFHZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVkLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0tBQ0osQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFTSEUsZ0JBQWMsQ0FBQ0YsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDdEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUViL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UFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7SUFDNUNBLE1BQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUJBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7OztBQU8vQixPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUNoQ0EsTUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLHVCQUF1QixHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbERBLE1BQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDcEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQzs7SUFFbEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVoQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWhCLE9BQU8sRUFBRSxDQUFDO0NBQ2IsQ0FBQzs7Ozs7Ozs7O0FBU0YsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUN6Q0EsTUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ3BDQSxNQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ3BDQSxNQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ3BDQSxNQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQ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CxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBR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UMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDL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UFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxTQUFTLEVBQUUsWUFBWTtRQUNuQkEsTUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsT0FBTyxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ3BCQSxNQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsT0FBTyxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ3BCQSxNQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsT0FBTyxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ3BCQSxNQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7Ozs7SUFTRCxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3hCQSxNQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ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UFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLFVBQVUsQ0FBQyxZQUFZLEdBQUcsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUNoREEsTUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDckNBLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixVQUFVLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzdCLE9BQU9BLE1BQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQy9CLENBQUM7Ozs7Ozs7QUFPRixVQUFVLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7QUFPN0MsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDcENBLE1BQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0lBQ2pEQSxNQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pDQSxNQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLFVBQVUsQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTs7SUFFNUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O0lBRWxCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1osSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztJQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOzs7Ozs7SUFNM0MsUUFBUSxLQUFLO1FBQ1QsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO0tBQ2I7Q0FDSixDQUFDOztBQzl2QkYsSUFBSU0sTUFBSSxHQUFHUCxRQ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UFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztRQUd2RGdCLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQ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UFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkYsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs7WUFFdkYsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDaEMsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7O1lBRzdCQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQ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UFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQzNDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNkLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQ3RDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1NBQ3pDO2FBQ0k7WUFDRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztZQUN0QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztTQUN6QztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNkLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQ3ZDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1NBQzFDO2FBQ0k7WUFDRCxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztZQUN2QyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztTQUMxQzs7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUM7U0FDZjs7UUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUMvQixJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNoQjs7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7WUFDZCxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztZQUN2QyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztTQUMxQzthQUNJO1lBQ0QsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7WUFDdkMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7U0FDMUM7O1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7O1FBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQy9CLElBQUksR0FBRyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQztTQUNmOztRQUVELElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQzs7UUFFaEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1NBQ3ZCO1FBQ0RBLE9BQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7Ozs7Ozs7Ozs7Ozs7SUFhRCxpQkFBaUIsRUFBRSxDQUFDLFlBQVk7O1FBRTVCLElBQUksR0FBRyxHQUFHQSxPQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFHLEdBQUdBLE9BQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixJQUFJLEVBQUUsR0FBR0EsT0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksTUFBTSxHQUFHQSxPQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7O1FBRTNCLE9BQU8sVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRTtZQUN0RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUMvQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNaLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ1osQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7O1lBRVpBLE9BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwQkEsT0FBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUVwQkEsT0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztZQUU3QixJQUFJLEdBQUcsR0FBR0EsT0FBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7O1lBRWhDLElBQUksV0FBVyxFQUFFO2dCQUNiLElBQUksR0FBRyxHQUFHLENBQUNrQixTQUFPLEVBQUU7b0JBQ2hCLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQ0EsU0FBTyxJQUFJLEdBQUcsR0FBR0EsU0FBTyxFQUFFO29CQUNqQyxPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKOztZQUVEbEIsT0FBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxHQUFHQSxPQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7O1lBRURBLE9BQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsR0FBR0EsT0FBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDOztZQUVwQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLElBQUksQ0FBQzthQUNmOztZQUVEQSxPQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQ0EsT0FBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDOztZQUVwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1AsT0FBTyxJQUFJLENBQUM7YUFDZjs7WUFFRCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1lBQ0RBLE9BQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUU1QyxPQUFPLEdBQUcsQ0FBQztTQUNkLENBQUM7S0FDTCxHQUFHOzs7Ozs7SUFNSixjQUFjLEVBQUUsVUFBVSxNQUFNLEVBQUU7UUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztRQUU5RCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNyRDs7Ozs7O0lBTUQsSUFBSSxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMvQzs7Ozs7O0lBTUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixPQUFPLEdBQUcsQ0FBQztLQUNkO0NBQ0osQ0FBQzs7QUN2VEYsSUFBSUEsTUFBSSxHQUFHRixRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ3pCLElBQUksSUFBSSxHQUFHQSxRQUFRLENBQUMsSUFBSSxDQUFDOzs7Ozs7QUFNekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQ2pDLGtDQUFrQzs7Ozs7UUFLOUIsZ0JBQWdCLEVBQUUsSUFBSSxPQUFPLEVBQUU7Ozs7OztRQU0vQixtQkFBbUIsRUFBRSxJQUFJLE9BQU8sRUFBRTs7Ozs7O1FBTWxDLFVBQVUsRUFBRSxJQUFJLE9BQU8sRUFBRTs7Ozs7O1FBTXpCLE9BQU8sRUFBRSxJQUFJLE9BQU8sRUFBRTtLQUN6QixDQUFDO0NBQ0wsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNyQjs7QUFFRDs7SUFFSSxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDOztRQUVyRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7UUFFaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUN6RDs7Ozs7SUFLRCxhQUFhLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztLQUNsQzs7Ozs7SUFLRCx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7Ozs7OztJQU16QyxtQkFBbUIsRUFBRSxVQUFVLGdCQUFnQixFQUFFO1FBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztLQUNwQzs7OztJQUlELHNCQUFzQixFQUFFLFlBQVksRUFBRTs7Ozs7Ozs7O0lBU3RDLE9BQU8sRUFBRSxDQUFDLFlBQVk7UUFDbEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0REUsTUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU1QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3REQSxNQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCQSxNQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOztZQUVwREEsTUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pELEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUM1QixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXpCLE9BQU8sR0FBRyxDQUFDO1NBQ2QsQ0FBQztLQUNMLEdBQUc7Ozs7Ozs7O0NBUVAsQ0FBQzs7QUNuSEYsSUFBSW1CLGlCQUFlLEdBQUcsRUFBRSxDQUFDOztBQUV6QixTQUFTQyxlQUFhLENBQUMsWUFBWSxFQUFFO0lBQ2pDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNuQixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFL0IsSUFBSUQsaUJBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPQSxpQkFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQy9COztJQUVELElBQUksRUFBRSxHQUFHbEIsTUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCa0IsaUJBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsT0FBTyxFQUFFLENBQUM7Q0FDYjs7Ozs7O0FBTUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQ2hDLGlDQUFpQzs7Ozs7UUFLN0IsUUFBUSxFQUFFLElBQUk7Ozs7O1FBS2QsVUFBVSxFQUFFLElBQUk7Ozs7Ozs7UUFPaEIsVUFBVSxFQUFFLEVBQUU7Ozs7Ozs7UUFPZCxlQUFlLEVBQUUsRUFBRTs7UUFFbkIsTUFBTSxFQUFFLEVBQUU7Ozs7Ozs7Ozs7OztRQVlWLHdCQUF3QixFQUFFLElBQUksV0FBVyxFQUFFOzs7UUFHM0MsY0FBYyxFQUFFLEVBQUU7O1FBRWxCLFdBQVcsRUFBRSxFQUFFOzs7O1FBSWYsY0FBYyxFQUFFLEVBQUU7O1FBRWxCLG9CQUFvQixFQUFFLEVBQUU7O1FBRXhCLFlBQVksRUFBRTs7Ozs7Ozs7U0FRYjs7UUFFRCxpQkFBaUIsRUFBRSxFQUFFOztRQUVyQixrQkFBa0IsRUFBRSxDQUFDO1FBQ3JCLHVCQUF1QixFQUFFLENBQUM7O1FBRTFCLGVBQWUsRUFBRSxFQUFFOztLQUV0QixDQUFDO0NBQ0wsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdEI7O0FBRUQ7OztJQUdJLFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRTtRQUN4QixJQUFJLElBQUksWUFBWSxNQUFNLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQzthQUN6RTtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQzFDO0tBQ0o7OztJQUdELGVBQWUsRUFBRSxVQUFVLElBQUksRUFBRTtRQUM3QixJQUFJLElBQUksWUFBWSxNQUFNLEVBQUU7WUFDeEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuQztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztLQUNKOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRTtRQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7Ozs7Ozs7O0lBUUQsU0FBUyxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQ3ZCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7O1FBRXRCLElBQUksYUFBYSxHQUFHLFVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUMvQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM1RCxVQUFVLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDOUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHO29CQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVE7aUJBQzNCLENBQUM7YUFDTDtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hFO1NBQ0osQ0FBQzs7UUFFRixhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztRQUU3QixLQUFLLElBQUksSUFBSSxJQUFJLFlBQVksRUFBRTtZQUMzQixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDakU7OztRQUdELE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxPQUFPLEVBQUU7WUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUNsQixPQUFPLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUNwRTtTQUNKLENBQUMsQ0FBQzs7UUFFSCxPQUFPLE9BQU8sQ0FBQztLQUNsQjs7Ozs7Ozs7O0lBU0QsTUFBTSxFQUFFLFVBQVUsS0FBSyxFQUFFLGVBQWUsRUFBRTtRQUN0QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztRQUV4QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQzs7UUFFMUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDOztRQUVqQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7UUFFbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDOztRQUV2RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDOzs7UUFHM0QsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs7WUFFOUMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3JCLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQzNCOztnQkFFRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQzs7WUFFaEMsS0FBSyxJQUFJLE9BQU8sSUFBSSxXQUFXLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FBR0MsZUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ3pFOztZQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQy9CO0tBQ0o7O0lBRUQsYUFBYSxFQUFFLFlBQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlCOzs7O0lBSUQsaUJBQWlCLEVBQUUsVUFBVSxNQUFNLEVBQUUsd0JBQXdCLEVBQUU7UUFDM0QsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE9BQU87U0FDVjs7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFaEMsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtpQkFDSSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSx3QkFBd0IsRUFBRTtvQkFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDaEU7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDdEQ7YUFDSjtZQUNELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7U0FDSjtLQUNKOztJQUVELG9CQUFvQixFQUFFLFlBQVk7UUFDOUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7UUFFekIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs7UUFFM0IsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxLQUFLLElBQUksS0FBSyxJQUFJLGFBQWEsRUFBRTtZQUM3QixLQUFLLElBQUksTUFBTSxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDckMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ2pEO1NBQ0o7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7WUFFcEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7O1lBRXhCLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFO2dCQUN2QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hELElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtvQkFDZixTQUFTO2lCQUNaO2dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3ZCLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQzdCO2dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQy9CLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRzt3QkFDM0IsSUFBSSxFQUFFLEVBQUU7d0JBQ1IsS0FBSyxFQUFFLEVBQUU7cUJBQ1osQ0FBQztpQkFDTDtnQkFDRCxJQUFJLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ2hDLFFBQVEsVUFBVSxDQUFDLElBQUk7b0JBQ25CLEtBQUssSUFBSSxDQUFDO29CQUNWLEtBQUssSUFBSSxDQUFDO29CQUNWLEtBQUssR0FBRzt3QkFDSixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDckIsTUFBTTtvQkFDVixLQUFLLElBQUksQ0FBQztvQkFDVixLQUFLLElBQUksQ0FBQztvQkFDVixLQUFLLElBQUk7d0JBQ0wsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ25DLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUMzQjt3QkFDRCxNQUFNO29CQUNWO3dCQUNJLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNyRTthQUNKO1NBQ0o7S0FDSjs7SUFFRCxjQUFjLEVBQUUsWUFBWTtRQUN4QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25DLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0I7UUFDRCxPQUFPLFdBQVcsQ0FBQztLQUN0Qjs7SUFFRCwyQkFBMkIsRUFBRSxZQUFZO1FBQ3JDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixLQUFLLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3BDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDN0I7U0FDSjtRQUNELE9BQU8sV0FBVyxDQUFDO0tBQ3RCOzs7Ozs7OztJQVFELG9CQUFvQixFQUFFLFVBQVUsVUFBVSxFQUFFO1FBQ3hDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNoRCxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7O1FBRTNDLEtBQUssSUFBSSxJQUFJLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM1RSxPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxLQUFLLElBQUksSUFBSSxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDNUUsT0FBTyxJQUFJLENBQUM7YUFDZjtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDaEI7Ozs7OztJQU1ELGdCQUFnQixFQUFFLFVBQVUsVUFBVSxFQUFFO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN4Qzs7SUFFRCxhQUFhLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDN0M7O0lBRUQsZ0JBQWdCLEVBQUUsQ0FBQyxZQUFZO1FBQzNCLFNBQVMsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO1lBQzlDLEtBQUssSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO2dCQUN6QixJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUM3QixTQUFTO3FCQUNaO29CQUNELElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztvQkFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN0QyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUM3RCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN2QjtvQkFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDNUQ7cUJBQ0k7b0JBQ0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDOUQ7YUFDSjtTQUNKOztRQUVELE9BQU8sVUFBVSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTtZQUM1QyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7O1lBRWhFLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN2RCxDQUFDO0tBQ0wsR0FBRzs7Ozs7OztJQU9KLE9BQU8sRUFBRSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDOztRQUUxQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7O1FBRXpCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0tBQzdCO0NBQ0osQ0FBQyxDQUFDOztBQUVILFNBQVMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekIsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQztLQUNmO0NBQ0o7O0FDdmFELElBQUlwQixPQUFJLEdBQUdGLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDekIsSUFBSU8sTUFBSSxHQUFHUCxRQUFRLENBQUMsSUFBSSxDQUFDOztBQUV6QixJQUFJLFVBQVUsR0FBR0UsT0FBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QixJQUFJLE9BQU8sR0FBR0EsT0FBSSxDQUFDLEdBQUcsQ0FBQztBQUN2QixJQUFJZ0IsU0FBTyxHQUFHaEIsT0FBSSxDQUFDLEdBQUcsQ0FBQzs7QUFFdkIsU0FBUyxrQkFBa0IsRUFBRSxJQUFJLEVBQUU7SUFDL0IsT0FBTyxDQUFDO1FBQ0osTUFBTSxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQ3hCLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVTtRQUMxQixPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDMUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxXQUFXO0tBQy9CLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQztDQUNuQzs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxRQUFRLEVBQUU7SUFDM0IsT0FBTyxPQUFPLEdBQUcsUUFBUSxDQUFDO0NBQzdCOzs7Ozs7QUFNRCxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Ozs7O0lBSzNDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOzs7Ozs7Ozs7OztJQVdqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzs7Ozs7SUFLakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFzQmpCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQzs7Ozs7O0lBTS9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOzs7SUFHbEIsUUFBUSxJQUFJO1FBQ1IsS0FBSyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRTtnQkFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzFCLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtnQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDM0IsQ0FBQzs7WUFFRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtnQkFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzNDLENBQUM7WUFDRixNQUFNO1FBQ1YsS0FBSyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLE9BQU8sR0FBRyxDQUFDO2FBQ2QsQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdCLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtnQkFDbEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsTUFBTSxJQUFJLENBQUMsQ0FBQztnQkFDWixNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUNaLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNyQyxDQUFDO1lBQ0YsTUFBTTtRQUNWLEtBQUssQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLE9BQU8sR0FBRyxDQUFDO2FBQ2QsQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFO2dCQUMzQixJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDMUIsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUNaLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQ1osR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckMsQ0FBQztZQUNGLE1BQU07UUFDVixLQUFLLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxHQUFHLENBQUM7YUFDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDMUIsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUNaLE1BQU0sSUFBSSxDQUFDLENBQUM7O2dCQUVaLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDckMsQ0FBQztLQUNUO0NBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMEJELFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsT0FBTyxFQUFFO0lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ3pELElBQUksZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzFEO0NBQ0osQ0FBQzs7Ozs7Ozs7Ozs7OztBQWFGLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsS0FBSyxFQUFFO0lBQzdDLElBQUksZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELElBQUksS0FBSyxDQUFDOztJQUVWLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLEtBQUssR0FBRyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1NBQ0o7S0FDSjtTQUNJO1FBQ0QsS0FBSyxHQUFHLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdkM7SUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUN0QixDQUFDOztBQUVGLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsU0FBUyxFQUFFO0lBQzVDLElBQUksR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7SUFFeEUsSUFBSSxTQUFTLEVBQUU7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQUVGLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Ozs7SUFJekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7OztJQUdqQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztDQUM1Qjs7QUFFRCxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUU7SUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDbEI7Ozs7OztBQU1ELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUNuQyxvQ0FBb0M7Ozs7Ozs7Ozs7Ozs7O1FBY2hDLFVBQVUsRUFBRTtZQUNSLFFBQVEsRUFBRSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUM7WUFDM0QsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQztZQUMvRCxTQUFTLEVBQUUsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDO1lBQy9ELE1BQU0sRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUM7WUFDckQsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQztZQUN4RCxLQUFLLEVBQUUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDOzs7OztZQUtsRCxNQUFNLEVBQUUsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDO1lBQ3JELEtBQUssRUFBRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUM7OztZQUdsRCxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO1NBQzlEOzs7OztRQUtELFdBQVcsRUFBRSxJQUFJOzs7Ozs7UUFNakIsT0FBTyxFQUFFLElBQUk7Ozs7Ozs7UUFPYixPQUFPLEVBQUUsSUFBSTs7UUFFYixrQkFBa0IsRUFBRSxJQUFJO0tBQzNCLENBQUM7Q0FDTCxFQUFFLFdBQVc7O0lBRVYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDOztJQUUxQixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0NBQ3REOztBQUVEOzs7OztJQUtJLGFBQWEsRUFBRSxVQUFVOzs7Ozs7Ozs7O0lBVXpCLElBQUksRUFBRSxJQUFJOzs7Ozs7Ozs7O0lBVVYsU0FBUyxFQUFFLElBQUk7Ozs7O0lBS2YsaUJBQWlCLEVBQUUsWUFBWTtRQUMzQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzVDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDekIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ25CLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDdkIsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN2QkEsT0FBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsREEsT0FBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRztnQkFDaEMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7Z0JBRXJDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7YUFDeEM7WUFDRCxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNsQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNyQjtLQUNKOzs7O0lBSUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3BELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7O1FBRS9CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVCOzs7O0lBSUQsWUFBWSxFQUFFLFlBQVk7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDbkM7Ozs7O0lBS0QsY0FBYyxFQUFFLFVBQVUsUUFBUSxFQUFFO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ3RDOzs7Ozs7O0lBT0Qsa0JBQWtCLEVBQUUsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ3BDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLEdBQUcsR0FBRyxVQUFVLEVBQUUsQ0FBQzthQUN0QjtZQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5QixPQUFPLEdBQUcsQ0FBQztTQUNkO0tBQ0o7Ozs7Ozs7SUFPRCxrQkFBa0IsRUFBRSxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDcEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pDOztJQUVELFlBQVksRUFBRSxZQUFZO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDekI7Ozs7OztJQU1ELG9CQUFvQixFQUFFLFVBQVUsS0FBSyxFQUFFO1FBQ25DLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU07Y0FDMUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDOztRQUU5QyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDOztZQUViLEtBQUssR0FBRyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDbEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDNUI7YUFDSjtTQUNKO2FBQ0k7WUFDRCxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2Qzs7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUN4Qjs7Ozs7Ozs7SUFRRCxlQUFlLEVBQUUsVUFBVSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDbkQsSUFBSSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQztLQUNqQjs7Ozs7SUFLRCxlQUFlLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDN0IsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtZQUNWLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDaEI7Ozs7Ozs7SUFPRCxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hDOzs7Ozs7O0lBT0Qsb0JBQW9CLEVBQUUsWUFBWTtRQUM5QixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOztRQUV4QyxJQUFJLGlCQUFpQixFQUFFO1lBQ25CLE9BQU8saUJBQWlCLENBQUM7U0FDNUI7O1FBRUQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7O1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDZCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFO29CQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNyQjthQUNKO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQzs7UUFFakMsT0FBTyxNQUFNLENBQUM7S0FDakI7O0lBRUQsZUFBZSxFQUFFLFVBQVUsUUFBUSxFQUFFO1FBQ2pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BELElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxpQkFBaUIsSUFBSSxjQUFjLEVBQUU7WUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ25FLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1lBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDOUI7O0lBRUQsYUFBYSxFQUFFLFVBQVUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRTtRQUM3RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLEdBQUcsRUFBRSxDQUFDOztZQUVaLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFDUixnQkFBZ0IsRUFBRSxFQUFFO2dCQUNwQixhQUFhLEVBQUUsSUFBSTthQUN0QixDQUFDO1lBQ0YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUIsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN0Qjs7UUFFRCxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQzs7UUFFeEMsSUFBSSxpQkFBaUIsSUFBSSxXQUFXLEVBQUU7WUFDbEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7O1lBRWhELElBQUksa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDOUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3RFO2FBQ0o7O1lBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBRXRDLElBQUksVUFBVSxDQUFDOztnQkFFZixJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNkLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDekM7Z0JBQ0QsSUFBSSxNQUFNLENBQUM7Z0JBQ1gsSUFBSSxVQUFVLEVBQUU7b0JBQ1osTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7aUJBQzlCO3FCQUNJO29CQUNELE1BQU0sR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7aUJBQy9CO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTs7O29CQUdsQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3pDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzlHOztnQkFFRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDL0c7OztZQUdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEQ7WUFDRCxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztTQUUvQjs7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxjQUFjLElBQUksV0FBVyxDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQzthQUN2QztZQUNELGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDMUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNuSDtLQUNKOzs7OztJQUtELHFCQUFxQixFQUFFLFlBQVk7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWOztRQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUMxQyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFdEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDakQsT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakY7YUFDSTs7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtTQUNKOztRQUVELElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDOztRQUV0QixJQUFJLEdBQUcsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBRyxVQUFVLEVBQUUsQ0FBQzs7UUFFdkIsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7O1FBRXJCLElBQUksR0FBRyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdEQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUc7WUFDdEIsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNyQjtpQkFDSTtnQkFDRCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNULEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQzthQUNaOztZQUVEZ0IsU0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkVBLFNBQU8sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FQSxTQUFPLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFbkVoQixPQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEJBLE9BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QkEsT0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztZQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVDO1NBQ0o7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUc7WUFDakNnQixTQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRGhCLE9BQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ2hCOzs7OztJQUtELG1CQUFtQixFQUFFLFlBQVk7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWOztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDL0I7O1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDOztRQUV0QyxJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUN0QixJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUN0QixJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQzs7UUFFdEIsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7O1FBRXJCLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN0RCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRztZQUN0QixJQUFJLE9BQU8sRUFBRTtnQkFDVCxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JCO2lCQUNJO2dCQUNELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ1o7O1lBRURnQixTQUFPLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRUEsU0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkVBLFNBQU8sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVuRWhCLE9BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QkEsT0FBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCQSxPQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7O1lBRXhCQSxPQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ2hCOzs7OztJQUtELGdCQUFnQixFQUFFLFlBQVk7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWOztRQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDM0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDM0MsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDeEMsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7O1FBRXRDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDckUsT0FBTztTQUNWOztRQUVELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzdCOztRQUVELElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDL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UFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWxDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsVUFBV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yxFQUFFLENBQUMsQ0FBQzs7UUFFbkIsU0FBUyxDQUFDLElBQUksQ0FBQ3VDLE1BQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTFCLFNBQVMsQ0FBQyxJQUFJLENBQUNBLE1BQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7OztRQUdELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDQSxNQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFN0IsU0FBUyxDQUFDLElBQUksQ0FBQ0EsTUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ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UFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQkEsTUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELE1BQ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 diff --git a/dist/claygl.js b/dist/claygl.js index 6851245af..c6d879663 100644 --- a/dist/claygl.js +++ b/dist/claygl.js @@ -1664,17 +1664,20 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -if(!GLMAT_EPSILON) { - var GLMAT_EPSILON = 0.000001; +var GLMAT_EPSILON = window.GLMAT_EPSILON; +if(GLMAT_EPSILON == null) { + GLMAT_EPSILON = 0.000001; } -if(!GLMAT_ARRAY_TYPE) { - var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array; -} +// Use Array instead of Float32Array. It seems to be much faster and higher precision. +var GLMAT_ARRAY_TYPE = window.GLMAT_ARRAY_TYPE || Array; +// if(!GLMAT_ARRAY_TYPE) { +// GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array; +// } +var GLMAT_RANDOM = window.GLMAT_RANDOM; if(!GLMAT_RANDOM) { - var GLMAT_RANDOM = Math.random; + GLMAT_RANDOM = Math.random; } /** @@ -6684,36 +6687,6 @@ Vector2.transformMat4 = function(out, a, m) { // 2D Blend clip of blend tree // http://docs.unity3d.com/Documentation/Manual/2DBlending.html -/** - * @typedef {Object} clay.animation.Blend2DClip.IClipInput - * @property {clay.math.Vector2} position - * @property {clay.animation.Clip} clip - * @property {number} offset - */ - -/** - * 2d blending node in animation blend tree. - * output clip must have blend2D method - * @constructor - * @alias clay.animation.Blend2DClip - * @extends clay.animation.Clip - * - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {object[]} [opts.inputs] - * @param {clay.math.Vector2} [opts.position] - * @param {clay.animation.Clip} [opts.output] - */ var Blend2DClip = function (opts) { opts = opts || {}; @@ -7906,12 +7879,6 @@ var util$1 = { } }; -/** - * Base class of all objects - * @constructor - * @alias clay.core.Base - * @mixes clay.core.mixin.notifier - */ var Base = function () { /** * @type {number} @@ -10958,11 +10925,6 @@ Cache.prototype.constructor = Cache; * Base class for all textures like compressed texture, texture2d, texturecube * TODO mapping */ -/** - * @constructor - * @alias clay.Texture - * @extends clay.core.Base - */ var Texture = Base.extend( /** @lends clay.Texture# */ { @@ -11617,11 +11579,6 @@ LinkedList.Entry = function (val) { this.prev = null; }; -/** - * LRU Cache - * @constructor - * @alias clay.core.LRU - */ var LRU$1 = function(maxSize) { this._list = new LinkedList(); @@ -12371,11 +12328,15 @@ var Material = Base.extend(function () { for (var u = 0; u < this._enabledUniforms.length; u++) { var symbol = this._enabledUniforms[u]; var uniformValue = this.uniforms[symbol].value; - if (uniformValue instanceof Texture) { + var uniformType = this.uniforms[symbol].type; + // Not use `instanceof` to determine if a value is texture in Material#bind. + // Use type instead, in some case texture may be in different namespaces. + // TODO Duck type validate. + if (uniformType === 't' && uniformValue) { // Reset slot uniformValue.__slot = -1; } - else if (Array.isArray(uniformValue)) { + else if (uniformType === 'tv') { for (var i = 0; i < uniformValue.length; i++) { if (uniformValue[i] instanceof Texture) { uniformValue[i].__slot = -1; @@ -12388,6 +12349,7 @@ var Material = Base.extend(function () { var symbol = this._enabledUniforms[u]; var uniform = this.uniforms[symbol]; var uniformValue = uniform.value; + var uniformType = uniform.type; // PENDING // When binding two materials with the same shader // Many uniforms will be be set twice even if they have the same value @@ -12412,7 +12374,7 @@ var Material = Base.extend(function () { } continue; } - else if (uniformValue instanceof Texture) { + else if (uniformType === 't') { if (uniformValue.__slot < 0) { var slot = program.currentTextureSlot(); var res = program.setUniform(_gl, '1i', symbol, slot); @@ -12432,9 +12394,7 @@ var Material = Base.extend(function () { continue; } // Texture Array - var exampleValue = uniformValue[0]; - - if (exampleValue instanceof Texture) { + if (uniformType === 'tv') { if (!program.hasUniform(symbol)) { continue; } @@ -12895,6 +12855,8 @@ function checkShaderErrorMsg(_gl, shader, shaderString) { } } +var tmpFloat32Array16 = new vendor.Float32Array(16); + var GLProgram = Base.extend({ uniformSemantics: {}, @@ -12957,9 +12919,16 @@ var GLProgram = Base.extend({ if (location === null || location === undefined) { return false; } + switch (type) { case 'm4': - // The matrix must be created by glmatrix and can pass it directly. + if (!(value instanceof Float32Array)) { + // Use Float32Array is much faster than array when uniformMatrix4fv. + for (var i = 0; i < value.length; i++) { + tmpFloat32Array16[i] = value[i]; + } + value = tmpFloat32Array16; + } _gl.uniformMatrix4fv(location, false, value); break; case '2i': @@ -13020,7 +12989,7 @@ var GLProgram = Base.extend({ break; case 'm4v': // Raw value - if (Array.isArray(value)) { + if (Array.isArray(value) && Array.isArray(value[0])) { var array = new vendor.Float32Array(value.length * 16); var cursor = 0; for (var i = 0; i < value.length; i++) { @@ -13031,7 +13000,7 @@ var GLProgram = Base.extend({ } _gl.uniformMatrix4fv(location, false, array); } - else if (value instanceof vendor.Float32Array) { // ArrayBufferView + else { // ArrayBufferView _gl.uniformMatrix4fv(location, false, value); } break; @@ -13923,7 +13892,6 @@ var prezGlsl = "@export clay.prez.vertex\nuniform mat4 worldViewProjection : WOR // TODO Resources like shader, texture, geometry reference management // Trace and find out which shader, texture, geometry can be destroyed -// Light header Shader['import'](lightEssl); Shader['import'](prezGlsl); @@ -16381,10 +16349,6 @@ var Node = Base.extend( })() }); -/** - * @constructor clay.Light - * @extends clay.Node - */ var Light = Node.extend(function(){ return /** @lends clay.Light# */ { /** @@ -17325,10 +17289,8 @@ var Scene = Node.extend(function () { }, /** @lends clay.Scene.prototype. */ { - /** - * Add node to scene - * @param {Node} node - */ + + // Add node to scene addToScene: function (node) { if (node instanceof Camera) { if (this._cameraList.length > 0) { @@ -17341,10 +17303,7 @@ var Scene = Node.extend(function () { } }, - /** - * Remove node from scene - * @param {Node} node - */ + // Remove node from scene removeFromScene: function (node) { if (node instanceof Camera) { var idx = this._cameraList.indexOf(node); @@ -18727,13 +18686,6 @@ Geometry.IndicesBuffer = IndicesBuffer; Geometry.Attribute = Attribute; -/** - * @constructor clay.geometry.Plane - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.widthSegments] - * @param {number} [opt.heightSegments] - */ var Plane$3 = Geometry.extend( /** @lends clay.geometry.Plane# */ { @@ -18925,18 +18877,6 @@ function createPlane(pos, widthSegments, heightSegments) { return plane; } -/** - * @constructor clay.geometry.Sphere - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [widthSegments] - * @param {number} [heightSegments] - * @param {number} [phiStart] - * @param {number} [phiLength] - * @param {number} [thetaStart] - * @param {number} [thetaLength] - * @param {number} [radius] - */ var Sphere$1 = Geometry.extend( /** @lends clay.geometry.Sphere# */ { @@ -19062,17 +19002,6 @@ var Sphere$1 = Geometry.extend( } }); -/** - * @constructor clay.geometry.ParametricSurface - * @extends clay.Geometry - * @param {Object} [opt] - * @param {Object} [generator] - * @param {Function} generator.x - * @param {Function} generator.y - * @param {Function} generator.z - * @param {Array} [generator.u=[0, 1, 0.05]] - * @param {Array} [generator.v=[0, 1, 0.05]] - */ var ParametricSurface$1 = Geometry.extend( /** @lends clay.geometry.ParametricSurface# */ { @@ -19229,6 +19158,9 @@ var Texture2D = Texture.extend(function () { mipmaps: [] }; }, { + + textureType: 'texture2D', + update: function (renderer) { var _gl = renderer.gl; @@ -19488,6 +19420,9 @@ var TextureCube = Texture.extend(function () { mipmaps: [] }; }, { + + textureType: 'textureCube', + update: function (renderer) { var _gl = renderer.gl; _gl.bindTexture(_gl.TEXTURE_CUBE_MAP, this._cache.get('webgl_texture')); @@ -19746,7 +19681,6 @@ var library = { } }; -// Cache var prevDrawID = 0; var prevDrawIndicesBuffer = null; var prevDrawIsUseIndices = true; @@ -20187,10 +20121,6 @@ Renderable.CCW = glenum.CCW; Renderable.RenderInfo = RenderInfo; -/** - * @constructor clay.Mesh - * @extends clay.Renderable - */ var Mesh = Renderable.extend( /** @lends clay.Mesh# */ { @@ -20294,15 +20224,11 @@ Mesh.FRONT_AND_BACK = glenum.FRONT_AND_BACK; Mesh.CW = glenum.CW; Mesh.CCW = glenum.CCW; -/** - * @constructor clay.camera.Perspective - * @extends clay.Camera - */ var Perspective$1 = Camera.extend( /** @lends clay.camera.Perspective# */ { /** - * Vertical field of view in radians + * Vertical field of view in degrees * @type {number} */ fov: 50, @@ -20351,10 +20277,6 @@ var Perspective$1 = Camera.extend( } }); -/** - * @constructor clay.camera.Orthographic - * @extends clay.Camera - */ var Orthographic$1 = Camera.extend( /** @lends clay.camera.Orthographic# */ { @@ -20458,7 +20380,6 @@ var request = { var standardEssl = "\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\nattribute vec3 barycentric;\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\nuniform mat4 viewInverse : VIEWINVERSE;\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\nvarying vec2 v_Texcoord2;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\nvarying vec3 v_Barycentric;\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = 1.0 - roughness;\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /( b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= diffuseTerm;\n outColor.rgb += specularTerm;\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 51.5);\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n #endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; -// Import standard shader Shader['import'](standardEssl); var TEXTURE_PROPERTIES = ['diffuseMap', 'normalMap', 'roughnessMap', 'metalnessMap', 'emissiveMap', 'environmentMap', 'brdfLookup', 'ssaoMap', 'aoMap']; @@ -20741,10 +20662,6 @@ Object.defineProperty(StandardMaterial.prototype, 'environmentBox', { } }); -/** - * @constructor clay.Joint - * @extends clay.core.Base - */ var Joint = Base.extend( /** @lends clay.Joint# */ { @@ -21132,7 +21049,6 @@ library.template('clay.standard', Shader.source('clay.standard.vertex'), Shader. library.template('clay.standardMR', Shader.source('clay.standardMR.vertex'), Shader.source('clay.standardMR.fragment')); -// Some build in shaders Shader['import'](coloradjustEssl); Shader['import'](blurEssl); Shader['import'](lumEssl); @@ -21156,7 +21072,6 @@ Shader['import'](fxaa3Essl); * * TODO Morph targets */ -// Import builtin shader var semanticAttributeMap = { 'NORMAL': 'normal', 'POSITION': 'position', @@ -21164,7 +21079,7 @@ var semanticAttributeMap = { 'TEXCOORD_1': 'texcoord1', 'WEIGHTS_0': 'weight', 'JOINTS_0': 'joint', - 'COLOR': 'color' + 'COLOR_0': 'color' }; var ARRAY_CTOR_MAP = { @@ -21863,6 +21778,8 @@ function () { material.define('fragment', 'ROUGHNESS_CHANNEL', 1); material.define('fragment', 'METALNESS_CHANNEL', 2); + material.define('fragment', 'DIFFUSEMAP_ALPHA_ALPHA'); + if (alphaTest) { material.define('fragment', 'ALPHA_TEST'); } @@ -21940,6 +21857,7 @@ function () { }); material.define('fragment', 'GLOSSINESS_CHANNEL', 3); + material.define('fragment', 'DIFFUSEMAP_ALPHA_ALPHA'); if (alphaTest) { material.define('fragment', 'ALPHA_TEST'); @@ -22017,9 +21935,21 @@ function () { } geometry.attributes[attributeName].value = weightArray; } + else if (semantic === 'COLOR_0' && size === 3) { + var colorArray = new attributeArray.constructor(attributeInfo.count * 4); + for (var i = 0; i < attributeInfo.count; i++) { + var i4 = i * 4, i3 = i * 3; + colorArray[i4] = attributeArray[i3]; + colorArray[i4 + 1] = attributeArray[i3 + 1]; + colorArray[i4 + 2] = attributeArray[i3 + 2]; + colorArray[i4 + 3] = 1; + } + geometry.attributes[attributeName].value = colorArray; + } else { geometry.attributes[attributeName].value = attributeArray; } + var attributeType = 'float'; if (attributeArray instanceof vendor.Uint16Array) { attributeType = 'ushort'; @@ -22086,6 +22016,9 @@ function () { mesh.geometry.generateTangents(); } } + if (mesh.geometry.attributes.color.value) { + mesh.material.define('VERTEX_COLOR'); + } mesh.name = GLTFLoader.generateMeshName(json.meshes, idx, pp); @@ -22285,19 +22218,6 @@ GLTFLoader.generateMeshName = function (meshes, idx, primitiveIdx) { return primitiveIdx === 0 ? meshName : (meshName + '$' + primitiveIdx); }; -/** - * @constructor clay.light.Directional - * @extends clay.Light - * - * @example - * var light = new clay.light.Directional({ - * intensity: 0.5, - * color: [1.0, 0.0, 0.0] - * }); - * light.position.set(10, 10, 10); - * light.lookAt(clay.math.Vector3.ZERO); - * scene.add(light); - */ var DirectionalLight = Light.extend( /** @lends clay.light.Directional# */ { @@ -22355,10 +22275,6 @@ var DirectionalLight = Light.extend( } }); -/** - * @constructor clay.light.Point - * @extends clay.Light - */ var PointLight = Light.extend( /** @lends clay.light.Point# */ { @@ -22408,10 +22324,6 @@ var PointLight = Light.extend( } }); -/** - * @constructor clay.light.Spot - * @extends clay.Light - */ var SpotLight = Light.extend( /**@lends clay.light.Spot */ { @@ -22507,10 +22419,6 @@ var SpotLight = Light.extend( } }); -/** - * @constructor clay.light.Ambient - * @extends clay.Light - */ var AmbientLight = Light.extend({ castShadow: false @@ -22716,7 +22624,7 @@ var FrameBuffer = Base.extend( // FIXME some texture format can't generate mipmap if (!texture.NPOT && texture.useMipmap && texture.minFilter === Texture.LINEAR_MIPMAP_LINEAR) { - var target = texture instanceof TextureCube ? glenum.TEXTURE_CUBE_MAP : glenum.TEXTURE_2D; + var target = texture.textureType === 'textureCube' ? glenum.TEXTURE_CUBE_MAP : glenum.TEXTURE_2D; _gl.bindTexture(target, texture.getWebGLTexture(renderer)); _gl.generateMipmap(target); _gl.bindTexture(target, null); @@ -23473,8 +23381,6 @@ var Skydome = Mesh.extend(function () { } }); -// http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx -// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js var DDS_MAGIC = 0x20534444; var DDSD_MIPMAPCOUNT = 0x20000; @@ -23759,9 +23665,6 @@ var ret$1 = { } }; -/** - * @alias clay.util.texture - */ var textureUtil = { /** * @param {string|object} path @@ -24130,7 +24033,7 @@ cubemapUtil.prefilterEnvironmentMap = function ( var dummyScene = new Scene(); var skyEnv; - if (envMap instanceof Texture2D) { + if (envMap.textureType === 'texture2D') { // Convert panorama to cubemap var envCubemap = new TextureCube({ width: width, @@ -24317,12 +24220,6 @@ cubemapUtil.generateNormalDistribution = function (roughnessLevels, sampleSize) }; // https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/AmbientCubemap/ -/** - * Ambient cubemap light provides specular parts of Image Based Lighting. - * Which is a basic requirement for Physically Based Rendering - * @constructor clay.light.AmbientCubemap - * @extends clay.Light - */ var AmbientCubemapLight = Light.extend({ /** @@ -24403,11 +24300,6 @@ var AmbientCubemapLight = Light.extend({ */ }); -/** - * Spherical Harmonic Ambient Light - * @constructor clay.light.AmbientSH - * @extends clay.Light - */ var AmbientSHLight = Light.extend({ castShadow: false, @@ -24794,7 +24686,7 @@ var ShadowMapPass = Base.extend(function () { // Create textures for shadow map for (var i = 0; i < this._lightsCastShadow.length; i++) { var light = this._lightsCastShadow[i]; - if (light instanceof DirectionalLight) { + if (light.type === 'DIRECTIONAL_LIGHT') { if (dirLightHasCascade) { console.warn('Only one direectional light supported with shadow cascade'); @@ -24819,7 +24711,7 @@ var ShadowMapPass = Base.extend(function () { directionalLightShadowMaps ); } - else if (light instanceof SpotLight) { + else if (light.type === 'SPOT_LIGHT') { this.renderSpotLightShadow( renderer, scene, @@ -24829,7 +24721,7 @@ var ShadowMapPass = Base.extend(function () { spotLightShadowMaps ); } - else if (light instanceof PointLight) { + else if (light.type === 'POINT_LIGHT') { this.renderPointLightShadow( renderer, scene, @@ -25739,15 +25631,6 @@ var Cone$1 = Geometry.extend( } }); -/** - * @constructor clay.geometry.Cylinder - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.radius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cylinder$1 = Geometry.extend( /** @lends clay.geometry.Cylinder# */ { @@ -25945,8 +25828,8 @@ function getBeforeRenderHook2(gl, defaultDiffuseMap, defaultMetalnessMap) { gBufferMat.set('useMetalnessMap', +useMetalnessMap); gBufferMat.set('uvRepeat', uvRepeat); gBufferMat.set('uvOffset', uvOffset); - - gBufferMat.set('linear', +standardMaterial.linear); + // TODO + gBufferMat.set('linear', +standardMaterial.linear || 0); } else { program.setUniform(gl, '1f', 'metalness', metalness); @@ -25962,7 +25845,7 @@ function getBeforeRenderHook2(gl, defaultDiffuseMap, defaultMetalnessMap) { program.setUniform(gl, '2f', 'uvRepeat', uvRepeat); program.setUniform(gl, '2f', 'uvOffset', uvOffset); - program.setUniform(gl, '1i', 'linear', +standardMaterial.linear); + program.setUniform(gl, '1i', 'linear', +standardMaterial.linear || 0); } previousDiffuseMap = diffuseMap; @@ -26328,7 +26211,6 @@ var tubeGlsl = "@export clay.deferred.tube_light\n@import clay.deferred.chunk.li // Light-pre pass deferred rendering // http://www.realtimerendering.com/blog/deferred-lighting-approaches/ -// Light shaders Shader.import(prezGlsl); Shader.import(utilGlsl); Shader.import(lightvolumeGlsl); @@ -26983,6 +26865,7 @@ var sh = {}; var targets$3 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; +// Project on gpu, but needs browser to support readPixels as Float32Array. function harmonics(normal, index){ var x = normal[0]; var y = normal[1]; @@ -27095,7 +26978,7 @@ sh.projectEnvironmentMap = function (renderer, envMap, opts) { var skybox; var dummyScene = new Scene(); var size = 64; - if (envMap instanceof Texture2D) { + if (envMap.textureType === 'texture2D') { skybox = new Skydome({ scene: dummyScene, environmentMap: envMap @@ -27542,15 +27425,16 @@ function collectResources(scene, textureResourceList, geometryResourceList) { for (var u = 0; u < textureUniforms.length; u++) { var uniformName = textureUniforms[u]; var val = material.uniforms[uniformName].value; + var uniformType = material.uniforms[uniformName].type; if (!val) { continue; } - if (val instanceof Texture) { + if (uniformType === 't' && val) { updateUsed(val, textureResourceList); } - else if (val instanceof Array) { + else if (uniformType === 'tv') { for (var k = 0; k < val.length; k++) { - if (val[k] instanceof Texture) { + if (val[k]) { updateUsed(val[k], textureResourceList); } } @@ -28158,7 +28042,7 @@ App3D.prototype.createAmbientCubemapLight = function (envImage, specIntensity, d var scene = this.scene; var loadPromise; - if (envImage instanceof TextureCube) { + if (envImage.textureType === 'textureCube') { loadPromise = envImage.isRenderable() ? Promise.resolve(envImage) : new Promise(function (resolve, reject) { @@ -28319,11 +28203,6 @@ var application = { } }; -/** - * @constructor - * @alias clay.async.Task - * @mixes clay.core.mixin.notifier - */ var Task = function() { this._fullfilled = false; this._rejected = false; @@ -28432,11 +28311,6 @@ Task.makeTask = function() { util$1.extend(Task.prototype, notifier); -/** - * @constructor - * @alias clay.async.TaskGroup - * @extends clay.async.Task - */ var TaskGroup = function () { Task.apply(this, arguments); @@ -29140,16 +29014,6 @@ var CanvasRenderer = Base.extend({ } }); -// PENDING -// Use topological sort ? - -/** - * Node of graph based post processing. - * - * @constructor clay.compositor.Node - * @extends clay.core.Base - * - */ var Node$1 = Base.extend(function () { return /** @lends clay.compositor.Node# */ { /** @@ -29383,10 +29247,6 @@ var Node$1 = Base.extend(function () { } }); -/** - * @constructor clay.compositor.Graph - * @extends clay.core.Base - */ var Graph = Base.extend(function () { return /** @lends clay.compositor.Graph# */ { /** @@ -29519,13 +29379,6 @@ var Graph = Base.extend(function () { } }); -/** - * Compositor provide graph based post processing - * - * @constructor clay.compositor.Compositor - * @extends clay.compositor.Graph - * - */ var Compositor = Graph.extend(function() { return { // Output node @@ -29600,10 +29453,6 @@ var Compositor = Graph.extend(function() { } }); -/** - * @constructor clay.compositor.SceneNode - * @extends clay.compositor.Node - */ var SceneNode$1 = Node$1.extend( /** @lends clay.compositor.SceneNode# */ { @@ -29690,10 +29539,6 @@ var SceneNode$1 = Node$1.extend( } }); -/** - * @constructor clay.compositor.TextureNode - * @extends clay.compositor.Node - */ var TextureNode$1 = Node$1.extend(function() { return /** @lends clay.compositor.TextureNode# */ { /** @@ -29719,45 +29564,6 @@ var TextureNode$1 = Node$1.extend(function() { }); // TODO Shader library -// TODO curlnoise demo wrong - -// PENDING -// Use topological sort ? - -/** - * Filter node - * - * @constructor clay.compositor.FilterNode - * @extends clay.compositor.Node - * - * @example - var node = new clay.compositor.Node({ - name: 'fxaa', - shader: clay.Shader.source('clay.compositor.fxaa'), - inputs: { - texture: { - node: 'scene', - pin: 'color' - } - }, - // Multiple outputs is preserved for MRT support in WebGL2.0 - outputs: { - color: { - attachment: clay.FrameBuffer.COLOR_ATTACHMENT0 - parameters: { - format: clay.Texture.RGBA, - width: 512, - height: 512 - }, - // Node will keep the RTT rendered in last frame - keepLastFrame: true, - // Force the node output the RTT rendered in last frame - outputLastFrame: true - } - } - }); - * - */ var FilterNode$1 = Node$1.extend(function () { return /** @lends clay.compositor.Node# */ { /** @@ -30291,10 +30097,6 @@ function tryConvertExpr(string) { } } -/** - * @constructor clay.light.Sphere - * @extends {clay.Light} - */ var SphereLight = Light.extend( /** @lends clay.light.Sphere# */ { @@ -30341,10 +30143,6 @@ var SphereLight = Light.extend( } }); -/** - * @constructor clay.light.Tube - * @extends {clay.Light} - */ var TubeLight = Light.extend( /** @lends clay.light.Tube# */ { @@ -30399,10 +30197,6 @@ var TubeLight = Light.extend( } }); -/** - * @constructor clay.loader.FX - * @extends clay.core.Base - */ var FXLoader = Base.extend( /** @lends clay.loader.FX# */ { @@ -31410,11 +31204,6 @@ Matrix3.translate = function (out, a, v) { return out; }; -/** - * Random or constant 1d, 2d, 3d vector generator - * @constructor - * @alias clay.math.Value - */ var Value = function() {}; /** @@ -32334,10 +32123,6 @@ Particle.prototype.update = function(deltaTime) { } }; -/** - * @constructor clay.particle.Emitter - * @extends clay.core.Base - */ var Emitter = Base.extend( /** @lends clay.particle.Emitter# */ { @@ -32487,10 +32272,6 @@ Emitter.random2D = Value.random2D; */ Emitter.random3D = Value.random3D; -/** - * @constructor clay.particle.Field - * @extends clay.core.Base - */ var Field = Base.extend({}, { /** * Apply a field to the particle and update the particle velocity @@ -32992,19 +32773,6 @@ function unpackID(r, g, b){ return (r << 16) + (g<<8) + b; } -/** - * @constructor clay.plugin.FreeControl - * @example - * var control = new clay.plugin.FreeControl({ - * target: camera, - * domElement: renderer.canvas - * }); - * ... - * animation.on('frame', function(frameTime) { - * control.update(frameTime); - * renderer.render(scene, camera); - * }); - */ var FreeControl = Base.extend(function() { return /** @lends clay.plugin.FreeControl# */ { /** @@ -34176,10 +33944,6 @@ Object.defineProperty(OrbitControl.prototype, 'target', { /** * StaticGeometry can not be changed once they've been setup */ -/** - * @constructor clay.StaticGeometry - * @extends clay.Geometry - */ var StaticGeometry = Geometry.extend({ dynamic: false }); @@ -34611,18 +34375,18 @@ var transferableUtil = { options.boundingBox = new BoundingBox(min, max); } + const geometry = new Geometry(options); + //attributes - var attributes = {}; for (var p in object.attributes) { if (object.attributes.hasOwnProperty(p)) { var attr = object.attributes[p]; - attributes[p] = new Geometry.Attribute(attr.name, attr.type, attr.size, attr.semantic); - attributes[p].value = attr.value; + geometry.attributes[p] = new Geometry.Attribute(attr.name, attr.type, attr.size, attr.semantic); + geometry.attributes[p].value = attr.value; } } - options.attributes = attributes; - return new Geometry(options); + return geometry; } }; @@ -34648,7 +34412,7 @@ function copyIfNecessary(arr, shallow) { /** * @name clay.version */ -var version = '1.0.0'; +var version = '1.0.1'; var outputEssl$1 = "@export clay.vr.disorter.output.vertex\nattribute vec2 texcoord: TEXCOORD_0;\nattribute vec3 position: POSITION;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n v_Texcoord = texcoord;\n gl_Position = vec4(position.xy, 0.5, 1.0);\n}\n@end\n@export clay.vr.disorter.output.fragment\nuniform sampler2D texture;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n gl_FragColor = texture2D(texture, v_Texcoord);\n}\n@end"; @@ -35150,3 +34914,4 @@ exports.vr = vr; Object.defineProperty(exports, '__esModule', { value: true }); }))); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZGVwL2dsbWF0cml4LmpzIiwiLi4vc3JjL21hdGgvVmVjdG9yMi5qcyIsIi4uL3NyYy9hbmltYXRpb24vQmxlbmQyRENsaXAuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYW5zZm9ybVRyYWNrLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVHJhY2tDbGlwLmpzIiwiLi4vc3JjL2NvcmUvR0xJbmZvLmpzIiwiLi4vc3JjL2NvcmUvZ2xlbnVtLmpzIiwiLi4vc3JjL2NvcmUvdmVuZG9yLmpzIiwiLi4vc3JjL21hdGgvVmVjdG9yMy5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9jb3JlL0NhY2hlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvY29yZS9MaW5rZWRMaXN0LmpzIiwiLi4vc3JjL2NvcmUvTFJVLmpzIiwiLi4vc3JjL2NvcmUvY29sb3IuanMiLCIuLi9zcmMvTWF0ZXJpYWwuanMiLCIuLi9zcmMvZ3B1L0dMUHJvZ3JhbS5qcyIsIi4uL3NyYy9ncHUvUHJvZ3JhbU1hbmFnZXIuanMiLCIuLi9zcmMvU2hhZGVyLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvaGVhZGVyL2NhbGNBbWJpZW50U0hMaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvaGVhZGVyL2xpZ2h0LmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvcHJlei5nbHNsLmpzIiwiLi4vc3JjL1JlbmRlcmVyLmpzIiwiLi4vc3JjL21hdGgvUXVhdGVybmlvbi5qcyIsIi4uL3NyYy9Ob2RlLmpzIiwiLi4vc3JjL0xpZ2h0LmpzIiwiLi4vc3JjL21hdGgvUGxhbmUuanMiLCIuLi9zcmMvbWF0aC9GcnVzdHVtLmpzIiwiLi4vc3JjL21hdGgvUmF5LmpzIiwiLi4vc3JjL0NhbWVyYS5qcyIsIi4uL3NyYy9TY2VuZS5qcyIsIi4uL3NyYy9HZW9tZXRyeS5qcyIsIi4uL3NyYy9nZW9tZXRyeS9QbGFuZS5qcyIsIi4uL3NyYy9nZW9tZXRyeS9DdWJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1NwaGVyZS5qcyIsIi4uL3NyYy9nZW9tZXRyeS9QYXJhbWV0cmljU3VyZmFjZS5qcyIsIi4uL3NyYy9tYXRoL3V0aWwuanMiLCIuLi9zcmMvVGV4dHVyZTJELmpzIiwiLi4vc3JjL1RleHR1cmVDdWJlLmpzIiwiLi4vc3JjL3NoYWRlci9saWJyYXJ5LmpzIiwiLi4vc3JjL1JlbmRlcmFibGUuanMiLCIuLi9zcmMvTWVzaC5qcyIsIi4uL3NyYy9jYW1lcmEvUGVyc3BlY3RpdmUuanMiLCIuLi9zcmMvY2FtZXJhL09ydGhvZ3JhcGhpYy5qcyIsIi4uL3NyYy9jb3JlL3JlcXVlc3QuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvY29sb3JhZGp1c3QuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmx1ci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdW0uZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvbHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZpZ25ldHRlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9icmlnaHQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZG93bnNhbXBsZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci91cHNhbXBsZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9oZHIuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZG9mLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2xlbnNmbGFyZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibGVuZC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9meGFhLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2Z4YWEzLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL2J1aWx0aW4uanMiLCIuLi9zcmMvbG9hZGVyL0dMVEYuanMiLCIuLi9zcmMvbGlnaHQvRGlyZWN0aW9uYWwuanMiLCIuLi9zcmMvbGlnaHQvUG9pbnQuanMiLCIuLi9zcmMvbGlnaHQvU3BvdC5qcyIsIi4uL3NyYy9saWdodC9BbWJpZW50LmpzIiwiLi4vc3JjL0ZyYW1lQnVmZmVyLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci92ZXJ0ZXguZ2xzbC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL1Bhc3MuanMiLCIuLi9zcmMvcGx1Z2luL1NreWJveC5qcyIsIi4uL3NyYy9wcmVQYXNzL0Vudmlyb25tZW50TWFwLmpzIiwiLi4vc3JjL3BsdWdpbi9Ta3lkb21lLmpzIiwiLi4vc3JjL3V0aWwvZGRzLmpzIiwiLi4vc3JjL3V0aWwvaGRyLmpzIiwiLi4vc3JjL3V0aWwvdGV4dHVyZS5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9pbnRlZ3JhdGVCUkRGLmdsc2wuanMiLCIuLi9zcmMvdXRpbC9zaGFkZXIvcHJlZmlsdGVyLmdsc2wuanMiLCIuLi9zcmMvdXRpbC9jdWJlbWFwLmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnRDdWJlbWFwLmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnRTSC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL1RleHR1cmVQb29sLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvc2hhZG93bWFwLmdsc2wuanMiLCIuLi9zcmMvcHJlUGFzcy9TaGFkb3dNYXAuanMiLCIuLi9zcmMvcGlja2luZy9SYXlQaWNraW5nLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9nYnVmZmVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9jaHVuay5nbHNsLmpzIiwiLi4vc3JjL2RlZmVycmVkL0dCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy91dGlsL3NoLmpzIiwiLi4vc3JjL2FwcGxpY2F0aW9uLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2suanMiLCIuLi9zcmMvYXN5bmMvVGFza0dyb3VwLmpzIiwiLi4vc3JjL2NhbnZhcy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9jYW52YXMvUmVuZGVyZXIuanMiLCIuLi9zcmMvY29tcG9zaXRvci9Ob2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvY3JlYXRlQ29tcG9zaXRvci5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HZXN0dXJlTWdyLmpzIiwiLi4vc3JjL3BsdWdpbi9JbmZpbml0ZVBsYW5lLmpzIiwiLi4vc3JjL3BsdWdpbi9PcmJpdENvbnRyb2wuanMiLCIuLi9zcmMvU3RhdGljR2VvbWV0cnkuanMiLCIuLi9zcmMvdXRpbC9tZXNoLmpzIiwiLi4vc3JjL3V0aWwvdHJhbnNmZXJhYmxlLmpzIiwiLi4vc3JjL3ZlcnNpb24uanMiLCIuLi9zcmMvdnIvb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvdnIvQ2FyZGJvYXJkRGlzdG9ydGVyLmpzIiwiLi4vc3JjL3ZyL1N0ZXJlb0NhbWVyYS5qcyIsIi4uL3NyYy9jbGF5Z2wuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8g57yT5Yqo5Ye95pWw5p2l6IeqIGh0dHBzOi8vZ2l0aHViLmNvbS9zb2xlL3R3ZWVuLmpzL2Jsb2IvbWFzdGVyL3NyYy9Ud2Vlbi5qc1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgY2xheS5hbmltYXRpb24uZWFzaW5nXG4gKi9cbnZhciBlYXNpbmcgPSB7XG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBsaW5lYXI6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGs7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY0luXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgKiBrO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNPdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBxdWFkcmF0aWNPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1YWRyYXRpY0luT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoLS1rICogKGsgLSAyKSAtIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jdWJpY0luXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gayAqIGsgKiBrO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jdWJpY091dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGN1YmljT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBjdWJpY0luT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiBrICsgMik7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YXJ0aWNJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogaztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY091dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1YXJ0aWNPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgcXVhcnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtIDAuNSAqICgoayAtPSAyKSAqIGsgKiBrICogayAtIDIpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWludGljSW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgKiBrICogayAqIGsgKiBrO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWludGljT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgcXVpbnRpY091dDogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHF1aW50aWNJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiBrICogayAqIGsgKyAyKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuc2ludXNvaWRhbEluXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHJldHVybiAxIC0gTWF0aC5jb3MoayAqIE1hdGguUEkgLyAyKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuc2ludXNvaWRhbE91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNpbnVzb2lkYWxPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNpbnVzb2lkYWxJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gMC41ICogKDEgLSBNYXRoLmNvcyhNYXRoLlBJICogaykpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5leHBvbmVudGlhbEluXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gayA9PT0gMCA/IDAgOiBNYXRoLnBvdygxMDI0LCBrIC0gMSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmV4cG9uZW50aWFsT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZXhwb25lbnRpYWxPdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGV4cG9uZW50aWFsSW5PdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwLjUgKiAoLSBNYXRoLnBvdygyLCAtIDEwICogKGsgLSAxKSkgKyAyKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY2lyY3VsYXJJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLnNxcnQoMSAtIGsgKiBrKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY2lyY3VsYXJPdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBjaXJjdWxhck91dDogZnVuY3Rpb24oaykge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgY2lyY3VsYXJJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gKGsgLT0gMikgKiBrKSArIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5lbGFzdGljSW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XG4gICAgICAgIGlmIChrID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoayA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0gKGEgKiBNYXRoLnBvdygyLCAxMCAqIChrIC09IDEpKSAqXG4gICAgICAgICAgICAgICAgICAgIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5lbGFzdGljT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcbiAgICAgICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhICogTWF0aC5wb3coMiwgLSAxMCAqIGspICpcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGVsYXN0aWNJbk91dDogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcbiAgICAgICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuIC0gMC41ICogKGEgKiBNYXRoLnBvdygyLCAxMCAqIChrIC09IDEpKVxuICAgICAgICAgICAgICAgICogTWF0aC5zaW4oKGsgLSBzKSAqICgyICogTWF0aC5QSSkgLyBwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAoayAtPSAxKSlcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkgKiAwLjUgKyAxO1xuXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJhY2tJbjogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcyA9IDEuNzAxNTg7XG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgYmFja091dDogZnVuY3Rpb24oaykge1xuICAgICAgICB2YXIgcyA9IDEuNzAxNTg7XG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBiYWNrSW5PdXQ6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4ICogMS41MjU7XG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdW5jZUluOiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHJldHVybiAxIC0gZWFzaW5nLmJvdW5jZU91dCgxIC0gayk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZU91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xuICAgICAgICBpZiAoayA8ICgxIC8gMi43NSkpIHtcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiBrICogaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrIDwgKDIgLyAyLjc1KSkge1xuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgxLjUgLyAyLjc1KSkgKiBrICsgMC43NTtcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogKGsgLT0gKDIuMjUgLyAyLjc1KSkgKiBrICsgMC45Mzc1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJbk91dFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdW5jZUluT3V0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIGlmIChrIDwgMC41KSB7XG4gICAgICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZUluKGsgKiAyKSAqIDAuNTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGVhc2luZztcbiIsImltcG9ydCBFYXNpbmcgZnJvbSAnLi9lYXNpbmcnO1xuXG5mdW5jdGlvbiBub29wICgpIHt9XG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLkNsaXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubGlmZV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucGxheWJhY2tSYXRlXVxuICogQHBhcmFtIHtib29sZWFufG51bWJlcn0gW29wdHMubG9vcF0gSWYgbG9vcCBpcyBhIG51bWJlciwgaXQgaW5kaWNhdGUgdGhlIGxvb3AgY291bnQgb2YgYW5pbWF0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9uZmluaXNoXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxuICovXG52YXIgQ2xpcCA9IGZ1bmN0aW9uIChvcHRzKSB7XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0O1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxpZmUgPSBvcHRzLmxpZmUgfHwgMTAwMDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5nYXAgPSBvcHRzLmdhcCB8fCAwO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnBsYXliYWNrUmF0ZSA9IG9wdHMucGxheWJhY2tSYXRlIHx8IDE7XG5cblxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XG5cbiAgICB0aGlzLl9sb29wID0gb3B0cy5sb29wID09IG51bGwgPyBmYWxzZSA6IG9wdHMubG9vcDtcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XG5cbiAgICBpZiAob3B0cy5lYXNpbmcgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHRoaXMub25maW5pc2ggPSBvcHRzLm9uZmluaXNoIHx8IG5vb3A7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgdGhpcy5vbnJlc3RhcnQgPSBvcHRzLm9ucmVzdGFydCB8fCBub29wO1xuXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG59O1xuXG5DbGlwLnByb3RvdHlwZSA9IHtcblxuICAgIGdhcDogMCxcblxuICAgIGxpZmU6IDAsXG5cbiAgICBkZWxheTogMCxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcbiAgICAgKi9cbiAgICBzZXRMb29wOiBmdW5jdGlvbiAobG9vcCkge1xuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcbiAgICAgICAgaWYgKGxvb3ApIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YobG9vcCkgPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gMWU4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcbiAgICAgKi9cbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZihlYXNpbmcpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZWFzaW5nID0gRWFzaW5nW2Vhc2luZ107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmc7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBzdGVwOiBmdW5jdGlvbiAodGltZSwgZGVsdGFUaW1lLCBzaWxlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gdGltZSArIHRoaXMuZGVsYXk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUaW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRlbHRhVGltZSA9IHRpbWUgLSB0aGlzLl9jdXJyZW50VGltZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50VGltZSA9IHRpbWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuICdwYXVzZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9zdGFydFRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBFTkRJR04gU3luYyA/XG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xuXG4gICAgICAgIHZhciBwZXJjZW50ID0gTWF0aC5taW4odGhpcy5fZWxhcHNlZFRpbWUgLyB0aGlzLmxpZmUsIDEpO1xuXG4gICAgICAgIGlmIChwZXJjZW50IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNjaGVkdWxlO1xuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcbiAgICAgICAgICAgIHNjaGVkdWxlID0gdGhpcy5lYXNpbmcocGVyY2VudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzY2hlZHVsZSA9IHBlcmNlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKCdmcmFtZScsIHNjaGVkdWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJjZW50ID09PSAxKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzdGFydEluTG9vcCh0aW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQtLTtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxuICAgICAgICAgICAgICAgIC8vIEluIHRoZSBhbmltYXRpb24udXBkYXRlXG4gICAgICAgICAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmaW5pc2gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB0aW1lXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNldFRpbWU6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXAodGltZSArIHRoaXMuX3N0YXJ0VGltZSk7XG4gICAgfSxcblxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXG4gICAgICAgIC8vIEFsbCBjbGlwcyBtYXkgYmUgZXhwaXJlZCBhbmQgYWxsIHN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZyB2YWx1ZShwb3NpdGlvbilcbiAgICAgICAgLy8gSXQgaXMgY2xlYXJseSB3cm9uZywgc28gd2UgdXNlIHJlbWFpbmRlciB0byBhZGQgYSBvZmZzZXRcblxuICAgICAgICB2YXIgcmVtYWluZGVyID0gMDtcbiAgICAgICAgLy8gUmVtYWluZGVyIGlnbm9yZWQgaWYgcmVzdGFydCBpcyBpbnZva2VkIG1hbnVhbGx5XG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9lbGFwc2UodGltZSk7XG4gICAgICAgICAgICByZW1haW5kZXIgPSB0aGlzLl9lbGFwc2VkVGltZSAlIHRoaXMubGlmZTtcbiAgICAgICAgfVxuICAgICAgICB0aW1lID0gdGltZSB8fCBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XG5cbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgfSxcblxuICAgIGdldEVsYXBzZWRUaW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGFwc2VkVGltZTtcbiAgICB9LFxuXG4gICAgX3Jlc3RhcnRJbkxvb3A6IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSAwO1xuICAgIH0sXG5cbiAgICBfZWxhcHNlOiBmdW5jdGlvbiAodGltZSwgZGVsdGFUaW1lKSB7XG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lICs9IGRlbHRhVGltZSAqIHRoaXMucGxheWJhY2tSYXRlO1xuICAgIH0sXG5cbiAgICBmaXJlOiBmdW5jdGlvbiAoZXZlbnRUeXBlLCBhcmcpIHtcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XG4gICAgICAgIGlmICh0aGlzW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgICAgIHRoaXNbZXZlbnROYW1lXSh0aGlzLnRhcmdldCwgYXJnKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2xpcCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNsaXAubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XG4gICAgICAgIGNsaXAuX2xvb3BSZW1haW5lZCA9IHRoaXMuX2xvb3BSZW1haW5lZDtcblxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XG4gICAgICAgIGNsaXAuZ2FwID0gdGhpcy5nYXA7XG4gICAgICAgIGNsaXAuZGVsYXkgPSB0aGlzLmRlbGF5O1xuXG4gICAgICAgIHJldHVybiBjbGlwO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUGF1c2UgdGhlIGNsaXAuXG4gICAgICovXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVzdW1lIHRoZSBjbGlwLlxuICAgICAqL1xuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB9XG59O1xuQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDbGlwO1xuXG5leHBvcnQgZGVmYXVsdCBDbGlwO1xuIiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XG5cbnZhciBhcnJheVNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5mdW5jdGlvbiBkZWZhdWx0R2V0dGVyKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIHRhcmdldFtrZXldO1xufVxuZnVuY3Rpb24gZGVmYXVsdFNldHRlcih0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZU51bWJlcihwMCwgcDEsIHBlcmNlbnQpIHtcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcbiAgICB2YXIgbGVuID0gcDAubGVuZ3RoO1xuICAgIGlmIChhcnJEaW0gPT0gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBpbnRlcnBvbGF0ZU51bWJlcihwMFtpXSwgcDFbaV0sIHBlcmNlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgbGVuMiA9IHAwWzBdLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICBvdXRbaV1bal0gPSBpbnRlcnBvbGF0ZU51bWJlcihcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoZGF0YSkge1xuICAgIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mKGRhdGEpID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mKGRhdGEubGVuZ3RoKSA9PSAnbnVtYmVyJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZVswXSkpIHtcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaChhcnJheVNsaWNlLmNhbGwodmFsdWVbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxuICAgIHAwLCBwMSwgcDIsIHAzLCB0LCB0MiwgdDMsIG91dCwgYXJyRGltXG4pIHtcbiAgICB2YXIgbGVuID0gcDAubGVuZ3RoO1xuICAgIGlmIChhcnJEaW0gPT0gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBjYXRtdWxsUm9tSW50ZXJwb2xhdGUoXG4gICAgICAgICAgICAgICAgcDBbaV0sIHAxW2ldLCBwMltpXSwgcDNbaV0sIHQsIHQyLCB0M1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwMltpXVtqXSwgcDNbaV1bal0sXG4gICAgICAgICAgICAgICAgICAgIHQsIHQyLCB0M1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XG4gICAgdmFyIHYwID0gKHAyIC0gcDApICogMC41O1xuICAgIHZhciB2MSA9IChwMyAtIHAxKSAqIDAuNTtcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXG4gICAgICAgICAgICArICgtIDMgKiAocDEgLSBwMikgLSAyICogdjAgLSB2MSkgKiB0MlxuICAgICAgICAgICAgKyB2MCAqIHQgKyBwMTtcbn1cblxuLy8gYXJyMCBpcyBzb3VyY2UgYXJyYXksIGFycjEgaXMgdGFyZ2V0IGFycmF5LlxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxuZnVuY3Rpb24gZmlsbEFycihhcnIwLCBhcnIxLCBhcnJEaW0pIHtcbiAgICB2YXIgYXJyMExlbiA9IGFycjAubGVuZ3RoO1xuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XG4gICAgaWYgKGFycjBMZW4gIT09IGFycjFMZW4pIHtcbiAgICAgICAgLy8gRklYTUUgTm90IHdvcmsgZm9yIFR5cGVkQXJyYXlcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcbiAgICAgICAgaWYgKGlzUHJldmlvdXNMYXJnZXIpIHtcbiAgICAgICAgICAgIC8vIEN1dCB0aGUgcHJldmlvdXNcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gYXJyMExlbjsgaSA8IGFycjFMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGFycjAucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSGFuZGxpbmcgTmFOIHZhbHVlXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJyRGltID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcbiAgICAgICAgICAgICAgICBhcnIwW2ldID0gYXJyMVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycjBbaV1bal0gPSBhcnIxW2ldW2pdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBcnJheVNhbWUoYXJyMCwgYXJyMSwgYXJyRGltKSB7XG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcbiAgICBpZiAobGVuICE9PSBhcnIxLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhcnJEaW0gPT09IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XG4gICAgdmFyIGdldHRlciA9IGFuaW1hdG9yLl9nZXR0ZXI7XG4gICAgdmFyIHNldHRlciA9IGFuaW1hdG9yLl9zZXR0ZXI7XG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XG5cbiAgICB2YXIgdHJhY2tMZW4gPSBrZXlmcmFtZXMubGVuZ3RoO1xuICAgIGlmICghdHJhY2tMZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcbiAgICB2YXIgZmlyc3RWYWwgPSBrZXlmcmFtZXNbMF0udmFsdWU7XG4gICAgdmFyIGlzVmFsdWVBcnJheSA9IGlzQXJyYXlMaWtlKGZpcnN0VmFsKTtcblxuICAgIC8vIEZvciB2ZXJ0aWNlcyBtb3JwaGluZ1xuICAgIHZhciBhcnJEaW0gPSAoXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcbiAgICAgICAgICAgICYmIGlzQXJyYXlMaWtlKGZpcnN0VmFsWzBdKVxuICAgICAgICApXG4gICAgICAgID8gMiA6IDE7XG4gICAgLy8gU29ydCBrZXlmcmFtZSBhcyBhc2NlbmRpbmdcbiAgICBrZXlmcmFtZXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XG4gICAgfSk7XG5cbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXG4gICAgdmFyIGtmUGVyY2VudHMgPSBbXTtcbiAgICAvLyBWYWx1ZSBvZiBlYWNoIGtleWZyYW1lXG4gICAgdmFyIGtmVmFsdWVzID0gW107XG4gICAgLy8gRWFzaW5nIGZ1bmNzIG9mIGVhY2gga2V5ZnJhbWUuXG4gICAgdmFyIGtmRWFzaW5ncyA9IFtdO1xuXG4gICAgdmFyIHByZXZWYWx1ZSA9IGtleWZyYW1lc1swXS52YWx1ZTtcbiAgICB2YXIgaXNBbGxWYWx1ZUVxdWFsID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcbiAgICAgICAga2ZQZXJjZW50cy5wdXNoKGtleWZyYW1lc1tpXS50aW1lIC8gbWF4VGltZSk7XG5cbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xuICAgICAgICB2YXIgdmFsdWUgPSBrZXlmcmFtZXNbaV0udmFsdWU7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcbiAgICAgICAgaWYgKCEoKGlzVmFsdWVBcnJheSAmJiBpc0FycmF5U2FtZSh2YWx1ZSwgcHJldlZhbHVlLCBhcnJEaW0pKVxuICAgICAgICAgICAgfHwgKCFpc1ZhbHVlQXJyYXkgJiYgdmFsdWUgPT09IHByZXZWYWx1ZSkpKSB7XG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBrZlZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAga2ZFYXNpbmdzLnB1c2goa2V5ZnJhbWVzW2ldLmVhc2luZyk7XG4gICAgfVxuICAgIGlmIChpc0FsbFZhbHVlRXF1YWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBsYXN0VmFsdWUgPSBrZlZhbHVlc1t0cmFja0xlbiAtIDFdO1xuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBrZlZhbHVlc1tpXSA9IGxhc3RWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1ZhbHVlQXJyYXkgJiYgZmlsbEFycihnZXR0ZXIoYW5pbWF0b3IuX3RhcmdldCwgcHJvcE5hbWUpLCBsYXN0VmFsdWUsIGFyckRpbSk7XG5cbiAgICAvLyBDYWNoZSB0aGUga2V5IG9mIGxhc3QgZnJhbWUgdG8gc3BlZWQgdXAgd2hlblxuICAgIC8vIGFuaW1hdGlvbiBwbGF5YmFjayBpcyBzZXF1ZW5jeVxuICAgIHZhciBjYWNoZUtleSA9IDA7XG4gICAgdmFyIGNhY2hlUGVyY2VudCA9IDA7XG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBpLCB3O1xuICAgIHZhciBwMCwgcDEsIHAyLCBwMztcblxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHJhbmdlIGtleWZyYW1lc1xuICAgICAgICAvLyBrZjEtLS0tLWtmMi0tLS0tLS0tLWN1cnJlbnQtLS0tLS0tLWtmM1xuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxuICAgICAgICBpZiAocGVyY2VudCA8IGNhY2hlUGVyY2VudCkge1xuICAgICAgICAgICAgLy8gU3RhcnQgZnJvbSBuZXh0IGtleVxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XG4gICAgICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA8PSBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPiBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpIC0gMSwgdHJhY2tMZW4gLSAyKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZUtleSA9IGk7XG4gICAgICAgIGNhY2hlUGVyY2VudCA9IHBlcmNlbnQ7XG5cbiAgICAgICAgdmFyIHJhbmdlID0gKGtmUGVyY2VudHNbaSArIDFdIC0ga2ZQZXJjZW50c1tpXSk7XG4gICAgICAgIGlmIChyYW5nZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcbiAgICAgICAgICAgIC8vIENsYW1wIDAgLSAxXG4gICAgICAgICAgICB3ID0gTWF0aC5tYXgoTWF0aC5taW4oMSwgdyksIDApO1xuICAgICAgICB9XG4gICAgICAgIHcgPSBrZkVhc2luZ3NbaSArIDFdKHcpO1xuXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcbiAgICAgICAgICAgIHAxID0ga2ZWYWx1ZXNbaV07XG4gICAgICAgICAgICBwMCA9IGtmVmFsdWVzW2kgPT09IDAgPyBpIDogaSAtIDFdO1xuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xuICAgICAgICAgICAgcDMgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAzID8gdHJhY2tMZW4gLSAxIDogaSArIDJdO1xuICAgICAgICAgICAgaWYgKGludGVycG9sYXRlcikge1xuICAgICAgICAgICAgICAgIHNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcDAsIHAxLCBwMiwgcDMsIHdcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjYXRtdWxsUm9tSW50ZXJwb2xhdGVBcnJheShcbiAgICAgICAgICAgICAgICAgICAgcDAsIHAxLCBwMiwgcDMsIHcsIHcqdywgdyp3KncsXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY2F0bXVsbFJvbUludGVycG9sYXRlKHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGVyKSB7XG4gICAgICAgICAgICAgICAgc2V0dGVyKFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2kgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVmFsdWVBcnJheSkge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLCBrZlZhbHVlc1tpKzFdLCB3LFxuICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRlTnVtYmVyKGtmVmFsdWVzW2ldLCBrZlZhbHVlc1tpKzFdLCB3KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGNsaXAgPSBuZXcgQ2xpcCh7XG4gICAgICAgIHRhcmdldDogYW5pbWF0b3IuX3RhcmdldCxcbiAgICAgICAgbGlmZTogbWF4VGltZSxcbiAgICAgICAgbG9vcDogYW5pbWF0b3IuX2xvb3AsXG4gICAgICAgIGRlbGF5OiBhbmltYXRvci5fZGVsYXksXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXG4gICAgICAgIG9uZmluaXNoOiBvbmVUcmFja0RvbmVcbiAgICB9KTtcblxuICAgIGlmIChnbG9iYWxFYXNpbmcgJiYgZ2xvYmFsRWFzaW5nICE9PSAnc3BsaW5lJykge1xuICAgICAgICBjbGlwLnNldEVhc2luZyhnbG9iYWxFYXNpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGlwO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxuICogQWZ0ZXIgY3JlYXRlZCwgd2UgY2FuIHVzZSB7QGxpbmsgY2xheS5hbmltYXRpb24uQW5pbWF0b3Ijd2hlbn0gdG8gYWRkIGFsbCBrZXlmcmFtZXMgYW5kIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciNzdGFydH0gaXQuXG4gKiBDbGlwcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIGFuaW1hdGlvbiBpbnN0YW5jZSB3aGljaCBjcmVhdGVkIHRoaXMgZGVmZXJyZWQgb2JqZWN0LlxuICpcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmFuaW1hdGlvbi5BbmltYXRvclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9vcFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0dGVyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVycG9sYXRlclxuICovXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcbiAgICB0aGlzLl90cmFja3MgPSB7fTtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG5cbiAgICB0aGlzLl9sb29wID0gbG9vcCB8fCBmYWxzZTtcblxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xuICAgIHRoaXMuX3NldHRlciA9IHNldHRlciB8fCBkZWZhdWx0U2V0dGVyO1xuXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XG5cbiAgICB0aGlzLl9kZWxheSA9IDA7XG5cbiAgICB0aGlzLl9kb25lTGlzdCA9IFtdO1xuXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcblxuICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XG5cbiAgICB0aGlzLl9tYXhUaW1lID0gMDtcblxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xufVxuXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcbiAgICByZXR1cm4gdztcbn1cblxuQW5pbWF0b3IucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyBBIGtleS12YWx1ZSBvYmplY3QuIFZhbHVlIGNhbiBiZSBudW1iZXIsIDFkIGFuZCAyZCBhcnJheVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBbZWFzaW5nXVxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xuXG4gICAgICAgIHRoaXMuX21heFRpbWUgPSBNYXRoLm1heCh0aW1lLCB0aGlzLl9tYXhUaW1lKTtcblxuICAgICAgICBlYXNpbmcgPSAodHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJyA/IGVhc2luZyA6IGVhc2luZ0Z1bmNzW2Vhc2luZ10pIHx8IG5vb3BFYXNpbmc7XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGltZSBpcyAwXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIEVsc2VcbiAgICAgICAgICAgICAgICAvLyAgSW5pdGlhbGl6ZSB2YWx1ZSBmcm9tIGN1cnJlbnQgcHJvcCB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0dGVyKHRoaXMuX3RhcmdldCwgcHJvcE5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcbiAgICAgICAgICAgICAgICB0aW1lOiBwYXJzZUludCh0aW1lKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxuICAgICAgICAgICAgICAgIGVhc2luZzogZWFzaW5nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lIEtleWZyYW1lIGVsYXBzZWQgdGltZSBzaW5jZSBsYXN0IGtleWZyYW1lXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtlYXNpbmddXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxuICAgICAqL1xuICAgIHRoZW46IGZ1bmN0aW9uIChkdXJpbmdUaW1lLCBwcm9wcywgZWFzaW5nKSB7XG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XG4gICAgICAgIHRoaXMuX2xhc3RLRlRpbWUgKz0gZHVyaW5nVGltZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBjYWxsYmFjayB3aGVuIHJ1bm5pbmcgYW5pbWF0aW9uXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBkdXJpbmc6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9vbmZyYW1lTGlzdC5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQ2xlYXIgYWxsIHRyYWNrc1xuICAgICAgICB0aGlzLl90cmFja3MgPSB7fTtcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0Lmxlbmd0aCA9IDA7XG5cbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XG4gICAgICAgIHZhciBsZW4gPSBkb25lTGlzdC5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRoZSBhbmltYXRpb25cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xuXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XG5cbiAgICAgICAgdmFyIG9uZVRyYWNrRG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2xpcENvdW50LS07XG4gICAgICAgICAgICBpZiAoY2xpcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fZG9uZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIGxhc3RDbGlwO1xuICAgICAgICB2YXIgY2xpcE1heFRpbWUgPSAwO1xuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiB0aGlzLl90cmFja3MpIHtcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxuICAgICAgICAgICAgICAgIHRoaXMsIGdsb2JhbEVhc2luZywgb25lVHJhY2tEb25lLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0sIHByb3BOYW1lLCBzZWxmLl9pbnRlcnBvbGF0ZXIsIHNlbGYuX21heFRpbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY2xpcCkge1xuICAgICAgICAgICAgICAgIGNsaXBNYXhUaW1lID0gTWF0aC5tYXgoY2xpcE1heFRpbWUsIGNsaXAubGlmZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcbiAgICAgICAgICAgICAgICBjbGlwQ291bnQrKztcblxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5hZGRDbGlwKGNsaXApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxhc3RDbGlwID0gY2xpcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxuICAgICAgICBpZiAobGFzdENsaXApIHtcbiAgICAgICAgICAgIHZhciBvbGRPbkZyYW1lID0gbGFzdENsaXAub25mcmFtZTtcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgb2xkT25GcmFtZSh0YXJnZXQsIHBlcmNlbnQpO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbmZyYW1lTGlzdFtpXSh0YXJnZXQsIHBlcmNlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fZG9uZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0b3AgdGhlIGFuaW1hdGlvblxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2xpcExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5yZW1vdmVDbGlwKGNsaXApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXG4gICAgICovXG4gICAgZGVsYXk6IGZ1bmN0aW9uICh0aW1lKXtcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGFmdGVyIGFuaW1hdGlvbiBmaW5pc2hlZFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXG4gICAgICovXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcbiAgICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvbmVMaXN0LnB1c2goZnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGNsaXBzIGNyZWF0ZWQgaW4gc3RhcnQgbWV0aG9kLlxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkNsaXBbXX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXG4gICAgICovXG4gICAgZ2V0Q2xpcHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdG9yO1xuIiwiLy8gMUQgQmxlbmQgY2xpcCBvZiBibGVuZCB0cmVlXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcblxuaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcblxudmFyIGNsaXBTb3J0RnVuYyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEucG9zaXRpb24gPCBiLnBvc2l0aW9uO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XG4gKiBAcHJvcGVydHkge251bWJlcn0gcG9zaXRpb25cbiAqIEBwcm9wZXJ0eSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxuICovXG5cbi8qKlxuICogMWQgYmxlbmRpbmcgbm9kZSBpbiBhbmltYXRpb24gYmxlbmQgdHJlZS5cbiAqIG91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQmxlbmQxRENsaXBcbiAqIEBleHRlbmRzIGNsYXkuYW5pbWF0aW9uLkNsaXBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubGlmZV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucGxheWJhY2tSYXRpb11cbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9uZnJhbWVdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cbiAqIEBwYXJhbSB7b2JqZWN0W119IFtvcHRzLmlucHV0c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wb3NpdGlvbl1cbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxuICovXG52YXIgQmxlbmQxRENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XG4gICAgLyoqXG4gICAgICogT3V0cHV0IGNsaXAgbXVzdCBoYXZlIGJsZW5kMUQgYW5kIGNvcHkgbWV0aG9kXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XG4gICAgICovXG4gICAgdGhpcy5vdXRwdXQgPSBvcHRzLm91dHB1dCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0W119XG4gICAgICovXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xuICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSAtSW5maW5pdHk7XG5cbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XG59O1xuXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xuQmxlbmQxRENsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmQxRENsaXA7XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0fVxuICovXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0IHx8IDBcbiAgICB9O1xuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xuXG4gICAgaWYgKCF0aGlzLmlucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLmlucHV0c1swXS5wb3NpdGlvbiA+IHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzLnVuc2hpZnQob2JqKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuaW5wdXRzLnB1c2gob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuaW5wdXRzLnNwbGljZShrZXksIG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKHRpbWUsIGRUaW1lLCBzaWxlbnQpIHtcblxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XG5cbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcbiAgICB9XG5cbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXG4gICAgaWYgKCFzaWxlbnQgJiYgcmV0ICE9PSAncGF1c2VkJykge1xuICAgICAgICB0aGlzLmZpcmUoJ2ZyYW1lJyk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XG4gICAgdmFyIGxlbiA9IGlucHV0cy5sZW5ndGg7XG4gICAgdmFyIG1pbiA9IGlucHV0c1swXS5wb3NpdGlvbjtcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcblxuICAgIGlmIChwb3NpdGlvbiA8PSBtaW4gfHwgcG9zaXRpb24gPj0gbWF4KSB7XG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xuICAgICAgICB2YXIgY2xpcCA9IGluMC5jbGlwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gaW4wLm9mZnNldDtcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XG4gICAgICAgIC8vIElucHV0IGNsaXAgaXMgYSBibGVuZCBjbGlwXG4gICAgICAgIC8vIFBFTkRJTkdcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXQuY29weShjbGlwLm91dHB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xuICAgICAgICB2YXIgaW4xID0gaW5wdXRzW2tleV07XG4gICAgICAgIHZhciBpbjIgPSBpbnB1dHNba2V5ICsgMV07XG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xuICAgICAgICB2YXIgY2xpcDIgPSBpbjIuY2xpcDtcbiAgICAgICAgLy8gU2V0IHRpbWUgb24gaW5wdXQgY2xpcHNcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XG4gICAgICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xuXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XG5cbiAgICAgICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XG4gICAgICAgIHRoaXMub3V0cHV0LmJsZW5kMUQoYzEsIGMyLCB3KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxuICogQHBhcmFtIHtib29sZWFufSBjbG9uZUlucHV0cyBUcnVlIGlmIGNsb25lIHRoZSBpbnB1dCBjbGlwc1xuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQxRENsaXB9XG4gKi9cbkJsZW5kMURDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIChjbG9uZUlucHV0cykge1xuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gY2xpcDtcbn07XG5cbi8vIEZpbmQgdGhlIGtleSB3aGVyZSBwb3NpdGlvbiBpbiByYW5nZSBbaW5wdXRzW2tleV0ucG9zaXRpb24sIGlucHV0c1trZXkrMV0ucG9zaXRpb24pXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcbiAgICB2YXIga2V5ID0gLTE7XG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzO1xuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLl9jYWNoZVBvc2l0aW9uIDwgcG9zaXRpb24pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NhY2hlS2V5OyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzID0gTWF0aC5taW4obGVuLTIsIHRoaXMuX2NhY2hlS2V5KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXRzW2ldLnBvc2l0aW9uICYmIHBvc2l0aW9uIDwgaW5wdXRzW2krMV0ucG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChrZXkgPj0gMCkge1xuICAgICAgICB0aGlzLl9jYWNoZUtleSA9IGtleTtcbiAgICAgICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBrZXk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDFEQ2xpcDsiLCIvLyBEZWxhdW5heSBUcmlhbmd1bGF0aW9uXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxudmFyIEVQU0lMT04gPSAxLjAgLyAxMDQ4NTc2LjA7XG5cbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcbiAgICB2YXIgeG1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB2YXIgeW1pbiA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgeW1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICB2YXIgaSwgZHgsIGR5LCBkbWF4LCB4bWlkLCB5bWlkO1xuXG4gICAgZm9yIChpID0gdmVydGljZXMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPCB4bWluKSB7IHhtaW4gPSB2ZXJ0aWNlc1tpXVswXTsgfVxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxuICAgICAgICBpZiAodmVydGljZXNbaV1bMV0gPCB5bWluKSB7IHltaW4gPSB2ZXJ0aWNlc1tpXVsxXTsgfVxuICAgICAgICBpZiAodmVydGljZXNbaV1bMV0gPiB5bWF4KSB7IHltYXggPSB2ZXJ0aWNlc1tpXVsxXTsgfVxuICAgIH1cblxuICAgIGR4ID0geG1heCAtIHhtaW47XG4gICAgZHkgPSB5bWF4IC0geW1pbjtcbiAgICBkbWF4ID0gTWF0aC5tYXgoZHgsIGR5KTtcbiAgICB4bWlkID0geG1pbiArIGR4ICogMC41O1xuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXG4gICAgICAgIFt4bWlkICAgICAgICAgICAgLCB5bWlkICsgMjAgKiBkbWF4XSxcbiAgICAgICAgW3htaWQgKyAyMCAqIGRtYXgsIHltaWQgLSAgICAgIGRtYXhdXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XG4gICAgdmFyIHgxID0gdmVydGljZXNbaV1bMF0sXG4gICAgICAgICAgICB5MSA9IHZlcnRpY2VzW2ldWzFdLFxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcbiAgICAgICAgICAgIHkyID0gdmVydGljZXNbal1bMV0sXG4gICAgICAgICAgICB4MyA9IHZlcnRpY2VzW2tdWzBdLFxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcbiAgICAgICAgICAgIGZhYnN5MXkyID0gTWF0aC5hYnMoeTEgLSB5MiksXG4gICAgICAgICAgICBmYWJzeTJ5MyA9IE1hdGguYWJzKHkyIC0geTMpLFxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xuXG4gICAgLyogQ2hlY2sgZm9yIGNvaW5jaWRlbnQgcG9pbnRzICovXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZWshIENvaW5jaWRlbnQgcG9pbnRzIScpO1xuICAgIH1cblxuICAgIGlmIChmYWJzeTF5MiA8IEVQU0lMT04pIHtcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcbiAgICAgICAgeGMgID0gKHgyICsgeDEpIC8gMi4wO1xuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XG4gICAgICAgIG0xICA9IC0oKHgyIC0geDEpIC8gKHkyIC0geTEpKTtcbiAgICAgICAgbXgxID0gKHgxICsgeDIpIC8gMi4wO1xuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XG4gICAgICAgIHhjICA9ICh4MyArIHgyKSAvIDIuMDtcbiAgICAgICAgeWMgID0gbTEgKiAoeGMgLSBteDEpICsgbXkxO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcbiAgICAgICAgbXgxID0gKHgxICsgeDIpIC8gMi4wO1xuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XG4gICAgICAgIG15MSA9ICh5MSArIHkyKSAvIDIuMDtcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XG4gICAgICAgIHljICA9IChmYWJzeTF5MiA+IGZhYnN5MnkzKSA/XG4gICAgICAgICAgICBtMSAqICh4YyAtIG14MSkgKyBteTEgOlxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xuICAgIH1cblxuICAgIGR4ID0geDIgLSB4YztcbiAgICBkeSA9IHkyIC0geWM7XG4gICAgcmV0dXJuIHtpOiBpLCBqOiBqLCBrOiBrLCB4OiB4YywgeTogeWMsIHI6IGR4ICogZHggKyBkeSAqIGR5fTtcbn1cblxuZnVuY3Rpb24gZGVkdXAoZWRnZXMpIHtcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcblxuICAgIGZvciAoaiA9IGVkZ2VzLmxlbmd0aDsgajsgKSB7XG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xuICAgICAgICBhID0gZWRnZXNbLS1qXTtcblxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcbiAgICAgICAgICAgIG4gPSBlZGdlc1stLWldO1xuICAgICAgICAgICAgbSA9IGVkZ2VzWy0taV07XG5cbiAgICAgICAgICAgIGlmICgoYSA9PT0gbSAmJiBiID09PSBuKSB8fCAoYSA9PT0gbiAmJiBiID09PSBtKSkge1xuICAgICAgICAgICAgICAgIGVkZ2VzLnNwbGljZShqLCAyKTtcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBkZWxhdW5heSA9IHtcbiAgICB0cmlhbmd1bGF0ZTogZnVuY3Rpb24odmVydGljZXMsIGtleSkge1xuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgdmFyIGksIGosIGluZGljZXMsIHN0LCBvcGVuLCBjbG9zZWQsIGVkZ2VzLCBkeCwgZHksIGEsIGIsIGM7XG5cbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cbiAgICAgICAgaWYgKG4gPCAzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICAvKiBTbGljZSBvdXQgdGhlIGFjdHVhbCB2ZXJ0aWNlcyBmcm9tIHRoZSBwYXNzZWQgb2JqZWN0cy4gKER1cGxpY2F0ZSB0aGVcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXG4gICAgICAgICAgICAqIGxhdGVyIG9uISkgKi9cbiAgICAgICAgdmVydGljZXMgPSB2ZXJ0aWNlcy5zbGljZSgwKTtcblxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBmb3IgKGkgPSBuOyBpLS07ICkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIE1ha2UgYW4gYXJyYXkgb2YgaW5kaWNlcyBpbnRvIHRoZSB2ZXJ0ZXggYXJyYXksIHNvcnRlZCBieSB0aGVcbiAgICAgICAgICAgICogdmVydGljZXMnIHgtcG9zaXRpb24uIEZvcmNlIHN0YWJsZSBzb3J0aW5nIGJ5IGNvbXBhcmluZyBpbmRpY2VzIGlmXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXG4gICAgICAgIGluZGljZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kaWNlcy5zb3J0KGZ1bmN0aW9uKGksIGopIHtcbiAgICAgICAgICAgIHZhciBkaWZmID0gdmVydGljZXNbal1bMF0gLSB2ZXJ0aWNlc1tpXVswXTtcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXG4gICAgICAgICAgICAqIHRyaWFuZ2xlcyksIGFuZCBhcHBlbmQgdGhlbSBvbnRvIHRoZSBlbmQgb2YgYSAoY29weSBvZikgdGhlIHZlcnRleFxuICAgICAgICAgICAgKiBhcnJheS4gKi9cbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcbiAgICAgICAgdmVydGljZXMucHVzaChzdFswXSwgc3RbMV0sIHN0WzJdKTtcblxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcbiAgICAgICAgICAgICogZWxzZSkgYW5kIHRoZSBjbG9zZWQgbGlzdCAod2hpY2ggaXMgZW1wdHkgc2luY2Ugd2UgaGF2bid0IHByb2Nlc3NlZFxuICAgICAgICAgICAgKiBhbnkgdHJpYW5nbGVzIHlldCkuICovXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcbiAgICAgICAgY2xvc2VkID0gW107XG4gICAgICAgIGVkZ2VzICA9IFtdO1xuXG4gICAgICAgIC8qIEluY3JlbWVudGFsbHkgYWRkIGVhY2ggdmVydGV4IHRvIHRoZSBtZXNoLiAqL1xuICAgICAgICBmb3IgKGkgPSBpbmRpY2VzLmxlbmd0aDsgaS0tOyBlZGdlcy5sZW5ndGggPSAwKSB7XG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcblxuICAgICAgICAgICAgLyogRm9yIGVhY2ggb3BlbiB0cmlhbmdsZSwgY2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHBvaW50IGlzXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcbiAgICAgICAgICAgICAgICAqIGl0J3MgZWRnZXMgdG8gYW4gZWRnZSBsaXN0LiAqL1xuICAgICAgICAgICAgZm9yIChqID0gb3Blbi5sZW5ndGg7IGotLTsgKSB7XG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcbiAgICAgICAgICAgICAgICAgICAgKiB0aGVuIHRoaXMgdHJpYW5nbGUgc2hvdWxkIG5ldmVyIGdldCBjaGVja2VkIGFnYWluLiBSZW1vdmUgaXRcbiAgICAgICAgICAgICAgICAgICAgKiBmcm9tIHRoZSBvcGVuIGxpc3QsIGFkZCBpdCB0byB0aGUgY2xvc2VkIGxpc3QsIGFuZCBza2lwLiAqL1xuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XG4gICAgICAgICAgICAgICAgaWYgKGR4ID4gMC4wICYmIGR4ICogZHggPiBvcGVuW2pdLnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltqXSk7XG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBvdXRzaWRlIHRoZSBjaXJjdW1jaXJjbGUsIHNraXAgdGhpcyB0cmlhbmdsZS4gKi9cbiAgICAgICAgICAgICAgICBkeSA9IHZlcnRpY2VzW2NdWzFdIC0gb3BlbltqXS55O1xuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyogUmVtb3ZlIHRoZSB0cmlhbmdsZSBhbmQgYWRkIGl0J3MgZWRnZXMgdG8gdGhlIGVkZ2UgbGlzdC4gKi9cbiAgICAgICAgICAgICAgICBlZGdlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcbiAgICAgICAgICAgICAgICAgICAgb3BlbltqXS5qLCBvcGVuW2pdLmssXG4gICAgICAgICAgICAgICAgICAgIG9wZW5bal0uaywgb3BlbltqXS5pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBvcGVuLnNwbGljZShqLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBkb3VibGVkIGVkZ2VzLiAqL1xuICAgICAgICAgICAgZGVkdXAoZWRnZXMpO1xuXG4gICAgICAgICAgICAvKiBBZGQgYSBuZXcgdHJpYW5nbGUgZm9yIGVhY2ggZWRnZS4gKi9cbiAgICAgICAgICAgIGZvciAoaiA9IGVkZ2VzLmxlbmd0aDsgajsgKSB7XG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XG4gICAgICAgICAgICAgICAgYSA9IGVkZ2VzWy0tal07XG4gICAgICAgICAgICAgICAgb3Blbi5wdXNoKGNpcmN1bWNpcmNsZSh2ZXJ0aWNlcywgYSwgYiwgYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cbiAgICAgICAgICAgICogcmVtb3ZlIGFueSB0cmlhbmdsZXMgdGhhdCBzaGFyZSBhIHZlcnRleCB3aXRoIHRoZSBzdXBlcnRyaWFuZ2xlLFxuICAgICAgICAgICAgKiBidWlsZGluZyBhIGxpc3Qgb2YgdHJpcGxldHMgdGhhdCByZXByZXNlbnQgdHJpYW5nbGVzLiAqL1xuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5baV0pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcblxuICAgICAgICBmb3IgKGkgPSBjbG9zZWQubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XG4gICAgICAgICAgICAgICAgb3Blbi5wdXNoKGNsb3NlZFtpXS5pLCBjbG9zZWRbaV0uaiwgY2xvc2VkW2ldLmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogWWF5LCB3ZSdyZSBkb25lISAqL1xuICAgICAgICByZXR1cm4gb3BlbjtcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbih0cmksIHApIHtcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xuICAgICAgICBpZiAoKHBbMF0gPCB0cmlbMF1bMF0gJiYgcFswXSA8IHRyaVsxXVswXSAmJiBwWzBdIDwgdHJpWzJdWzBdKSB8fFxuICAgICAgICAgICAgICAgIChwWzBdID4gdHJpWzBdWzBdICYmIHBbMF0gPiB0cmlbMV1bMF0gJiYgcFswXSA+IHRyaVsyXVswXSkgfHxcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XG4gICAgICAgICAgICAgICAgKHBbMV0gPiB0cmlbMF1bMV0gJiYgcFsxXSA+IHRyaVsxXVsxXSAmJiBwWzFdID4gdHJpWzJdWzFdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYSA9IHRyaVsxXVswXSAtIHRyaVswXVswXTtcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XG4gICAgICAgIHZhciBjID0gdHJpWzFdWzFdIC0gdHJpWzBdWzFdO1xuICAgICAgICB2YXIgZCA9IHRyaVsyXVsxXSAtIHRyaVswXVsxXTtcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xuXG4gICAgICAgIC8qIERlZ2VuZXJhdGUgdHJpLiAqL1xuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB1ID0gKGQgKiAocFswXSAtIHRyaVswXVswXSkgLSBiICogKHBbMV0gLSB0cmlbMF1bMV0pKSAvIGksXG4gICAgICAgICAgICAgICAgdiA9IChhICogKHBbMV0gLSB0cmlbMF1bMV0pIC0gYyAqIChwWzBdIC0gdHJpWzBdWzBdKSkgLyBpO1xuXG4gICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIHRyaSwgZmFpbC4gKi9cbiAgICAgICAgaWYgKHUgPCAwLjAgfHwgdiA8IDAuMCB8fCAodSArIHYpID4gMS4wKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbdSwgdl07XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZGVsYXVuYXk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgZ2wtbWF0cml4IC0gSGlnaCBwZXJmb3JtYW5jZSBtYXRyaXggYW5kIHZlY3RvciBvcGVyYXRpb25zXG4gKiBAYXV0aG9yIEJyYW5kb24gSm9uZXNcbiAqIEBhdXRob3IgQ29saW4gTWFjS2VuemllIElWXG4gKiBAdmVyc2lvbiAyLjIuMlxuICovXG5cbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG5cbihmdW5jdGlvbihfZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBzaGltID0ge307XG4gIGlmICh0eXBlb2YoZXhwb3J0cykgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcbiAgICAgIHNoaW0uZXhwb3J0cyA9IHt9O1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2hpbS5leHBvcnRzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdsLW1hdHJpeCBsaXZlcyBpbiBhIGJyb3dzZXIsIGRlZmluZSBpdHMgbmFtZXNwYWNlcyBpbiBnbG9iYWxcbiAgICAgIHNoaW0uZXhwb3J0cyA9IHR5cGVvZih3aW5kb3cpICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IF9nbG9iYWw7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIGdsLW1hdHJpeCBsaXZlcyBpbiBjb21tb25qcywgZGVmaW5lIGl0cyBuYW1lc3BhY2VzIGluIGV4cG9ydHNcbiAgICBzaGltLmV4cG9ydHMgPSBleHBvcnRzO1xuICB9XG5cbiAgKGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiAgICAvKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cblxudmFyIEdMTUFUX0VQU0lMT04gPSB3aW5kb3cuR0xNQVRfRVBTSUxPTjtcbmlmKEdMTUFUX0VQU0lMT04gPT0gbnVsbCkge1xuICAgIEdMTUFUX0VQU0lMT04gPSAwLjAwMDAwMTtcbn1cblxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cbnZhciBHTE1BVF9BUlJBWV9UWVBFID0gd2luZG93LkdMTUFUX0FSUkFZX1RZUEUgfHwgQXJyYXk7XG4vLyBpZighR0xNQVRfQVJSQVlfVFlQRSkge1xuLy8gICAgIEdMTUFUX0FSUkFZX1RZUEUgPSAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpID8gRmxvYXQzMkFycmF5IDogQXJyYXk7XG4vLyB9XG5cbnZhciBHTE1BVF9SQU5ET00gPSB3aW5kb3cuR0xNQVRfUkFORE9NO1xuaWYoIUdMTUFUX1JBTkRPTSkge1xuICAgIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xufVxuXG4vKipcbiAqIEBjbGFzcyBDb21tb24gdXRpbGl0aWVzXG4gKiBAbmFtZSBnbE1hdHJpeFxuICovXG52YXIgZ2xNYXRyaXggPSB7fTtcblxuLyoqXG4gKiBTZXRzIHRoZSB0eXBlIG9mIGFycmF5IHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgdmVjdG9ycyBhbmQgbWF0cmljZXNcbiAqXG4gKiBAcGFyYW0ge1R5cGV9IHR5cGUgQXJyYXkgdHlwZSwgc3VjaCBhcyBGbG9hdDMyQXJyYXkgb3IgQXJyYXlcbiAqL1xuZ2xNYXRyaXguc2V0TWF0cml4QXJyYXlUeXBlID0gZnVuY3Rpb24odHlwZSkge1xuICAgIEdMTUFUX0FSUkFZX1RZUEUgPSB0eXBlO1xufVxuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy5nbE1hdHJpeCA9IGdsTWF0cml4O1xufVxuXG52YXIgZGVncmVlID0gTWF0aC5QSSAvIDE4MDtcblxuLyoqXG4qIENvbnZlcnQgRGVncmVlIFRvIFJhZGlhblxuKlxuKiBAcGFyYW0ge051bWJlcn0gQW5nbGUgaW4gRGVncmVlc1xuKi9cbmdsTWF0cml4LnRvUmFkaWFuID0gZnVuY3Rpb24oYSl7XG4gICAgIHJldHVybiBhICogZGVncmVlO1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIDIgRGltZW5zaW9uYWwgVmVjdG9yXG4gKiBAbmFtZSB2ZWMyXG4gKi9cblxudmFyIHZlYzIgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMyXG4gKlxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxuICovXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgyKTtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjbG9uZVxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxuICovXG52ZWMyLmNsb25lID0gZnVuY3Rpb24oYSkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgyKTtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxuICovXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgdmVjMiB0byBhbm90aGVyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgc291cmNlIHZlY3RvclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSkge1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBZGRzIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gICAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcbiAqL1xudmVjMi5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG52ZWMyLm11bCA9IHZlYzIubXVsdGlwbHk7XG5cbi8qKlxuICogRGl2aWRlcyB0d28gdmVjMidzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5kaXZpZGV9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMi5kaXYgPSB2ZWMyLmRpdmlkZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gICAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyBhIHZlYzIgYnkgYSBzY2FsYXIgbnVtYmVyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSAqIGI7XG4gICAgb3V0WzFdID0gYVsxXSAqIGI7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gdmVjMidzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XG4gICAgb3V0WzBdID0gYVswXSArIChiWzBdICogc2NhbGUpO1xuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcbiAqL1xudmVjMi5kaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkpO1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGlzdGFuY2V9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMi5kaXN0ID0gdmVjMi5kaXN0YW5jZTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXG4gKi9cbnZlYzIuc3F1YXJlZERpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgICByZXR1cm4geCp4ICsgeSp5O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXG4gKi9cbnZlYzIubGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeCp4ICsgeSp5KTtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxuICpcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXG4gKi9cbnZlYzIuc3F1YXJlZExlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXTtcbiAgICByZXR1cm4geCp4ICsgeSp5O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcblxuLyoqXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IC1hWzBdO1xuICAgIG91dFsxXSA9IC1hWzFdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gaW52ZXJ0XG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICBvdXRbMF0gPSAxLjAgLyBhWzBdO1xuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xuICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgYSB2ZWMyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXTtcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5O1xuICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgICAgICAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzInc1xuICpcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxuICovXG52ZWMyLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV07XG59O1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcbiAqIE5vdGUgdGhhdCB0aGUgY3Jvc3MgcHJvZHVjdCBtdXN0IGJ5IGRlZmluaXRpb24gcHJvZHVjZSBhIDNEIHZlY3RvclxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcbiAgICBvdXRbMF0gPSBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IHo7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMyJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICB2YXIgYXggPSBhWzBdLFxuICAgICAgICBheSA9IGFbMV07XG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gICAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcbiAqL1xudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiBzY2FsZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHttYXQyfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnRyYW5zZm9ybU1hdDIgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHk7XG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyZFxuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0MmR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XG4gKi9cbnZlYzIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDNcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXG4gKlxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHttYXQzfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxuICogQHJldHVybnMge3ZlYzJ9IG91dFxuICovXG52ZWMyLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdO1xuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVszXSAqIHkgKyBtWzZdO1xuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs0XSAqIHkgKyBtWzddO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDRcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzAnXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xuICpcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcbiAqL1xudmVjMi50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXTtcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMycy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMyLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cbiAqIEByZXR1cm5zIHtBcnJheX0gYVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVjID0gdmVjMi5jcmVhdGUoKTtcblxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICAgICAgdmFyIGksIGw7XG4gICAgICAgIGlmKCFzdHJpZGUpIHtcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XG4gICAgICAgIH1cblxuICAgICAgICBpZighb2Zmc2V0KSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoY291bnQpIHtcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07XG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH07XG59KSgpO1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcbiAqXG4gKiBAcGFyYW0ge3ZlYzJ9IHZlYyB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxuICovXG52ZWMyLnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICd2ZWMyKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnKSc7XG59O1xuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy52ZWMyID0gdmVjMjtcbn1cbjtcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG4vKipcbiAqIEBjbGFzcyAzIERpbWVuc2lvbmFsIFZlY3RvclxuICogQG5hbWUgdmVjM1xuICovXG5cbnZhciB2ZWMzID0ge307XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjM1xuICpcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcbiAqL1xudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjbG9uZVxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxuICovXG52ZWMzLmNsb25lID0gZnVuY3Rpb24oYSkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxuICovXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDMpO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICBvdXRbMl0gPSB6O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzMgdG8gdGhlIGdpdmVuIHZhbHVlc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6KSB7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gdmVjMydzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gICAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgICBvdXRbMl0gPSBhWzJdICogYlsyXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xuXG4vKipcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICAgIG91dFsyXSA9IE1hdGgubWluKGFbMl0sIGJbMl0pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKiBiO1xuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnNjYWxlQW5kQWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBzY2FsZSkge1xuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XG4gICAgb3V0WzJdID0gYVsyXSArIChiWzJdICogc2NhbGUpO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMzJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxuICovXG52ZWMzLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcbiAgICAgICAgeiA9IGJbMl0gLSBhWzJdO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeCp4ICsgeSp5ICsgeip6KTtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxuICovXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxuICAgICAgICB5ID0gYlsxXSAtIGFbMV0sXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcbiAgICByZXR1cm4geCp4ICsgeSp5ICsgeip6O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3F1YXJlZERpc3RhbmNlfVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuc3FyRGlzdCA9IHZlYzMuc3F1YXJlZERpc3RhbmNlO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXG4gKi9cbnZlYzMubGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdLFxuICAgICAgICB6ID0gYVsyXTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxuICovXG52ZWMzLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xuICAgIHZhciB4ID0gYVswXSxcbiAgICAgICAgeSA9IGFbMV0sXG4gICAgICAgIHogPSBhWzJdO1xuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zcXVhcmVkTGVuZ3RofVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuc3FyTGVuID0gdmVjMy5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbmVnYXRlXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gLWFbMF07XG4gICAgb3V0WzFdID0gLWFbMV07XG4gICAgb3V0WzJdID0gLWFbMl07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHZlYzNcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBub3JtYWxpemVcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5ub3JtYWxpemUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdLFxuICAgICAgICB6ID0gYVsyXTtcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xuICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgICAgICAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxuICovXG52ZWMzLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLFxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xuXG4gICAgb3V0WzBdID0gYXkgKiBieiAtIGF6ICogYnk7XG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XG4gICAgb3V0WzJdID0gYXggKiBieSAtIGF5ICogYng7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XG4gKi9cbnZlYzMubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICB2YXIgYXggPSBhWzBdLFxuICAgICAgICBheSA9IGFbMV0sXG4gICAgICAgIGF6ID0gYVsyXTtcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJhbmRvbSA9IGZ1bmN0aW9uIChvdXQsIHNjYWxlKSB7XG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG5cbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcbiAgICB2YXIgeiA9IChHTE1BVF9SQU5ET00oKSAqIDIuMCkgLSAxLjA7XG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xuXG4gICAgb3V0WzBdID0gTWF0aC5jb3MocikgKiB6U2NhbGU7XG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XG4gICAgb3V0WzJdID0geiAqIHNjYWxlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXG4gICAgICAgIHcgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxMV0gKiB6ICsgbVsxNV07XG4gICAgdyA9IHcgfHwgMS4wO1xuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xuICAgIG91dFsxXSA9IChtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXSkgLyB3O1xuICAgIG91dFsyXSA9IChtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF0pIC8gdztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBtYXQzLlxuICpcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSB7bWF0NH0gbSB0aGUgM3gzIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcbiAgICBvdXRbMF0gPSB4ICogbVswXSArIHkgKiBtWzNdICsgeiAqIG1bNl07XG4gICAgb3V0WzFdID0geCAqIG1bMV0gKyB5ICogbVs0XSArIHogKiBtWzddO1xuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBxdWF0XG4gKlxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcbiAqL1xudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XG4gICAgLy8gYmVuY2htYXJrczogaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi10cmFuc2Zvcm0tdmVjMy1pbXBsZW1lbnRhdGlvbnNcblxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxuICAgICAgICBxeCA9IHFbMF0sIHF5ID0gcVsxXSwgcXogPSBxWzJdLCBxdyA9IHFbM10sXG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcbiAgICAgICAgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHksXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcbiAgICAgICAgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxuICAgIG91dFswXSA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHgtYXhpc1xuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xuICAgdmFyIHAgPSBbXSwgcj1bXTtcbiAgICAgIC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgICAgIHBbMV0gPSBhWzFdIC0gYlsxXTtcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XG5cbiAgICAgIC8vcGVyZm9ybSByb3RhdGlvblxuICAgICAgclswXSA9IHBbMF07XG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XG4gICAgICByWzJdID0gcFsxXSpNYXRoLnNpbihjKSArIHBbMl0qTWF0aC5jb3MoYyk7XG5cbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cbiAgICAgIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICAgICAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJvdGF0ZVkgPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xuICAgIHZhciBwID0gW10sIHI9W107XG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xuXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xuICAgIHJbMV0gPSBwWzFdO1xuICAgIHJbMl0gPSBwWzJdKk1hdGguY29zKGMpIC0gcFswXSpNYXRoLnNpbihjKTtcblxuICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHotYXhpc1xuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxuICogQHJldHVybnMge3ZlYzN9IG91dFxuICovXG52ZWMzLnJvdGF0ZVogPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xuICAgIHZhciBwID0gW10sIHI9W107XG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xuXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXG4gICAgclswXSA9IHBbMF0qTWF0aC5jb3MoYykgLSBwWzFdKk1hdGguc2luKGMpO1xuICAgIHJbMV0gPSBwWzBdKk1hdGguc2luKGMpICsgcFsxXSpNYXRoLmNvcyhjKTtcbiAgICByWzJdID0gcFsyXTtcblxuICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMzcy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMzLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjM3MgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cbiAqIEByZXR1cm5zIHtBcnJheX0gYVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzMuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVjID0gdmVjMy5jcmVhdGUoKTtcblxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICAgICAgdmFyIGksIGw7XG4gICAgICAgIGlmKCFzdHJpZGUpIHtcbiAgICAgICAgICAgIHN0cmlkZSA9IDM7XG4gICAgICAgIH1cblxuICAgICAgICBpZighb2Zmc2V0KSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoY291bnQpIHtcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdOyBhW2krMl0gPSB2ZWNbMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIDNEIHZlY3RvcnNcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAqL1xudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIHZhciB0ZW1wQSA9IHZlYzMuZnJvbVZhbHVlcyhhWzBdLCBhWzFdLCBhWzJdKTtcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XG5cbiAgICB2ZWMzLm5vcm1hbGl6ZSh0ZW1wQSwgdGVtcEEpO1xuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XG5cbiAgICB2YXIgY29zaW5lID0gdmVjMy5kb3QodGVtcEEsIHRlbXBCKTtcblxuICAgIGlmKGNvc2luZSA+IDEuMCl7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLmFjb3MoY29zaW5lKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IHZlYyB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxuICovXG52ZWMzLnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICd2ZWMzKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcpJztcbn07XG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLnZlYzMgPSB2ZWMzO1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIDQgRGltZW5zaW9uYWwgVmVjdG9yXG4gKiBAbmFtZSB2ZWM0XG4gKi9cblxudmFyIHZlYzQgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWM0XG4gKlxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxuICovXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxuICpcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcbiAqL1xudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcbiAqL1xudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgb3V0WzJdID0gejtcbiAgICBvdXRbM10gPSB3O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWM0IHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBzb3VyY2UgdmVjdG9yXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNCB0byB0aGUgZ2l2ZW4gdmFsdWVzXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgb3V0WzNdID0gdztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBZGRzIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gICAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xuICpcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xuICAgIG91dFszXSA9IGFbM10gKiBiWzNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG52ZWM0Lm11bCA9IHZlYzQubXVsdGlwbHk7XG5cbi8qKlxuICogRGl2aWRlcyB0d28gdmVjNCdzXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzR9IG91dFxuICovXG52ZWM0LmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICAgIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXZpZGV9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5kaXYgPSB2ZWM0LmRpdmlkZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gICAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gICAgb3V0WzNdID0gTWF0aC5taW4oYVszXSwgYlszXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge3ZlYzR9IG91dFxuICovXG52ZWM0Lm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xuICAgIG91dFszXSA9IE1hdGgubWF4KGFbM10sIGJbM10pO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyBhIHZlYzQgYnkgYSBzY2FsYXIgbnVtYmVyXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxuICogQHJldHVybnMge3ZlYzR9IG91dFxuICovXG52ZWM0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgb3V0WzBdID0gYVswXSAqIGI7XG4gICAgb3V0WzFdID0gYVsxXSAqIGI7XG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XG4gICAgb3V0WzNdID0gYVszXSAqIGI7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gdmVjNCdzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XG4gICAgb3V0WzBdID0gYVswXSArIChiWzBdICogc2NhbGUpO1xuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcbiAgICBvdXRbMl0gPSBhWzJdICsgKGJbMl0gKiBzY2FsZSk7XG4gICAgb3V0WzNdID0gYVszXSArIChiWzNdICogc2NhbGUpO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxuICovXG52ZWM0LmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcbiAgICAgICAgeiA9IGJbMl0gLSBhWzJdLFxuICAgICAgICB3ID0gYlszXSAtIGFbM107XG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGlzdGFuY2V9XG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5kaXN0ID0gdmVjNC5kaXN0YW5jZTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXG4gKi9cbnZlYzQuc3F1YXJlZERpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcbiAgICAgICAgeiA9IGJbMl0gLSBhWzJdLFxuICAgICAgICB3ID0gYlszXSAtIGFbM107XG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnNxdWFyZWREaXN0YW5jZX1cbiAqIEBmdW5jdGlvblxuICovXG52ZWM0LnNxckRpc3QgPSB2ZWM0LnNxdWFyZWREaXN0YW5jZTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWM0XG4gKlxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxuICovXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXSxcbiAgICAgICAgeiA9IGFbMl0sXG4gICAgICAgIHcgPSBhWzNdO1xuICAgIHJldHVybiBNYXRoLnNxcnQoeCp4ICsgeSp5ICsgeip6ICsgdyp3KTtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxuICpcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXG4gKi9cbnZlYzQuc3F1YXJlZExlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIHggPSBhWzBdLFxuICAgICAgICB5ID0gYVsxXSxcbiAgICAgICAgeiA9IGFbMl0sXG4gICAgICAgIHcgPSBhWzNdO1xuICAgIHJldHVybiB4KnggKyB5KnkgKyB6KnogKyB3Knc7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkTGVuZ3RofVxuICogQGZ1bmN0aW9uXG4gKi9cbnZlYzQuc3FyTGVuID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbmVnYXRlXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gLWFbMF07XG4gICAgb3V0WzFdID0gLWFbMV07XG4gICAgb3V0WzJdID0gLWFbMl07XG4gICAgb3V0WzNdID0gLWFbM107XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBpbnZlcnRcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIG91dFszXSA9IDEuMCAvIGFbM107XG4gIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHZlYzRcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBub3JtYWxpemVcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC5ub3JtYWxpemUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2YXIgeCA9IGFbMF0sXG4gICAgICAgIHkgPSBhWzFdLFxuICAgICAgICB6ID0gYVsyXSxcbiAgICAgICAgdyA9IGFbM107XG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeSArIHoqeiArIHcqdztcbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgICAgIG91dFswXSA9IGFbMF0gKiBsZW47XG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XG4gICAgICAgIG91dFszXSA9IGFbM10gKiBsZW47XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcbiAqL1xudmVjNC5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl0gKyBhWzNdICogYlszXTtcbn07XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICB2YXIgYXggPSBhWzBdLFxuICAgICAgICBheSA9IGFbMV0sXG4gICAgICAgIGF6ID0gYVsyXSxcbiAgICAgICAgYXcgPSBhWzNdO1xuICAgIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICAgIG91dFszXSA9IGF3ICsgdCAqIChiWzNdIC0gYXcpO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcbiAgICBzY2FsZSA9IHNjYWxlIHx8IDEuMDtcblxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxuICAgIG91dFswXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIG91dFsxXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIG91dFszXSA9IEdMTUFUX1JBTkRPTSgpO1xuICAgIHZlYzQubm9ybWFsaXplKG91dCwgb3V0KTtcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgdmVjNCB3aXRoIGEgbWF0NC5cbiAqXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XG4gKi9cbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLCB3ID0gYVszXTtcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSAqIHc7XG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xuICAgIG91dFsyXSA9IG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzEwXSAqIHogKyBtWzE0XSAqIHc7XG4gICAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdICogdztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBxdWF0XG4gKlxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcbiAqL1xudmVjNC50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcblxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcbiAgICAgICAgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHosXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XG5cbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcbiAgICBvdXRbMV0gPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzQuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWM0cyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxuICogQHJldHVybnMge0FycmF5fSBhXG4gKiBAZnVuY3Rpb25cbiAqL1xudmVjNC5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ZWMgPSB2ZWM0LmNyZWF0ZSgpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgICAgICB2YXIgaSwgbDtcbiAgICAgICAgaWYoIXN0cmlkZSkge1xuICAgICAgICAgICAgc3RyaWRlID0gNDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjb3VudCkge1xuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdOyBhW2krM10gPSB2ZWNbM107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXG4gKlxuICogQHBhcmFtIHt2ZWM0fSB2ZWMgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcbiAqL1xudmVjNC5zdHIgPSBmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiAndmVjNCgnICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcpJztcbn07XG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLnZlYzQgPSB2ZWM0O1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIDJ4MiBNYXRyaXhcbiAqIEBuYW1lIG1hdDJcbiAqL1xuXG52YXIgbWF0MiA9IHt9O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MlxuICpcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XG4gKi9cbm1hdDIuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xuICAgIG91dFswXSA9IDE7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBtYXQyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcbiAqL1xubWF0Mi5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MiB0byBhbm90aGVyXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDJ9IG91dFxuICovXG5tYXQyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XG4gKi9cbm1hdDIuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0MlxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcbiAqL1xubWF0Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gICAgaWYgKG91dCA9PT0gYSkge1xuICAgICAgICB2YXIgYTEgPSBhWzFdO1xuICAgICAgICBvdXRbMV0gPSBhWzJdO1xuICAgICAgICBvdXRbMl0gPSBhMTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXRbMF0gPSBhWzBdO1xuICAgICAgICBvdXRbMV0gPSBhWzJdO1xuICAgICAgICBvdXRbMl0gPSBhWzFdO1xuICAgICAgICBvdXRbM10gPSBhWzNdO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEludmVydHMgYSBtYXQyXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDJ9IG91dFxuICovXG5tYXQyLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICAgICAgICBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcblxuICAgIGlmICghZGV0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBkZXQgPSAxLjAgLyBkZXQ7XG5cbiAgICBvdXRbMF0gPSAgYTMgKiBkZXQ7XG4gICAgb3V0WzFdID0gLWExICogZGV0O1xuICAgIG91dFsyXSA9IC1hMiAqIGRldDtcbiAgICBvdXRbM10gPSAgYTAgKiBkZXQ7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcbiAqXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XG4gKi9cbm1hdDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIC8vIENhY2hpbmcgdGhpcyB2YWx1ZSBpcyBuZXNzZWNhcnkgaWYgb3V0ID09IGFcbiAgICB2YXIgYTAgPSBhWzBdO1xuICAgIG91dFswXSA9ICBhWzNdO1xuICAgIG91dFsxXSA9IC1hWzFdO1xuICAgIG91dFsyXSA9IC1hWzJdO1xuICAgIG91dFszXSA9ICBhMDtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MlxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxuICovXG5tYXQyLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gbWF0MidzXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge21hdDJ9IG91dFxuICovXG5tYXQyLm11bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM107XG4gICAgdmFyIGIwID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXTtcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgICBvdXRbMl0gPSBhMCAqIGIyICsgYTIgKiBiMztcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIubXVsdGlwbHl9XG4gKiBAZnVuY3Rpb25cbiAqL1xubWF0Mi5tdWwgPSBtYXQyLm11bHRpcGx5O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXQyIGJ5IHRoZSBnaXZlbiBhbmdsZVxuICpcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XG4gKi9cbm1hdDIucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XG4gICAgb3V0WzFdID0gYTEgKiAgYyArIGEzICogcztcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXG4gKlxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcbiAqKi9cbm1hdDIuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xuICAgIG91dFsxXSA9IGExICogdjA7XG4gICAgb3V0WzJdID0gYTIgKiB2MTtcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyXG4gKlxuICogQHBhcmFtIHttYXQyfSBtYXQgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAqL1xubWF0Mi5zdHIgPSBmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiAnbWF0MignICsgYVswXSArICcsICcgKyBhWzFdICsgJywgJyArIGFbMl0gKyAnLCAnICsgYVszXSArICcpJztcbn07XG5cbi8qKlxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDJcbiAqXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXG4gKi9cbm1hdDIuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuKE1hdGguc3FydChNYXRoLnBvdyhhWzBdLCAyKSArIE1hdGgucG93KGFbMV0sIDIpICsgTWF0aC5wb3coYVsyXSwgMikgKyBNYXRoLnBvdyhhWzNdLCAyKSkpXG59O1xuXG4vKipcbiAqIFJldHVybnMgTCwgRCBhbmQgVSBtYXRyaWNlcyAoTG93ZXIgdHJpYW5ndWxhciwgRGlhZ29uYWwgYW5kIFVwcGVyIHRyaWFuZ3VsYXIpIGJ5IGZhY3Rvcml6aW5nIHRoZSBpbnB1dCBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0Mn0gRCB0aGUgZGlhZ29uYWwgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IFUgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcbiAqL1xuXG5tYXQyLkxEVSA9IGZ1bmN0aW9uIChMLCBELCBVLCBhKSB7XG4gICAgTFsyXSA9IGFbMl0vYVswXTtcbiAgICBVWzBdID0gYVswXTtcbiAgICBVWzFdID0gYVsxXTtcbiAgICBVWzNdID0gYVszXSAtIExbMl0gKiBVWzFdO1xuICAgIHJldHVybiBbTCwgRCwgVV07XG59O1xuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy5tYXQyID0gbWF0Mjtcbn1cbjtcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG4vKipcbiAqIEBjbGFzcyAyeDMgTWF0cml4XG4gKiBAbmFtZSBtYXQyZFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogQSBtYXQyZCBjb250YWlucyBzaXggZWxlbWVudHMgZGVmaW5lZCBhczpcbiAqIDxwcmU+XG4gKiBbYSwgYywgdHgsXG4gKiAgYiwgZCwgdHldXG4gKiA8L3ByZT5cbiAqIFRoaXMgaXMgYSBzaG9ydCBmb3JtIGZvciB0aGUgM3gzIG1hdHJpeDpcbiAqIDxwcmU+XG4gKiBbYSwgYywgdHgsXG4gKiAgYiwgZCwgdHksXG4gKiAgMCwgMCwgMV1cbiAqIDwvcHJlPlxuICogVGhlIGxhc3Qgcm93IGlzIGlnbm9yZWQgc28gdGhlIGFycmF5IGlzIHNob3J0ZXIgYW5kIG9wZXJhdGlvbnMgYXJlIGZhc3Rlci5cbiAqL1xuXG52YXIgbWF0MmQgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJkXG4gKlxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XG4gKi9cbm1hdDJkLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg2KTtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAxO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gMDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQyZH0gYSBtYXRyaXggdG8gY2xvbmVcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxuICovXG5tYXQyZC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNik7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDJkIHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XG4gKi9cbm1hdDJkLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XG4gKlxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxuICovXG5tYXQyZC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xuICAgIG91dFswXSA9IDE7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDE7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNV0gPSAwO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEludmVydHMgYSBtYXQyZFxuICpcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDJkfSBvdXRcbiAqL1xubWF0MmQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmFyIGFhID0gYVswXSwgYWIgPSBhWzFdLCBhYyA9IGFbMl0sIGFkID0gYVszXSxcbiAgICAgICAgYXR4ID0gYVs0XSwgYXR5ID0gYVs1XTtcblxuICAgIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcbiAgICBpZighZGV0KXtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGRldCA9IDEuMCAvIGRldDtcblxuICAgIG91dFswXSA9IGFkICogZGV0O1xuICAgIG91dFsxXSA9IC1hYiAqIGRldDtcbiAgICBvdXRbMl0gPSAtYWMgKiBkZXQ7XG4gICAgb3V0WzNdID0gYWEgKiBkZXQ7XG4gICAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xuICAgIG91dFs1XSA9IChhYiAqIGF0eCAtIGFhICogYXR5KSAqIGRldDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXG4gKlxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxuICovXG5tYXQyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDJkJ3NcbiAqXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxuICovXG5tYXQyZC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcbiAgICAgICAgYjAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdLCBiNCA9IGJbNF0sIGI1ID0gYls1XTtcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgICBvdXRbMl0gPSBhMCAqIGIyICsgYTIgKiBiMztcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xuICAgIG91dFs1XSA9IGExICogYjQgKyBhMyAqIGI1ICsgYTU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5tYXQyZC5tdWwgPSBtYXQyZC5tdWx0aXBseTtcblxuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXQyZCBieSB0aGUgZ2l2ZW4gYW5nbGVcbiAqXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxuICovXG5tYXQyZC5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XG4gICAgb3V0WzFdID0gYTEgKiAgYyArIGEzICogcztcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gICAgb3V0WzRdID0gYTQ7XG4gICAgb3V0WzVdID0gYTU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2NhbGVzIHRoZSBtYXQyZCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxuICpcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XG4gKiovXG5tYXQyZC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xuICAgIG91dFsxXSA9IGExICogdjA7XG4gICAgb3V0WzJdID0gYTIgKiB2MTtcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xuICAgIG91dFs0XSA9IGE0O1xuICAgIG91dFs1XSA9IGE1O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXG4gKlxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gdHJhbnNsYXRlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XG4gKiovXG5tYXQyZC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XG4gICAgb3V0WzBdID0gYTA7XG4gICAgb3V0WzFdID0gYTE7XG4gICAgb3V0WzJdID0gYTI7XG4gICAgb3V0WzNdID0gYTM7XG4gICAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcbiAgICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyZFxuICpcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAqL1xubWF0MmQuc3RyID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gJ21hdDJkKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcpJztcbn07XG5cbi8qKlxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDJkXG4gKlxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cbiAqL1xubWF0MmQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuKE1hdGguc3FydChNYXRoLnBvdyhhWzBdLCAyKSArIE1hdGgucG93KGFbMV0sIDIpICsgTWF0aC5wb3coYVsyXSwgMikgKyBNYXRoLnBvdyhhWzNdLCAyKSArIE1hdGgucG93KGFbNF0sIDIpICsgTWF0aC5wb3coYVs1XSwgMikgKyAxKSlcbn07XG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLm1hdDJkID0gbWF0MmQ7XG59XG47XG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cblxuLyoqXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxuICogQG5hbWUgbWF0M1xuICovXG5cbnZhciBtYXQzID0ge307XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQzXG4gKlxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcbiAqL1xubWF0My5jcmVhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XG4gICAgb3V0WzBdID0gMTtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAxO1xuICAgIG91dFs1XSA9IDA7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgaW50byB0aGUgZ2l2ZW4gbWF0My5cbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIDN4MyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSAgIHRoZSBzb3VyY2UgNHg0IG1hdHJpeFxuICogQHJldHVybnMge21hdDN9IG91dFxuICovXG5tYXQzLmZyb21NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVs0XTtcbiAgICBvdXRbNF0gPSBhWzVdO1xuICAgIG91dFs1XSA9IGFbNl07XG4gICAgb3V0WzZdID0gYVs4XTtcbiAgICBvdXRbN10gPSBhWzldO1xuICAgIG91dFs4XSA9IGFbMTBdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MyBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcbiAqIEByZXR1cm5zIHttYXQzfSBhIG5ldyAzeDMgbWF0cml4XG4gKi9cbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDkpO1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgb3V0WzRdID0gYVs0XTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbNl07XG4gICAgb3V0WzddID0gYVs3XTtcbiAgICBvdXRbOF0gPSBhWzhdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgb3V0WzRdID0gYVs0XTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbNl07XG4gICAgb3V0WzddID0gYVs3XTtcbiAgICBvdXRbOF0gPSBhWzhdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCBhIG1hdDMgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDE7XG4gICAgb3V0WzVdID0gMDtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xuICAgIGlmIChvdXQgPT09IGEpIHtcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XG4gICAgICAgIG91dFsxXSA9IGFbM107XG4gICAgICAgIG91dFsyXSA9IGFbNl07XG4gICAgICAgIG91dFszXSA9IGEwMTtcbiAgICAgICAgb3V0WzVdID0gYVs3XTtcbiAgICAgICAgb3V0WzZdID0gYTAyO1xuICAgICAgICBvdXRbN10gPSBhMTI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0WzBdID0gYVswXTtcbiAgICAgICAgb3V0WzFdID0gYVszXTtcbiAgICAgICAgb3V0WzJdID0gYVs2XTtcbiAgICAgICAgb3V0WzNdID0gYVsxXTtcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcbiAgICAgICAgb3V0WzVdID0gYVs3XTtcbiAgICAgICAgb3V0WzZdID0gYVsyXTtcbiAgICAgICAgb3V0WzddID0gYVs1XTtcbiAgICAgICAgb3V0WzhdID0gYVs4XTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBJbnZlcnRzIGEgbWF0M1xuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xubWF0My5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcbiAgICAgICAgYTEwID0gYVszXSwgYTExID0gYVs0XSwgYTEyID0gYVs1XSxcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcblxuICAgICAgICBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjEsXG4gICAgICAgIGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjAsXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcblxuICAgIGlmICghZGV0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBkZXQgPSAxLjAgLyBkZXQ7XG5cbiAgICBvdXRbMF0gPSBiMDEgKiBkZXQ7XG4gICAgb3V0WzFdID0gKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0O1xuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xuICAgIG91dFszXSA9IGIxMSAqIGRldDtcbiAgICBvdXRbNF0gPSAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldDtcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XG4gICAgb3V0WzZdID0gYjIxICogZGV0O1xuICAgIG91dFs3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxuICAgICAgICBhMjAgPSBhWzZdLCBhMjEgPSBhWzddLCBhMjIgPSBhWzhdO1xuXG4gICAgb3V0WzBdID0gKGExMSAqIGEyMiAtIGExMiAqIGEyMSk7XG4gICAgb3V0WzFdID0gKGEwMiAqIGEyMSAtIGEwMSAqIGEyMik7XG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XG4gICAgb3V0WzNdID0gKGExMiAqIGEyMCAtIGExMCAqIGEyMik7XG4gICAgb3V0WzRdID0gKGEwMCAqIGEyMiAtIGEwMiAqIGEyMCk7XG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XG4gICAgb3V0WzZdID0gKGExMCAqIGEyMSAtIGExMSAqIGEyMCk7XG4gICAgb3V0WzddID0gKGEwMSAqIGEyMCAtIGEwMCAqIGEyMSk7XG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQzXG4gKlxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXG4gKi9cbm1hdDMuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxuICAgICAgICBhMjAgPSBhWzZdLCBhMjEgPSBhWzddLCBhMjIgPSBhWzhdO1xuXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XG59O1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDMnc1xuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xubWF0My5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcbiAgICAgICAgYTEwID0gYVszXSwgYTExID0gYVs0XSwgYTEyID0gYVs1XSxcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcblxuICAgICAgICBiMDAgPSBiWzBdLCBiMDEgPSBiWzFdLCBiMDIgPSBiWzJdLFxuICAgICAgICBiMTAgPSBiWzNdLCBiMTEgPSBiWzRdLCBiMTIgPSBiWzVdLFxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xuXG4gICAgb3V0WzBdID0gYjAwICogYTAwICsgYjAxICogYTEwICsgYjAyICogYTIwO1xuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcbiAgICBvdXRbMl0gPSBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjI7XG5cbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XG4gICAgb3V0WzRdID0gYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxO1xuICAgIG91dFs1XSA9IGIxMCAqIGEwMiArIGIxMSAqIGExMiArIGIxMiAqIGEyMjtcblxuICAgIG91dFs2XSA9IGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMDtcbiAgICBvdXRbN10gPSBiMjAgKiBhMDEgKyBiMjEgKiBhMTEgKyBiMjIgKiBhMjE7XG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0My5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5tYXQzLm11bCA9IG1hdDMubXVsdGlwbHk7XG5cbi8qKlxuICogVHJhbnNsYXRlIGEgbWF0MyBieSB0aGUgZ2l2ZW4gdmVjdG9yXG4gKlxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqL1xubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcbiAgICAgICAgYTEwID0gYVszXSwgYTExID0gYVs0XSwgYTEyID0gYVs1XSxcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcbiAgICAgICAgeCA9IHZbMF0sIHkgPSB2WzFdO1xuXG4gICAgb3V0WzBdID0gYTAwO1xuICAgIG91dFsxXSA9IGEwMTtcbiAgICBvdXRbMl0gPSBhMDI7XG5cbiAgICBvdXRbM10gPSBhMTA7XG4gICAgb3V0WzRdID0gYTExO1xuICAgIG91dFs1XSA9IGExMjtcblxuICAgIG91dFs2XSA9IHggKiBhMDAgKyB5ICogYTEwICsgYTIwO1xuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xuICAgIG91dFs4XSA9IHggKiBhMDIgKyB5ICogYTEyICsgYTIyO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKi9cbm1hdDMucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXG5cbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XG4gICAgb3V0WzFdID0gYyAqIGEwMSArIHMgKiBhMTE7XG4gICAgb3V0WzJdID0gYyAqIGEwMiArIHMgKiBhMTI7XG5cbiAgICBvdXRbM10gPSBjICogYTEwIC0gcyAqIGEwMDtcbiAgICBvdXRbNF0gPSBjICogYTExIC0gcyAqIGEwMTtcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcblxuICAgIG91dFs2XSA9IGEyMDtcbiAgICBvdXRbN10gPSBhMjE7XG4gICAgb3V0WzhdID0gYTIyO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxuICpcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XG4gKiovXG5tYXQzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXTtcblxuICAgIG91dFswXSA9IHggKiBhWzBdO1xuICAgIG91dFsxXSA9IHggKiBhWzFdO1xuICAgIG91dFsyXSA9IHggKiBhWzJdO1xuXG4gICAgb3V0WzNdID0geSAqIGFbM107XG4gICAgb3V0WzRdID0geSAqIGFbNF07XG4gICAgb3V0WzVdID0geSAqIGFbNV07XG5cbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBmcm9tIGEgbWF0MmQgaW50byBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNvcHlcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcbiAqKi9cbm1hdDMuZnJvbU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IDA7XG5cbiAgICBvdXRbM10gPSBhWzJdO1xuICAgIG91dFs0XSA9IGFbM107XG4gICAgb3V0WzVdID0gMDtcblxuICAgIG91dFs2XSA9IGFbNF07XG4gICAgb3V0WzddID0gYVs1XTtcbiAgICBvdXRbOF0gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyBhIDN4MyBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxuKlxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4qIEBwYXJhbSB7cXVhdH0gcSBRdWF0ZXJuaW9uIHRvIGNyZWF0ZSBtYXRyaXggZnJvbVxuKlxuKiBAcmV0dXJucyB7bWF0M30gb3V0XG4qL1xubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM10sXG4gICAgICAgIHgyID0geCArIHgsXG4gICAgICAgIHkyID0geSArIHksXG4gICAgICAgIHoyID0geiArIHosXG5cbiAgICAgICAgeHggPSB4ICogeDIsXG4gICAgICAgIHl4ID0geSAqIHgyLFxuICAgICAgICB5eSA9IHkgKiB5MixcbiAgICAgICAgenggPSB6ICogeDIsXG4gICAgICAgIHp5ID0geiAqIHkyLFxuICAgICAgICB6eiA9IHogKiB6MixcbiAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgIHd5ID0gdyAqIHkyLFxuICAgICAgICB3eiA9IHcgKiB6MjtcblxuICAgIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICAgIG91dFszXSA9IHl4IC0gd3o7XG4gICAgb3V0WzZdID0genggKyB3eTtcblxuICAgIG91dFsxXSA9IHl4ICsgd3o7XG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XG4gICAgb3V0WzddID0genkgLSB3eDtcblxuICAgIG91dFsyXSA9IHp4IC0gd3k7XG4gICAgb3V0WzVdID0genkgKyB3eDtcbiAgICBvdXRbOF0gPSAxIC0geHggLSB5eTtcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiogQ2FsY3VsYXRlcyBhIDN4MyBub3JtYWwgbWF0cml4ICh0cmFuc3Bvc2UgaW52ZXJzZSkgZnJvbSB0aGUgNHg0IG1hdHJpeFxuKlxuKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4qIEBwYXJhbSB7bWF0NH0gYSBNYXQ0IHRvIGRlcml2ZSB0aGUgbm9ybWFsIG1hdHJpeCBmcm9tXG4qXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcbiovXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxuXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgICBpZiAoIWRldCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gICAgb3V0WzFdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gICAgb3V0WzJdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG5cbiAgICBvdXRbM10gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcbiAgICBvdXRbNF0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcblxuICAgIG91dFs2XSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0O1xuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICAgIG91dFs4XSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IG1hdCBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxuICovXG5tYXQzLnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICdtYXQzKCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICBhWzNdICsgJywgJyArIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICsgYVs4XSArICcpJztcbn07XG5cbi8qKlxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDNcbiAqXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXG4gKi9cbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuKE1hdGguc3FydChNYXRoLnBvdyhhWzBdLCAyKSArIE1hdGgucG93KGFbMV0sIDIpICsgTWF0aC5wb3coYVsyXSwgMikgKyBNYXRoLnBvdyhhWzNdLCAyKSArIE1hdGgucG93KGFbNF0sIDIpICsgTWF0aC5wb3coYVs1XSwgMikgKyBNYXRoLnBvdyhhWzZdLCAyKSArIE1hdGgucG93KGFbN10sIDIpICsgTWF0aC5wb3coYVs4XSwgMikpKVxufTtcblxuXG5pZih0eXBlb2YoZXhwb3J0cykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZXhwb3J0cy5tYXQzID0gbWF0Mztcbn1cbjtcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xuXG4vKipcbiAqIEBjbGFzcyA0eDQgTWF0cml4XG4gKiBAbmFtZSBtYXQ0XG4gKi9cblxudmFyIG1hdDQgPSB7fTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcbiAqXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxuICovXG5tYXQ0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XG4gICAgb3V0WzBdID0gMTtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IDE7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTBdID0gMTtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gMDtcbiAgICBvdXRbMTNdID0gMDtcbiAgICBvdXRbMTRdID0gMDtcbiAgICBvdXRbMTVdID0gMTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcbiAqXG4gKiBAcGFyYW0ge21hdDR9IGEgbWF0cml4IHRvIGNsb25lXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxuICovXG5tYXQ0LmNsb25lID0gZnVuY3Rpb24oYSkge1xuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs2XTtcbiAgICBvdXRbN10gPSBhWzddO1xuICAgIG91dFs4XSA9IGFbOF07XG4gICAgb3V0WzldID0gYVs5XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTFdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgICBvdXRbOV0gPSBhWzldO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxMV07XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAxO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gMTtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMDtcbiAgICBvdXRbOV0gPSAwO1xuICAgIG91dFsxMF0gPSAxO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAwO1xuICAgIG91dFsxNV0gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0NFxuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gICAgaWYgKG91dCA9PT0gYSkge1xuICAgICAgICB2YXIgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcbiAgICAgICAgICAgIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXG4gICAgICAgICAgICBhMjMgPSBhWzExXTtcblxuICAgICAgICBvdXRbMV0gPSBhWzRdO1xuICAgICAgICBvdXRbMl0gPSBhWzhdO1xuICAgICAgICBvdXRbM10gPSBhWzEyXTtcbiAgICAgICAgb3V0WzRdID0gYTAxO1xuICAgICAgICBvdXRbNl0gPSBhWzldO1xuICAgICAgICBvdXRbN10gPSBhWzEzXTtcbiAgICAgICAgb3V0WzhdID0gYTAyO1xuICAgICAgICBvdXRbOV0gPSBhMTI7XG4gICAgICAgIG91dFsxMV0gPSBhWzE0XTtcbiAgICAgICAgb3V0WzEyXSA9IGEwMztcbiAgICAgICAgb3V0WzEzXSA9IGExMztcbiAgICAgICAgb3V0WzE0XSA9IGEyMztcbiAgICB9IGVsc2Uge1xuICAgICAgICBvdXRbMF0gPSBhWzBdO1xuICAgICAgICBvdXRbMV0gPSBhWzRdO1xuICAgICAgICBvdXRbMl0gPSBhWzhdO1xuICAgICAgICBvdXRbM10gPSBhWzEyXTtcbiAgICAgICAgb3V0WzRdID0gYVsxXTtcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcbiAgICAgICAgb3V0WzZdID0gYVs5XTtcbiAgICAgICAgb3V0WzddID0gYVsxM107XG4gICAgICAgIG91dFs4XSA9IGFbMl07XG4gICAgICAgIG91dFs5XSA9IGFbNl07XG4gICAgICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xuICAgICAgICBvdXRbMTJdID0gYVszXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbN107XG4gICAgICAgIG91dFsxNF0gPSBhWzExXTtcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEludmVydHMgYSBtYXQ0XG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxuXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgICBpZiAoIWRldCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gICAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gICAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gICAgb3V0WzNdID0gKGEyMiAqIGIwNCAtIGEyMSAqIGIwNSAtIGEyMyAqIGIwMykgKiBkZXQ7XG4gICAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gICAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XG4gICAgb3V0WzZdID0gKGEzMiAqIGIwMiAtIGEzMCAqIGIwNSAtIGEzMyAqIGIwMSkgKiBkZXQ7XG4gICAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XG4gICAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG4gICAgb3V0WzldID0gKGEwMSAqIGIwOCAtIGEwMCAqIGIxMCAtIGEwMyAqIGIwNikgKiBkZXQ7XG4gICAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuICAgIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcbiAgICBvdXRbMTJdID0gKGExMSAqIGIwNyAtIGExMCAqIGIwOSAtIGExMiAqIGIwNikgKiBkZXQ7XG4gICAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xuICAgIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcbiAgICBvdXRbMTVdID0gKGEyMCAqIGIwMyAtIGEyMSAqIGIwMSArIGEyMiAqIGIwMCkgKiBkZXQ7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDRcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xuXG4gICAgb3V0WzBdICA9ICAoYTExICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcbiAgICBvdXRbMV0gID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xuICAgIG91dFsyXSAgPSAgKGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gICAgb3V0WzNdICA9IC0oYTAxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgICBvdXRbNF0gID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xuICAgIG91dFs1XSAgPSAgKGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XG4gICAgb3V0WzZdICA9IC0oYTAwICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgICBvdXRbN10gID0gIChhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xuICAgIG91dFs4XSAgPSAgKGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSk7XG4gICAgb3V0WzldICA9IC0oYTAwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpKTtcbiAgICBvdXRbMTBdID0gIChhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xuICAgIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XG4gICAgb3V0WzEyXSA9IC0oYTEwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMyIC0gYTEyICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpKTtcbiAgICBvdXRbMTNdID0gIChhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkpO1xuICAgIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XG4gICAgb3V0WzE1XSA9ICAoYTAwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcbiAqXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcbiAqL1xubWF0NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXG5cbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXG4gICAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXG4gICAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXG4gICAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXG4gICAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcbiAgICByZXR1cm4gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xufTtcblxuLyoqXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0J3NcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV07XG5cbiAgICAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcbiAgICB2YXIgYjAgID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXTtcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xuICAgIG91dFsyXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcbiAgICBvdXRbM10gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG5cbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdOyBiMyA9IGJbN107XG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFs1XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbNl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XG4gICAgb3V0WzddID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xuXG4gICAgYjAgPSBiWzhdOyBiMSA9IGJbOV07IGIyID0gYlsxMF07IGIzID0gYlsxMV07XG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbMTBdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xuICAgIG91dFsxMV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG5cbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdOyBiMyA9IGJbMTVdO1xuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xuICAgIG91dFsxNV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogTXVsdGlwbGllcyB0d28gYWZmaW5lIG1hdDQnc1xuICogQWRkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQubXVsdGlwbHlBZmZpbmUgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLFxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdO1xuXG4gICAgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdO1xuICAgIG91dFswXSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xuICAgIC8vIG91dFszXSA9IDA7XG5cbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdO1xuICAgIG91dFs0XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcbiAgICBvdXRbNV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xuICAgIC8vIG91dFs3XSA9IDA7XG5cbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTtcbiAgICBvdXRbOF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XG4gICAgLy8gb3V0WzExXSA9IDA7XG5cbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdO1xuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBhMzA7XG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGEzMTtcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYTMyO1xuICAgIC8vIG91dFsxNV0gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5tYXQ0Lm11bCA9IG1hdDQubXVsdGlwbHk7XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5QWZmaW5lfVxuICogQGZ1bmN0aW9uXG4gKi9cbm1hdDQubXVsQWZmaW5lID0gbWF0NC5tdWx0aXBseUFmZmluZTtcbi8qKlxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXSwgeiA9IHZbMl0sXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxuICAgICAgICBhMjAsIGEyMSwgYTIyLCBhMjM7XG5cbiAgICBpZiAoYSA9PT0gb3V0KSB7XG4gICAgICAgIG91dFsxMl0gPSBhWzBdICogeCArIGFbNF0gKiB5ICsgYVs4XSAqIHogKyBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xuICAgICAgICBvdXRbMTVdID0gYVszXSAqIHggKyBhWzddICogeSArIGFbMTFdICogeiArIGFbMTVdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGEwMCA9IGFbMF07IGEwMSA9IGFbMV07IGEwMiA9IGFbMl07IGEwMyA9IGFbM107XG4gICAgICAgIGExMCA9IGFbNF07IGExMSA9IGFbNV07IGExMiA9IGFbNl07IGExMyA9IGFbN107XG4gICAgICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcblxuICAgICAgICBvdXRbMF0gPSBhMDA7IG91dFsxXSA9IGEwMTsgb3V0WzJdID0gYTAyOyBvdXRbM10gPSBhMDM7XG4gICAgICAgIG91dFs0XSA9IGExMDsgb3V0WzVdID0gYTExOyBvdXRbNl0gPSBhMTI7IG91dFs3XSA9IGExMztcbiAgICAgICAgb3V0WzhdID0gYTIwOyBvdXRbOV0gPSBhMjE7IG91dFsxMF0gPSBhMjI7IG91dFsxMV0gPSBhMjM7XG5cbiAgICAgICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xuICAgICAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XG4gICAgICAgIG91dFsxNF0gPSBhMDIgKiB4ICsgYTEyICogeSArIGEyMiAqIHogKyBhWzE0XTtcbiAgICAgICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjM1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxuICogQHBhcmFtIHt2ZWMzfSB2IHRoZSB2ZWMzIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqKi9cbm1hdDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXTtcblxuICAgIG91dFswXSA9IGFbMF0gKiB4O1xuICAgIG91dFsxXSA9IGFbMV0gKiB4O1xuICAgIG91dFsyXSA9IGFbMl0gKiB4O1xuICAgIG91dFszXSA9IGFbM10gKiB4O1xuICAgIG91dFs0XSA9IGFbNF0gKiB5O1xuICAgIG91dFs1XSA9IGFbNV0gKiB5O1xuICAgIG91dFs2XSA9IGFbNl0gKiB5O1xuICAgIG91dFs3XSA9IGFbN10gKiB5O1xuICAgIG91dFs4XSA9IGFbOF0gKiB6O1xuICAgIG91dFs5XSA9IGFbOV0gKiB6O1xuICAgIG91dFsxMF0gPSBhWzEwXSAqIHo7XG4gICAgb3V0WzExXSA9IGFbMTFdICogejtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkLCBheGlzKSB7XG4gICAgdmFyIHggPSBheGlzWzBdLCB5ID0gYXhpc1sxXSwgeiA9IGF4aXNbMl0sXG4gICAgICAgIGxlbiA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopLFxuICAgICAgICBzLCBjLCB0LFxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXG4gICAgICAgIGExMCwgYTExLCBhMTIsIGExMyxcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzLFxuICAgICAgICBiMDAsIGIwMSwgYjAyLFxuICAgICAgICBiMTAsIGIxMSwgYjEyLFxuICAgICAgICBiMjAsIGIyMSwgYjIyO1xuXG4gICAgaWYgKE1hdGguYWJzKGxlbikgPCBHTE1BVF9FUFNJTE9OKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHggKj0gbGVuO1xuICAgIHkgKj0gbGVuO1xuICAgIHogKj0gbGVuO1xuXG4gICAgcyA9IE1hdGguc2luKHJhZCk7XG4gICAgYyA9IE1hdGguY29zKHJhZCk7XG4gICAgdCA9IDEgLSBjO1xuXG4gICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcbiAgICBhMTAgPSBhWzRdOyBhMTEgPSBhWzVdOyBhMTIgPSBhWzZdOyBhMTMgPSBhWzddO1xuICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgZWxlbWVudHMgb2YgdGhlIHJvdGF0aW9uIG1hdHJpeFxuICAgIGIwMCA9IHggKiB4ICogdCArIGM7IGIwMSA9IHkgKiB4ICogdCArIHogKiBzOyBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcbiAgICBiMTAgPSB4ICogeSAqIHQgLSB6ICogczsgYjExID0geSAqIHkgKiB0ICsgYzsgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gICAgYjIwID0geCAqIHogKiB0ICsgeSAqIHM7IGIyMSA9IHkgKiB6ICogdCAtIHggKiBzOyBiMjIgPSB6ICogeiAqIHQgKyBjO1xuXG4gICAgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cbiAgICBvdXRbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XG4gICAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xuICAgIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcbiAgICBvdXRbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XG4gICAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xuICAgIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcbiAgICBvdXRbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XG4gICAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xuICAgIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcbiAgICBvdXRbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XG4gICAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcbiAgICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xuXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgICAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgICAgICBvdXRbMTVdID0gYVsxNV07XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXG4gKlxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcbiAgICAgICAgYTEwID0gYVs0XSxcbiAgICAgICAgYTExID0gYVs1XSxcbiAgICAgICAgYTEyID0gYVs2XSxcbiAgICAgICAgYTEzID0gYVs3XSxcbiAgICAgICAgYTIwID0gYVs4XSxcbiAgICAgICAgYTIxID0gYVs5XSxcbiAgICAgICAgYTIyID0gYVsxMF0sXG4gICAgICAgIGEyMyA9IGFbMTFdO1xuXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXG4gICAgICAgIG91dFswXSAgPSBhWzBdO1xuICAgICAgICBvdXRbMV0gID0gYVsxXTtcbiAgICAgICAgb3V0WzJdICA9IGFbMl07XG4gICAgICAgIG91dFszXSAgPSBhWzNdO1xuICAgICAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgICAgICBvdXRbMTVdID0gYVsxNV07XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuICAgIG91dFs0XSA9IGExMCAqIGMgKyBhMjAgKiBzO1xuICAgIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xuICAgIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xuICAgIG91dFs3XSA9IGExMyAqIGMgKyBhMjMgKiBzO1xuICAgIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xuICAgIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xuICAgIG91dFsxMF0gPSBhMjIgKiBjIC0gYTEyICogcztcbiAgICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0LnJvdGF0ZVkgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxuICAgICAgICBhMDAgPSBhWzBdLFxuICAgICAgICBhMDEgPSBhWzFdLFxuICAgICAgICBhMDIgPSBhWzJdLFxuICAgICAgICBhMDMgPSBhWzNdLFxuICAgICAgICBhMjAgPSBhWzhdLFxuICAgICAgICBhMjEgPSBhWzldLFxuICAgICAgICBhMjIgPSBhWzEwXSxcbiAgICAgICAgYTIzID0gYVsxMV07XG5cbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcbiAgICAgICAgb3V0WzRdICA9IGFbNF07XG4gICAgICAgIG91dFs1XSAgPSBhWzVdO1xuICAgICAgICBvdXRbNl0gID0gYVs2XTtcbiAgICAgICAgb3V0WzddICA9IGFbN107XG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG4gICAgb3V0WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XG4gICAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XG4gICAgb3V0WzJdID0gYTAyICogYyAtIGEyMiAqIHM7XG4gICAgb3V0WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XG4gICAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XG4gICAgb3V0WzldID0gYTAxICogcyArIGEyMSAqIGM7XG4gICAgb3V0WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xuICAgIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXG4gICAgICAgIGEwMCA9IGFbMF0sXG4gICAgICAgIGEwMSA9IGFbMV0sXG4gICAgICAgIGEwMiA9IGFbMl0sXG4gICAgICAgIGEwMyA9IGFbM10sXG4gICAgICAgIGExMCA9IGFbNF0sXG4gICAgICAgIGExMSA9IGFbNV0sXG4gICAgICAgIGExMiA9IGFbNl0sXG4gICAgICAgIGExMyA9IGFbN107XG5cbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgICAgIG91dFs4XSAgPSBhWzhdO1xuICAgICAgICBvdXRbOV0gID0gYVs5XTtcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xuICAgICAgICBvdXRbMTFdID0gYVsxMV07XG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgICAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG4gICAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XG4gICAgb3V0WzFdID0gYTAxICogYyArIGExMSAqIHM7XG4gICAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XG4gICAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XG4gICAgb3V0WzRdID0gYTEwICogYyAtIGEwMCAqIHM7XG4gICAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XG4gICAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XG4gICAgb3V0WzddID0gYTEzICogYyAtIGEwMyAqIHM7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcbiAqXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xuICogICAgIHZhciBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uIChvdXQsIHEsIHYpIHtcbiAgICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM10sXG4gICAgICAgIHgyID0geCArIHgsXG4gICAgICAgIHkyID0geSArIHksXG4gICAgICAgIHoyID0geiArIHosXG5cbiAgICAgICAgeHggPSB4ICogeDIsXG4gICAgICAgIHh5ID0geCAqIHkyLFxuICAgICAgICB4eiA9IHggKiB6MixcbiAgICAgICAgeXkgPSB5ICogeTIsXG4gICAgICAgIHl6ID0geSAqIHoyLFxuICAgICAgICB6eiA9IHogKiB6MixcbiAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgIHd5ID0gdyAqIHkyLFxuICAgICAgICB3eiA9IHcgKiB6MjtcblxuICAgIG91dFswXSA9IDEgLSAoeXkgKyB6eik7XG4gICAgb3V0WzFdID0geHkgKyB3ejtcbiAgICBvdXRbMl0gPSB4eiAtIHd5O1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0geHkgLSB3ejtcbiAgICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xuICAgIG91dFs2XSA9IHl6ICsgd3g7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSB4eiArIHd5O1xuICAgIG91dFs5XSA9IHl6IC0gd3g7XG4gICAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XG4gICAgb3V0WzExXSA9IDA7XG4gICAgb3V0WzEyXSA9IHZbMF07XG4gICAgb3V0WzEzXSA9IHZbMV07XG4gICAgb3V0WzE0XSA9IHZbMl07XG4gICAgb3V0WzE1XSA9IDE7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxubWF0NC5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM10sXG4gICAgICAgIHgyID0geCArIHgsXG4gICAgICAgIHkyID0geSArIHksXG4gICAgICAgIHoyID0geiArIHosXG5cbiAgICAgICAgeHggPSB4ICogeDIsXG4gICAgICAgIHl4ID0geSAqIHgyLFxuICAgICAgICB5eSA9IHkgKiB5MixcbiAgICAgICAgenggPSB6ICogeDIsXG4gICAgICAgIHp5ID0geiAqIHkyLFxuICAgICAgICB6eiA9IHogKiB6MixcbiAgICAgICAgd3ggPSB3ICogeDIsXG4gICAgICAgIHd5ID0gdyAqIHkyLFxuICAgICAgICB3eiA9IHcgKiB6MjtcblxuICAgIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICAgIG91dFsxXSA9IHl4ICsgd3o7XG4gICAgb3V0WzJdID0genggLSB3eTtcbiAgICBvdXRbM10gPSAwO1xuXG4gICAgb3V0WzRdID0geXggLSB3ejtcbiAgICBvdXRbNV0gPSAxIC0geHggLSB6ejtcbiAgICBvdXRbNl0gPSB6eSArIHd4O1xuICAgIG91dFs3XSA9IDA7XG5cbiAgICBvdXRbOF0gPSB6eCArIHd5O1xuICAgIG91dFs5XSA9IHp5IC0gd3g7XG4gICAgb3V0WzEwXSA9IDEgLSB4eCAtIHl5O1xuICAgIG91dFsxMV0gPSAwO1xuXG4gICAgb3V0WzEyXSA9IDA7XG4gICAgb3V0WzEzXSA9IDA7XG4gICAgb3V0WzE0XSA9IDA7XG4gICAgb3V0WzE1XSA9IDE7XG5cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBmcnVzdHVtIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXG4gKiBAcGFyYW0ge051bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEBwYXJhbSB7TnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge051bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtOdW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5mcnVzdHVtID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgICB2YXIgcmwgPSAxIC8gKHJpZ2h0IC0gbGVmdCksXG4gICAgICAgIHRiID0gMSAvICh0b3AgLSBib3R0b20pLFxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzBdID0gKG5lYXIgKiAyKSAqIHJsO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzVdID0gKG5lYXIgKiAyKSAqIHRiO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xuICAgIG91dFs5XSA9ICh0b3AgKyBib3R0b20pICogdGI7XG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICAgIG91dFsxMV0gPSAtMTtcbiAgICBvdXRbMTJdID0gMDtcbiAgICBvdXRbMTNdID0gMDtcbiAgICBvdXRbMTRdID0gKGZhciAqIG5lYXIgKiAyKSAqIG5mO1xuICAgIG91dFsxNV0gPSAwO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xuICpcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGFzcGVjdCBBc3BlY3QgcmF0aW8uIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aC9oZWlnaHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XG4gKi9cbm1hdDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbiAob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICAgIHZhciBmID0gMS4wIC8gTWF0aC50YW4oZm92eSAvIDIpLFxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzBdID0gZiAvIGFzcGVjdDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IGY7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gICAgb3V0WzExXSA9IC0xO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAoMiAqIGZhciAqIG5lYXIpICogbmY7XG4gICAgb3V0WzE1XSA9IDA7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgb3J0aG9nb25hbCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXG4gKiBAcGFyYW0ge251bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcbiAqL1xubWF0NC5vcnRobyA9IGZ1bmN0aW9uIChvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gICAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpLFxuICAgICAgICBidCA9IDEgLyAoYm90dG9tIC0gdG9wKSxcbiAgICAgICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICAgIG91dFswXSA9IC0yICogbHI7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNV0gPSAtMiAqIGJ0O1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAwO1xuICAgIG91dFs5XSA9IDA7XG4gICAgb3V0WzEwXSA9IDIgKiBuZjtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcbiAgICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcbiAgICBvdXRbMTRdID0gKGZhciArIG5lYXIpICogbmY7XG4gICAgb3V0WzE1XSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbG9vay1hdCBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXNcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXG4gKiBAcGFyYW0ge3ZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxuICogQHJldHVybnMge21hdDR9IG91dFxuICovXG5tYXQ0Lmxvb2tBdCA9IGZ1bmN0aW9uIChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICAgIHZhciB4MCwgeDEsIHgyLCB5MCwgeTEsIHkyLCB6MCwgejEsIHoyLCBsZW4sXG4gICAgICAgIGV5ZXggPSBleWVbMF0sXG4gICAgICAgIGV5ZXkgPSBleWVbMV0sXG4gICAgICAgIGV5ZXogPSBleWVbMl0sXG4gICAgICAgIHVweCA9IHVwWzBdLFxuICAgICAgICB1cHkgPSB1cFsxXSxcbiAgICAgICAgdXB6ID0gdXBbMl0sXG4gICAgICAgIGNlbnRlcnggPSBjZW50ZXJbMF0sXG4gICAgICAgIGNlbnRlcnkgPSBjZW50ZXJbMV0sXG4gICAgICAgIGNlbnRlcnogPSBjZW50ZXJbMl07XG5cbiAgICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgR0xNQVRfRVBTSUxPTiAmJlxuICAgICAgICBNYXRoLmFicyhleWV5IC0gY2VudGVyeSkgPCBHTE1BVF9FUFNJTE9OICYmXG4gICAgICAgIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IEdMTUFUX0VQU0lMT04pIHtcbiAgICAgICAgcmV0dXJuIG1hdDQuaWRlbnRpdHkob3V0KTtcbiAgICB9XG5cbiAgICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xuICAgIHoxID0gZXlleSAtIGNlbnRlcnk7XG4gICAgejIgPSBleWV6IC0gY2VudGVyejtcblxuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQoejAgKiB6MCArIHoxICogejEgKyB6MiAqIHoyKTtcbiAgICB6MCAqPSBsZW47XG4gICAgejEgKj0gbGVuO1xuICAgIHoyICo9IGxlbjtcblxuICAgIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcbiAgICB4MSA9IHVweiAqIHowIC0gdXB4ICogejI7XG4gICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xuICAgIGlmICghbGVuKSB7XG4gICAgICAgIHgwID0gMDtcbiAgICAgICAgeDEgPSAwO1xuICAgICAgICB4MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcbiAgICAgICAgeDAgKj0gbGVuO1xuICAgICAgICB4MSAqPSBsZW47XG4gICAgICAgIHgyICo9IGxlbjtcbiAgICB9XG5cbiAgICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xuICAgIHkxID0gejIgKiB4MCAtIHowICogeDI7XG4gICAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcblxuICAgIGxlbiA9IE1hdGguc3FydCh5MCAqIHkwICsgeTEgKiB5MSArIHkyICogeTIpO1xuICAgIGlmICghbGVuKSB7XG4gICAgICAgIHkwID0gMDtcbiAgICAgICAgeTEgPSAwO1xuICAgICAgICB5MiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcbiAgICAgICAgeTAgKj0gbGVuO1xuICAgICAgICB5MSAqPSBsZW47XG4gICAgICAgIHkyICo9IGxlbjtcbiAgICB9XG5cbiAgICBvdXRbMF0gPSB4MDtcbiAgICBvdXRbMV0gPSB5MDtcbiAgICBvdXRbMl0gPSB6MDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IHgxO1xuICAgIG91dFs1XSA9IHkxO1xuICAgIG91dFs2XSA9IHoxO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0geDI7XG4gICAgb3V0WzldID0geTI7XG4gICAgb3V0WzEwXSA9IHoyO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAtKHgwICogZXlleCArIHgxICogZXlleSArIHgyICogZXlleik7XG4gICAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcbiAgICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xuICAgIG91dFsxNV0gPSAxO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDRcbiAqXG4gKiBAcGFyYW0ge21hdDR9IG1hdCBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxuICovXG5tYXQ0LnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICdtYXQ0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJywgJyArXG4gICAgICAgICAgICAgICAgICAgIGFbNF0gKyAnLCAnICsgYVs1XSArICcsICcgKyBhWzZdICsgJywgJyArIGFbN10gKyAnLCAnICtcbiAgICAgICAgICAgICAgICAgICAgYVs4XSArICcsICcgKyBhWzldICsgJywgJyArIGFbMTBdICsgJywgJyArIGFbMTFdICsgJywgJyArXG4gICAgICAgICAgICAgICAgICAgIGFbMTJdICsgJywgJyArIGFbMTNdICsgJywgJyArIGFbMTRdICsgJywgJyArIGFbMTVdICsgJyknO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxuICpcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cbiAqL1xubWF0NC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSArIE1hdGgucG93KGFbOV0sIDIpICsgTWF0aC5wb3coYVsxMF0sIDIpICsgTWF0aC5wb3coYVsxMV0sIDIpICsgTWF0aC5wb3coYVsxMl0sIDIpICsgTWF0aC5wb3coYVsxM10sIDIpICsgTWF0aC5wb3coYVsxNF0sIDIpICsgTWF0aC5wb3coYVsxNV0sIDIpICkpXG59O1xuXG5cbmlmKHR5cGVvZihleHBvcnRzKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBleHBvcnRzLm1hdDQgPSBtYXQ0O1xufVxuO1xuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXG5cbi8qKlxuICogQGNsYXNzIFF1YXRlcm5pb25cbiAqIEBuYW1lIHF1YXRcbiAqL1xuXG52YXIgcXVhdCA9IHt9O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxuICpcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXG4gKi9cbnF1YXQuY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDE7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogU2V0cyBhIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIG9uZVxuICogdmVjdG9yIHRvIGFub3RoZXIuXG4gKlxuICogQm90aCB2ZWN0b3JzIGFyZSBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoLlxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvbi5cbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgaW5pdGlhbCB2ZWN0b3JcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcbiAgICB2YXIgdG1wdmVjMyA9IHZlYzMuY3JlYXRlKCk7XG4gICAgdmFyIHhVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygxLDAsMCk7XG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcbiAgICAgICAgaWYgKGRvdCA8IC0wLjk5OTk5OSkge1xuICAgICAgICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCB4VW5pdFZlYzMsIGEpO1xuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXG4gICAgICAgICAgICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCB5VW5pdFZlYzMsIGEpO1xuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wdmVjMywgdG1wdmVjMyk7XG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xuICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgfSBlbHNlIGlmIChkb3QgPiAwLjk5OTk5OSkge1xuICAgICAgICAgICAgb3V0WzBdID0gMDtcbiAgICAgICAgICAgIG91dFsxXSA9IDA7XG4gICAgICAgICAgICBvdXRbMl0gPSAwO1xuICAgICAgICAgICAgb3V0WzNdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xuICAgICAgICAgICAgb3V0WzBdID0gdG1wdmVjM1swXTtcbiAgICAgICAgICAgIG91dFsxXSA9IHRtcHZlYzNbMV07XG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xuICAgICAgICAgICAgb3V0WzNdID0gMSArIGRvdDtcbiAgICAgICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XG4gICAgICAgIH1cbiAgICB9O1xufSkoKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBzcGVjaWZpZWQgcXVhdGVybmlvbiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlblxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXG4gKiBwZXJwZW5kaWN1bGFyIHRvIGFsbCBvdGhlciBzcGVjaWZpZWQgYXhlcy5cbiAqXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxuICogQHBhcmFtIHt2ZWMzfSByaWdodCB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJyaWdodFwiIGRpcmVjdGlvblxuICogQHBhcmFtIHt2ZWMzfSB1cCAgICB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJ1cFwiIGRpcmVjdGlvblxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LnNldEF4ZXMgPSAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgdmlldywgcmlnaHQsIHVwKSB7XG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcbiAgICAgICAgbWF0clszXSA9IHJpZ2h0WzFdO1xuICAgICAgICBtYXRyWzZdID0gcmlnaHRbMl07XG5cbiAgICAgICAgbWF0clsxXSA9IHVwWzBdO1xuICAgICAgICBtYXRyWzRdID0gdXBbMV07XG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcblxuICAgICAgICBtYXRyWzJdID0gLXZpZXdbMF07XG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcbiAgICAgICAgbWF0cls4XSA9IC12aWV3WzJdO1xuXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XG4gICAgfTtcbn0pKCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgcXVhdGVybmlvblxuICpcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIGNsb25lXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuY2xvbmUgPSB2ZWM0LmNsb25lO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cbiAqIEBmdW5jdGlvblxuICovXG5xdWF0LmZyb21WYWx1ZXMgPSB2ZWM0LmZyb21WYWx1ZXM7XG5cbi8qKlxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHF1YXQgdG8gYW5vdGhlclxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBzb3VyY2UgcXVhdGVybmlvblxuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuY29weSA9IHZlYzQuY29weTtcblxuLyoqXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKiBAZnVuY3Rpb25cbiAqL1xucXVhdC5zZXQgPSB2ZWM0LnNldDtcblxuLyoqXG4gKiBTZXQgYSBxdWF0IHRvIHRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uXG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAxO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxuICogdGhlbiByZXR1cm5zIGl0LlxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIGFyb3VuZCB3aGljaCB0byByb3RhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqKi9cbnF1YXQuc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24ob3V0LCBheGlzLCByYWQpIHtcbiAgICByYWQgPSByYWQgKiAwLjU7XG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICAgIG91dFswXSA9IHMgKiBheGlzWzBdO1xuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xuICAgIG91dFsyXSA9IHMgKiBheGlzWzJdO1xuICAgIG91dFszXSA9IE1hdGguY29zKHJhZCk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQWRkcyB0d28gcXVhdCdzXG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqIEBmdW5jdGlvblxuICovXG5xdWF0LmFkZCA9IHZlYzQuYWRkO1xuXG4vKipcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XG5cbiAgICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5O1xuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcbiAgICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5tdWx0aXBseX1cbiAqIEBmdW5jdGlvblxuICovXG5xdWF0Lm11bCA9IHF1YXQubXVsdGlwbHk7XG5cbi8qKlxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKiBAZnVuY3Rpb25cbiAqL1xucXVhdC5zY2FsZSA9IHZlYzQuc2NhbGU7XG5cbi8qKlxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcbiAgICByYWQgKj0gMC41O1xuXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcbiAgICAgICAgYnggPSBNYXRoLnNpbihyYWQpLCBidyA9IE1hdGguY29zKHJhZCk7XG5cbiAgICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieDtcbiAgICBvdXRbMV0gPSBheSAqIGJ3ICsgYXogKiBieDtcbiAgICBvdXRbMl0gPSBheiAqIGJ3IC0gYXkgKiBieDtcbiAgICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieDtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XG4gKi9cbnF1YXQucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xuICAgIHJhZCAqPSAwLjU7XG5cbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxuICAgICAgICBieSA9IE1hdGguc2luKHJhZCksIGJ3ID0gTWF0aC5jb3MocmFkKTtcblxuICAgIG91dFswXSA9IGF4ICogYncgLSBheiAqIGJ5O1xuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5O1xuICAgIG91dFsyXSA9IGF6ICogYncgKyBheCAqIGJ5O1xuICAgIG91dFszXSA9IGF3ICogYncgLSBheSAqIGJ5O1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqL1xucXVhdC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcmFkICo9IDAuNTtcblxuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLCBhdyA9IGFbM10sXG4gICAgICAgIGJ6ID0gTWF0aC5zaW4ocmFkKSwgYncgPSBNYXRoLmNvcyhyYWQpO1xuXG4gICAgb3V0WzBdID0gYXggKiBidyArIGF5ICogYno7XG4gICAgb3V0WzFdID0gYXkgKiBidyAtIGF4ICogYno7XG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYno7XG4gICAgb3V0WzNdID0gYXcgKiBidyAtIGF6ICogYno7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgVyBjb21wb25lbnQgb2YgYSBxdWF0IGZyb20gdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMuXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LmNhbGN1bGF0ZVcgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl07XG5cbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgb3V0WzJdID0gejtcbiAgICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHF1YXQnc1xuICpcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuZG90ID0gdmVjNC5kb3Q7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQubGVycCA9IHZlYzQubGVycDtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0XG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50IGJldHdlZW4gdGhlIHR3byBpbnB1dHNcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqL1xucXVhdC5zbGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcbiAgICAvLyBiZW5jaG1hcmtzOlxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXG5cbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XG5cbiAgICB2YXIgICAgICAgIG9tZWdhLCBjb3NvbSwgc2lub20sIHNjYWxlMCwgc2NhbGUxO1xuXG4gICAgLy8gY2FsYyBjb3NpbmVcbiAgICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7XG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXG4gICAgaWYgKCBjb3NvbSA8IDAuMCApIHtcbiAgICAgICAgY29zb20gPSAtY29zb207XG4gICAgICAgIGJ4ID0gLSBieDtcbiAgICAgICAgYnkgPSAtIGJ5O1xuICAgICAgICBieiA9IC0gYno7XG4gICAgICAgIGJ3ID0gLSBidztcbiAgICB9XG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xuICAgIGlmICggKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxICkge1xuICAgICAgICAvLyBzdGFuZGFyZCBjYXNlIChzbGVycClcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xuICAgICAgICBzY2FsZTAgPSBNYXRoLnNpbigoMS4wIC0gdCkgKiBvbWVnYSkgLyBzaW5vbTtcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwiZnJvbVwiIGFuZCBcInRvXCIgcXVhdGVybmlvbnMgYXJlIHZlcnkgY2xvc2VcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xuICAgICAgICBzY2FsZTEgPSB0O1xuICAgIH1cbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXG4gICAgb3V0WzBdID0gc2NhbGUwICogYXggKyBzY2FsZTEgKiBieDtcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XG4gICAgb3V0WzNdID0gc2NhbGUwICogYXcgKyBzY2FsZTEgKiBidztcblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGludmVyc2Ugb2YgYSBxdWF0XG4gKlxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgaW52ZXJzZSBvZlxuICogQHJldHVybnMge3F1YXR9IG91dFxuICovXG5xdWF0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXG4gICAgICAgIGRvdCA9IGEwKmEwICsgYTEqYTEgKyBhMiphMiArIGEzKmEzLFxuICAgICAgICBpbnZEb3QgPSBkb3QgPyAxLjAvZG90IDogMDtcblxuICAgIC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXG5cbiAgICBvdXRbMF0gPSAtYTAqaW52RG90O1xuICAgIG91dFsxXSA9IC1hMSppbnZEb3Q7XG4gICAgb3V0WzJdID0gLWEyKmludkRvdDtcbiAgICBvdXRbM10gPSBhMyppbnZEb3Q7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIGEgcXVhdFxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcbiAqL1xucXVhdC5jb25qdWdhdGUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgb3V0WzBdID0gLWFbMF07XG4gICAgb3V0WzFdID0gLWFbMV07XG4gICAgb3V0WzJdID0gLWFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XG4gKlxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQubGVuZ3RoID0gdmVjNC5sZW5ndGg7XG5cbi8qKlxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lmxlbmd0aH1cbiAqIEBmdW5jdGlvblxuICovXG5xdWF0LmxlbiA9IHF1YXQubGVuZ3RoO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxuICpcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXG4gKiBAZnVuY3Rpb25cbiAqL1xucXVhdC5zcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuc3FyTGVuID0gcXVhdC5zcXVhcmVkTGVuZ3RoO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcbiAqXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQubm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cbiAqXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxuICogQHJldHVybnMge3F1YXR9IG91dFxuICogQGZ1bmN0aW9uXG4gKi9cbnF1YXQuZnJvbU1hdDMgPSBmdW5jdGlvbihvdXQsIG0pIHtcbiAgICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xuICAgIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxuICAgIHZhciBmVHJhY2UgPSBtWzBdICsgbVs0XSArIG1bOF07XG4gICAgdmFyIGZSb290O1xuXG4gICAgaWYgKCBmVHJhY2UgPiAwLjAgKSB7XG4gICAgICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgIC8vIDJ3XG4gICAgICAgIG91dFszXSA9IDAuNSAqIGZSb290O1xuICAgICAgICBmUm9vdCA9IDAuNS9mUm9vdDsgIC8vIDEvKDR3KVxuICAgICAgICBvdXRbMF0gPSAobVs1XS1tWzddKSpmUm9vdDtcbiAgICAgICAgb3V0WzFdID0gKG1bNl0tbVsyXSkqZlJvb3Q7XG4gICAgICAgIG91dFsyXSA9IChtWzFdLW1bM10pKmZSb290O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHx3fCA8PSAxLzJcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICBpZiAoIG1bNF0gPiBtWzBdIClcbiAgICAgICAgICBpID0gMTtcbiAgICAgICAgaWYgKCBtWzhdID4gbVtpKjMraV0gKVxuICAgICAgICAgIGkgPSAyO1xuICAgICAgICB2YXIgaiA9IChpKzEpJTM7XG4gICAgICAgIHZhciBrID0gKGkrMiklMztcblxuICAgICAgICBmUm9vdCA9IE1hdGguc3FydChtW2kqMytpXS1tW2oqMytqXS1tW2sqMytrXSArIDEuMCk7XG4gICAgICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xuICAgICAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xuICAgICAgICBvdXRbM10gPSAobVtqKjMra10gLSBtW2sqMytqXSkgKiBmUm9vdDtcbiAgICAgICAgb3V0W2pdID0gKG1baiozK2ldICsgbVtpKjMral0pICogZlJvb3Q7XG4gICAgICAgIG91dFtrXSA9IChtW2sqMytpXSArIG1baSozK2tdKSAqIGZSb290O1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBxdWF0ZW5pb25cbiAqXG4gKiBAcGFyYW0ge3F1YXR9IHZlYyB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxuICovXG5xdWF0LnN0ciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgcmV0dXJuICdxdWF0KCcgKyBhWzBdICsgJywgJyArIGFbMV0gKyAnLCAnICsgYVsyXSArICcsICcgKyBhWzNdICsgJyknO1xufTtcblxuaWYodHlwZW9mKGV4cG9ydHMpICE9PSAndW5kZWZpbmVkJykge1xuICAgIGV4cG9ydHMucXVhdCA9IHF1YXQ7XG59XG47XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgfSkoc2hpbS5leHBvcnRzKTtcbn0pKHRoaXMpOyIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzIgPSBnbE1hdHJpeC52ZWMyO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkubWF0aC5WZWN0b3IyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqL1xudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XG5cbiAgICB4ID0geCB8fCAwO1xuICAgIHkgPSB5IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5IGNvbXBvbmVudHNcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3IyI1xuICAgICAqL1xuICAgIHRoaXMuYXJyYXkgPSB2ZWMyLmZyb21WYWx1ZXMoeCwgeSk7XG5cbiAgICAvKipcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxuICAgICAqIEBuYW1lIF9kaXJ0eVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yMiNcbiAgICAgKi9cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG59O1xuXG5WZWN0b3IyLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxuXG4gICAgLyoqXG4gICAgICogQWRkIGIgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IGFyclswXTtcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcblxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IHgsIHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3Jvc3MgcHJvZHVjdCBvZiBzZWxmIGFuZCBiLCB3cml0dGVuIHRvIGEgVmVjdG9yMyBvdXRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XG4gICAgICAgIHZlYzIuY3Jvc3Mob3V0LmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZGlzdGFuY2VcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLmRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLmRpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBkaXY6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjMi5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIGRpdmlkZTogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWMyLmRpdmlkZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGRvdDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIGxlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBsZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjMi5sZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLmxlbmd0aCh0aGlzLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBsZXJwOiBmdW5jdGlvbihhLCBiLCB0KSB7XG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBtaW46IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgbWF4OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIG11bDogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBOZWdhdGUgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIG5lZ2F0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAgICAgKi9cbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XG4gICAgICAgIHZlYzIucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgc2VsZlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgdmVjMi5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uKGIsIHMpIHtcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjMi5zcXJMZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2ZWMyLnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzIuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjMi5zdWJ0cmFjdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDIgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MjogZnVuY3Rpb24obSkge1xuICAgICAgICB2ZWMyLnRyYW5zZm9ybU1hdDIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyZCBtXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MmQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDMgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24obSkge1xuICAgICAgICB2ZWMyLnRyYW5zZm9ybU1hdDModGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICAgICAqL1xuICAgIHRyYW5zZm9ybU1hdDQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbi8vIEdldHRlciBhbmQgU2V0dGVyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG5cbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IyLnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBAbmFtZSB4XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjJcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSB5XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjJcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMi5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB4XG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHkpIHtcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XG4gICAgdmVjMi5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzIuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjIuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMi5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLmRpdmlkZSA9IFZlY3RvcjIuZGl2O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIHZlYzIuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IyLmxlbiA9IGZ1bmN0aW9uKGIpIHtcbiAgICByZXR1cm4gdmVjMi5sZW5ndGgoYi5hcnJheSk7XG59O1xuXG4vLyBWZWN0b3IyLmxlbmd0aCA9IFZlY3RvcjIubGVuO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHBhcmFtICB7bnVtYmVyfSAgdFxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIubGVycCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgdCkge1xuICAgIHZlYzIubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMyLm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLm11bHRpcGx5ID0gVmVjdG9yMi5tdWw7XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2ZWMyLm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IyfVxuICovXG5WZWN0b3IyLnJhbmRvbSA9IGZ1bmN0aW9uKG91dCwgc2NhbGUpIHtcbiAgICB2ZWMyLnJhbmRvbShvdXQuYXJyYXksIHNjYWxlKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcbiAgICB2ZWMyLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMi5zcXJEaXN0ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWMyLnNxckRpc3QoYS5hcnJheSwgYi5hcnJheSk7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IyLnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjIuc3FyRGlzdDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IyLnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gdmVjMi5zcXJMZW4oYS5hcnJheSk7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjIuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjIuc3FyTGVuO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMi5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIuc3VidHJhY3QgPSBWZWN0b3IyLnN1Yjtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi50cmFuc2Zvcm1NYXQyID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gbVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2ZWMyLnRyYW5zZm9ybU1hdDJkKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yMn1cbiAqL1xuVmVjdG9yMi50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gKi9cblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xuICAgIHZlYzIudHJhbnNmb3JtTWF0NChvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xuIiwiLy8gMkQgQmxlbmQgY2xpcCBvZiBibGVuZCB0cmVlXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8yREJsZW5kaW5nLmh0bWxcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XG5pbXBvcnQgZGVsYXVuYXkgZnJvbSAnLi4vdXRpbC9kZWxhdW5heSc7XG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRcbiAqIEBwcm9wZXJ0eSB7Y2xheS5tYXRoLlZlY3RvcjJ9IHBvc2l0aW9uXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBvZmZzZXRcbiAqL1xuXG4vKipcbiAqIDJkIGJsZW5kaW5nIG5vZGUgaW4gYW5pbWF0aW9uIGJsZW5kIHRyZWUuXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMudGFyZ2V0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZ2FwXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBbb3B0cy5lYXNpbmddXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbnJlc3RhcnRdXG4gKiBAcGFyYW0ge29iamVjdFtdfSBbb3B0cy5pbnB1dHNdXG4gKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IyfSBbb3B0cy5wb3NpdGlvbl1cbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxuICovXG52YXIgQmxlbmQyRENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XG4gICAgLyoqXG4gICAgICogT3V0cHV0IGNsaXAgbXVzdCBoYXZlIGJsZW5kMkQgbWV0aG9kXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XG4gICAgICovXG4gICAgdGhpcy5vdXRwdXQgPSBvcHRzLm91dHB1dCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0W119XG4gICAgICovXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XG5cbiAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gbnVsbDtcblxuICAgIHRoaXMuX3RyaWFuZ2xlcyA9IFtdO1xuXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XG59O1xuXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xuQmxlbmQyRENsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxlbmQyRENsaXA7XG4vKipcbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjJ9IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0fVxuICovXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcbiAgICAgICAgY2xpcCA6IGlucHV0Q2xpcCxcbiAgICAgICAgb2Zmc2V0IDogb2Zmc2V0IHx8IDBcbiAgICB9O1xuICAgIHRoaXMuaW5wdXRzLnB1c2gob2JqKTtcbiAgICB0aGlzLmxpZmUgPSBNYXRoLm1heChpbnB1dENsaXAubGlmZSwgdGhpcy5saWZlKTtcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xuICAgIHRoaXMuX3VwZGF0ZVRyaWFuZ2xlcygpO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuX3VwZGF0ZVRyaWFuZ2xlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHMubWFwKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xuICAgIH0pO1xuICAgIHRoaXMuX3RyaWFuZ2xlcyA9IGRlbGF1bmF5LnRyaWFuZ3VsYXRlKGlucHV0cywgJ2FycmF5Jyk7XG59O1xuXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XG5cbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUpO1xuXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHRoaXMuZ2V0RWxhcHNlZFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gUEVORElORyBTY2hlZHVsZVxuICAgIGlmICghc2lsZW50ICYmIHJldCAhPT0gJ3BhdXNlZCcpIHtcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcblxuQmxlbmQyRENsaXAucHJvdG90eXBlLnNldFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbiBCYXJ5Y2VudHJpY1xuICAgIHZhciBhID0gcmVzWzFdOyAvLyBQZXJjZW50IG9mIGNsaXAyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcblxuICAgIHZhciB0cmkgPSByZXNbMF07XG5cbiAgICB2YXIgaW4xID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMF1dO1xuICAgIHZhciBpbjIgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1sxXV07XG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcbiAgICB2YXIgY2xpcDEgPSBpbjEuY2xpcDtcbiAgICB2YXIgY2xpcDIgPSBpbjIuY2xpcDtcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcblxuICAgIGNsaXAxLnNldFRpbWUoKHRpbWUgKyBpbjEub2Zmc2V0KSAlIGNsaXAxLmxpZmUpO1xuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xuICAgIGNsaXAzLnNldFRpbWUoKHRpbWUgKyBpbjMub2Zmc2V0KSAlIGNsaXAzLmxpZmUpO1xuXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xuICAgIHZhciBjMiA9IGNsaXAyLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMi5vdXRwdXQgOiBjbGlwMjtcbiAgICB2YXIgYzMgPSBjbGlwMy5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDMub3V0cHV0IDogY2xpcDM7XG5cbiAgICB0aGlzLm91dHB1dC5ibGVuZDJEKGMxLCBjMiwgYzMsIGEsIGIpO1xufTtcblxuLyoqXG4gKiBDbG9uZSBhIG5ldyBCbGVuZDJEIGNsaXBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwfVxuICovXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgY2xpcC5vdXRwdXQgPSB0aGlzLm91dHB1dC5jbG9uZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XG4gICAgICAgIGNsaXAuYWRkSW5wdXQodGhpcy5pbnB1dHNbaV0ucG9zaXRpb24sIGlucHV0Q2xpcCwgdGhpcy5pbnB1dHNbaV0ub2Zmc2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNsaXA7XG59O1xuXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuX2ZpbmRUcmlhbmdsZSA9IGZ1bmN0aW9uIChwb3NpdGlvbikge1xuICAgIGlmICh0aGlzLl9jYWNoZVRyaWFuZ2xlKSB7XG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5fY2FjaGVUcmlhbmdsZSwgcmVzWzBdLCByZXNbMV1dO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdHJpYW5nbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0cmkudmVydGljZXMsIHRoaXMucG9zaXRpb24uYXJyYXkpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xuICAgICAgICAgICAgcmV0dXJuIFt0cmksIHJlc1swXSwgcmVzWzFdXTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHF1YXQgPSBnbE1hdHJpeC5xdWF0O1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG5mdW5jdGlvbiBrZXlmcmFtZVNvcnQoYSwgYikge1xuICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XG59XG5cbnZhciBUcmFuc2Zvcm1UcmFjayA9IGZ1bmN0aW9uIChvcHRzKSB7XG5cbiAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWUgfHwgJyc7XG4gICAgLy9be1xuICAgIC8vICB0aW1lOiAvL21zXG4gICAgLy8gIHBvc2l0aW9uOiAgLy8gb3B0aW9uYWxcbiAgICAvLyAgcm90YXRpb246ICAvLyBvcHRpb25hbFxuICAgIC8vICBzY2FsZTogICAgIC8vIG9wdGlvbmFsXG4gICAgLy99XVxuICAgIHRoaXMua2V5RnJhbWVzID0gW107XG4gICAgaWYgKG9wdHMua2V5RnJhbWVzKSB7XG4gICAgICAgIHRoaXMuYWRkS2V5RnJhbWVzKG9wdHMua2V5RnJhbWVzKTtcbiAgICB9XG5cbiAgICB0aGlzLnBvc2l0aW9uID0gdmVjMy5jcmVhdGUoKTtcblxuICAgIHRoaXMucm90YXRpb24gPSBxdWF0LmNyZWF0ZSgpO1xuXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcblxuICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcbiAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGlwLnByb3RvdHlwZSk7XG5cblRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYW5zZm9ybVRyYWNrO1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XG5cbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUsIGRUaW1lLCB0cnVlKTtcblxuICAgIGlmIChyZXQgIT09ICdmaW5pc2gnKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh0aGlzLmdldEVsYXBzZWRUaW1lKCkpO1xuICAgIH1cblxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XG4gICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLnNldFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIHRoaXMuX2ludGVycG9sYXRlRmllbGQodGltZSwgJ3Bvc2l0aW9uJyk7XG4gICAgdGhpcy5faW50ZXJwb2xhdGVGaWVsZCh0aW1lLCAncm90YXRpb24nKTtcbiAgICB0aGlzLl9pbnRlcnBvbGF0ZUZpZWxkKHRpbWUsICdzY2FsZScpO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtmID0gdGhpcy5rZXlGcmFtZXNbdGhpcy5rZXlGcmFtZXMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIGtmID8ga2YudGltZSA6IDA7XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYWRkS2V5RnJhbWUgPSBmdW5jdGlvbiAoa2YpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMua2V5RnJhbWVzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICB2YXIgcHJldkZyYW1lID0gdGhpcy5rZXlGcmFtZXNbaV07XG4gICAgICAgIHZhciBuZXh0RnJhbWUgPSB0aGlzLmtleUZyYW1lc1tpICsgMV07XG4gICAgICAgIGlmIChwcmV2RnJhbWUudGltZSA8PSBrZi50aW1lICYmIG5leHRGcmFtZS50aW1lID49IGtmLnRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMua2V5RnJhbWVzLnNwbGljZShpLCAwLCBrZik7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGlmZSA9IGtmLnRpbWU7XG4gICAgdGhpcy5rZXlGcmFtZXMucHVzaChrZik7XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYWRkS2V5RnJhbWVzID0gZnVuY3Rpb24gKGtmcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2ZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMua2V5RnJhbWVzLnB1c2goa2ZzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLmtleUZyYW1lcy5zb3J0KGtleWZyYW1lU29ydCk7XG5cbiAgICB0aGlzLmxpZmUgPSB0aGlzLmtleUZyYW1lc1t0aGlzLmtleUZyYW1lcy5sZW5ndGggLSAxXS50aW1lO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLl9pbnRlcnBvbGF0ZUZpZWxkID0gZnVuY3Rpb24gKHRpbWUsIGZpZWxkTmFtZSkge1xuICAgIHZhciBrZnMgPSB0aGlzLmtleUZyYW1lcztcbiAgICB2YXIgbGVuID0ga2ZzLmxlbmd0aDtcbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIGVuZDtcblxuICAgIGlmICgha2ZzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aW1lIDwga2ZzWzBdLnRpbWUgfHwgdGltZSA+IGtmc1trZnMubGVuZ3RoLTFdLnRpbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGltZSA8IHRoaXMuX2NhY2hlVGltZSkge1xuICAgICAgICB2YXIgcyA9IHRoaXMuX2NhY2hlS2V5ID49IGxlbi0xID8gbGVuLTEgOiB0aGlzLl9jYWNoZUtleSsxO1xuICAgICAgICBmb3IgKHZhciBpID0gczsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChrZnNbaV0udGltZSA8PSB0aW1lICYmIGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBrZnNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgZW5kID0ga2ZzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NhY2hlS2V5OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChrZnNbaV0udGltZSA8PSB0aW1lICYmIGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBrZnNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtmc1tpXVtmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgZW5kID0ga2ZzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgICB2YXIgcGVyY2VudCA9ICh0aW1lIC0gc3RhcnQudGltZSkgLyAoZW5kLnRpbWUgLSBzdGFydC50aW1lKTtcbiAgICAgICAgcGVyY2VudCA9IE1hdGgubWF4KE1hdGgubWluKHBlcmNlbnQsIDEpLCAwKTtcbiAgICAgICAgaWYgKGZpZWxkTmFtZSA9PT0gJ3JvdGF0aW9uJykge1xuICAgICAgICAgICAgcXVhdC5zbGVycCh0aGlzW2ZpZWxkTmFtZV0sIHN0YXJ0W2ZpZWxkTmFtZV0sIGVuZFtmaWVsZE5hbWVdLCBwZXJjZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZlYzMubGVycCh0aGlzW2ZpZWxkTmFtZV0sIHN0YXJ0W2ZpZWxkTmFtZV0sIGVuZFtmaWVsZE5hbWVdLCBwZXJjZW50KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcbiAgICB9XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uICh0MSwgdDIsIHcpIHtcbiAgICB2ZWMzLmxlcnAodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uLCB3KTtcbiAgICB2ZWMzLmxlcnAodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlLCB3KTtcbiAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdyk7XG59O1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHExID0gcXVhdC5jcmVhdGUoKTtcbiAgICB2YXIgcTIgPSBxdWF0LmNyZWF0ZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyLCB0MywgZiwgZykge1xuICAgICAgICB2YXIgYSA9IDEgLSBmIC0gZztcblxuICAgICAgICB0aGlzLnBvc2l0aW9uWzBdID0gdDEucG9zaXRpb25bMF0gKiBhICsgdDIucG9zaXRpb25bMF0gKiBmICsgdDMucG9zaXRpb25bMF0gKiBnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uWzFdID0gdDEucG9zaXRpb25bMV0gKiBhICsgdDIucG9zaXRpb25bMV0gKiBmICsgdDMucG9zaXRpb25bMV0gKiBnO1xuICAgICAgICB0aGlzLnBvc2l0aW9uWzJdID0gdDEucG9zaXRpb25bMl0gKiBhICsgdDIucG9zaXRpb25bMl0gKiBmICsgdDMucG9zaXRpb25bMl0gKiBnO1xuXG4gICAgICAgIHRoaXMuc2NhbGVbMF0gPSB0MS5zY2FsZVswXSAqIGEgKyB0Mi5zY2FsZVswXSAqIGYgKyB0My5zY2FsZVswXSAqIGc7XG4gICAgICAgIHRoaXMuc2NhbGVbMV0gPSB0MS5zY2FsZVsxXSAqIGEgKyB0Mi5zY2FsZVsxXSAqIGYgKyB0My5zY2FsZVsxXSAqIGc7XG4gICAgICAgIHRoaXMuc2NhbGVbMl0gPSB0MS5zY2FsZVsyXSAqIGEgKyB0Mi5zY2FsZVsyXSAqIGYgKyB0My5zY2FsZVsyXSAqIGc7XG5cbiAgICAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjIwNTQwMyh2PXZzLjg1KS5hc3B4XG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbWljcm9zb2Z0LmRpcmVjdHhfc2RrLnF1YXRlcm5pb24ueG1xdWF0ZXJuaW9uYmFyeWNlbnRyaWModj12cy44NSkuYXNweFxuICAgICAgICB2YXIgcyA9IGYgKyBnO1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgcXVhdC5jb3B5KHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTEsIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgcyk7XG4gICAgICAgICAgICBxdWF0LnNsZXJwKHEyLCB0MS5yb3RhdGlvbiwgYzMucm90YXRpb24sIHMpO1xuICAgICAgICAgICAgcXVhdC5zbGVycCh0aGlzLnJvdGF0aW9uLCBxMSwgcTIsIGcgLyBzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSgpO1xuXG5UcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcbiAgICB2ZWMzLmFkZCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24pO1xuICAgIHZlYzMuYWRkKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSk7XG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdDEucm90YXRpb24pO1xufTtcblxuVHJhbnNmb3JtVHJhY2sucHJvdG90eXBlLnN1YnRyYWN0aXZlQmxlbmQgPSBmdW5jdGlvbiAodDEsIHQyKSB7XG4gICAgdmVjMy5zdWIodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uKTtcbiAgICB2ZWMzLnN1Yih0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xuICAgIHF1YXQuaW52ZXJ0KHRoaXMucm90YXRpb24sIHQyLnJvdGF0aW9uKTtcbiAgICBxdWF0Lm11bHRpcGx5KHRoaXMucm90YXRpb24sIHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcbn07XG5cblRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5nZXRTdWJDbGlwID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSkge1xuICAgIC8vIFRPRE9cbiAgICBjb25zb2xlLndhcm4oJ1RPRE8nKTtcbn07XG5cblRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHJhY2sgPSBUcmFuc2Zvcm1UcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICB0cmFjay5rZXlGcmFtZXMgPSB0aGlzLmtleUZyYW1lcztcblxuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XG4gICAgcXVhdC5jb3B5KHRyYWNrLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uKTtcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xuXG4gICAgcmV0dXJuIHRyYWNrO1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2Zvcm1UcmFjaztcbiIsIi8vIFNhbXBsZXIgY2xpcCBpcyBlc3BlY2lhbGx5IGZvciB0aGUgYW5pbWF0aW9uIHNhbXBsZXIgaW4gZ2xURlxuLy8gVXNlIFR5cGVkIEFycmF5IGNhbiByZWR1Y2UgYSBsb3Qgb2YgaGVhcCBtZW1vcnlcbi8vXG4vLyBUT0RPIFN5bmMgdGFyZ2V0IHRyYW5zZm9ybVxuXG5pbXBvcnQgVHJhbnNmb3JtVHJhY2sgZnJvbSAnLi9UcmFuc2Zvcm1UcmFjayc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHF1YXQgPSBnbE1hdHJpeC5xdWF0O1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG4vLyBsZXJwIGZ1bmN0aW9uIHdpdGggb2Zmc2V0IGluIGxhcmdlIGFycmF5XG5mdW5jdGlvbiB2ZWMzbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xuICAgIHZhciBheCA9IGFbb2FdO1xuICAgIHZhciBheSA9IGFbb2EgKyAxXTtcbiAgICB2YXIgYXogPSBhW29hICsgMl07XG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbb2JdIC0gYXgpO1xuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiW29iICsgMV0gLSBheSk7XG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbb2IgKyAyXSAtIGF6KTtcblxuICAgIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHF1YXRTbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xuICAgIC8vIGJlbmNobWFya3M6XG4gICAgLy8gICAgaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi1zbGVycC1pbXBsZW1lbnRhdGlvbnNcblxuICAgIHZhciBheCA9IGFbMCArIG9hXSwgYXkgPSBhWzEgKyBvYV0sIGF6ID0gYVsyICsgb2FdLCBhdyA9IGFbMyArIG9hXSxcbiAgICAgICAgYnggPSBiWzAgKyBvYl0sIGJ5ID0gYlsxICsgb2JdLCBieiA9IGJbMiArIG9iXSwgYncgPSBiWzMgKyBvYl07XG5cbiAgICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7XG5cbiAgICAvLyBjYWxjIGNvc2luZVxuICAgIGNvc29tID0gYXggKiBieCArIGF5ICogYnkgKyBheiAqIGJ6ICsgYXcgKiBidztcbiAgICAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcbiAgICBpZiAoY29zb20gPCAwLjApIHtcbiAgICAgICAgY29zb20gPSAtY29zb207XG4gICAgICAgIGJ4ID0gLSBieDtcbiAgICAgICAgYnkgPSAtIGJ5O1xuICAgICAgICBieiA9IC0gYno7XG4gICAgICAgIGJ3ID0gLSBidztcbiAgICB9XG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xuICAgIGlmICgoMS4wIC0gY29zb20pID4gMC4wMDAwMDEpIHtcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XG4gICAgICAgIHNpbm9tICA9IE1hdGguc2luKG9tZWdhKTtcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vICdmcm9tJyBhbmQgJ3RvJyBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxuICAgICAgICAvLyAgLi4uIHNvIHdlIGNhbiBkbyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XG4gICAgICAgIHNjYWxlMSA9IHQ7XG4gICAgfVxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xuICAgIG91dFsxXSA9IHNjYWxlMCAqIGF5ICsgc2NhbGUxICogYnk7XG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xuXG4gICAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBTYW1wbGVyVHJhY2sgbWFuYWdlcyBgcG9zaXRpb25gLCBgcm90YXRpb25gLCBgc2NhbGVgIHRyYWNrcyBpbiBhbmltYXRpb24gb2Ygc2luZ2xlIHNjZW5lIG5vZGUuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5uYW1lXSBUcmFjayBuYW1lXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW29wdHMudGFyZ2V0XSBUYXJnZXQgbm9kZSdzIHRyYW5zZm9ybSB3aWxsIHVwZGF0ZWQgYXV0b21hdGljYWxseVxuICovXG52YXIgU2FtcGxlclRyYWNrID0gZnVuY3Rpb24gKG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIHRoaXMubmFtZSA9IG9wdHMubmFtZSB8fCAnJztcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX1cbiAgICAgKi9cbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0IHx8IG51bGw7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gdmVjMy5jcmVhdGUoKTtcbiAgICAvKipcbiAgICAgKiBSb3RhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxuICAgICAqL1xuICAgIHRoaXMucm90YXRpb24gPSBxdWF0LmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICovXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcblxuICAgIHRoaXMuY2hhbm5lbHMgPSB7XG4gICAgICAgIHRpbWU6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgICByb3RhdGlvbjogbnVsbCxcbiAgICAgICAgc2NhbGU6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xuICAgIHRoaXMuX2NhY2hlVGltZSA9IDA7XG59O1xuXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLnNldFRpbWUgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIGlmICghdGhpcy5jaGFubmVscy50aW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XG4gICAgdmFyIGtleSA9IC0xO1xuICAgIC8vIE9ubHkgb25lIGZyYW1lXG4gICAgaWYgKGxlbiA9PT0gMSkge1xuICAgICAgICBpZiAoY2hhbm5lbHMucm90YXRpb24pIHtcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5uZWxzLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIENsYW1wXG4gICAgZWxzZSBpZiAodGltZSA8PSBjaGFubmVscy50aW1lWzBdKSB7XG4gICAgICAgIHRpbWUgPSBjaGFubmVscy50aW1lWzBdO1xuICAgICAgICBrZXkgPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lID49IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV0pIHtcbiAgICAgICAgdGltZSA9IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV07XG4gICAgICAgIGtleSA9IGxlbiAtIDI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAodGltZSA8IHRoaXMuX2NhY2hlVGltZSkge1xuICAgICAgICAgICAgdmFyIHMgPSBNYXRoLm1pbihsZW4gLSAxLCB0aGlzLl9jYWNoZUtleSArIDEpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaSAtIDFdIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpXSA+IHRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpICsgMV0gPiB0aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoa2V5ID4gLTEpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XG4gICAgICAgIHZhciBzdGFydCA9IGtleTtcbiAgICAgICAgdmFyIGVuZCA9IGtleSArIDE7XG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcbiAgICAgICAgdmFyIGVuZFRpbWUgPSBjaGFubmVscy50aW1lW2VuZF07XG4gICAgICAgIHZhciByYW5nZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgICAgIHZhciBwZXJjZW50ID0gcmFuZ2UgPT09IDAgPyAwIDogKHRpbWUgLSBzdGFydFRpbWUpIC8gcmFuZ2U7XG5cbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICBxdWF0U2xlcnAodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIGNoYW5uZWxzLnJvdGF0aW9uLCBwZXJjZW50LCBzdGFydCAqIDQsIGVuZCAqIDQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIExvb3AgaGFuZGxpbmdcbiAgICBpZiAoa2V5ID09IGxlbiAtIDIpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xuICAgICAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0cmFuc2Zvcm0gb2YgdGFyZ2V0IG5vZGUgbWFudWFsbHlcbiAqL1xuU2FtcGxlclRyYWNrLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcbiAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgLy8gT25seSB1cGRhdGUgdGFyZ2V0IHByb3AgaWYgaGF2ZSBkYXRhLlxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBvc2l0aW9uLnNldEFycmF5KHRoaXMucG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xuICAgICAgICAgICAgdGhpcy50YXJnZXQucm90YXRpb24uc2V0QXJyYXkodGhpcy5yb3RhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5zY2FsZS5zZXRBcnJheSh0aGlzLnNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbm5lbHMudGltZVt0aGlzLmNoYW5uZWxzLnRpbWUubGVuZ3RoIC0gMV07XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9XG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0U3ViVHJhY2sgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKSB7XG5cbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBTYW1wbGVyVHJhY2soe1xuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9KTtcbiAgICB2YXIgbWluVGltZSA9IHRoaXMuY2hhbm5lbHMudGltZVswXTtcbiAgICBzdGFydFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xuICAgIGVuZFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChlbmRUaW1lLCBtaW5UaW1lKSwgdGhpcy5saWZlKTtcblxuICAgIHZhciByYW5nZVN0YXJ0ID0gdGhpcy5fZmluZFJhbmdlKHN0YXJ0VGltZSk7XG4gICAgdmFyIHJhbmdlRW5kID0gdGhpcy5fZmluZFJhbmdlKGVuZFRpbWUpO1xuXG4gICAgdmFyIGNvdW50ID0gcmFuZ2VFbmRbMF0gLSByYW5nZVN0YXJ0WzBdICsgMTtcbiAgICBpZiAocmFuZ2VTdGFydFsxXSA9PT0gMCAmJiByYW5nZUVuZFsxXSA9PT0gMCkge1xuICAgICAgICBjb3VudCAtPSAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy5yb3RhdGlvbikge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy5wb3NpdGlvbikge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy5zY2FsZSkge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFubmVscy50aW1lKSB7XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpO1xuICAgIH1cbiAgICAvLyBDbGlwIGF0IHRoZSBzdGFydFxuICAgIHRoaXMuc2V0VGltZShzdGFydFRpbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baV0gPSB0aGlzLnJvdGF0aW9uW2ldO1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2ldID0gdGhpcy5wb3NpdGlvbltpXTtcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpXSA9IHRoaXMuc2NhbGVbaV07XG4gICAgfVxuICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVswXSA9IDA7XG4gICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblszXSA9IHRoaXMucm90YXRpb25bM107XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvdW50LTE7IGkrKykge1xuICAgICAgICB2YXIgaTI7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICAgICAgICBpMiA9IHJhbmdlU3RhcnRbMF0gKyBpO1xuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpICogNCArIGpdID0gdGhpcy5jaGFubmVscy5yb3RhdGlvbltpMiAqIDQgKyBqXTtcbiAgICAgICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucG9zaXRpb25baSAqIDMgKyBqXSA9IHRoaXMuY2hhbm5lbHMucG9zaXRpb25baTIgKiAzICsgal07XG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnNjYWxlW2kyICogMyArIGpdO1xuICAgICAgICB9XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVtpXSA9IHRoaXMuY2hhbm5lbHMudGltZVtpMl0gLSBzdGFydFRpbWU7XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baSAqIDQgKyAzXSA9IHRoaXMuY2hhbm5lbHMucm90YXRpb25baTIgKiA0ICsgM107XG4gICAgfVxuICAgIC8vIENsaXAgYXQgdGhlIGVuZFxuICAgIHRoaXMuc2V0VGltZShlbmRUaW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIGldID0gdGhpcy5yb3RhdGlvbltpXTtcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvblsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMucG9zaXRpb25baV07XG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMuc2NhbGVbKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnNjYWxlW2ldO1xuICAgIH1cbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbKGNvdW50IC0gMSldID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIDNdID0gdGhpcy5yb3RhdGlvblszXTtcblxuICAgIC8vIFRPRE8gc2V0IGJhY2sgP1xuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XG4gICAgcmV0dXJuIHN1YkNsaXA7XG59O1xuXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLl9maW5kUmFuZ2UgPSBmdW5jdGlvbiAodGltZSkge1xuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XG4gICAgdmFyIGxlbiA9IGNoYW5uZWxzLnRpbWUubGVuZ3RoO1xuICAgIHZhciBzdGFydCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpKzFdID4gdGltZSkge1xuICAgICAgICAgICAgc3RhcnQgPSBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBwZXJjZW50ID0gMDtcbiAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICB2YXIgc3RhcnRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydF07XG4gICAgICAgIHZhciBlbmRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydCsxXTtcbiAgICAgICAgdmFyIHBlcmNlbnQgPSAodGltZS1zdGFydFRpbWUpIC8gKGVuZFRpbWUtc3RhcnRUaW1lKTtcbiAgICB9XG4gICAgLy8gUGVyY2VudCBbMCwgMSlcbiAgICByZXR1cm4gW3N0YXJ0LCBwZXJjZW50XTtcbn07XG5cbi8qKlxuICogMUQgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxuICogQHBhcmFtICB7bnVtYmVyfSB3XG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5ibGVuZDFEO1xuLyoqXG4gKiAyRCBibGVuZGluZyBiZXR3ZWVuIHRocmVlIGNsaXBzXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzNcbiAqIEBwYXJhbSAge251bWJlcn0gZlxuICogQHBhcmFtICB7bnVtYmVyfSBnXG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5ibGVuZDJEO1xuLyoqXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5hZGRpdGl2ZUJsZW5kO1xuLyoqXG4gKiBTdWJ0cmFjdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXG4gKi9cblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IFRyYW5zZm9ybVRyYWNrLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kO1xuXG4vKipcbiAqIENsb25lIGEgbmV3IFNhbXBsZXJUcmFja1xuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxuICovXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0cmFjayA9IFNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICB0cmFjay5jaGFubmVscyA9IHtcbiAgICAgICAgdGltZTogdGhpcy5jaGFubmVscy50aW1lIHx8IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uIHx8IG51bGwsXG4gICAgICAgIHJvdGF0aW9uOiB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uIHx8IG51bGwsXG4gICAgICAgIHNjYWxlOiB0aGlzLmNoYW5uZWxzLnNjYWxlIHx8IG51bGxcbiAgICB9O1xuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XG4gICAgcXVhdC5jb3B5KHRyYWNrLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uKTtcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xuXG4gICAgdHJhY2sudGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgdHJhY2sudXBkYXRlVGFyZ2V0KCk7XG5cbiAgICByZXR1cm4gdHJhY2s7XG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXJUcmFjaztcbiIsIi8qKlxuICogRXh0ZW5kIGEgc3ViIGNsYXNzIGZyb20gYmFzZSBjbGFzc1xuICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG1ha2VEZWZhdWx0T3B0IGRlZmF1bHQgb3B0aW9uIG9mIHRoaXMgc3ViIGNsYXNzLCBtZXRob2Qgb2YgdGhlIHN1YiBjYW4gdXNlIHRoaXMueHh4IHRvIGFjY2VzcyB0aGlzIG9wdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVdIEluaXRpYWxpemUgYWZ0ZXIgdGhlIHN1YiBjbGFzcyBpcyBpbnN0YW50aWF0ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvdG9dIFByb3RvdHlwZSBtZXRob2RzL3Byb3BlcnRpZXMgb2YgdGhlIHN1YiBjbGFzc1xuICogQG1lbWJlck9mIGNsYXkuY29yZS5taXhpbi5leHRlbmRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBkZXJpdmUobWFrZURlZmF1bHRPcHQsIGluaXRpYWxpemUvKm9wdGlvbmFsKi8sIHByb3RvLypvcHRpb25hbCovKSB7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWxpemUgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcHJvdG8gPSBpbml0aWFsaXplO1xuICAgICAgICBpbml0aWFsaXplID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3N1cGVyID0gdGhpcztcblxuICAgIHZhciBwcm9wTGlzdDtcbiAgICBpZiAoIShtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xuICAgICAgICAvLyBPcHRpbWl6ZSB0aGUgcHJvcGVydHkgaXRlcmF0ZSBpZiBpdCBoYXZlIGJlZW4gZml4ZWRcbiAgICAgICAgcHJvcExpc3QgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gbWFrZURlZmF1bHRPcHQpIHtcbiAgICAgICAgICAgIGlmIChtYWtlRGVmYXVsdE9wdC5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wTGlzdC5wdXNoKHByb3BOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdWIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cbiAgICAgICAgLy8gY2FsbCBzdXBlciBjb25zdHJ1Y3RvclxuICAgICAgICBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gSW52b2tlIG1ha2VEZWZhdWx0T3B0IGVhY2ggdGltZSBpZiBpdCBpcyBhIGZ1bmN0aW9uLCBTbyB3ZSBjYW4gbWFrZSBzdXJlIGVhY2hcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGluIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgc2hhcmVkIGJ5IG11dGlwbGUgaW5zdGFuY2VzXG4gICAgICAgICAgICBleHRlbmQodGhpcywgbWFrZURlZmF1bHRPcHQuY2FsbCh0aGlzLCBvcHRpb25zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHRlbmRXaXRoUHJvcExpc3QodGhpcywgbWFrZURlZmF1bHRPcHQsIHByb3BMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBzdWIpIHtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgaW4gdGhlIG9yZGVyIG9mIGluaGVyaXRcbiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnMgPSBzdWIuX19pbml0aWFsaXplcnNfXztcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIHNhdmUgc3VwZXIgY29uc3RydWN0b3JcbiAgICBzdWIuX19zdXBlcl9fID0gX3N1cGVyO1xuICAgIC8vIEluaXRpYWxpemUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHRoZSBzdXBlciBjb25zdHJ1Y3RvciBpcyBjYWxsZWRcbiAgICBpZiAoIV9zdXBlci5fX2luaXRpYWxpemVyc19fKSB7XG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBfc3VwZXIuX19pbml0aWFsaXplcnNfXy5zbGljZSgpO1xuICAgIH1cbiAgICBpZiAoaW5pdGlhbGl6ZSkge1xuICAgICAgICBzdWIuX19pbml0aWFsaXplcnNfXy5wdXNoKGluaXRpYWxpemUpO1xuICAgIH1cblxuICAgIHZhciBDdG9yID0gZnVuY3Rpb24oKSB7fTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IF9zdXBlci5wcm90b3R5cGU7XG4gICAgc3ViLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XG4gICAgc3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YjtcbiAgICBleHRlbmQoc3ViLnByb3RvdHlwZSwgcHJvdG8pO1xuXG4gICAgLy8gZXh0ZW5kIHRoZSBkZXJpdmUgbWV0aG9kIGFzIGEgc3RhdGljIG1ldGhvZDtcbiAgICBzdWIuZXh0ZW5kID0gX3N1cGVyLmV4dGVuZDtcblxuICAgIC8vIERFUENSQVRFRFxuICAgIHN1Yi5kZXJpdmUgPSBfc3VwZXIuZXh0ZW5kO1xuXG4gICAgcmV0dXJuIHN1Yjtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBzb3VyY2VbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4dGVuZFdpdGhQcm9wTGlzdCh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xuICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcbiAgICB9XG59XG5cbi8qKlxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5leHRlbmRcbiAqIEBtaXhpblxuICovXG5leHBvcnQgZGVmYXVsdCB7XG5cbiAgICBleHRlbmQ6IGRlcml2ZSxcblxuICAgIC8vIERFUENSQVRFRFxuICAgIGRlcml2ZTogZGVyaXZlXG59O1xuIiwiZnVuY3Rpb24gSGFuZGxlcihhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuLyoqXG4gKiBAbWl4aW5cbiAqIEBhbGlhcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcbiAqL1xudmFyIG5vdGlmaWVyID0ge1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgZXZlbnRcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKi9cbiAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19oYW5kbGVyc19fJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX19oYW5kbGVyc19fLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaGRscyA9IHRoaXMuX19oYW5kbGVyc19fW25hbWVdO1xuICAgICAgICB2YXIgbCA9IGhkbHMubGVuZ3RoLCBpID0gLTEsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIC8vIE9wdGltaXplIGFkdmlzZSBmcm9tIGJhY2tib25lXG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uYXBwbHkoaGRsc1tpXS5jb250ZXh0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxuICAgICAqIEBjaGFpbmFibGVcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcbiAgICAgICAgaWYgKCFoYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lLCBhY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0IHx8IHRoaXMpO1xuICAgICAgICBoYW5kbGVyc1tuYW1lXS5wdXNoKGhhbmRsZXIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBldmVudCwgZXZlbnQgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBvbmNlIGFuZCB0aGVuIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cbiAgICAgKiBAY2hhaW5hYmxlXG4gICAgICovXG4gICAgb25jZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICAgICAgc2VsZi5vZmYobmFtZSwgd3JhcHBlcik7XG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCB3cmFwcGVyLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYmVmb3JlJyArIG5hbWUpXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXG4gICAgICogQGNoYWluYWJsZVxuICAgICAqL1xuICAgIGJlZm9yZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9ICdiZWZvcmUnICsgbmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYWZ0ZXInICsgbmFtZSlcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cbiAgICAgKiBAY2hhaW5hYmxlXG4gICAgICovXG4gICAgYWZ0ZXI6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSAnYWZ0ZXInICsgbmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2Ygb24oJ3N1Y2Nlc3MnKVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxuICAgICAqIEBjaGFpbmFibGVcbiAgICAgKi9cbiAgICBzdWNjZXNzOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnc3VjY2VzcycsIGFjdGlvbiwgY29udGV4dCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIG9uKCdlcnJvcicpXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXG4gICAgICogQGNoYWluYWJsZVxuICAgICAqL1xuICAgIGVycm9yOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnZXJyb3InLCBhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cbiAgICAgKiBAY2hhaW5hYmxlXG4gICAgICovXG4gICAgb2ZmOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcblxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xuXG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgdmFyIGhkbHMgPSBoYW5kbGVyc1tuYW1lXTtcbiAgICAgICAgICAgIHZhciByZXRhaW5zID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhkbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uICYmIGhkbHNbaV0uYWN0aW9uICE9PSBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWlucy5wdXNoKGhkbHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZXJzW25hbWVdID0gcmV0YWlucztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiByZWdpc3RlcmVkIHRoZSBldmVudCBoYW5kbGVyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgYWN0aW9uXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBoYXM6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbikge1xuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXztcblxuICAgICAgICBpZiAoISBoYW5kbGVycyB8fFxuICAgICAgICAgICAgISBoYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoZGxzID0gaGFuZGxlcnNbbmFtZV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGRscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGhkbHNbaV0uYWN0aW9uID09PSBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5vdGlmaWVyOyIsInZhciBndWlkID0gMDtcblxudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG52YXIgbmF0aXZlRm9yRWFjaCA9IEFycmF5UHJvdG8uZm9yRWFjaDtcblxuLyoqXG4gKiBVdGlsIGZ1bmN0aW9uc1xuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUudXRpbFxuICovXG52YXIgdXRpbCA9IHtcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIEdVSURcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZ2VuR1VJRDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKytndWlkO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVsYXRpdmUgcGF0aCB0byBhYnNvbHV0ZSBwYXRoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBiYXNlUGF0aFxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcbiAgICAgKi9cbiAgICByZWxhdGl2ZTJhYnNvbHV0ZTogZnVuY3Rpb24gKHBhdGgsIGJhc2VQYXRoKSB7XG4gICAgICAgIGlmICghYmFzZVBhdGggfHwgcGF0aC5tYXRjaCgvXlxcLy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGF0aFBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xuICAgICAgICB2YXIgYmFzZVBhdGhQYXJ0cyA9IGJhc2VQYXRoLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgdmFyIGl0ZW0gPSBwYXRoUGFydHNbMF07XG4gICAgICAgIHdoaWxlKGl0ZW0gPT09ICcuJyB8fCBpdGVtID09PSAnLi4nKSB7XG4gICAgICAgICAgICBpZiAoaXRlbSA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoUGFydHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGl0ZW0gPSBwYXRoUGFydHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2VQYXRoUGFydHMuam9pbignLycpICsgJy8nICsgcGF0aFBhcnRzLmpvaW4oJy8nKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kIHRhcmdldCB3aXRoIHNvdXJjZVxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHNvdXJjZVtuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgdG8gdGFyZ2V0IGlmIG5vdCBleGlzdC5cbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxuICAgICAqL1xuICAgIGRlZmF1bHRzOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHdpdGggYSBnaXZlbiBwcm9wZXJ0eSBsaXN0IHRvIGF2b2lkIGZvci4uaW4uLiBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxuICAgICAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwcm9wTGlzdFxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcbiAgICAgKi9cbiAgICBleHRlbmRXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB0byB0YXJnZXQgaWYgbm90IGV4aXN0LiBXaXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZGVmYXVsdHNXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IG9ialxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgZWFjaDogZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKCEob2JqICYmIGl0ZXJhdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouZm9yRWFjaCAmJiBvYmouZm9yRWFjaCA9PT0gbmF0aXZlRm9yRWFjaCkge1xuICAgICAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9iai5sZW5ndGggPT09ICsgb2JqLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElzIG9iamVjdFxuICAgICAqIEBwYXJhbSAge30gIG9ialxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiA9PT0gT2JqZWN0KG9iaik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElzIGFycmF5ID9cbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxuICAgICAqL1xuICAgIGlzQXJyYXk6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSXMgYXJyYXkgbGlrZSwgd2hpY2ggaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSAge30gIG9ialxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgaXNBcnJheUxpa2U6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvYmoubGVuZ3RoID09PSArIG9iai5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7fSBvYmpcbiAgICAgKiBAcmV0dXJuIHt9XG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouc2xpY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1dGlsLmlzQXJyYXlMaWtlKG9iaikpIHsgLy8gaXMgdHlwZWQgYXJyYXlcbiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKG9iai5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXRbaV0gPSBvYmpbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwuZXh0ZW5kKHt9LCBvYmopO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbDtcbiIsImltcG9ydCBleHRlbmRNaXhpbiBmcm9tICcuL21peGluL2V4dGVuZCc7XG5pbXBvcnQgbm90aWZpZXJNaXhpbiBmcm9tICcuL21peGluL25vdGlmaWVyJztcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBvZiBhbGwgb2JqZWN0c1xuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5jb3JlLkJhc2VcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcbiAqL1xudmFyIEJhc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLl9fdWlkX18gPSB1dGlsLmdlbkdVSUQoKTtcbn07XG5cbkJhc2UuX19pbml0aWFsaXplcnNfXyA9IFtcbiAgICBmdW5jdGlvbiAob3B0cykge1xuICAgICAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRzKTtcbiAgICB9XG5dO1xuXG51dGlsLmV4dGVuZChCYXNlLCBleHRlbmRNaXhpbik7XG51dGlsLmV4dGVuZChCYXNlLnByb3RvdHlwZSwgbm90aWZpZXJNaXhpbik7XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2U7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IEFuaW1hdG9yIGZyb20gJy4vQW5pbWF0b3InO1xuXG52YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB3aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZnVuY3Rpb24gKGZ1bmMpeyBzZXRUaW1lb3V0KGZ1bmMsIDE2KTsgfTtcblxuLyoqXG4gKiBBbmltYXRpb24gaXMgZ2xvYmFsIHRpbWVsaW5lIHRoYXQgc2NoZWR1bGUgYWxsIGNsaXBzLiBlYWNoIGZyYW1lIGFuaW1hdGlvbiB3aWxsIHNldCB0aGUgdGltZSBvZiBjbGlwcyB0byBjdXJyZW50IGFuZCB1cGRhdGUgdGhlIHN0YXRlcyBvZiBjbGlwc1xuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdGlvblxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGFuaW1hdGlvbiA9IG5ldyBjbGF5LmFuaW1hdGlvbi5BbmltYXRpb24oKTtcbiAqIHZhciBub2RlID0gbmV3IGNsYXkuTm9kZSgpO1xuICogYW5pbWF0aW9uLmFuaW1hdGUobm9kZS5wb3NpdGlvbilcbiAqICAgICAud2hlbigxMDAwLCB7XG4gKiAgICAgICAgIHg6IDUwMCxcbiAqICAgICAgICAgeTogNTAwXG4gKiAgICAgfSlcbiAqICAgICAud2hlbigyMDAwLCB7XG4gKiAgICAgICAgIHg6IDEwMCxcbiAqICAgICAgICAgeTogMTAwXG4gKiAgICAgfSlcbiAqICAgICAud2hlbigzMDAwLCB7XG4gKiAgICAgICAgIHo6IDEwXG4gKiAgICAgfSlcbiAqICAgICAuc3RhcnQoJ3NwbGluZScpO1xuICovXG52YXIgVGltZWxpbmUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5hbmltYXRpb24uVGltZWxpbmUjICove1xuICAgICAgICAvKipcbiAgICAgICAgICogc3RhZ2UgaXMgYW4gb2JqZWN0IHdpdGggcmVuZGVyIG1ldGhvZCwgZWFjaCBmcmFtZSBpZiB0aGVyZSBleGlzdHMgYW55IGFuaW1hdGluZyBjbGlwcywgc3RhZ2UucmVuZGVyIHdpbGwgYmUgY2FsbGVkXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBzdGFnZTogbnVsbCxcblxuICAgICAgICBfY2xpcHM6IFtdLFxuXG4gICAgICAgIF9ydW5uaW5nOiBmYWxzZSxcblxuICAgICAgICBfdGltZTogMCxcblxuICAgICAgICBfcGF1c2VkOiBmYWxzZSxcblxuICAgICAgICBfcGF1c2VkVGltZTogMFxuICAgIH07XG59LFxuLyoqIEBsZW5kcyBjbGF5LmFuaW1hdGlvbi5UaW1lbGluZS5wcm90b3R5cGUgKi9cbntcblxuICAgIC8qKlxuICAgICAqIEFkZCBhbmltYXRvclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxuICAgICAqL1xuICAgIGFkZEFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcbiAgICAgICAgdmFyIGNsaXBzID0gYW5pbWF0b3IuZ2V0Q2xpcHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hZGRDbGlwKGNsaXBzW2ldKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcbiAgICAgKi9cbiAgICBhZGRDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xuICAgICAgICBpZiAodGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKSA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnB1c2goY2xpcCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxuICAgICAqL1xuICAgIHJlbW92ZUNsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jbGlwcy5pbmRleE9mKGNsaXApO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbmltYXRvclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxuICAgICAqL1xuICAgIHJlbW92ZUFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcbiAgICAgICAgdmFyIGNsaXBzID0gYW5pbWF0b3IuZ2V0Q2xpcHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGlwKGNsaXBzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSBudWxsO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpIC0gdGhpcy5fcGF1c2VkVGltZTtcbiAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMuX3RpbWU7XG4gICAgICAgIHZhciBjbGlwcyA9IHRoaXMuX2NsaXBzO1xuICAgICAgICB2YXIgbGVuID0gY2xpcHMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBkZWZlcnJlZEV2ZW50cyA9IFtdO1xuICAgICAgICB2YXIgZGVmZXJyZWRDbGlwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2xpcCA9IGNsaXBzW2ldO1xuICAgICAgICAgICAgdmFyIGUgPSBjbGlwLnN0ZXAodGltZSwgZGVsdGEsIGZhbHNlKTtcbiAgICAgICAgICAgIC8vIFRocm93IG91dCB0aGUgZXZlbnRzIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyXG4gICAgICAgICAgICAvLyBzdGFnZS5yZW5kZXIsIGxpa2UgZmluaXNoXG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgIGRlZmVycmVkRXZlbnRzLnB1c2goZSk7XG4gICAgICAgICAgICAgICAgZGVmZXJyZWRDbGlwcy5wdXNoKGNsaXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaW5pc2hlZCBjbGlwXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOykge1xuICAgICAgICAgICAgaWYgKGNsaXBzW2ldLl9uZWVkc1JlbW92ZSkge1xuICAgICAgICAgICAgICAgIGNsaXBzW2ldID0gY2xpcHNbbGVuLTFdO1xuICAgICAgICAgICAgICAgIGNsaXBzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGxlbi0tO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZW4gPSBkZWZlcnJlZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGRlZmVycmVkQ2xpcHNbaV0uZmlyZShkZWZlcnJlZEV2ZW50c1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90aW1lID0gdGltZTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2ZyYW1lJywgZGVsdGEpO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YWdlICYmIHRoaXMuc3RhZ2UucmVuZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTdGFydCBydW5uaW5nIGFuaW1hdGlvblxuICAgICAqL1xuICAgIHN0YXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fcGF1c2VkVGltZSA9IDA7XG5cbiAgICAgICAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9ydW5uaW5nKSB7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuX3BhdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG5cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0b3AgcnVubmluZyBhbmltYXRpb25cbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUGF1c2VcbiAgICAgKi9cbiAgICBwYXVzZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fcGF1c2VTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlc3VtZVxuICAgICAqL1xuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fcGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXVzZWRUaW1lICs9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZVN0YXJ0O1xuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xuICAgICAqL1xuICAgIHJlbW92ZUNsaXBzQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBhbmltYXRvclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9ucy5sb29wXVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZXR0ZXJdXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNldHRlcl1cbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuaW50ZXJwb2xhdGVyXVxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxuICAgICAqL1xuICAgIGFuaW1hdGU6IGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHZhciBhbmltYXRvciA9IG5ldyBBbmltYXRvcihcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG9wdGlvbnMubG9vcCxcbiAgICAgICAgICAgIG9wdGlvbnMuZ2V0dGVyLFxuICAgICAgICAgICAgb3B0aW9ucy5zZXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmludGVycG9sYXRlclxuICAgICAgICApO1xuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSB0aGlzO1xuICAgICAgICByZXR1cm4gYW5pbWF0b3I7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lO1xuIiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgcXVhdCA9IGdsTWF0cml4LnF1YXQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbi8qKlxuICpcbiAqIEFuaW1hdGlvbiBjbGlwIHRoYXQgbWFuYWdlIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uVHJhY2tDbGlwXG4gKlxuICogQGV4dGVuZHMgY2xheS5hbmltYXRpb24uQ2xpcFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMudGFyZ2V0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZ2FwXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBbb3B0cy5lYXNpbmddXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbnJlc3RhcnRdXG4gKiBAcGFyYW0ge0FycmF5LjxjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2s+fSBbb3B0cy50cmFja3NdXG4gKi9cbnZhciBUcmFja0NsaXAgPSBmdW5jdGlvbiAob3B0cykge1xuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tbXX1cbiAgICAgKi9cbiAgICB0aGlzLnRyYWNrcyA9IG9wdHMudHJhY2tzIHx8IFtdO1xufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xpcC5wcm90b3R5cGUpO1xuXG5UcmFja0NsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhY2tDbGlwO1xuXG5UcmFja0NsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xuXG4gICAgdmFyIHJldCA9IENsaXAucHJvdG90eXBlLnN0ZXAuY2FsbCh0aGlzLCB0aW1lLCBkVGltZSwgdHJ1ZSk7XG5cbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcbiAgICAgICAgLy8gVE9ETyBsaWZlIG1heSBiZSBjaGFuZ2VkLlxuICAgICAgICBpZiAodGhpcy5fcmFuZ2UpIHtcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9yYW5nZVswXSArIHRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUaW1lKHRpbWUpO1xuICAgIH1cblxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XG4gICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByYW5nZVxuICovXG5UcmFja0NsaXAucHJvdG90eXBlLnNldFJhbmdlID0gZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgICByYW5nZVsxXSA9IE1hdGgubWluKHJhbmdlWzFdLCB0aGlzLmxpZmUpO1xuICAgICAgICByYW5nZVswXSA9IE1hdGgubWluKHJhbmdlWzBdLCB0aGlzLmxpZmUpO1xuICAgICAgICB0aGlzLmxpZmUgPSAocmFuZ2VbMV0gLSByYW5nZVswXSk7XG4gICAgfVxufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMudHJhY2tzW2ldLnNldFRpbWUodGltZSk7XG4gICAgfVxufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZS5jYWxjTGlmZUZyb21UcmFja3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5saWZlID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KHRoaXMubGlmZSwgdGhpcy50cmFja3NbaV0uZ2V0TWF4VGltZSgpKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfSBqb2ludENsaXBcbiAqL1xuVHJhY2tDbGlwLnByb3RvdHlwZS5hZGRUcmFjayA9IGZ1bmN0aW9uICh0cmFjaykge1xuICAgIHRoaXMudHJhY2tzLnB1c2godHJhY2spO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gam9pbnRDbGlwXG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUucmVtb3ZlVGFyY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcbiAgICB2YXIgaWR4ID0gdGhpcy50cmFja3MuaW5kZXhPZih0cmFjayk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHRoaXMudHJhY2tzLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0VGltZVxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb29wXG4gKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9XG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUuZ2V0U3ViQ2xpcCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlzTG9vcCkge1xuICAgIHZhciBzdWJDbGlwID0gbmV3IFRyYWNrQ2xpcCh7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH0pO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3ViVHJhY2sgPSB0aGlzLnRyYWNrc1tpXS5nZXRTdWJUcmFjayhzdGFydFRpbWUsIGVuZFRpbWUpO1xuICAgICAgICBzdWJDbGlwLmFkZFRyYWNrKHN1YlRyYWNrKTtcbiAgICB9XG5cbiAgICBpZiAoaXNMb29wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3ViQ2xpcC5zZXRMb29wKGlzTG9vcCk7XG4gICAgfVxuXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcblxuICAgIHJldHVybiBzdWJDbGlwO1xufTtcblxuLyoqXG4gKiAxZCBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxuICogQHBhcmFtICB7bnVtYmVyfSB3XG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIsIHcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcblxuICAgICAgICB0Q2xpcC5ibGVuZDFEKGMxLCBjMiwgdyk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxuICovXG5UcmFja0NsaXAucHJvdG90eXBlLmFkZGl0aXZlQmxlbmQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XG5cbiAgICAgICAgdENsaXAuYWRkaXRpdmVCbGVuZChjMSwgYzIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcbiAqL1xuVHJhY2tDbGlwLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xuXG4gICAgICAgIHRDbGlwLnN1YnRyYWN0aXZlQmxlbmQoYzEsIGMyKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIDJEIGJsZW5kaW5nIGZyb20gdGhyZWUgc2tpbm5pbmcgY2xpcHNcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDNcbiAqIEBwYXJhbSAge251bWJlcn0gZlxuICogQHBhcmFtICB7bnVtYmVyfSBnXG4gKi9cblRyYWNrQ2xpcC5wcm90b3R5cGUuYmxlbmQyRCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIsIGNsaXAzLCBmLCBnKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIGMzID0gY2xpcDMudHJhY2tzW2ldO1xuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcblxuICAgICAgICB0Q2xpcC5ibGVuZDJEKGMxLCBjMiwgYzMsIGYsIGcpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ29weSBTUlQgb2YgYWxsIGpvaW50cyBjbGlwcyBmcm9tIGFub3RoZXIgVHJhY2tDbGlwXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXBcbiAqL1xuVHJhY2tDbGlwLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKGNsaXApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzVHJhY2sgPSBjbGlwLnRyYWNrc1tpXTtcbiAgICAgICAgdmFyIHRUcmFjayA9IHRoaXMudHJhY2tzW2ldO1xuXG4gICAgICAgIHZlYzMuY29weSh0VHJhY2sucG9zaXRpb24sIHNUcmFjay5wb3NpdGlvbik7XG4gICAgICAgIHZlYzMuY29weSh0VHJhY2suc2NhbGUsIHNUcmFjay5zY2FsZSk7XG4gICAgICAgIHF1YXQuY29weSh0VHJhY2sucm90YXRpb24sIHNUcmFjay5yb3RhdGlvbik7XG4gICAgfVxufTtcblxuVHJhY2tDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjbGlwLmFkZFRyYWNrKHRoaXMudHJhY2tzW2ldLmNsb25lKCkpO1xuICAgIH1cbiAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XG4gICAgcmV0dXJuIGNsaXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUcmFja0NsaXA7XG4iLCJ2YXIgRVhURU5TSU9OX0xJU1QgPSBbXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0JyxcbiAgICAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcsXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhcicsXG4gICAgJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyxcbiAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcbiAgICAnT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnLFxuICAgICdPRVNfZWxlbWVudF9pbmRleF91aW50JyxcbiAgICAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnLFxuICAgICdXRUJHTF9kZXB0aF90ZXh0dXJlJyxcbiAgICAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyxcbiAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcsXG4gICAgJ1dFQkdMX2RyYXdfYnVmZmVycycsXG4gICAgJ0VYVF9mcmFnX2RlcHRoJyxcbiAgICAnRVhUX3NSR0InXG5dO1xuXG52YXIgUEFSQU1FVEVSX05BTUVTID0gW1xuICAgICdNQVhfVEVYVFVSRV9TSVpFJyxcbiAgICAnTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSdcbl07XG5cbmZ1bmN0aW9uIEdMSW5mbyhfZ2wpIHtcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9O1xuICAgIHZhciBwYXJhbWV0ZXJzID0ge307XG5cbiAgICAvLyBHZXQgd2ViZ2wgZXh0ZW5zaW9uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBFWFRFTlNJT05fTElTVC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXh0TmFtZSA9IEVYVEVOU0lPTl9MSVNUW2ldO1xuICAgICAgICBjcmVhdGVFeHRlbnNpb24oZXh0TmFtZSk7XG4gICAgfVxuICAgIC8vIEdldCBwYXJhbWV0ZXJzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBQQVJBTUVURVJfTkFNRVMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5hbWUgPSBQQVJBTUVURVJfTkFNRVNbaV07XG4gICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbFtuYW1lXSk7XG4gICAgfVxuXG4gICAgdGhpcy5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBpZiAoIShuYW1lIGluIGV4dGVuc2lvbnMpKSB7XG4gICAgICAgICAgICBjcmVhdGVFeHRlbnNpb24obmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnNbbmFtZV07XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNbbmFtZV07XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbihuYW1lKSB7XG4gICAgICAgIHZhciBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKG5hbWUpO1xuICAgICAgICBpZiAoIWV4dCkge1xuICAgICAgICAgICAgZXh0ID0gX2dsLmdldEV4dGVuc2lvbignTU9aXycgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dCkge1xuICAgICAgICAgICAgZXh0ID0gX2dsLmdldEV4dGVuc2lvbignV0VCS0lUXycgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBleHRlbnNpb25zW25hbWVdID0gZXh0O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR0xJbmZvO1xuIiwiLyoqXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5nbGVudW1cbiAqIEBzZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvMS4wLyM1LjE0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICAvKiBDbGVhckJ1ZmZlck1hc2sgKi9cbiAgICBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDAwMTAwLFxuICAgIFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA6IDB4MDAwMDA0MDAsXG4gICAgQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDogMHgwMDAwNDAwMCxcblxuICAgIC8qIEJlZ2luTW9kZSAqL1xuICAgIFBPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDAwMCxcbiAgICBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDEsXG4gICAgTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAyLFxuICAgIExJTkVfU1RSSVAgICAgICAgICAgICAgICAgICAgICA6IDB4MDAwMyxcbiAgICBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDQsXG4gICAgVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDogMHgwMDA1LFxuICAgIFRSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA6IDB4MDAwNixcblxuICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi9cbiAgICAvKiAgICAgIE5FVkVSICovXG4gICAgLyogICAgICBMRVNTICovXG4gICAgLyogICAgICBFUVVBTCAqL1xuICAgIC8qICAgICAgTEVRVUFMICovXG4gICAgLyogICAgICBHUkVBVEVSICovXG4gICAgLyogICAgICBOT1RFUVVBTCAqL1xuICAgIC8qICAgICAgR0VRVUFMICovXG4gICAgLyogICAgICBBTFdBWVMgKi9cblxuICAgIC8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqL1xuICAgIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG4gICAgT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSxcbiAgICBTUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDAsXG4gICAgT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgIDogMHgwMzAxLFxuICAgIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMixcbiAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgOiAweDAzMDMsXG4gICAgRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA0LFxuICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA6IDB4MDMwNSxcblxuICAgIC8qIEJsZW5kaW5nRmFjdG9yU3JjICovXG4gICAgLyogICAgICBaRVJPICovXG4gICAgLyogICAgICBPTkUgKi9cbiAgICBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDYsXG4gICAgT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDogMHgwMzA3LFxuICAgIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICA6IDB4MDMwOCxcbiAgICAvKiAgICAgIFNSQ19BTFBIQSAqL1xuICAgIC8qICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAqL1xuICAgIC8qICAgICAgRFNUX0FMUEhBICovXG4gICAgLyogICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICovXG5cbiAgICAvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi9cbiAgICBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwMDYsXG4gICAgQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDogMHg4MDA5LFxuICAgIEJMRU5EX0VRVUFUSU9OX1JHQiAgICAgICAgICAgICA6IDB4ODAwOSwgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqL1xuICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA6IDB4ODgzRCxcblxuICAgIC8qIEJsZW5kU3VidHJhY3QgKi9cbiAgICBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgOiAweDgwMEEsXG4gICAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgIDogMHg4MDBCLFxuXG4gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovXG4gICAgQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM4LFxuICAgIEJMRU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICA6IDB4ODBDOSxcbiAgICBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0EsXG4gICAgQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENCLFxuICAgIENPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICA6IDB4ODAwMSxcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAgICAgOiAweDgwMDIsXG4gICAgQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDogMHg4MDAzLFxuICAgIE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA6IDB4ODAwNCxcbiAgICBCTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgOiAweDgwMDUsXG5cbiAgICAvKiBCdWZmZXIgT2JqZWN0cyAqL1xuICAgIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4ODg5MixcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgOiAweDg4OTMsXG4gICAgQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDogMHg4ODk0LFxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA6IDB4ODg5NSxcblxuICAgIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA6IDB4ODhFMCxcbiAgICBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTQsXG4gICAgRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDogMHg4OEU4LFxuXG4gICAgQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDogMHg4NzY0LFxuICAgIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA6IDB4ODc2NSxcblxuICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA6IDB4ODYyNixcblxuICAgIC8qIEN1bGxGYWNlTW9kZSAqL1xuICAgIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNCxcbiAgICBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDUsXG4gICAgRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgIDogMHgwNDA4LFxuXG4gICAgLyogRGVwdGhGdW5jdGlvbiAqL1xuICAgIC8qICAgICAgTkVWRVIgKi9cbiAgICAvKiAgICAgIExFU1MgKi9cbiAgICAvKiAgICAgIEVRVUFMICovXG4gICAgLyogICAgICBMRVFVQUwgKi9cbiAgICAvKiAgICAgIEdSRUFURVIgKi9cbiAgICAvKiAgICAgIE5PVEVRVUFMICovXG4gICAgLyogICAgICBHRVFVQUwgKi9cbiAgICAvKiAgICAgIEFMV0FZUyAqL1xuXG4gICAgLyogRW5hYmxlQ2FwICovXG4gICAgLyogVEVYVFVSRV8yRCAqL1xuICAgIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NCxcbiAgICBCTEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDBCRTIsXG4gICAgRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkQwLFxuICAgIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEI5MCxcbiAgICBERVBUSF9URVNUICAgICAgICAgICAgICAgICAgICAgOiAweDBCNzEsXG4gICAgU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQzExLFxuICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAgICA6IDB4ODAzNyxcbiAgICBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgOiAweDgwOUUsXG4gICAgU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgIDogMHg4MEEwLFxuXG4gICAgLyogRXJyb3JDb2RlICovXG4gICAgTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDogMCxcbiAgICBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgOiAweDA1MDAsXG4gICAgSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgIDogMHgwNTAxLFxuICAgIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA6IDB4MDUwMixcbiAgICBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgOiAweDA1MDUsXG5cbiAgICAvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi9cbiAgICBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDAsXG4gICAgQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwOTAxLFxuXG4gICAgLyogR2V0UE5hbWUgKi9cbiAgICBMSU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgOiAweDBCMjEsXG4gICAgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgIDogMHg4NDZELFxuICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA6IDB4ODQ2RSxcbiAgICBDVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgOiAweDBCNDUsXG4gICAgRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ2LFxuICAgIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MCxcbiAgICBERVBUSF9XUklURU1BU0sgICAgICAgICAgICAgICAgOiAweDBCNzIsXG4gICAgREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQjczLFxuICAgIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3NCxcbiAgICBTVEVOQ0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgOiAweDBCOTEsXG4gICAgU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDogMHgwQjkyLFxuICAgIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICA6IDB4MEI5NCxcbiAgICBTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgOiAweDBCOTUsXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDogMHgwQjk2LFxuICAgIFNURU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA6IDB4MEI5NyxcbiAgICBTVEVOQ0lMX1ZBTFVFX01BU0sgICAgICAgICAgICAgOiAweDBCOTMsXG4gICAgU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgIDogMHgwQjk4LFxuICAgIFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA6IDB4ODgwMCxcbiAgICBTVEVOQ0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgOiAweDg4MDEsXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDogMHg4ODAyLFxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA6IDB4ODgwMyxcbiAgICBTVEVOQ0lMX0JBQ0tfUkVGICAgICAgICAgICAgICAgOiAweDhDQTMsXG4gICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDogMHg4Q0E0LFxuICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA6IDB4OENBNSxcbiAgICBWSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgOiAweDBCQTIsXG4gICAgU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgIDogMHgwQzEwLFxuICAgIC8qICAgICAgU0NJU1NPUl9URVNUICovXG4gICAgQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQzIyLFxuICAgIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEMyMyxcbiAgICBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgOiAweDBDRjUsXG4gICAgUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgIDogMHgwRDA1LFxuICAgIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA6IDB4MEQzMyxcbiAgICBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgOiAweDBEM0EsXG4gICAgU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgIDogMHgwRDUwLFxuICAgIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MixcbiAgICBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTMsXG4gICAgQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgIDogMHgwRDU0LFxuICAgIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NSxcbiAgICBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTYsXG4gICAgU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgIDogMHgwRDU3LFxuICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA6IDB4MkEwMCxcbiAgICAvKiAgICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgKi9cbiAgICBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAgOiAweDgwMzgsXG4gICAgVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDogMHg4MDY5LFxuICAgIFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA6IDB4ODBBOCxcbiAgICBTQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwQTksXG4gICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgIDogMHg4MEFBLFxuICAgIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA6IDB4ODBBQixcblxuICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi9cbiAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqL1xuICAgIC8qICAgICAgVEVYVFVSRV9NSU5fRklMVEVSICovXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqL1xuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi9cblxuICAgIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA6IDB4ODZBMyxcblxuICAgIC8qIEhpbnRNb2RlICovXG4gICAgRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAwLFxuICAgIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMSxcbiAgICBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDExMDIsXG5cbiAgICAvKiBIaW50VGFyZ2V0ICovXG4gICAgR0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICA6IDB4ODE5MixcblxuICAgIC8qIERhdGFUeXBlICovXG4gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNDAwLFxuICAgIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA6IDB4MTQwMSxcbiAgICBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDIsXG4gICAgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgIDogMHgxNDAzLFxuICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNCxcbiAgICBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgOiAweDE0MDUsXG4gICAgRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNDA2LFxuXG4gICAgLyogUGl4ZWxGb3JtYXQgKi9cbiAgICBERVBUSF9DT01QT05FTlQgICAgICAgICAgICAgICAgOiAweDE5MDIsXG4gICAgQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA2LFxuICAgIFJHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNyxcbiAgICBSR0JBICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE5MDgsXG4gICAgTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA5LFxuICAgIExVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICA6IDB4MTkwQSxcblxuICAgIC8qIFBpeGVsVHlwZSAqL1xuICAgIC8qICAgICAgVU5TSUdORURfQllURSAqL1xuICAgIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICA6IDB4ODAzMyxcbiAgICBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgOiAweDgwMzQsXG4gICAgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgIDogMHg4MzYzLFxuXG4gICAgLyogU2hhZGVycyAqL1xuICAgIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDogMHg4QjMwLFxuICAgIFZFUlRFWF9TSEFERVIgICAgICAgICAgICAgICAgICAgIDogMHg4QjMxLFxuICAgIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDogMHg4ODY5LFxuICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgIDogMHg4REZCLFxuICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgIDogMHg4REZDLFxuICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDogMHg4QjRELFxuICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgIDogMHg4QjRDLFxuICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgIDogMHg4ODcyLFxuICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgIDogMHg4REZELFxuICAgIFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjRGLFxuICAgIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDogMHg4QjgwLFxuICAgIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjgyLFxuICAgIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDogMHg4QjgzLFxuICAgIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAgIDogMHg4Qjg1LFxuICAgIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDogMHg4Qjg2LFxuICAgIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDogMHg4Qjg5LFxuICAgIFNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiAgICAgICAgIDogMHg4QjhDLFxuICAgIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDogMHg4QjhELFxuXG4gICAgLyogU3RlbmNpbEZ1bmN0aW9uICovXG4gICAgTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAwLFxuICAgIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMSxcbiAgICBFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAyMDIsXG4gICAgTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAzLFxuICAgIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNCxcbiAgICBOT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgOiAweDAyMDUsXG4gICAgR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA2LFxuICAgIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNyxcblxuICAgIC8qIFN0ZW5jaWxPcCAqL1xuICAgIC8qICAgICAgWkVSTyAqL1xuICAgIEtFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUUwMCxcbiAgICBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDEsXG4gICAgSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAyLFxuICAgIERFQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUUwMyxcbiAgICBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE1MEEsXG4gICAgSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA3LFxuICAgIERFQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA6IDB4ODUwOCxcblxuICAgIC8qIFN0cmluZ05hbWUgKi9cbiAgICBWRU5ET1IgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFGMDAsXG4gICAgUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAxLFxuICAgIFZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMixcblxuICAgIC8qIFRleHR1cmVNYWdGaWx0ZXIgKi9cbiAgICBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDAsXG4gICAgTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgyNjAxLFxuXG4gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqL1xuICAgIC8qICAgICAgTkVBUkVTVCAqL1xuICAgIC8qICAgICAgTElORUFSICovXG4gICAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDogMHgyNzAwLFxuICAgIExJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA6IDB4MjcwMSxcbiAgICBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgOiAweDI3MDIsXG4gICAgTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDogMHgyNzAzLFxuXG4gICAgLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi9cbiAgICBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgOiAweDI4MDAsXG4gICAgVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgIDogMHgyODAxLFxuICAgIFRFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICA6IDB4MjgwMixcbiAgICBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgOiAweDI4MDMsXG5cbiAgICAvKiBUZXh0dXJlVGFyZ2V0ICovXG4gICAgVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgIDogMHgwREUxLFxuICAgIFRFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTcwMixcblxuICAgIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA6IDB4ODUxMyxcbiAgICBURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAgICAgICAgOiAweDg1MTQsXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDogMHg4NTE1LFxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA6IDB4ODUxNixcbiAgICBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgICAgOiAweDg1MTcsXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgIDogMHg4NTE4LFxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA6IDB4ODUxOSxcbiAgICBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogICAgOiAweDg1MUEsXG4gICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgIDogMHg4NTFDLFxuXG4gICAgLyogVGV4dHVyZVVuaXQgKi9cbiAgICBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzAsXG4gICAgVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMxLFxuICAgIFRFWFRVUkUyICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDMixcbiAgICBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzMsXG4gICAgVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM0LFxuICAgIFRFWFRVUkU1ICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDNSxcbiAgICBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzYsXG4gICAgVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM3LFxuICAgIFRFWFRVUkU4ICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDOCxcbiAgICBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzksXG4gICAgVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENBLFxuICAgIFRFWFRVUkUxMSAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDQixcbiAgICBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0MsXG4gICAgVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENELFxuICAgIFRFWFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRDRSxcbiAgICBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0YsXG4gICAgVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQwLFxuICAgIFRFWFRVUkUxNyAgICAgICAgICAgICAgICAgICAgICA6IDB4ODREMSxcbiAgICBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDIsXG4gICAgVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQzLFxuICAgIFRFWFRVUkUyMCAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRENCxcbiAgICBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDUsXG4gICAgVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ2LFxuICAgIFRFWFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRENyxcbiAgICBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDgsXG4gICAgVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ5LFxuICAgIFRFWFRVUkUyNiAgICAgICAgICAgICAgICAgICAgICA6IDB4ODREQSxcbiAgICBURVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REIsXG4gICAgVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERDLFxuICAgIFRFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAgICA6IDB4ODRERCxcbiAgICBURVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REUsXG4gICAgVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERGLFxuICAgIEFDVElWRV9URVhUVVJFICAgICAgICAgICAgICAgICA6IDB4ODRFMCxcblxuICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqL1xuICAgIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjkwMSxcbiAgICBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgOiAweDgxMkYsXG4gICAgTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgIDogMHg4MzcwLFxuXG4gICAgLyogVW5pZm9ybSBUeXBlcyAqL1xuICAgIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MCxcbiAgICBGTE9BVF9WRUMzICAgICAgICAgICAgICAgICAgICAgOiAweDhCNTEsXG4gICAgRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUyLFxuICAgIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MyxcbiAgICBJTlRfVkVDMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNTQsXG4gICAgSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU1LFxuICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NixcbiAgICBCT09MX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNTcsXG4gICAgQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU4LFxuICAgIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OSxcbiAgICBGTE9BVF9NQVQyICAgICAgICAgICAgICAgICAgICAgOiAweDhCNUEsXG4gICAgRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVCLFxuICAgIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QyxcbiAgICBTQU1QTEVSXzJEICAgICAgICAgICAgICAgICAgICAgOiAweDhCNUUsXG4gICAgU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDogMHg4QjYwLFxuXG4gICAgLyogVmVydGV4IEFycmF5cyAqL1xuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgOiAweDg2MjIsXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA6IDB4ODYyMyxcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgIDogMHg4NjI0LFxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgOiAweDg2MjUsXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA6IDB4ODg2QSxcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgIDogMHg4NjQ1LFxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgOiAweDg4OUYsXG5cbiAgICAvKiBTaGFkZXIgU291cmNlICovXG4gICAgQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDogMHg4QjgxLFxuXG4gICAgLyogU2hhZGVyIFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi9cbiAgICBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjAsXG4gICAgTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDogMHg4REYxLFxuICAgIEhJR0hfRkxPQVQgICAgICAgICAgICAgICAgICAgICA6IDB4OERGMixcbiAgICBMT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjMsXG4gICAgTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REY0LFxuICAgIEhJR0hfSU5UICAgICAgICAgICAgICAgICAgICAgICA6IDB4OERGNSxcblxuICAgIC8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi9cbiAgICBGUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgOiAweDhENDAsXG4gICAgUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDogMHg4RDQxLFxuXG4gICAgUkdCQTQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MDU2LFxuICAgIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NyxcbiAgICBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhENjIsXG4gICAgREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgIDogMHg4MUE1LFxuICAgIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA6IDB4MTkwMSxcbiAgICBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgOiAweDhENDgsXG4gICAgREVQVEhfU1RFTkNJTCAgICAgICAgICAgICAgICAgIDogMHg4NEY5LFxuXG4gICAgUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDogMHg4RDQyLFxuICAgIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA6IDB4OEQ0MyxcbiAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgOiAweDhENDQsXG4gICAgUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDogMHg4RDUwLFxuICAgIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA6IDB4OEQ1MSxcbiAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgOiAweDhENTIsXG4gICAgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgIDogMHg4RDUzLFxuICAgIFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAgICA6IDB4OEQ1NCxcbiAgICBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgOiAweDhENTUsXG5cbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAgICA6IDB4OENEMCxcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA6IDB4OENEMSxcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA6IDB4OENEMixcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSA6IDB4OENEMyxcblxuICAgIENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA6IDB4OENFMCxcbiAgICBERVBUSF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgOiAweDhEMDAsXG4gICAgU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgIDogMHg4RDIwLFxuICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA6IDB4ODIxQSxcblxuICAgIE5PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXG5cbiAgICBGUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICA6IDB4OENENSxcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA6IDB4OENENixcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA6IDB4OENENyxcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAgICAgICA6IDB4OENEOSxcbiAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA6IDB4OENERCxcblxuICAgIEZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICA6IDB4OENBNixcbiAgICBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDhDQTcsXG4gICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDogMHg4NEU4LFxuXG4gICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gIDogMHgwNTA2LFxuXG4gICAgLyogV2ViR0wtc3BlY2lmaWMgZW51bXMgKi9cbiAgICBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgOiAweDkyNDAsXG4gICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIDogMHg5MjQxLFxuICAgIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICA6IDB4OTI0MixcbiAgICBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIDogMHg5MjQzLFxuICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICA6IDB4OTI0NCxcbn07XG4iLCJ2YXIgc3VwcG9ydFdlYkdMID0gdHJ1ZTtcbnRyeSB7XG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcbiAgICBpZiAoIWdsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cbn0gY2F0Y2ggKGUpIHtcbiAgICBzdXBwb3J0V2ViR0wgPSBmYWxzZTtcbn1cblxudmFyIHZlbmRvciA9IHt9O1xuXG4vKipcbiAqIElmIHN1cHBvcnQgV2ViR0xcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbnZlbmRvci5zdXBwb3J0V2ViR0wgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN1cHBvcnRXZWJHTDtcbn07XG5cblxudmVuZG9yLkludDhBcnJheSA9IHR5cGVvZiBJbnQ4QXJyYXkgPT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDhBcnJheTtcblxudmVuZG9yLlVpbnQ4QXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PSAndW5kZWZpbmVkJyA/IEFycmF5IDogVWludDhBcnJheTtcblxudmVuZG9yLlVpbnQxNkFycmF5ID0gdHlwZW9mIFVpbnQxNkFycmF5ID09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MTZBcnJheTtcblxudmVuZG9yLlVpbnQzMkFycmF5ID0gdHlwZW9mIFVpbnQzMkFycmF5ID09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MzJBcnJheTtcblxudmVuZG9yLkludDE2QXJyYXkgPSB0eXBlb2YgSW50MTZBcnJheSA9PSAndW5kZWZpbmVkJyA/IEFycmF5IDogSW50MTZBcnJheTtcblxudmVuZG9yLkZsb2F0MzJBcnJheSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0MzJBcnJheTtcblxudmVuZG9yLkZsb2F0NjRBcnJheSA9IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0NjRBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgdmVuZG9yO1xuIiwiaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLlZlY3RvcjNcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHpcbiAqL1xudmFyIFZlY3RvcjMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XG5cbiAgICB4ID0geCB8fCAwO1xuICAgIHkgPSB5IHx8IDA7XG4gICAgeiA9IHogfHwgMDtcblxuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yMywgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHogY29tcG9uZW50c1xuICAgICAqIEBuYW1lIGFycmF5XG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjMjXG4gICAgICovXG4gICAgdGhpcy5hcnJheSA9IHZlYzMuZnJvbVZhbHVlcyh4LCB5LCB6KTtcblxuICAgIC8qKlxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XG4gICAgICogQG5hbWUgX2RpcnR5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3IzI1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cblZlY3RvcjMucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3IgOiBWZWN0b3IzLFxuXG4gICAgLyoqXG4gICAgICogQWRkIGIgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xuICAgICAgICB2ZWMzLmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHopIHtcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50cyBmcm9tIGFycmF5XG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xuICAgICAgICB0aGlzLmFycmF5WzFdID0gYXJyWzFdO1xuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xuXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjNcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnksIHRoaXMueik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xuICAgICAgICB2ZWMzLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyb3NzIHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYiwgd3JpdHRlbiB0byBhIFZlY3RvcjMgb3V0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGNyb3NzOiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB2ZWMzLmNyb3NzKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgZGlzdGFuY2VcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0OiBmdW5jdGlvbiAoYikge1xuICAgICAgICByZXR1cm4gdmVjMy5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBkaXZpZGVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGRpdjogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGRpdmlkZTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHJldHVybiB2ZWMzLmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5sZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5sZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGxlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XG4gICAgICAgIHZlYzMubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBtaW46IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHZlYzMubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIG1heDogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xuICAgICAgICB2ZWMzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTmVnYXRlIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBuZWdhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmVjMy5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZlYzMubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSwgeiBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICByYW5kb206IGZ1bmN0aW9uIChzY2FsZSkge1xuICAgICAgICB2ZWMzLnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNjYWxlIHNlbGZcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHNjYWxlOiBmdW5jdGlvbiAocykge1xuICAgICAgICB2ZWMzLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTY2FsZSBiIGFuZCBhZGQgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBzY2FsZUFuZEFkZDogZnVuY3Rpb24gKGIsIHMpIHtcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckRpc3Q6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHJldHVybiB2ZWMzLnNxckRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbiAoYikge1xuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkRGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckxlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5zcXJMZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkTGVuZ3RoKHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHN1YjogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5zdWIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0IGIgZnJvbSBzZWxmXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgdmVjMy5zdWJ0cmFjdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDMgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1cbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobSkge1xuICAgICAgICB2ZWMzLnRyYW5zZm9ybU1hdDQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm1RdWF0OiBmdW5jdGlvbiAocSkge1xuICAgICAgICB2ZWMzLnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYXNuZm9ybSBzZWxmIGludG8gcHJvamVjdGlvbiBzcGFjZSB3aXRoIG1cbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgdmFyIHYgPSB0aGlzLmFycmF5O1xuICAgICAgICBtID0gbS5hcnJheTtcblxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXG4gICAgICAgIGlmIChtWzE1XSA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHZbMl07XG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKiB3O1xuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICogdztcbiAgICAgICAgICAgIHZbMl0gPSAobVsxMF0gKiB2WzJdICsgbVsxNF0pICogdztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSArIG1bMTJdO1xuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICsgbVsxM107XG4gICAgICAgICAgICB2WzJdID0gbVsxMF0gKiB2WzJdICsgbVsxNF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBldWxlckZyb21RdWF0OiBmdW5jdGlvbihxLCBvcmRlcikge1xuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbVF1YXQodGhpcywgcSwgb3JkZXIpO1xuICAgIH0sXG5cbiAgICBldWxlckZyb21NYXQzOiBmdW5jdGlvbiAobSwgb3JkZXIpIHtcbiAgICAgICAgVmVjdG9yMy5ldWxlckZyb21NYXQzKHRoaXMsIG0sIG9yZGVyKTtcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xuICAgIH0sXG5cbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcbiAgICB9XG59O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBHZXR0ZXIgYW5kIFNldHRlclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XG5cbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IzLnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBAbmFtZSB4XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMF07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5WzBdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHlcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yM1xuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsxXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgelxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3IzXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzJdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsyXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cblxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gIHhcbiAqIEBwYXJhbSAge251bWJlcn0gIHlcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSwgeikge1xuICAgIHZlYzMuc2V0KG91dC5hcnJheSwgeCwgeSwgeik7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XG4gICAgdmVjMy5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzMuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3IzLmRpc3RhbmNlID0gVmVjdG9yMy5kaXN0O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMy5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuZGl2aWRlID0gVmVjdG9yMy5kaXY7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjMuZG90ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWMzLmRvdChhLmFycmF5LCBiLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5sZW4gPSBmdW5jdGlvbihiKSB7XG4gICAgcmV0dXJuIHZlYzMubGVuZ3RoKGIuYXJyYXkpO1xufTtcblxuLy8gVmVjdG9yMy5sZW5ndGggPSBWZWN0b3IzLmxlbjtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcbiAgICB2ZWMzLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLm1pbihvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjMy5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLm11bHRpcGx5KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5tdWx0aXBseSA9IFZlY3RvcjMubXVsO1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgdmVjMy5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIHZlYzMubm9ybWFsaXplKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XG4gICAgdmVjMy5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHNjYWxlKSB7XG4gICAgdmVjMy5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XG4gICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHNjYWxlKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjMuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gdmVjMy5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xufTtcbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IzLnNxckRpc3Q7XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjMuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiB2ZWMzLnNxckxlbihhLmFycmF5KTtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yMy5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yMy5zcXJMZW47XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWMzLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5zdWJ0cmFjdCA9IFZlY3RvcjMuc3ViO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMy50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBtXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XG4gICAgdmVjMy50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gcVxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xuICAgIHZlYzMudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5mdW5jdGlvbiBjbGFtcCh2YWwsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIHZhbCA8IG1pbiA/IG1pbiA6ICh2YWwgPiBtYXggPyBtYXggOiB2YWwpO1xufVxudmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbnZhciBhc2luID0gTWF0aC5hc2luO1xudmFyIGFicyA9IE1hdGguYWJzO1xuLyoqXG4gKiBDb252ZXJ0IHF1YXRlcm5pb24gdG8gZXVsZXIgYW5nbGVcbiAqIFF1YXRlcm5pb24gbXVzdCBiZSBub3JtYWxpemVkXG4gKiBGcm9tIHRocmVlLmpzXG4gKi9cblZlY3RvcjMuZXVsZXJGcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEsIG9yZGVyKSB7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcSA9IHEuYXJyYXk7XG5cbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXTtcbiAgICB2YXIgeDIgPSB4ICogeDtcbiAgICB2YXIgeTIgPSB5ICogeTtcbiAgICB2YXIgejIgPSB6ICogejtcbiAgICB2YXIgdzIgPSB3ICogdztcblxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcblxuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICAgICAgY2FzZSAnWFlaJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgLSB5ICogeiksICh3MiAtIHgyIC0geTIgKyB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcCgyICogKHggKiB6ICsgeSAqIHcpLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeiAqIHcgLSB4ICogeSksICh3MiArIHgyIC0geTIgLSB6MikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1lYWic6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgLSB5ICogeiksIC0gMSwgMSkpO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHggKiB5ICsgeiAqIHcpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaWFknOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcCgyICogKHggKiB3ICsgeSAqIHopLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB6ICogeCksICh3MiAtIHgyIC0geTIgKyB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh6ICogdyAtIHggKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWllYJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB6ICogeSksICh3MiAtIHgyIC0geTIgKyB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcCgyICogKHkgKiB3IC0geCAqIHopLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiArIHgyIC0geTIgLSB6MikpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1laWCc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3IC0geiAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB4ICogeiksICh3MiArIHgyIC0geTIgLSB6MikpO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbihjbGFtcCgyICogKHggKiB5ICsgeiAqIHcpLCAtIDEsIDEpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdYWlknOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyArIHkgKiB6KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh6ICogdyAtIHggKiB5KSwgLSAxLCAxKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIG9yZGVyOiAnICsgb3JkZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHJvdGF0aW9uIG1hdHJpeCB0byBldWxlciBhbmdsZVxuICogZnJvbSB0aHJlZS5qc1xuICovXG5WZWN0b3IzLmV1bGVyRnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtLCBvcmRlcikge1xuICAgIC8vIGFzc3VtZXMgdGhlIHVwcGVyIDN4MyBvZiBtIGlzIGEgcHVyZSByb3RhdGlvbiBtYXRyaXggKGkuZSwgdW5zY2FsZWQpXG4gICAgdmFyIHRlID0gbS5hcnJheTtcbiAgICB2YXIgbTExID0gdGVbMF0sIG0xMiA9IHRlWzNdLCBtMTMgPSB0ZVs2XTtcbiAgICB2YXIgbTIxID0gdGVbMV0sIG0yMiA9IHRlWzRdLCBtMjMgPSB0ZVs3XTtcbiAgICB2YXIgbTMxID0gdGVbMl0sIG0zMiA9IHRlWzVdLCBtMzMgPSB0ZVs4XTtcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xuXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgICAgICBjYXNlICdYWVonOlxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcChtMTMsIC0xLCAxKSk7XG4gICAgICAgICAgICBpZiAoYWJzKG0xMykgPCAwLjk5OTk5KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWVhaJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oLWNsYW1wKG0yMywgLTEsIDEpKTtcbiAgICAgICAgICAgIGlmIChhYnMobTIzKSA8IDAuOTk5OTkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0zMyk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIobTIxLCBtMjIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1pYWSc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKG0zMiwgLTEsIDEpKTtcbiAgICAgICAgICAgIGlmIChhYnMobTMyKSA8IDAuOTk5OTkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigtbTMxLCBtMzMpO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0yMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSAwO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdaWVgnOlxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbigtY2xhbXAobTMxLCAtMSwgMSkpO1xuICAgICAgICAgICAgaWYgKGFicyhtMzEpIDwgMC45OTk5OSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKG0zMiwgbTMzKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0yMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWVpYJzpcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAobTIxLCAtMSwgMSkpO1xuICAgICAgICAgICAgaWYgKGFicyhtMjEpIDwgMC45OTk5OSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0yMik7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1haWSc6XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKC1jbGFtcChtMTIsIC0xLCAxKSk7XG4gICAgICAgICAgICBpZiAoYWJzKG0xMikgPCAwLjk5OTk5KSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKG0xMywgbTExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0zMyk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XG4gICAgfVxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8vIFRPRE8gcmV0dXJuIG5ldy5cbi8qKlxuICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLlBPU0lUSVZFX1ggPSBuZXcgVmVjdG9yMygxLCAwLCAwKTtcbi8qKlxuICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLk5FR0FUSVZFX1ggPSBuZXcgVmVjdG9yMygtMSwgMCwgMCk7XG4vKipcbiAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5QT1NJVElWRV9ZID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG4vKipcbiAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5ORUdBVElWRV9ZID0gbmV3IFZlY3RvcjMoMCwgLTEsIDApO1xuLyoqXG4gKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuUE9TSVRJVkVfWiA9IG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xuLyoqXG4gKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZlY3RvcjMuTkVHQVRJVkVfWiA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcbi8qKlxuICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICovXG5WZWN0b3IzLlVQID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG4vKipcbiAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAqL1xuVmVjdG9yMy5aRVJPID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG5cbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjM7XG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XG5cbi8qKlxuICogQXhpcyBhbGlnbmVkIGJvdW5kaW5nIGJveFxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLkJvdW5kaW5nQm94XG4gKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBbbWluXVxuICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW21heF1cbiAqL1xudmFyIEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKG1pbiwgbWF4KSB7XG5cbiAgICAvKipcbiAgICAgKiBNaW5pbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5taW4gPSBtaW4gfHwgbmV3IFZlY3RvcjMoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5tYXggPSBtYXggfHwgbmV3IFZlY3RvcjMoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XG59O1xuXG5Cb3VuZGluZ0JveC5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogQm91bmRpbmdCb3gsXG4gICAgLyoqXG4gICAgICogVXBkYXRlIG1pbiBhbmQgbWF4IGNvb3JkcyBmcm9tIGEgdmVydGljZXMgYXJyYXlcbiAgICAgKiBAcGFyYW0gIHthcnJheX0gdmVydGljZXNcbiAgICAgKi9cbiAgICB1cGRhdGVGcm9tVmVydGljZXM6IGZ1bmN0aW9uICh2ZXJ0aWNlcykge1xuICAgICAgICBpZiAodmVydGljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xuICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHZlcnRpY2VzWzBdKTtcbiAgICAgICAgICAgIHZlYzNDb3B5KG1heEFyciwgdmVydGljZXNbMF0pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcblxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMF0gPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0gdmVydGV4WzBdOyB9XG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA8IG1pbkFyclsxXSkgeyBtaW5BcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzJdIDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHZlcnRleFsyXTsgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFswXSA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB2ZXJ0ZXhbMF07IH1cbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzFdID4gbWF4QXJyWzFdKSB7IG1heEFyclsxXSA9IHZlcnRleFsxXTsgfVxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gdmVydGV4WzJdOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVuaW9uIG9wZXJhdGlvbiB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLkJvdW5kaW5nQm94fSBiYm94XG4gICAgICovXG4gICAgdW5pb246IGZ1bmN0aW9uIChiYm94KSB7XG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgICAgICB2ZWMzLm1pbihtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xuICAgICAgICB2ZWMzLm1heChtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnRlcnNlY3Rpb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9IGJib3hcbiAgICAgKi9cbiAgICBpbnRlcnNlY3Rpb246IGZ1bmN0aW9uIChiYm94KSB7XG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgICAgICB2ZWMzLm1heChtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xuICAgICAgICB2ZWMzLm1pbihtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiBpbnRlcnNlY3Qgd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5Cb3VuZGluZ0JveH0gYmJveFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XG5cbiAgICAgICAgdmFyIF9taW4yID0gYmJveC5taW4uYXJyYXk7XG4gICAgICAgIHZhciBfbWF4MiA9IGJib3gubWF4LmFycmF5O1xuXG4gICAgICAgIHJldHVybiAhIChfbWluWzBdID4gX21heDJbMF0gfHwgX21pblsxXSA+IF9tYXgyWzFdIHx8IF9taW5bMl0gPiBfbWF4MlsyXVxuICAgICAgICAgICAgfHwgX21heFswXSA8IF9taW4yWzBdIHx8IF9tYXhbMV0gPCBfbWluMlsxXSB8fCBfbWF4WzJdIDwgX21pbjJbMl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiBjb250YWluIGFub3RoZXIgYm91bmRpbmcgYm94IGVudGlyZWx5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLkJvdW5kaW5nQm94fSBiYm94XG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBjb250YWluQm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XG5cbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcblxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcbiAgICAgICAgdmFyIF9tYXgyID0gYmJveC5tYXguYXJyYXk7XG5cbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX21pbjJbMF0gJiYgX21pblsxXSA8PSBfbWluMlsxXSAmJiBfbWluWzJdIDw9IF9taW4yWzJdXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9tYXgyWzBdICYmIF9tYXhbMV0gPj0gX21heDJbMV0gJiYgX21heFsyXSA+PSBfbWF4MlsyXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSWYgY29udGFpbiBwb2ludCBlbnRpcmVseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBwb2ludFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgY29udGFpblBvaW50OiBmdW5jdGlvbiAocCkge1xuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xuXG4gICAgICAgIHZhciBfcCA9IHAuYXJyYXk7XG5cbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX3BbMF0gJiYgX21pblsxXSA8PSBfcFsxXSAmJiBfbWluWzJdIDw9IF9wWzJdXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9wWzBdICYmIF9tYXhbMV0gPj0gX3BbMV0gJiYgX21heFsyXSA+PSBfcFsyXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSWYgYm91bmRpbmcgYm94IGlzIGZpbml0ZVxuICAgICAqL1xuICAgIGlzRmluaXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XG4gICAgICAgIHJldHVybiBpc0Zpbml0ZShfbWluWzBdKSAmJiBpc0Zpbml0ZShfbWluWzFdKSAmJiBpc0Zpbml0ZShfbWluWzJdKVxuICAgICAgICAgICAgJiYgaXNGaW5pdGUoX21heFswXSkgJiYgaXNGaW5pdGUoX21heFsxXSkgJiYgaXNGaW5pdGUoX21heFsyXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IGFuIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRvIHRoZSBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gbWF0cml4XG4gICAgICovXG4gICAgYXBwbHlUcmFuc2Zvcm06IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9kZXYudGhlb21hZGVyLmNvbS90cmFuc2Zvcm0tYm91bmRpbmctYm94ZXMvXG4gICAgICAgIHZhciB4YSA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB4YiA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB5YSA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB5YiA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB6YSA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIHZhciB6YiA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtYXRyaXgpIHtcbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcblxuICAgICAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XG5cbiAgICAgICAgICAgIHhhWzBdID0gbVswXSAqIG1pblswXTsgeGFbMV0gPSBtWzFdICogbWluWzBdOyB4YVsyXSA9IG1bMl0gKiBtaW5bMF07XG4gICAgICAgICAgICB4YlswXSA9IG1bMF0gKiBtYXhbMF07IHhiWzFdID0gbVsxXSAqIG1heFswXTsgeGJbMl0gPSBtWzJdICogbWF4WzBdO1xuXG4gICAgICAgICAgICB5YVswXSA9IG1bNF0gKiBtaW5bMV07IHlhWzFdID0gbVs1XSAqIG1pblsxXTsgeWFbMl0gPSBtWzZdICogbWluWzFdO1xuICAgICAgICAgICAgeWJbMF0gPSBtWzRdICogbWF4WzFdOyB5YlsxXSA9IG1bNV0gKiBtYXhbMV07IHliWzJdID0gbVs2XSAqIG1heFsxXTtcblxuICAgICAgICAgICAgemFbMF0gPSBtWzhdICogbWluWzJdOyB6YVsxXSA9IG1bOV0gKiBtaW5bMl07IHphWzJdID0gbVsxMF0gKiBtaW5bMl07XG4gICAgICAgICAgICB6YlswXSA9IG1bOF0gKiBtYXhbMl07IHpiWzFdID0gbVs5XSAqIG1heFsyXTsgemJbMl0gPSBtWzEwXSAqIG1heFsyXTtcblxuICAgICAgICAgICAgbWluWzBdID0gTWF0aC5taW4oeGFbMF0sIHhiWzBdKSArIE1hdGgubWluKHlhWzBdLCB5YlswXSkgKyBNYXRoLm1pbih6YVswXSwgemJbMF0pICsgbVsxMl07XG4gICAgICAgICAgICBtaW5bMV0gPSBNYXRoLm1pbih4YVsxXSwgeGJbMV0pICsgTWF0aC5taW4oeWFbMV0sIHliWzFdKSArIE1hdGgubWluKHphWzFdLCB6YlsxXSkgKyBtWzEzXTtcbiAgICAgICAgICAgIG1pblsyXSA9IE1hdGgubWluKHhhWzJdLCB4YlsyXSkgKyBNYXRoLm1pbih5YVsyXSwgeWJbMl0pICsgTWF0aC5taW4oemFbMl0sIHpiWzJdKSArIG1bMTRdO1xuXG4gICAgICAgICAgICBtYXhbMF0gPSBNYXRoLm1heCh4YVswXSwgeGJbMF0pICsgTWF0aC5tYXgoeWFbMF0sIHliWzBdKSArIE1hdGgubWF4KHphWzBdLCB6YlswXSkgKyBtWzEyXTtcbiAgICAgICAgICAgIG1heFsxXSA9IE1hdGgubWF4KHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1heCh5YVsxXSwgeWJbMV0pICsgTWF0aC5tYXgoemFbMV0sIHpiWzFdKSArIG1bMTNdO1xuICAgICAgICAgICAgbWF4WzJdID0gTWF0aC5tYXgoeGFbMl0sIHhiWzJdKSArIE1hdGgubWF4KHlhWzJdLCB5YlsyXSkgKyBNYXRoLm1heCh6YVsyXSwgemJbMl0pICsgbVsxNF07XG5cbiAgICAgICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBwcm9qZWN0aW9uIG1hdHJpeCB0byB0aGUgYm91bmRpbmcgYm94XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1hdHJpeFxuICAgICAqL1xuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG1hdHJpeCkge1xuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcblxuICAgICAgICB2YXIgbSA9IG1hdHJpeC5hcnJheTtcbiAgICAgICAgLy8gbWluIGluIG1pbiB6XG4gICAgICAgIHZhciB2MTAgPSBtaW5bMF07XG4gICAgICAgIHZhciB2MTEgPSBtaW5bMV07XG4gICAgICAgIHZhciB2MTIgPSBtaW5bMl07XG4gICAgICAgIC8vIG1heCBpbiBtaW4gelxuICAgICAgICB2YXIgdjIwID0gbWF4WzBdO1xuICAgICAgICB2YXIgdjIxID0gbWF4WzFdO1xuICAgICAgICB2YXIgdjIyID0gbWluWzJdO1xuICAgICAgICAvLyBtYXggaW4gbWF4IHpcbiAgICAgICAgdmFyIHYzMCA9IG1heFswXTtcbiAgICAgICAgdmFyIHYzMSA9IG1heFsxXTtcbiAgICAgICAgdmFyIHYzMiA9IG1heFsyXTtcblxuICAgICAgICBpZiAobVsxNV0gPT09IDEpIHsgIC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXG4gICAgICAgICAgICBtaW5bMF0gPSBtWzBdICogdjEwICsgbVsxMl07XG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICsgbVsxM107XG4gICAgICAgICAgICBtYXhbMl0gPSBtWzEwXSAqIHYxMiArIG1bMTRdO1xuXG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjMwICsgbVsxMl07XG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjMxICsgbVsxM107XG4gICAgICAgICAgICBtaW5bMl0gPSBtWzEwXSAqIHYzMiArIG1bMTRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHYxMjtcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKiB3O1xuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSAqIHc7XG4gICAgICAgICAgICBtYXhbMl0gPSAobVsxMF0gKiB2MTIgKyBtWzE0XSkgKiB3O1xuXG4gICAgICAgICAgICB3ID0gLTEgLyB2MjI7XG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjIwICogdztcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MjEgKiB3O1xuXG4gICAgICAgICAgICB3ID0gLTEgLyB2MzI7XG4gICAgICAgICAgICBtaW5bMl0gPSAobVsxMF0gKiB2MzIgKyBtWzE0XSkgKiB3O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHVwZGF0ZVZlcnRpY2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG4gICAgICAgIGlmICghdmVydGljZXMpIHtcbiAgICAgICAgICAgIC8vIEN1YmUgdmVydGljZXNcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBFaWdodCBjb29yZHMgb2YgYm91bmRpbmcgYm94XG4gICAgICAgICAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5W119XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcztcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcbiAgICAgICAgLy8tLS0gbWluIHpcbiAgICAgICAgLy8gbWluIHhcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIG1pblswXSwgbWF4WzFdLCBtaW5bMl0pO1xuICAgICAgICAvLyBtYXggeFxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1szXSwgbWF4WzBdLCBtYXhbMV0sIG1pblsyXSk7XG5cbiAgICAgICAgLy8tLSBtYXggelxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzRdLCBtaW5bMF0sIG1pblsxXSwgbWF4WzJdKTtcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s1XSwgbWluWzBdLCBtYXhbMV0sIG1heFsyXSk7XG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzddLCBtYXhbMF0sIG1heFsxXSwgbWF4WzJdKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9IGJib3hcbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbiAoYmJveCkge1xuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heDtcbiAgICAgICAgdmVjM0NvcHkobWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XG4gICAgICAgIHZlYzNDb3B5KG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBib3VuZGluZyBib3hcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIGJvdW5kaW5nQm94LmNvcHkodGhpcyk7XG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCb3VuZGluZ0JveDtcbiIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciBtYXQzID0gZ2xNYXRyaXgubWF0MztcbnZhciBxdWF0ID0gZ2xNYXRyaXgucXVhdDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguTWF0cml4NFxuICovXG52YXIgTWF0cml4NCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5fYXhpc1ggPSBuZXcgVmVjdG9yMygpO1xuICAgIHRoaXMuX2F4aXNZID0gbmV3IFZlY3RvcjMoKTtcbiAgICB0aGlzLl9heGlzWiA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDRcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXg0I1xuICAgICAqL1xuICAgIHRoaXMuYXJyYXkgPSBtYXQ0LmNyZWF0ZSgpO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgX2RpcnR5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXg0I1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cbk1hdHJpeDQucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDQsXG5cbiAgICAvKipcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcbiAgICAgKi9cbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgYWRqdWdhdGUgb2Ygc2VsZiwgaW4tcGxhY2VcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBhZGpvaW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgbWF0NC5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXg0XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXg0KCkpLmNvcHkodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIG1hdDQuY29weSh0aGlzLmFycmF5LCBhLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBtYXQ0LmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdXBwZXIgM3gzIHBhcnQgZnJvbSBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBmcm9tUXVhdDogZnVuY3Rpb24ocSkge1xuICAgICAgICBtYXQ0LmZyb21RdWF0KHRoaXMuYXJyYXksIHEuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgZnJvbSBhIHF1YXRlcm5pb24gcm90YXRpb24gYW5kIGEgdmVjdG9yIHRyYW5zbGF0aW9uXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOiBmdW5jdGlvbihxLCB2KSB7XG4gICAgICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odGhpcy5hcnJheSwgcS5hcnJheSwgdi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBmcm9tIE1hdHJpeDJkLCBpdCBpcyB1c2VkIHdoZW4gY29udmVydGluZyBhIDJkIHNoYXBlIHRvIDNkIHNwYWNlLlxuICAgICAqIEluIDNkIHNwYWNlIGl0IGlzIGVxdWl2YWxlbnQgdG8gcmFuc2xhdGUgb24geHkgcGxhbmUgYW5kIHJvdGF0ZSBhYm91dCB6IGF4aXNcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG0yZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGZyb21NYXQyZDogZnVuY3Rpb24obTJkKSB7XG4gICAgICAgIE1hdHJpeDQuZnJvbU1hdDJkKHRoaXMsIG0yZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgZnJvbSBmcnVzdHVtIGJvdW5kc1xuICAgICAqIEBwYXJhbSAge251bWJlcn0gbGVmdFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdHRvbVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdG9wXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBmcnVzdHVtOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgICAgICAgbWF0NC5mcnVzdHVtKHRoaXMuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQ0LmlkZW50aXR5KHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnZlcnQgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGludmVydDogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgYXMgYSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXNcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gZXllXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGNlbnRlclxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSB1cFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGxvb2tBdDogZnVuY3Rpb24oZXllLCBjZW50ZXIsIHVwKSB7XG4gICAgICAgIG1hdDQubG9va0F0KHRoaXMuYXJyYXksIGV5ZS5hcnJheSwgY2VudGVyLmFycmF5LCB1cC5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgbWF0NC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIG11bExlZnQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgbWF0NC5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIG11bHRpcGx5TGVmdDogZnVuY3Rpb24oYSkge1xuICAgICAgICBtYXQ0Lm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgYXMgYSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJpZ2h0XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBib3R0b21cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgb3J0aG86IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gICAgICAgIG1hdDQub3J0aG8odGhpcy5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0IGFzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZvdnlcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGFzcGVjdFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgcGVyc3BlY3RpdmU6IGZ1bmN0aW9uKGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XG4gICAgICAgIG1hdDQucGVyc3BlY3RpdmUodGhpcy5hcnJheSwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSByYWQgYWJvdXQgYXhpcy5cbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBheGlzXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQsIGF4aXMpIHtcbiAgICAgICAgbWF0NC5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzLlxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgcm90YWlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gICAgICovXG4gICAgcm90YXRlWDogZnVuY3Rpb24ocmFkKSB7XG4gICAgICAgIG1hdDQucm90YXRlWCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXMuXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICByb3RhdGVZOiBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgbWF0NC5yb3RhdGVZKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFogYXhpcy5cbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uKHJhZCkge1xuICAgICAgICBtYXQ0LnJvdGF0ZVoodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgc2VsZiBieSBzXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSBzY2FsZSBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gIHNcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xuICAgICAgICBtYXQ0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2xhdGUgc2VsZiBieSB2LlxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgdHJhbnNsYXRlIG1hdHJpeFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSAgdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24odikge1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICAgICAqL1xuICAgIHRyYW5zcG9zZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDQudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZWNvbXBvc2UgYSBtYXRyaXggdG8gU1JUXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW3NjYWxlXVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHJvdGF0aW9uXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yfSBwb3NpdGlvblxuICAgICAqIEBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21pY3Jvc29mdC54bmEuZnJhbWV3b3JrLm1hdHJpeC5kZWNvbXBvc2UuYXNweFxuICAgICAqL1xuICAgIGRlY29tcG9zZU1hdHJpeDogKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciB4ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHkgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICB2YXIgeiA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc2NhbGUsIHJvdGF0aW9uLCBwb3NpdGlvbikge1xuXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdmVjMy5zZXQoeCwgZWxbMF0sIGVsWzFdLCBlbFsyXSk7XG4gICAgICAgICAgICB2ZWMzLnNldCh5LCBlbFs0XSwgZWxbNV0sIGVsWzZdKTtcbiAgICAgICAgICAgIHZlYzMuc2V0KHosIGVsWzhdLCBlbFs5XSwgZWxbMTBdKTtcblxuICAgICAgICAgICAgdmFyIHN4ID0gdmVjMy5sZW5ndGgoeCk7XG4gICAgICAgICAgICB2YXIgc3kgPSB2ZWMzLmxlbmd0aCh5KTtcbiAgICAgICAgICAgIHZhciBzeiA9IHZlYzMubGVuZ3RoKHopO1xuXG4gICAgICAgICAgICAvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxuICAgICAgICAgICAgdmFyIGRldCA9IHRoaXMuZGV0ZXJtaW5hbnQoKTtcbiAgICAgICAgICAgIGlmIChkZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgc3ggPSAtc3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY2FsZSkge1xuICAgICAgICAgICAgICAgIHNjYWxlLnNldChzeCwgc3ksIHN6KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG9zaXRpb24uc2V0KGVsWzEyXSwgZWxbMTNdLCBlbFsxNF0pO1xuXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBlbCk7XG4gICAgICAgICAgICAvLyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxuICAgICAgICAgICAgLy8gU2VlbXMgZml4ZWQgaW4gZ2wtbWF0cml4IDIuMi4yXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgvaXNzdWVzLzExNFxuICAgICAgICAgICAgLy8gbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcblxuICAgICAgICAgICAgbTNbMF0gLz0gc3g7XG4gICAgICAgICAgICBtM1sxXSAvPSBzeDtcbiAgICAgICAgICAgIG0zWzJdIC89IHN4O1xuXG4gICAgICAgICAgICBtM1szXSAvPSBzeTtcbiAgICAgICAgICAgIG0zWzRdIC89IHN5O1xuICAgICAgICAgICAgbTNbNV0gLz0gc3k7XG5cbiAgICAgICAgICAgIG0zWzZdIC89IHN6O1xuICAgICAgICAgICAgbTNbN10gLz0gc3o7XG4gICAgICAgICAgICBtM1s4XSAvPSBzejtcblxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myhyb3RhdGlvbi5hcnJheSwgbTMpO1xuICAgICAgICAgICAgcXVhdC5ub3JtYWxpemUocm90YXRpb24uYXJyYXksIHJvdGF0aW9uLmFycmF5KTtcblxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHBvc2l0aW9uLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcbiAgICB9LFxuXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XG4gICAgfVxufTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcbiAgICB2YXIgcHJvdG8gPSBNYXRyaXg0LnByb3RvdHlwZTtcbiAgICAvKipcbiAgICAgKiBaIEF4aXMgb2YgbG9jYWwgdHJhbnNmb3JtXG4gICAgICogQG5hbWUgelxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDRcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcbiAgICAgICAgICAgIHRoaXMuX2F4aXNaLnNldChlbFs4XSwgZWxbOV0sIGVsWzEwXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1o7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gSGVyZSBoYXMgYSBwcm9ibGVtXG4gICAgICAgICAgICAvLyBJZiBvbmx5IHNldCBhbiBpdGVtIG9mIHZlY3RvciB3aWxsIG5vdCB3b3JrXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XG4gICAgICAgICAgICBlbFs4XSA9IHZbMF07XG4gICAgICAgICAgICBlbFs5XSA9IHZbMV07XG4gICAgICAgICAgICBlbFsxMF0gPSB2WzJdO1xuXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFkgQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cbiAgICAgKiBAbmFtZSB5XG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguTWF0cml4NFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdGhpcy5fYXhpc1kuc2V0KGVsWzRdLCBlbFs1XSwgZWxbNl0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNZO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XG4gICAgICAgICAgICBlbFs0XSA9IHZbMF07XG4gICAgICAgICAgICBlbFs1XSA9IHZbMV07XG4gICAgICAgICAgICBlbFs2XSA9IHZbMl07XG5cbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogWCBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxuICAgICAqIEBuYW1lIHhcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXg0XG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XG4gICAgICAgICAgICB0aGlzLl9heGlzWC5zZXQoZWxbMF0sIGVsWzFdLCBlbFsyXSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1g7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcbiAgICAgICAgICAgIGVsWzBdID0gdlswXTtcbiAgICAgICAgICAgIGVsWzFdID0gdlsxXTtcbiAgICAgICAgICAgIGVsWzJdID0gdlsyXTtcblxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG1hdDQuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0NC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuTWF0cml4NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gbWF0NC5kZXRlcm1pbmFudChhLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcbiAgICBtYXQ0LmlkZW50aXR5KG91dC5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgbGVmdFxuICogQHBhcmFtICB7bnVtYmVyfSAgcmlnaHRcbiAqIEBwYXJhbSAge251bWJlcn0gIGJvdHRvbVxuICogQHBhcmFtICB7bnVtYmVyfSAgdG9wXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmYXJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0Lm9ydGhvID0gZnVuY3Rpb24ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xuICAgIG1hdDQub3J0aG8ob3V0LmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgZm92eVxuICogQHBhcmFtICB7bnVtYmVyfSAgYXNwZWN0XG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmYXJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnBlcnNwZWN0aXZlID0gZnVuY3Rpb24ob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICAgIG1hdDQucGVyc3BlY3RpdmUob3V0LmFycmF5LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcik7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGV5ZVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGNlbnRlclxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHVwXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC5sb29rQXQgPSBmdW5jdGlvbihvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICAgIG1hdDQubG9va0F0KG91dC5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0NC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG1hdDQubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0Lm11bHRpcGx5ID0gTWF0cml4NC5tdWw7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9ICAgIG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LmZyb21RdWF0ID0gZnVuY3Rpb24ob3V0LCBxKSB7XG4gICAgbWF0NC5mcm9tUXVhdChvdXQuYXJyYXksIHEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSAgICBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBxXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgdlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbihvdXQsIHEsIHYpIHtcbiAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dC5hcnJheSwgcS5hcnJheSwgdi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG00XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG0yZFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuZnJvbU1hdDJkID0gZnVuY3Rpb24obTQsIG0yZCkge1xuICAgIG00Ll9kaXJ0eSA9IHRydWU7XG4gICAgdmFyIG0yZCA9IG0yZC5hcnJheTtcbiAgICB2YXIgbTQgPSBtNC5hcnJheTtcblxuICAgIG00WzBdID0gbTJkWzBdO1xuICAgIG00WzRdID0gbTJkWzJdO1xuICAgIG00WzEyXSA9IG0yZFs0XTtcblxuICAgIG00WzFdID0gbTJkWzFdO1xuICAgIG00WzVdID0gbTJkWzNdO1xuICAgIG00WzEzXSA9IG0yZFs1XTtcblxuICAgIHJldHVybiBtNDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGF4aXNcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkLCBheGlzKSB7XG4gICAgbWF0NC5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQsIGF4aXMuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xuICAgIG1hdDQucm90YXRlWChvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XG4gICAgbWF0NC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcbiAgICBtYXQ0LnJvdGF0ZVoob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gdlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDR9XG4gKi9cbk1hdHJpeDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQ0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICovXG5NYXRyaXg0LnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG1hdDQudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSB2XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAqL1xuTWF0cml4NC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQ0LnRyYW5zbGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xuIiwidmFyIERJUlRZX1BSRUZJWCA9ICdfX2R0X18nO1xuXG52YXIgQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICB0aGlzLl9jb250ZXh0SWQgPSAwO1xuXG4gICAgdGhpcy5fY2FjaGVzID0gW107XG5cbiAgICB0aGlzLl9jb250ZXh0ID0ge307XG59O1xuXG5DYWNoZS5wcm90b3R5cGUgPSB7XG5cbiAgICB1c2U6IGZ1bmN0aW9uIChjb250ZXh0SWQsIGRvY3VtZW50U2NoZW1hKSB7XG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XG4gICAgICAgIGlmICghY2FjaGVzW2NvbnRleHRJZF0pIHtcbiAgICAgICAgICAgIGNhY2hlc1tjb250ZXh0SWRdID0ge307XG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGNhY2hlc1tjb250ZXh0SWRdID0gZG9jdW1lbnRTY2hlbWEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250ZXh0SWQgPSBjb250ZXh0SWQ7XG5cbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNhY2hlc1tjb250ZXh0SWRdO1xuICAgIH0sXG5cbiAgICBwdXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHRba2V5XSA9IHZhbHVlO1xuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHRba2V5XTtcbiAgICB9LFxuXG4gICAgZGlydHk6IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XG4gICAgICAgIHRoaXMucHV0KGtleSwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIGRpcnR5QWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBmcmVzaDogZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcbiAgICAgICAgdGhpcy5wdXQoa2V5LCBmYWxzZSk7XG4gICAgfSxcblxuICAgIGZyZXNoQWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xuICAgICAgICByZXR1cm4gICFjb250ZXh0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICAgICAgICAgIHx8IGNvbnRleHRba2V5XSA9PT0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgZGVsZXRlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHRJZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVzW2NvbnRleHRJZF07XG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSB7fTtcbiAgICB9LFxuXG4gICAgZGVsZXRlOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0W2tleV07XG4gICAgfSxcblxuICAgIGNsZWFyQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NhY2hlcyA9IHt9O1xuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0O1xuICAgIH0sXG5cbiAgICBlYWNoQ29udGV4dCA6IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlcyk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBjYiAmJiBjYi5jYWxsKGNvbnRleHQsIGtleSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBtaXNzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIHRoaXMuX2NvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KTtcbiAgICB9XG59O1xuXG5DYWNoZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDYWNoZTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FjaGU7XG4iLCIvKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB0ZXh0dXJlcyBsaWtlIGNvbXByZXNzZWQgdGV4dHVyZSwgdGV4dHVyZTJkLCB0ZXh0dXJlY3ViZVxuICogVE9ETyBtYXBwaW5nXG4gKi9cbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LlRleHR1cmVcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBUZXh0dXJlID0gQmFzZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuVGV4dHVyZSMgKi9cbntcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIHdpZHRoLCByZWFkb25seSB3aGVuIHRoZSB0ZXh0dXJlIHNvdXJjZSBpcyBpbWFnZVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgd2lkdGg6IDUxMixcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIGhlaWdodCwgcmVhZG9ubHkgd2hlbiB0aGUgdGV4dHVyZSBzb3VyY2UgaXMgaW1hZ2VcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGhlaWdodDogNTEyLFxuICAgIC8qKlxuICAgICAqIFRleGVsIGRhdGEgdHlwZS5cbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9CWVRFfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuSEFMRl9GTE9BVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkZMT0FUfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0x9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9JTlR9XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0eXBlOiBnbGVudW0uVU5TSUdORURfQllURSxcbiAgICAvKipcbiAgICAgKiBGb3JtYXQgb2YgdGV4ZWwgZGF0YVxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJHQkF9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9DT01QT05FTlR9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMfVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZm9ybWF0OiBnbGVudW0uUkdCQSxcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVR9XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB3cmFwUzogZ2xlbnVtLlJFUEVBVCxcbiAgICAvKipcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVR9XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB3cmFwVDogZ2xlbnVtLlJFUEVBVCxcbiAgICAvKipcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUn1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSfVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXG4gICAgLyoqXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUn1cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIG1hZ0ZpbHRlcjogZ2xlbnVtLkxJTkVBUixcbiAgICAvKipcbiAgICAgKiBJZiBlbmFibGUgbWltYXAuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgICogQW5pc290cm9waWMgZmlsdGVyaW5nLCBlbmFibGVkIGlmIHZhbHVlIGlzIGxhcmdlciB0aGFuIDFcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGFuaXNvdHJvcGljOiAxLFxuICAgIC8vIHBpeGVsU3RvcmVpIHBhcmFtZXRlcnMsIG5vdCBhdmFpbGFibGUgd2hlbiB0ZXh0dXJlIGlzIHVzZWQgYXMgcmVuZGVyIHRhcmdldFxuICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sXG4gICAgLyoqXG4gICAgICogSWYgZmxpcCBpbiB5IGF4aXMgZm9yIGdpdmVuIGltYWdlIHNvdXJjZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBmbGlwWTogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIEEgZmxhZyB0byBpbmRpY2F0ZSBpZiB0ZXh0dXJlIHNvdXJjZSBpcyBzUkdCXG4gICAgICovXG4gICAgc1JHQjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDRcbiAgICAgKi9cbiAgICB1bnBhY2tBbGlnbm1lbnQ6IDQsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIER5bmFtaWMgb3B0aW9uIGZvciB0ZXh0dXJlIGxpa2UgdmlkZW9cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBkeW5hbWljOiBmYWxzZSxcblxuICAgIE5QT1Q6IGZhbHNlXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuVGV4dHVyZS5wcm90b3R5cGUgKi9cbntcblxuICAgIGdldFdlYkdMVGV4dHVyZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgICAgICBpZiAoY2FjaGUubWlzcygnd2ViZ2xfdGV4dHVyZScpKSB7XG4gICAgICAgICAgICAvLyBJbiBhIG5ldyBnbCBjb250ZXh0LCBjcmVhdGUgbmV3IHRleHR1cmUgYW5kIHNldCBkaXJ0eSB0cnVlXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ3dlYmdsX3RleHR1cmUnLCBfZ2wuY3JlYXRlVGV4dHVyZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5keW5hbWljKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FjaGUuaXNEaXJ0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xuICAgIH0sXG5cbiAgICBiaW5kOiBmdW5jdGlvbiAoKSB7fSxcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uICgpIHt9LFxuXG4gICAgLyoqXG4gICAgICogTWFyayB0ZXh0dXJlIGlzIGRpcnR5IGFuZCB1cGRhdGUgaW4gdGhlIG5leHQgZnJhbWVcbiAgICAgKi9cbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHt9LFxuXG4gICAgLy8gVXBkYXRlIHRoZSBjb21tb24gcGFyYW1ldGVycyBvZiB0ZXh0dXJlXG4gICAgdXBkYXRlQ29tbW9uOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRoaXMuZmxpcFkpO1xuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcbiAgICAgICAgX2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfQUxJR05NRU5ULCB0aGlzLnVucGFja0FsaWdubWVudCk7XG5cbiAgICAgICAgLy8gVXNlIG9mIG5vbmUtcG93ZXIgb2YgdHdvIHRleHR1cmVcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL1dlYkdMX2FuZF9PcGVuR0xfRGlmZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XG4gICAgICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNSR0JFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3NSR0InKTtcbiAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0IgJiYgIXNSR0JFeHQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0JfQUxQSEEgJiYgIXNSR0JFeHQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0JBO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5OUE9UID0gIXRoaXMuaXNQb3dlck9mVHdvKCk7XG4gICAgfSxcblxuICAgIGdldEF2YWlsYWJsZVdyYXBTOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53cmFwUztcbiAgICB9LFxuICAgIGdldEF2YWlsYWJsZVdyYXBUOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53cmFwVDtcbiAgICB9LFxuICAgIGdldEF2YWlsYWJsZU1pbkZpbHRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbWluRmlsdGVyID0gdGhpcy5taW5GaWx0ZXI7XG4gICAgICAgIGlmICh0aGlzLk5QT1QgfHwgIXRoaXMudXNlTWlwbWFwKSB7XG4gICAgICAgICAgICBpZiAobWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XG4gICAgICAgICAgICAgICAgbWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnbGVudW0uTkVBUkVTVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsZW51bS5MSU5FQVI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWluRmlsdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0QXZhaWxhYmxlTWFnRmlsdGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hZ0ZpbHRlcjtcbiAgICB9LFxuXG4gICAgbmV4dEhpZ2hlc3RQb3dlck9mVHdvOiBmdW5jdGlvbiAoeCkge1xuICAgICAgICAtLXg7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzI7IGkgPDw9IDEpIHtcbiAgICAgICAgICAgIHggPSB4IHwgeCA+PiBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4ICsgMTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG5cbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG5cbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xuXG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSBjYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKTtcbiAgICAgICAgaWYgKHdlYmdsVGV4dHVyZSl7XG4gICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVUZXh0dXJlKHdlYmdsVGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGVzdCBpZiBpbWFnZSBvZiB0ZXh0dXJlIGlzIHZhbGlkIGFuZCBsb2FkZWQuXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHt9LFxuXG4gICAgLyoqXG4gICAgICogVGVzdCBpZiB0ZXh0dXJlIHNpemUgaXMgcG93ZXIgb2YgdHdvXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHt9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICdoZWlnaHQnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcbiAgICB9XG59KTtcblxuLyogRGF0YVR5cGUgKi9cblxuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkJZVEUgPSBnbGVudW0uQllURTtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5VTlNJR05FRF9CWVRFID0gZ2xlbnVtLlVOU0lHTkVEX0JZVEU7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuU0hPUlQgPSBnbGVudW0uU0hPUlQ7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuVU5TSUdORURfU0hPUlQgPSBnbGVudW0uVU5TSUdORURfU0hPUlQ7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuSU5UID0gZ2xlbnVtLklOVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5VTlNJR05FRF9JTlQgPSBnbGVudW0uVU5TSUdORURfSU5UO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkZMT0FUID0gZ2xlbnVtLkZMT0FUO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkhBTEZfRkxPQVQgPSAweDhENjE7XG5cbi8qKlxuICogVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgZm9yIFdFQkdMX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMID0gMzQwNDI7XG5cbi8qIFBpeGVsRm9ybWF0ICovXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuREVQVEhfQ09NUE9ORU5UID0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMID0gZ2xlbnVtLkRFUFRIX1NURU5DSUw7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuQUxQSEEgPSBnbGVudW0uQUxQSEE7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuUkdCID0gZ2xlbnVtLlJHQjtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5SR0JBID0gZ2xlbnVtLlJHQkE7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTFVNSU5BTkNFID0gZ2xlbnVtLkxVTUlOQU5DRTtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5MVU1JTkFOQ0VfQUxQSEEgPSBnbGVudW0uTFVNSU5BTkNFX0FMUEhBO1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuU1JHQiA9IDB4OEM0MDtcbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9leHRlbnNpb25zL0VYVF9zUkdCL1xuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5TUkdCX0FMUEhBID0gMHg4QzQyO1xuXG4vKiBDb21wcmVzc2VkIFRleHR1cmUgKi9cblRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCA9IDB4ODNGMDtcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAweDgzRjE7XG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyO1xuVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCA9IDB4ODNGMztcblxuLyogVGV4dHVyZU1hZ0ZpbHRlciAqL1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLk5FQVJFU1QgPSBnbGVudW0uTkVBUkVTVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5MSU5FQVIgPSBnbGVudW0uTElORUFSO1xuXG4vKiBUZXh0dXJlTWluRmlsdGVyICovXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTElORUFSID0gZ2xlbnVtLk5FQVJFU1RfTUlQTUFQX0xJTkVBUjtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtcblxuLyogVGV4dHVyZVdyYXBNb2RlICovXG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuUkVQRUFUID0gZ2xlbnVtLlJFUEVBVDtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuVGV4dHVyZS5DTEFNUF9UT19FREdFID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblRleHR1cmUuTUlSUk9SRURfUkVQRUFUID0gZ2xlbnVtLk1JUlJPUkVEX1JFUEVBVDtcblxuXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlO1xuIiwiLyoqXG4gKiBTaW1wbGUgZG91YmxlIGxpbmtlZCBsaXN0LiBDb21wYXJlZCB3aXRoIGFycmF5LCBpdCBoYXMgTygxKSByZW1vdmUgb3BlcmF0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5jb3JlLkxpbmtlZExpc3RcbiAqL1xudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XG4gICAgICovXG4gICAgdGhpcy5oZWFkID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cbiAgICAgKi9cbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuXG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IHRoZSB0YWlsXG4gKiBAcGFyYW0gIHt9IHZhbFxuICogQHJldHVybiB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xuICAgIHRoaXMuaW5zZXJ0RW50cnkoZW50cnkpO1xuICAgIHJldHVybiBlbnRyeTtcbn07XG5cbi8qKlxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IGlkeFxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICogQHBhcmFtICB7fSB2YWxcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnRBdCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xuICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5leHQgPSB0aGlzLmhlYWQ7XG4gICAgdmFyIGN1cnNvciA9IDA7XG4gICAgd2hpbGUgKG5leHQgJiYgY3Vyc29yICE9IGlkeCkge1xuICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICBjdXJzb3IrKztcbiAgICB9XG4gICAgaWYgKG5leHQpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcbiAgICAgICAgdmFyIHByZXYgPSBuZXh0LnByZXY7XG4gICAgICAgIGlmICghcHJldikgeyAvL25leHQgaXMgaGVhZFxuICAgICAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5LnByZXYgPSBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xuICAgICAgICBuZXh0LnByZXYgPSBlbnRyeTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuaW5zZXJ0KHZhbCk7XG4gICAgfVxufTtcblxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlRW50cnkgPSBmdW5jdGlvbiAodmFsLCBuZXh0KSB7XG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcbiAgICB2YXIgcHJldiA9IG5leHQucHJldjtcbiAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcbiAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcbiAgICAgICAgZW50cnkucHJldiA9IHByZXY7XG4gICAgfVxuICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xuICAgIG5leHQucHJldiA9IGVudHJ5O1xuXG4gICAgdGhpcy5fbGVuZ3RoKys7XG59O1xuXG4vKipcbiAqIEluc2VydCBhbiBlbnRyeSBhdCB0aGUgdGFpbFxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgaWYgKCF0aGlzLmhlYWQpIHtcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gZW50cnk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O1xuICAgICAgICBlbnRyeS5wcmV2ID0gdGhpcy50YWlsO1xuICAgICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICB9XG4gICAgdGhpcy5fbGVuZ3RoKys7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBlbnRyeS5cbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICB2YXIgcHJldiA9IGVudHJ5LnByZXY7XG4gICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBJcyBoZWFkXG4gICAgICAgIHRoaXMuaGVhZCA9IG5leHQ7XG4gICAgfVxuICAgIGlmIChuZXh0KSB7XG4gICAgICAgIG5leHQucHJldiA9IHByZXY7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBJcyB0YWlsXG4gICAgICAgIHRoaXMudGFpbCA9IHByZXY7XG4gICAgfVxuICAgIGVudHJ5Lm5leHQgPSBlbnRyeS5wcmV2ID0gbnVsbDtcbiAgICB0aGlzLl9sZW5ndGgtLTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGVudHJ5IGF0IGluZGV4LlxuICogQHBhcmFtICB7bnVtYmVyfSBpZHhcbiAqIEByZXR1cm4ge31cbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUucmVtb3ZlQXQgPSBmdW5jdGlvbiAoaWR4KSB7XG4gICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcbiAgICB2YXIgY3Vyc29yID0gMDtcbiAgICB3aGlsZSAoY3VyciAmJiBjdXJzb3IgIT0gaWR4KSB7XG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XG4gICAgICAgIGN1cnNvcisrO1xuICAgIH1cbiAgICBpZiAoY3Vycikge1xuICAgICAgICB0aGlzLnJlbW92ZShjdXJyKTtcbiAgICAgICAgcmV0dXJuIGN1cnIudmFsdWU7XG4gICAgfVxufTtcbi8qKlxuICogR2V0IGhlYWQgdmFsdWVcbiAqIEByZXR1cm4ge31cbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0SGVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5oZWFkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWQudmFsdWU7XG4gICAgfVxufTtcbi8qKlxuICogR2V0IHRhaWwgdmFsdWVcbiAqIEByZXR1cm4ge31cbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0VGFpbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy50YWlsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhaWwudmFsdWU7XG4gICAgfVxufTtcbi8qKlxuICogR2V0IHZhbHVlIGF0IGlkeFxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICogQHJldHVybiB7fVxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5nZXRBdCA9IGZ1bmN0aW9uIChpZHgpIHtcbiAgICBpZiAoaWR4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xuICAgIHZhciBjdXJzb3IgPSAwO1xuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICAgICAgY3Vyc29yKys7XG4gICAgfVxuICAgIHJldHVybiBjdXJyLnZhbHVlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHt9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcbiAgICB2YXIgY3Vyc29yID0gMDtcbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgICBpZiAoY3Vyci52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJzb3I7XG4gICAgICAgIH1cbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICAgICAgY3Vyc29yKys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xufTtcblxuLyoqXG4gKiBJZiBsaXN0IGlzIGVtcHR5XG4gKi9cbkxpbmtlZExpc3QucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7RnVuY3Rpb259IGNiXG4gKiBAcGFyYW0gIHt9IGNvbnRleHRcbiAqL1xuTGlua2VkTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xuICAgIHZhciBpZHggPSAwO1xuICAgIHZhciBoYXZlQ29udGV4dCA9IHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJztcbiAgICB3aGlsZSAoY3Vycikge1xuICAgICAgICBpZiAoaGF2ZUNvbnRleHQpIHtcbiAgICAgICAgICAgIGNiLmNhbGwoY29udGV4dCwgY3Vyci52YWx1ZSwgaWR4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNiKGN1cnIudmFsdWUsIGlkeCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcbiAgICAgICAgaWR4Kys7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhciB0aGUgbGlzdFxuICovXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMuX2xlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHt9IHZhbFxuICovXG5MaW5rZWRMaXN0LkVudHJ5ID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHt9XG4gICAgICovXG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxuICAgICAqL1xuICAgIHRoaXMucHJldiA9IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMaW5rZWRMaXN0O1xuIiwiaW1wb3J0IExpbmtlZExpc3QgZnJvbSAnLi9MaW5rZWRMaXN0JztcblxuLyoqXG4gKiBMUlUgQ2FjaGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuY29yZS5MUlVcbiAqL1xudmFyIExSVSA9IGZ1bmN0aW9uKG1heFNpemUpIHtcblxuICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuXG4gICAgdGhpcy5fbWFwID0ge307XG5cbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZSB8fCAxMDtcbn07XG5cbi8qKlxuICogU2V0IGNhY2hlIG1heCBzaXplXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxuICovXG5MUlUucHJvdG90eXBlLnNldE1heFNpemUgPSBmdW5jdGlvbihzaXplKSB7XG4gICAgdGhpcy5fbWF4U2l6ZSA9IHNpemU7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0gIHt9IHZhbHVlXG4gKi9cbkxSVS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YodGhpcy5fbWFwW2tleV0pID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9saXN0Lmxlbmd0aCgpO1xuICAgICAgICBpZiAobGVuID49IHRoaXMuX21heFNpemUgJiYgbGVuID4gMCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkXG4gICAgICAgICAgICB2YXIgbGVhc3RVc2VkRW50cnkgPSB0aGlzLl9saXN0LmhlYWQ7XG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShsZWFzdFVzZWRFbnRyeSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2xlYXN0VXNlZEVudHJ5LmtleV07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9saXN0Lmluc2VydCh2YWx1ZSk7XG4gICAgICAgIGVudHJ5LmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5fbWFwW2tleV0gPSBlbnRyeTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHt9XG4gKi9cbkxSVS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XG4gICAgaWYgKHR5cGVvZihlbnRyeSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gUHV0IHRoZSBsYXRlc3QgdXNlZCBlbnRyeSBpbiB0aGUgdGFpbFxuICAgICAgICBpZiAoZW50cnkgIT09IHRoaXMuX2xpc3QudGFpbCkge1xuICAgICAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUoZW50cnkpO1xuICAgICAgICAgICAgdGhpcy5fbGlzdC5pbnNlcnRFbnRyeShlbnRyeSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbkxSVS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XG4gICAgaWYgKHR5cGVvZihlbnRyeSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX21hcFtrZXldO1xuICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDbGVhciB0aGUgY2FjaGVcbiAqL1xuTFJVLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpc3QuY2xlYXIoKTtcbiAgICB0aGlzLl9tYXAgPSB7fTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IExSVTtcbiIsIi8qKlxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUuY29sb3JcbiAqL1xuaW1wb3J0IExSVSBmcm9tICcuLi9jb3JlL0xSVSc7XG5cbnZhciBjb2xvclV0aWwgPSB7fTtcblxudmFyIGtDU1NDb2xvclRhYmxlID0ge1xuICAgICd0cmFuc3BhcmVudCc6IFswLDAsMCwwXSwgJ2FsaWNlYmx1ZSc6IFsyNDAsMjQ4LDI1NSwxXSxcbiAgICAnYW50aXF1ZXdoaXRlJzogWzI1MCwyMzUsMjE1LDFdLCAnYXF1YSc6IFswLDI1NSwyNTUsMV0sXG4gICAgJ2FxdWFtYXJpbmUnOiBbMTI3LDI1NSwyMTIsMV0sICdhenVyZSc6IFsyNDAsMjU1LDI1NSwxXSxcbiAgICAnYmVpZ2UnOiBbMjQ1LDI0NSwyMjAsMV0sICdiaXNxdWUnOiBbMjU1LDIyOCwxOTYsMV0sXG4gICAgJ2JsYWNrJzogWzAsMCwwLDFdLCAnYmxhbmNoZWRhbG1vbmQnOiBbMjU1LDIzNSwyMDUsMV0sXG4gICAgJ2JsdWUnOiBbMCwwLDI1NSwxXSwgJ2JsdWV2aW9sZXQnOiBbMTM4LDQzLDIyNiwxXSxcbiAgICAnYnJvd24nOiBbMTY1LDQyLDQyLDFdLCAnYnVybHl3b29kJzogWzIyMiwxODQsMTM1LDFdLFxuICAgICdjYWRldGJsdWUnOiBbOTUsMTU4LDE2MCwxXSwgJ2NoYXJ0cmV1c2UnOiBbMTI3LDI1NSwwLDFdLFxuICAgICdjaG9jb2xhdGUnOiBbMjEwLDEwNSwzMCwxXSwgJ2NvcmFsJzogWzI1NSwxMjcsODAsMV0sXG4gICAgJ2Nvcm5mbG93ZXJibHVlJzogWzEwMCwxNDksMjM3LDFdLCAnY29ybnNpbGsnOiBbMjU1LDI0OCwyMjAsMV0sXG4gICAgJ2NyaW1zb24nOiBbMjIwLDIwLDYwLDFdLCAnY3lhbic6IFswLDI1NSwyNTUsMV0sXG4gICAgJ2RhcmtibHVlJzogWzAsMCwxMzksMV0sICdkYXJrY3lhbic6IFswLDEzOSwxMzksMV0sXG4gICAgJ2Rhcmtnb2xkZW5yb2QnOiBbMTg0LDEzNCwxMSwxXSwgJ2RhcmtncmF5JzogWzE2OSwxNjksMTY5LDFdLFxuICAgICdkYXJrZ3JlZW4nOiBbMCwxMDAsMCwxXSwgJ2RhcmtncmV5JzogWzE2OSwxNjksMTY5LDFdLFxuICAgICdkYXJra2hha2knOiBbMTg5LDE4MywxMDcsMV0sICdkYXJrbWFnZW50YSc6IFsxMzksMCwxMzksMV0sXG4gICAgJ2RhcmtvbGl2ZWdyZWVuJzogWzg1LDEwNyw0NywxXSwgJ2RhcmtvcmFuZ2UnOiBbMjU1LDE0MCwwLDFdLFxuICAgICdkYXJrb3JjaGlkJzogWzE1Myw1MCwyMDQsMV0sICdkYXJrcmVkJzogWzEzOSwwLDAsMV0sXG4gICAgJ2RhcmtzYWxtb24nOiBbMjMzLDE1MCwxMjIsMV0sICdkYXJrc2VhZ3JlZW4nOiBbMTQzLDE4OCwxNDMsMV0sXG4gICAgJ2RhcmtzbGF0ZWJsdWUnOiBbNzIsNjEsMTM5LDFdLCAnZGFya3NsYXRlZ3JheSc6IFs0Nyw3OSw3OSwxXSxcbiAgICAnZGFya3NsYXRlZ3JleSc6IFs0Nyw3OSw3OSwxXSwgJ2Rhcmt0dXJxdW9pc2UnOiBbMCwyMDYsMjA5LDFdLFxuICAgICdkYXJrdmlvbGV0JzogWzE0OCwwLDIxMSwxXSwgJ2RlZXBwaW5rJzogWzI1NSwyMCwxNDcsMV0sXG4gICAgJ2RlZXBza3libHVlJzogWzAsMTkxLDI1NSwxXSwgJ2RpbWdyYXknOiBbMTA1LDEwNSwxMDUsMV0sXG4gICAgJ2RpbWdyZXknOiBbMTA1LDEwNSwxMDUsMV0sICdkb2RnZXJibHVlJzogWzMwLDE0NCwyNTUsMV0sXG4gICAgJ2ZpcmVicmljayc6IFsxNzgsMzQsMzQsMV0sICdmbG9yYWx3aGl0ZSc6IFsyNTUsMjUwLDI0MCwxXSxcbiAgICAnZm9yZXN0Z3JlZW4nOiBbMzQsMTM5LDM0LDFdLCAnZnVjaHNpYSc6IFsyNTUsMCwyNTUsMV0sXG4gICAgJ2dhaW5zYm9ybyc6IFsyMjAsMjIwLDIyMCwxXSwgJ2dob3N0d2hpdGUnOiBbMjQ4LDI0OCwyNTUsMV0sXG4gICAgJ2dvbGQnOiBbMjU1LDIxNSwwLDFdLCAnZ29sZGVucm9kJzogWzIxOCwxNjUsMzIsMV0sXG4gICAgJ2dyYXknOiBbMTI4LDEyOCwxMjgsMV0sICdncmVlbic6IFswLDEyOCwwLDFdLFxuICAgICdncmVlbnllbGxvdyc6IFsxNzMsMjU1LDQ3LDFdLCAnZ3JleSc6IFsxMjgsMTI4LDEyOCwxXSxcbiAgICAnaG9uZXlkZXcnOiBbMjQwLDI1NSwyNDAsMV0sICdob3RwaW5rJzogWzI1NSwxMDUsMTgwLDFdLFxuICAgICdpbmRpYW5yZWQnOiBbMjA1LDkyLDkyLDFdLCAnaW5kaWdvJzogWzc1LDAsMTMwLDFdLFxuICAgICdpdm9yeSc6IFsyNTUsMjU1LDI0MCwxXSwgJ2toYWtpJzogWzI0MCwyMzAsMTQwLDFdLFxuICAgICdsYXZlbmRlcic6IFsyMzAsMjMwLDI1MCwxXSwgJ2xhdmVuZGVyYmx1c2gnOiBbMjU1LDI0MCwyNDUsMV0sXG4gICAgJ2xhd25ncmVlbic6IFsxMjQsMjUyLDAsMV0sICdsZW1vbmNoaWZmb24nOiBbMjU1LDI1MCwyMDUsMV0sXG4gICAgJ2xpZ2h0Ymx1ZSc6IFsxNzMsMjE2LDIzMCwxXSwgJ2xpZ2h0Y29yYWwnOiBbMjQwLDEyOCwxMjgsMV0sXG4gICAgJ2xpZ2h0Y3lhbic6IFsyMjQsMjU1LDI1NSwxXSwgJ2xpZ2h0Z29sZGVucm9keWVsbG93JzogWzI1MCwyNTAsMjEwLDFdLFxuICAgICdsaWdodGdyYXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodGdyZWVuJzogWzE0NCwyMzgsMTQ0LDFdLFxuICAgICdsaWdodGdyZXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodHBpbmsnOiBbMjU1LDE4MiwxOTMsMV0sXG4gICAgJ2xpZ2h0c2FsbW9uJzogWzI1NSwxNjAsMTIyLDFdLCAnbGlnaHRzZWFncmVlbic6IFszMiwxNzgsMTcwLDFdLFxuICAgICdsaWdodHNreWJsdWUnOiBbMTM1LDIwNiwyNTAsMV0sICdsaWdodHNsYXRlZ3JheSc6IFsxMTksMTM2LDE1MywxXSxcbiAgICAnbGlnaHRzbGF0ZWdyZXknOiBbMTE5LDEzNiwxNTMsMV0sICdsaWdodHN0ZWVsYmx1ZSc6IFsxNzYsMTk2LDIyMiwxXSxcbiAgICAnbGlnaHR5ZWxsb3cnOiBbMjU1LDI1NSwyMjQsMV0sICdsaW1lJzogWzAsMjU1LDAsMV0sXG4gICAgJ2xpbWVncmVlbic6IFs1MCwyMDUsNTAsMV0sICdsaW5lbic6IFsyNTAsMjQwLDIzMCwxXSxcbiAgICAnbWFnZW50YSc6IFsyNTUsMCwyNTUsMV0sICdtYXJvb24nOiBbMTI4LDAsMCwxXSxcbiAgICAnbWVkaXVtYXF1YW1hcmluZSc6IFsxMDIsMjA1LDE3MCwxXSwgJ21lZGl1bWJsdWUnOiBbMCwwLDIwNSwxXSxcbiAgICAnbWVkaXVtb3JjaGlkJzogWzE4Niw4NSwyMTEsMV0sICdtZWRpdW1wdXJwbGUnOiBbMTQ3LDExMiwyMTksMV0sXG4gICAgJ21lZGl1bXNlYWdyZWVuJzogWzYwLDE3OSwxMTMsMV0sICdtZWRpdW1zbGF0ZWJsdWUnOiBbMTIzLDEwNCwyMzgsMV0sXG4gICAgJ21lZGl1bXNwcmluZ2dyZWVuJzogWzAsMjUwLDE1NCwxXSwgJ21lZGl1bXR1cnF1b2lzZSc6IFs3MiwyMDksMjA0LDFdLFxuICAgICdtZWRpdW12aW9sZXRyZWQnOiBbMTk5LDIxLDEzMywxXSwgJ21pZG5pZ2h0Ymx1ZSc6IFsyNSwyNSwxMTIsMV0sXG4gICAgJ21pbnRjcmVhbSc6IFsyNDUsMjU1LDI1MCwxXSwgJ21pc3R5cm9zZSc6IFsyNTUsMjI4LDIyNSwxXSxcbiAgICAnbW9jY2FzaW4nOiBbMjU1LDIyOCwxODEsMV0sICduYXZham93aGl0ZSc6IFsyNTUsMjIyLDE3MywxXSxcbiAgICAnbmF2eSc6IFswLDAsMTI4LDFdLCAnb2xkbGFjZSc6IFsyNTMsMjQ1LDIzMCwxXSxcbiAgICAnb2xpdmUnOiBbMTI4LDEyOCwwLDFdLCAnb2xpdmVkcmFiJzogWzEwNywxNDIsMzUsMV0sXG4gICAgJ29yYW5nZSc6IFsyNTUsMTY1LDAsMV0sICdvcmFuZ2VyZWQnOiBbMjU1LDY5LDAsMV0sXG4gICAgJ29yY2hpZCc6IFsyMTgsMTEyLDIxNCwxXSwgJ3BhbGVnb2xkZW5yb2QnOiBbMjM4LDIzMiwxNzAsMV0sXG4gICAgJ3BhbGVncmVlbic6IFsxNTIsMjUxLDE1MiwxXSwgJ3BhbGV0dXJxdW9pc2UnOiBbMTc1LDIzOCwyMzgsMV0sXG4gICAgJ3BhbGV2aW9sZXRyZWQnOiBbMjE5LDExMiwxNDcsMV0sICdwYXBheWF3aGlwJzogWzI1NSwyMzksMjEzLDFdLFxuICAgICdwZWFjaHB1ZmYnOiBbMjU1LDIxOCwxODUsMV0sICdwZXJ1JzogWzIwNSwxMzMsNjMsMV0sXG4gICAgJ3BpbmsnOiBbMjU1LDE5MiwyMDMsMV0sICdwbHVtJzogWzIyMSwxNjAsMjIxLDFdLFxuICAgICdwb3dkZXJibHVlJzogWzE3NiwyMjQsMjMwLDFdLCAncHVycGxlJzogWzEyOCwwLDEyOCwxXSxcbiAgICAncmVkJzogWzI1NSwwLDAsMV0sICdyb3N5YnJvd24nOiBbMTg4LDE0MywxNDMsMV0sXG4gICAgJ3JveWFsYmx1ZSc6IFs2NSwxMDUsMjI1LDFdLCAnc2FkZGxlYnJvd24nOiBbMTM5LDY5LDE5LDFdLFxuICAgICdzYWxtb24nOiBbMjUwLDEyOCwxMTQsMV0sICdzYW5keWJyb3duJzogWzI0NCwxNjQsOTYsMV0sXG4gICAgJ3NlYWdyZWVuJzogWzQ2LDEzOSw4NywxXSwgJ3NlYXNoZWxsJzogWzI1NSwyNDUsMjM4LDFdLFxuICAgICdzaWVubmEnOiBbMTYwLDgyLDQ1LDFdLCAnc2lsdmVyJzogWzE5MiwxOTIsMTkyLDFdLFxuICAgICdza3libHVlJzogWzEzNSwyMDYsMjM1LDFdLCAnc2xhdGVibHVlJzogWzEwNiw5MCwyMDUsMV0sXG4gICAgJ3NsYXRlZ3JheSc6IFsxMTIsMTI4LDE0NCwxXSwgJ3NsYXRlZ3JleSc6IFsxMTIsMTI4LDE0NCwxXSxcbiAgICAnc25vdyc6IFsyNTUsMjUwLDI1MCwxXSwgJ3NwcmluZ2dyZWVuJzogWzAsMjU1LDEyNywxXSxcbiAgICAnc3RlZWxibHVlJzogWzcwLDEzMCwxODAsMV0sICd0YW4nOiBbMjEwLDE4MCwxNDAsMV0sXG4gICAgJ3RlYWwnOiBbMCwxMjgsMTI4LDFdLCAndGhpc3RsZSc6IFsyMTYsMTkxLDIxNiwxXSxcbiAgICAndG9tYXRvJzogWzI1NSw5OSw3MSwxXSwgJ3R1cnF1b2lzZSc6IFs2NCwyMjQsMjA4LDFdLFxuICAgICd2aW9sZXQnOiBbMjM4LDEzMCwyMzgsMV0sICd3aGVhdCc6IFsyNDUsMjIyLDE3OSwxXSxcbiAgICAnd2hpdGUnOiBbMjU1LDI1NSwyNTUsMV0sICd3aGl0ZXNtb2tlJzogWzI0NSwyNDUsMjQ1LDFdLFxuICAgICd5ZWxsb3cnOiBbMjU1LDI1NSwwLDFdLCAneWVsbG93Z3JlZW4nOiBbMTU0LDIwNSw1MCwxXVxufTtcblxuZnVuY3Rpb24gY2xhbXBDc3NCeXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cbiAgICByZXR1cm4gaSA8IDAgPyAwIDogaSA+IDI1NSA/IDI1NSA6IGk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wQ3NzQW5nbGUoaSkgeyAgLy8gQ2xhbXAgdG8gaW50ZWdlciAwIC4uIDM2MC5cbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMzYwID8gMzYwIDogaTtcbn1cblxuZnVuY3Rpb24gY2xhbXBDc3NGbG9hdChmKSB7ICAvLyBDbGFtcCB0byBmbG9hdCAwLjAgLi4gMS4wLlxuICAgIHJldHVybiBmIDwgMCA/IDAgOiBmID4gMSA/IDEgOiBmO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNzc0ludChzdHIpIHsgIC8vIGludCBvciBwZXJjZW50YWdlLlxuICAgIGlmIChzdHIubGVuZ3RoICYmIHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpID09PSAnJScpIHtcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUZsb2F0KHN0cikgLyAxMDAgKiAyNTUpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlSW50KHN0ciwgMTApKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDc3NGbG9hdChzdHIpIHsgIC8vIGZsb2F0IG9yIHBlcmNlbnRhZ2UuXG4gICAgaWYgKHN0ci5sZW5ndGggJiYgc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gMSkgPT09ICclJykge1xuICAgICAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikgLyAxMDApO1xuICAgIH1cbiAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikpO1xufVxuXG5mdW5jdGlvbiBjc3NIdWVUb1JnYihtMSwgbTIsIGgpIHtcbiAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChoID4gMSkge1xuICAgICAgICBoIC09IDE7XG4gICAgfVxuXG4gICAgaWYgKGggKiA2IDwgMSkge1xuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiBoICogNjtcbiAgICB9XG4gICAgaWYgKGggKiAyIDwgMSkge1xuICAgICAgICByZXR1cm4gbTI7XG4gICAgfVxuICAgIGlmIChoICogMyA8IDIpIHtcbiAgICAgICAgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcbiAgICB9XG4gICAgcmV0dXJuIG0xO1xufVxuXG5mdW5jdGlvbiBsZXJwTnVtYmVyKGEsIGIsIHApIHtcbiAgICByZXR1cm4gYSArIChiIC0gYSkgKiBwO1xufVxuXG5mdW5jdGlvbiBzZXRSZ2JhKG91dCwgciwgZywgYiwgYSkge1xuICAgIG91dFswXSA9IHI7IG91dFsxXSA9IGc7IG91dFsyXSA9IGI7IG91dFszXSA9IGE7XG4gICAgcmV0dXJuIG91dDtcbn1cbmZ1bmN0aW9uIGNvcHlSZ2JhKG91dCwgYSkge1xuICAgIG91dFswXSA9IGFbMF07IG91dFsxXSA9IGFbMV07IG91dFsyXSA9IGFbMl07IG91dFszXSA9IGFbM107XG4gICAgcmV0dXJuIG91dDtcbn1cblxudmFyIGNvbG9yQ2FjaGUgPSBuZXcgTFJVKDIwKTtcbnZhciBsYXN0UmVtb3ZlZEFyciA9IG51bGw7XG5cbmZ1bmN0aW9uIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpIHtcbiAgICAvLyBSZXVzZSByZW1vdmVkIGFycmF5XG4gICAgaWYgKGxhc3RSZW1vdmVkQXJyKSB7XG4gICAgICAgIGNvcHlSZ2JhKGxhc3RSZW1vdmVkQXJyLCByZ2JhQXJyKTtcbiAgICB9XG4gICAgbGFzdFJlbW92ZWRBcnIgPSBjb2xvckNhY2hlLnB1dChjb2xvclN0ciwgbGFzdFJlbW92ZWRBcnIgfHwgKHJnYmFBcnIuc2xpY2UoKSkpO1xufVxuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5wYXJzZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yU3RyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvdXRcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxuICovXG5jb2xvclV0aWwucGFyc2UgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcbiAgICBpZiAoIWNvbG9yU3RyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmdiYUFyciA9IHJnYmFBcnIgfHwgW107XG5cbiAgICB2YXIgY2FjaGVkID0gY29sb3JDYWNoZS5nZXQoY29sb3JTdHIpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgcmV0dXJuIGNvcHlSZ2JhKHJnYmFBcnIsIGNhY2hlZCk7XG4gICAgfVxuXG4gICAgLy8gY29sb3JTdHIgbWF5IGJlIG5vdCBzdHJpbmdcbiAgICBjb2xvclN0ciA9IGNvbG9yU3RyICsgJyc7XG4gICAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXG4gICAgdmFyIHN0ciA9IGNvbG9yU3RyLnJlcGxhY2UoLyAvZywgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBDb2xvciBrZXl3b3JkcyAoYW5kIHRyYW5zcGFyZW50KSBsb29rdXAuXG4gICAgaWYgKHN0ciBpbiBrQ1NTQ29sb3JUYWJsZSkge1xuICAgICAgICBjb3B5UmdiYShyZ2JhQXJyLCBrQ1NTQ29sb3JUYWJsZVtzdHJdKTtcbiAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XG4gICAgICAgIHJldHVybiByZ2JhQXJyO1xuICAgIH1cblxuICAgIC8vICNhYmMgYW5kICNhYmMxMjMgc3ludGF4LlxuICAgIGlmIChzdHIuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHtcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgIC8vIENvdmVycyBOYU4uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXG4gICAgICAgICAgICAgICAgKChpdiAmIDB4ZjAwKSA+PiA0KSB8ICgoaXYgJiAweGYwMCkgPj4gOCksXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmKSB8ICgoaXYgJiAweGYpIDw8IDQpLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcbiAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0ci5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZmZmZikpIHtcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xuICAgICAgICAgICAgICAgIHJldHVybjsgIC8vIENvdmVycyBOYU4uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmZjAwMDApID4+IDE2LFxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcbiAgICAgICAgICAgICAgICBpdiAmIDB4ZmYsXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xuICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcbiAgICBpZiAob3AgIT09IC0xICYmIGVwICsgMSA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHN0ci5zdWJzdHIob3AgKyAxLCBlcCAtIChvcCArIDEpKS5zcGxpdCgnLCcpO1xuICAgICAgICB2YXIgYWxwaGEgPSAxOyAgLy8gVG8gYWxsb3cgY2FzZSBmYWxsdGhyb3VnaC5cbiAgICAgICAgc3dpdGNoIChmbmFtZSkge1xuICAgICAgICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbHBoYSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zLnBvcCgpKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guXG4gICAgICAgICAgICBjYXNlICdyZ2InOlxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMF0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMV0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMl0pLFxuICAgICAgICAgICAgICAgICAgICBhbHBoYVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XG4gICAgICAgICAgICBjYXNlICdoc2xhJzpcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmFtc1szXSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zWzNdKTtcbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcbiAgICAgICAgICAgIGNhc2UgJ2hzbCc6XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcbiAgICByZXR1cm47XG59O1xuXG5jb2xvclV0aWwucGFyc2VUb0Zsb2F0ID0gZnVuY3Rpb24gKGNvbG9yU3RyLCByZ2JhQXJyKSB7XG4gICAgcmdiYUFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvclN0ciwgcmdiYUFycik7XG4gICAgaWYgKCFyZ2JhQXJyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmdiYUFyclswXSAvPSAyNTU7XG4gICAgcmdiYUFyclsxXSAvPSAyNTU7XG4gICAgcmdiYUFyclsyXSAvPSAyNTU7XG4gICAgcmV0dXJuIHJnYmFBcnI7XG59XG5cbi8qKlxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLmhzbGEycmdiYVxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaHNsYVxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IHJnYmFcbiAqL1xuZnVuY3Rpb24gaHNsYTJyZ2JhKGhzbGEsIHJnYmEpIHtcbiAgICB2YXIgaCA9ICgoKHBhcnNlRmxvYXQoaHNsYVswXSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjA7ICAvLyAwIC4uIDFcbiAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcbiAgICAvLyBwZXJjZW50YWdlcywgYnV0IHdlIGRvbid0IGJvdGhlciBhbmQgbGV0IGZsb2F0IG9yIHBlcmNlbnRhZ2UuXG4gICAgdmFyIHMgPSBwYXJzZUNzc0Zsb2F0KGhzbGFbMV0pO1xuICAgIHZhciBsID0gcGFyc2VDc3NGbG9hdChoc2xhWzJdKTtcbiAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcbiAgICB2YXIgbTEgPSBsICogMiAtIG0yO1xuXG4gICAgcmdiYSA9IHJnYmEgfHwgW107XG4gICAgc2V0UmdiYShyZ2JhLFxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoICsgMSAvIDMpICogMjU1KSxcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoIC0gMSAvIDMpICogMjU1KSxcbiAgICAgICAgMVxuICAgICk7XG5cbiAgICBpZiAoaHNsYS5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgcmdiYVszXSA9IGhzbGFbM107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJnYmE7XG59XG5cbi8qKlxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLnJnYmEyaHNsYVxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IGhzbGFcbiAqL1xuZnVuY3Rpb24gcmdiYTJoc2xhKHJnYmEpIHtcbiAgICBpZiAoIXJnYmEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJHQiBmcm9tIDAgdG8gMjU1XG4gICAgdmFyIFIgPSByZ2JhWzBdIC8gMjU1O1xuICAgIHZhciBHID0gcmdiYVsxXSAvIDI1NTtcbiAgICB2YXIgQiA9IHJnYmFbMl0gLyAyNTU7XG5cbiAgICB2YXIgdk1pbiA9IE1hdGgubWluKFIsIEcsIEIpOyAvLyBNaW4uIHZhbHVlIG9mIFJHQlxuICAgIHZhciB2TWF4ID0gTWF0aC5tYXgoUiwgRywgQik7IC8vIE1heC4gdmFsdWUgb2YgUkdCXG4gICAgdmFyIGRlbHRhID0gdk1heCAtIHZNaW47IC8vIERlbHRhIFJHQiB2YWx1ZVxuXG4gICAgdmFyIEwgPSAodk1heCArIHZNaW4pIC8gMjtcbiAgICB2YXIgSDtcbiAgICB2YXIgUztcbiAgICAvLyBIU0wgcmVzdWx0cyBmcm9tIDAgdG8gMVxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgICBIID0gMDtcbiAgICAgICAgUyA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoTCA8IDAuNSkge1xuICAgICAgICAgICAgUyA9IGRlbHRhIC8gKHZNYXggKyB2TWluKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICgyIC0gdk1heCAtIHZNaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRlbHRhUiA9ICgoKHZNYXggLSBSKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XG4gICAgICAgIHZhciBkZWx0YUcgPSAoKCh2TWF4IC0gRykgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xuICAgICAgICB2YXIgZGVsdGFCID0gKCgodk1heCAtIEIpIC8gNikgKyAoZGVsdGEgLyAyKSkgLyBkZWx0YTtcblxuICAgICAgICBpZiAoUiA9PT0gdk1heCkge1xuICAgICAgICAgICAgSCA9IGRlbHRhQiAtIGRlbHRhRztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChHID09PSB2TWF4KSB7XG4gICAgICAgICAgICBIID0gKDEgLyAzKSArIGRlbHRhUiAtIGRlbHRhQjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChCID09PSB2TWF4KSB7XG4gICAgICAgICAgICBIID0gKDIgLyAzKSArIGRlbHRhRyAtIGRlbHRhUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChIIDwgMCkge1xuICAgICAgICAgICAgSCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEggPiAxKSB7XG4gICAgICAgICAgICBIIC09IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaHNsYSA9IFtIICogMzYwLCBTLCBMXTtcblxuICAgIGlmIChyZ2JhWzNdICE9IG51bGwpIHtcbiAgICAgICAgaHNsYS5wdXNoKHJnYmFbM10pO1xuICAgIH1cblxuICAgIHJldHVybiBoc2xhO1xufVxuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5saWZ0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5jb2xvclV0aWwubGlmdCA9IGZ1bmN0aW9uIChjb2xvciwgbGV2ZWwpIHtcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xuICAgIGlmIChjb2xvckFycikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxldmVsIDwgMCkge1xuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gY29sb3JBcnJbaV0gKiAoMSAtIGxldmVsKSB8IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvckFycltpXSA9ICgoMjU1IC0gY29sb3JBcnJbaV0pICogbGV2ZWwgKyBjb2xvckFycltpXSkgfCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGNvbG9yQXJyLCBjb2xvckFyci5sZW5ndGggPT09IDQgPyAncmdiYScgOiAncmdiJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci50b0hleFxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmNvbG9yVXRpbC50b0hleCA9IGZ1bmN0aW9uIChjb2xvcikge1xuICAgIHZhciBjb2xvckFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcik7XG4gICAgaWYgKGNvbG9yQXJyKSB7XG4gICAgICAgIHJldHVybiAoKDEgPDwgMjQpICsgKGNvbG9yQXJyWzBdIDw8IDE2KSArIChjb2xvckFyclsxXSA8PCA4KSArICgrY29sb3JBcnJbMl0pKS50b1N0cmluZygxNikuc2xpY2UoMSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBNYXAgdmFsdWUgdG8gY29sb3IuIEZhc3RlciB0aGFuIGxlcnAgbWV0aG9kcyBiZWNhdXNlIGNvbG9yIGlzIHJlcHJlc2VudGVkIGJ5IHJnYmEgYXJyYXkuXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3JtYWxpemVkVmFsdWUgQSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEuXG4gKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IGNvbG9ycyBMaXN0IG9mIHJnYmEgY29sb3IgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvdXRdIE1hcHBlZCBnYmEgY29sb3IgYXJyYXlcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fSB3aWxsIGJlIG51bGwvdW5kZWZpbmVkIGlmIGlucHV0IGlsbGVnYWwuXG4gKi9cbmNvbG9yVXRpbC5mYXN0TGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgb3V0KSB7XG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXG4gICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvdXQgPSBvdXQgfHwgW107XG5cbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xuICAgIHZhciBsZWZ0SW5kZXggPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yc1tsZWZ0SW5kZXhdO1xuICAgIHZhciByaWdodENvbG9yID0gY29sb3JzW3JpZ2h0SW5kZXhdO1xuICAgIHZhciBkdiA9IHZhbHVlIC0gbGVmdEluZGV4O1xuICAgIG91dFswXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKTtcbiAgICBvdXRbMV0gPSBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMV0sIHJpZ2h0Q29sb3JbMV0sIGR2KSk7XG4gICAgb3V0WzJdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzJdLCByaWdodENvbG9yWzJdLCBkdikpO1xuICAgIG91dFszXSA9IGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSk7XG5cbiAgICByZXR1cm4gb3V0O1xufVxuXG5jb2xvclV0aWwuZmFzdE1hcFRvQ29sb3IgPSBjb2xvclV0aWwuZmFzdExlcnA7XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNvbG9ycyBDb2xvciBsaXN0LlxuICogQHBhcmFtIHtib29sZWFuPX0gZnVsbE91dHB1dCBEZWZhdWx0IGZhbHNlLlxuICogQHJldHVybiB7KHN0cmluZ3xPYmplY3QpfSBSZXN1bHQgY29sb3IuIElmIGZ1bGxPdXRwdXQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IC4uLiwgbGVmdEluZGV4OiAuLi4sIHJpZ2h0SW5kZXg6IC4uLiwgdmFsdWU6IC4uLn0sXG4gKi9cbmNvbG9yVXRpbC5sZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBmdWxsT3V0cHV0KSB7XG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXG4gICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xuICAgIHZhciBsZWZ0SW5kZXggPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbbGVmdEluZGV4XSk7XG4gICAgdmFyIHJpZ2h0Q29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3JzW3JpZ2h0SW5kZXhdKTtcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcblxuICAgIHZhciBjb2xvciA9IGNvbG9yVXRpbC5zdHJpbmdpZnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKSxcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsxXSwgcmlnaHRDb2xvclsxXSwgZHYpKSxcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKSxcbiAgICAgICAgICAgIGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSlcbiAgICAgICAgXSxcbiAgICAgICAgJ3JnYmEnXG4gICAgKTtcblxuICAgIHJldHVybiBmdWxsT3V0cHV0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgbGVmdEluZGV4OiBsZWZ0SW5kZXgsXG4gICAgICAgICAgICByaWdodEluZGV4OiByaWdodEluZGV4LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgOiBjb2xvcjtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG5jb2xvclV0aWwubWFwVG9Db2xvciA9IGNvbG9yVXRpbC5sZXJwO1xuXG4vKipcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcj19IGggMCB+IDM2MCwgaWdub3JlIHdoZW4gbnVsbC5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gcyAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gbCAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxuICovXG5jb2xvclV0aWwubW9kaWZ5SFNMID0gZnVuY3Rpb24gKGNvbG9yLCBoLCBzLCBsKSB7XG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIGNvbG9yID0gcmdiYTJoc2xhKGNvbG9yKTtcbiAgICAgICAgaCAhPSBudWxsICYmIChjb2xvclswXSA9IGNsYW1wQ3NzQW5nbGUoaCkpO1xuICAgICAgICBzICE9IG51bGwgJiYgKGNvbG9yWzFdID0gcGFyc2VDc3NGbG9hdChzKSk7XG4gICAgICAgIGwgIT0gbnVsbCAmJiAoY29sb3JbMl0gPSBwYXJzZUNzc0Zsb2F0KGwpKTtcblxuICAgICAgICByZXR1cm4gY29sb3JVdGlsLnN0cmluZ2lmeShoc2xhMnJnYmEoY29sb3IpLCAncmdiYScpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAqIEBwYXJhbSB7bnVtYmVyPX0gYWxwaGEgMCB+IDFcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxuICovXG5jb2xvclV0aWwubW9kaWZ5QWxwaGEgPSBmdW5jdGlvbiAoY29sb3IsIGFscGhhKSB7XG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xuXG4gICAgaWYgKGNvbG9yICYmIGFscGhhICE9IG51bGwpIHtcbiAgICAgICAgY29sb3JbM10gPSBjbGFtcENzc0Zsb2F0KGFscGhhKTtcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3IsICdyZ2JhJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyckNvbG9yIGxpa2UgWzEyLDMzLDQ0LDAuNF1cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICdyZ2JhJywgJ2hzdmEnLCAuLi5cbiAqIEByZXR1cm4ge3N0cmluZ30gUmVzdWx0IGNvbG9yLiAoSWYgaW5wdXQgaWxsZWdhbCwgcmV0dXJuIHVuZGVmaW5lZCkuXG4gKi9cbmNvbG9yVXRpbC5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoYXJyQ29sb3IsIHR5cGUpIHtcbiAgICBpZiAoIWFyckNvbG9yIHx8ICFhcnJDb2xvci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY29sb3JTdHIgPSBhcnJDb2xvclswXSArICcsJyArIGFyckNvbG9yWzFdICsgJywnICsgYXJyQ29sb3JbMl07XG4gICAgaWYgKHR5cGUgPT09ICdyZ2JhJyB8fCB0eXBlID09PSAnaHN2YScgfHwgdHlwZSA9PT0gJ2hzbGEnKSB7XG4gICAgICAgIGNvbG9yU3RyICs9ICcsJyArIGFyckNvbG9yWzNdO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZSArICcoJyArIGNvbG9yU3RyICsgJyknO1xufTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbG9yVXRpbDsiLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IGNvbG9yVXRpbCBmcm9tICcuL2NvcmUvY29sb3InO1xudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xuXG52YXIgcHJvZ3JhbUtleUNhY2hlID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmluZUNvZGUoZGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKSB7XG4gICAgdmFyIGRlZmluZUtleXMgPSBPYmplY3Qua2V5cyhkZWZpbmVzKTtcbiAgICBkZWZpbmVLZXlzLnNvcnQoKTtcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XG4gICAgLy8gQ3VzdG9tIERlZmluZXNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmluZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGRlZmluZUtleXNbaV07XG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluZXNba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkgKyAnICcgKyB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KHZlcnRleERlZmluZXMsIGZyYWdtZW50RGVmaW5lcywgZW5hYmxlZFRleHR1cmVzKSB7XG4gICAgZW5hYmxlZFRleHR1cmVzLnNvcnQoKTtcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgZGVmaW5lU3RyLnB1c2goc3ltYm9sKTtcbiAgICB9XG4gICAgdmFyIGtleSA9IGdldERlZmluZUNvZGUodmVydGV4RGVmaW5lcykgKyAnXFxuJ1xuICAgICAgICArIGdldERlZmluZUNvZGUoZnJhZ21lbnREZWZpbmVzKSArICdcXG4nXG4gICAgICAgICsgZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xuXG4gICAgaWYgKHByb2dyYW1LZXlDYWNoZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBwcm9ncmFtS2V5Q2FjaGVba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgaWQgPSB1dGlsLmdlbkdVSUQoKTtcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xuICAgIHJldHVybiBpZDtcbn1cblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5NYXRlcmlhbFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIE1hdGVyaWFsID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIC8vIHVuaWZvcm1zOiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TaGFkZXJ9XG4gICAgICAgICAqL1xuICAgICAgICAvLyBzaGFkZXI6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZGVwdGhUZXN0OiB0cnVlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGRlcHRoTWFzazogdHJ1ZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCbGVuZCBmdW5jIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiB0aGUgbWF0ZXJpYWxcbiAgICAgICAgICogaGF2ZSBjdXN0b20gYmxlbmRpbmdcbiAgICAgICAgICogVGhlIGdsIGNvbnRleHQgd2lsbCBiZSB0aGUgb25seSBhcmd1bWVudCBwYXNzZWQgaW4gdGhvIHRoZVxuICAgICAgICAgKiBibGVuZCBmdW5jdGlvblxuICAgICAgICAgKiBEZXRhaWwgb2YgYmxlbmQgZnVuY3Rpb24gaW4gV2ViR0w6XG4gICAgICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZ2xlcy9zcGVjcy8yLjAvZXNfZnVsbF9zcGVjXzIuMC4yNS5wZGZcbiAgICAgICAgICpcbiAgICAgICAgICogRXhhbXBsZSA6XG4gICAgICAgICAqIGZ1bmN0aW9uKF9nbCkge1xuICAgICAgICAgKiAgX2dsLmJsZW5kRXF1YXRpb24oX2dsLkZVTkNfQUREKTtcbiAgICAgICAgICogIF9nbC5ibGVuZEZ1bmMoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqL1xuICAgICAgICBibGVuZDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdXBkYXRlIHRleHR1cmUgc3RhdHVzIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvVXBkYXRlVGV4dHVyZVN0YXR1czogdHJ1ZSxcblxuICAgICAgICB1bmlmb3Jtczoge30sXG4gICAgICAgIHZlcnRleERlZmluZXM6IHt9LFxuICAgICAgICBmcmFnbWVudERlZmluZXM6IHt9LFxuICAgICAgICBfdGV4dHVyZVN0YXR1czoge30sXG5cbiAgICAgICAgLy8gc2hhZG93VHJhbnNwYXJlbnRNYXAgOiBudWxsXG5cbiAgICAgICAgLy8gUEVORElORyBlbmFibGUgdGhlIHVuaWZvcm0gdGhhdCBvbmx5IHVzZWQgaW4gc2hhZGVyLlxuICAgICAgICBfZW5hYmxlZFVuaWZvcm1zOiBudWxsLFxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gJ01BVEVSSUFMXycgKyB0aGlzLl9fdWlkX187XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hhZGVyKSB7XG4gICAgICAgIC8vIEtlZXAgc3RhdHVzLCBtYWlubHkgcHJlc2V0IHVuaWZvcm1zLCB2ZXJ0ZXhEZWZpbmVzIGFuZCBmcmFnbWVudERlZmluZXNcbiAgICAgICAgdGhpcy5hdHRhY2hTaGFkZXIodGhpcy5zaGFkZXIsIHRydWUpO1xuICAgIH1cbn0sXG4vKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwucHJvdG90eXBlICovXG57XG4gICAgcHJlY2lzaW9uOiAnaGlnaHAnLFxuXG4gICAgYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIHByb2dyYW0sIHByZXZNYXRlcmlhbCwgcHJldlByb2dyYW0pIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAvLyBQRU5ESU5HIFNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWwgdGFrZSBkaWZmZXJlbnQgc2xvdD9cblxuICAgICAgICAvLyBNYXkgdXNlIHNoYWRlciBvZiBvdGhlciBtYXRlcmlhbCBpZiBzaGFkZXIgY29kZSBhcmUgc2FtZVxuXG4gICAgICAgIC8vIHZhciBzYW1lUHJvZ3JhbSA9IHByZXZQcm9ncmFtID09PSBwcm9ncmFtO1xuXG4gICAgICAgIHZhciBjdXJyZW50VGV4dHVyZVNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xuXG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zW3VdO1xuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS50eXBlO1xuICAgICAgICAgICAgLy8gTm90IHVzZSBgaW5zdGFuY2VvZmAgdG8gZGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdGV4dHVyZSBpbiBNYXRlcmlhbCNiaW5kLlxuICAgICAgICAgICAgLy8gVXNlIHR5cGUgaW5zdGVhZCwgaW4gc29tZSBjYXNlIHRleHR1cmUgbWF5IGJlIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxuICAgICAgICAgICAgLy8gVE9ETyBEdWNrIHR5cGUgdmFsaWRhdGUuXG4gICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0JyAmJiB1bmlmb3JtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBzbG90XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlLl9fc2xvdCA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlW2ldIGluc3RhbmNlb2YgVGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlW2ldLl9fc2xvdCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB1bmlmb3Jtc1xuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHRoaXMuX2VuYWJsZWRVbmlmb3Jtc1t1XTtcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IHVuaWZvcm0udmFsdWU7XG4gICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSB1bmlmb3JtLnR5cGU7XG4gICAgICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgICAgICAvLyBXaGVuIGJpbmRpbmcgdHdvIG1hdGVyaWFscyB3aXRoIHRoZSBzYW1lIHNoYWRlclxuICAgICAgICAgICAgLy8gTWFueSB1bmlmb3JtcyB3aWxsIGJlIGJlIHNldCB0d2ljZSBldmVuIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZVxuICAgICAgICAgICAgLy8gU28gYWRkIGEgZXZhbHVhdGlvbiB0byBzZWUgaWYgdGhlIHVuaWZvcm0gaXMgcmVhbGx5IG5lZWRlZCB0byBiZSBzZXRcbiAgICAgICAgICAgIC8vIGlmIChwcmV2TWF0ZXJpYWwgJiYgc2FtZVNoYWRlcikge1xuICAgICAgICAgICAgLy8gICAgIGlmIChwcmV2TWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9PT0gdW5pZm9ybVZhbHVlKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIEZJWE1FIEFzc3VtZSBtYXRlcmlhbCB3aXRoIHNhbWUgc2hhZGVyIGhhdmUgc2FtZSBvcmRlciB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIC8vIE9yIGlmIGRpZmZlcmVudCBtYXRlcmlhbCB1c2Ugc2FtZSB0ZXh0dXJlcyxcbiAgICAgICAgICAgICAgICAvLyB0aGUgc2xvdCB3aWxsIGJlIGRpZmZlcmVudCBhbmQgc3RpbGwgc2tpcHBlZCBiZWNhdXNlIG9wdGltaXphdGlvblxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtLnR5cGUgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHNsb3QpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7IC8vIFRleHR1cmUgaXMgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RpbGwgb2NjdXB5IHRoZSBzbG90IHRvIG1ha2Ugc3VyZSBzYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFscyBoYXZlIHNhbWUgc2xvdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gcHJvZ3JhbS5jdXJyZW50VGV4dHVyZVNsb3QoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxaScsIHN5bWJvbCwgc2xvdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzKSB7IC8vIFRleHR1cmUgdW5pZm9ybSBpcyBub3QgZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHJlbmRlcmVyLCB1bmlmb3JtVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gc2xvdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgdW5pZm9ybSB1c2Ugc2FtZSB0ZXh0dXJlLi5cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCB1bmlmb3JtVmFsdWUuX19zbG90KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBBcnJheVxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uaGFzVW5pZm9ybShzeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdW5pZm9ybVZhbHVlW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fX3Nsb3QgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHNsb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5fX3Nsb3QgPSBzbG90O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2godGV4dHVyZS5fX3Nsb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpdicsIHN5bWJvbCwgYXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHVuaWZvcm0udHlwZSwgc3ltYm9sLCB1bmlmb3JtVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgdW5pZm9ybS50eXBlLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGV4dHVyZSBzbG90IG1heWJlIHVzZWQgb3V0IG9mIG1hdGVyaWFsLlxuICAgICAgICBwcm9ncmFtLnJlc2V0VGV4dHVyZVNsb3QoY3VycmVudFRleHR1cmVTbG90KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IG1hdGVyaWFsIHVuaWZvcm1cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBtYXQuc2V0VW5pZm9ybSgnY29sb3InLCBbMSwgMSwgMSwgMV0pO1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSB2YWx1ZVxuICAgICAqL1xuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wsIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuaWZvcm0gdmFsdWUgXCInICsgc3ltYm9sICsgJ1wiIGlzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xuICAgICAgICBpZiAodW5pZm9ybSkge1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGNvbG9yLiBJbnZhbGlkIGNvbG9yIHN0cmluZyB3aWxsIHJldHVybiBudWxsLlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VDb2xvcih2YWx1ZSkgfHwgdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVuaWZvcm0udmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXMgJiYgdW5pZm9ybS50eXBlID09PSAndCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAgICAgKi9cbiAgICBzZXRVbmlmb3JtczogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gLyoqXG4gICAgLy8gICogRW5hYmxlIGEgdW5pZm9ybVxuICAgIC8vICAqIEl0IG9ubHkgaGF2ZSBlZmZlY3Qgb24gdGhlIHVuaWZvcm0gZXhpc3RzIGluIHNoYWRlci5cbiAgICAvLyAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxuICAgIC8vICAqL1xuICAgIC8vIGVuYWJsZVVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMudW5pZm9ybXNbc3ltYm9sXSAmJiAhdGhpcy5pc1VuaWZvcm1FbmFibGVkKHN5bWJvbCkpIHtcbiAgICAvLyAgICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5wdXNoKHN5bWJvbCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9LFxuXG4gICAgLy8gLyoqXG4gICAgLy8gICogRGlzYWJsZSBhIHVuaWZvcm1cbiAgICAvLyAgKiBJdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHVuaWZvcm0gc3RhdGUgaW4gdGhlIHNoYWRlci4gQmVjYXVzZSB0aGUgc2hhZGVyIHVuaWZvcm1zIGlzIHBhcnNlZCBmcm9tIHNoYWRlciBjb2RlIHdpdGggbmFpdmUgcmVnZXguIFdoZW4gdXNpbmcgbWljcm8gdG8gZGlzYWJsZSBzb21lIHVuaWZvcm1zIGluIHRoZSBzaGFkZXIuIEl0IHdpbGwgc3RpbGwgdHJ5IHRvIHNldCB0aGVzZSB1bmlmb3JtcyBpbiBlYWNoIHJlbmRlcmluZyBwYXNzLiBXZSBjYW4gZGlzYWJsZSB0aGVzZSB1bmlmb3JtcyBtYW51YWxseSBpZiB3ZSBuZWVkIHRoaXMgYml0IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LiBNb3N0bHkgd2UgY2FuIHNpbXBseSBpZ25vcmUgaXQuXG4gICAgLy8gICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAvLyAgKi9cbiAgICAvLyBkaXNhYmxlVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCkge1xuICAgIC8vICAgICB2YXIgaWR4ID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmluZGV4T2Yoc3ltYm9sKTtcbiAgICAvLyAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgLy8gICAgICAgICB0aGlzLl9lbmFibGVkVW5pZm9ybXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgc3ltYm9sXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1VuaWZvcm1FbmFibGVkOiBmdW5jdGlvbiAoc3ltYm9sKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXMuaW5kZXhPZihzeW1ib2wpID49IDA7XG4gICAgfSxcblxuICAgIGdldEVuYWJsZWRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zO1xuICAgIH0sXG4gICAgZ2V0VGV4dHVyZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlVW5pZm9ybXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIG9mIHNldFVuaWZvcm0gYW5kIHNldFVuaWZvcm1zXG4gICAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSBbdmFsdWVdXG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mKHN5bWJvbCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHN5bWJvbFtrZXldO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oc3ltYm9sLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldCB1bmlmb3JtIHZhbHVlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ8YXJyYXl8Y2xheS5UZXh0dXJlfEFycmF5QnVmZmVyVmlld31cbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdmFyIHVuaWZvcm0gPSB0aGlzLnVuaWZvcm1zW3N5bWJvbF07XG4gICAgICAgIGlmICh1bmlmb3JtKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgc2hhZGVyIGluc3RhbmNlXG4gICAgICogQHBhcmFtICB7Y2xheS5TaGFkZXJ9IHNoYWRlclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGtlZXBTdGF0dXMgSWYgdHJ5IHRvIGtlZXAgdW5pZm9ybSBhbmQgdGV4dHVyZVxuICAgICAqL1xuICAgIGF0dGFjaFNoYWRlcjogZnVuY3Rpb24oc2hhZGVyLCBrZWVwU3RhdHVzKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFVuaWZvcm1zID0gdGhpcy51bmlmb3JtcztcblxuICAgICAgICAvLyBJZ25vcmUgaWYgdW5pZm9ybSBjYW4gdXNlIGluIHNoYWRlci5cbiAgICAgICAgdGhpcy51bmlmb3JtcyA9IHNoYWRlci5jcmVhdGVVbmlmb3JtcygpO1xuICAgICAgICB0aGlzLnNoYWRlciA9IHNoYWRlcjtcblxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xuICAgICAgICB0aGlzLl9lbmFibGVkVW5pZm9ybXMgPSBPYmplY3Qua2V5cyh1bmlmb3Jtcyk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB1bmlmb3JtcyBhcmUgc2V0IGluIHNhbWUgb3JkZXIgdG8gYXZvaWQgdGV4dHVyZSBzbG90IHdyb25nXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5zb3J0KCk7XG4gICAgICAgIHRoaXMuX3RleHR1cmVVbmlmb3JtcyA9IHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5maWx0ZXIoZnVuY3Rpb24gKHVuaWZvcm1OYW1lKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3QnIHx8IHR5cGUgPT09ICd0dic7XG4gICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgIHZhciBvcmlnaW5hbFZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XG4gICAgICAgIHZhciBvcmlnaW5hbEZyYWdtZW50RGVmaW5lcyA9IHRoaXMuZnJhZ21lbnREZWZpbmVzO1xuXG4gICAgICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLnZlcnRleERlZmluZXMpO1xuICAgICAgICB0aGlzLmZyYWdtZW50RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLmZyYWdtZW50RGVmaW5lcyk7XG5cbiAgICAgICAgaWYgKGtlZXBTdGF0dXMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBvcmlnaW5hbFVuaWZvcm1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1zW3N5bWJvbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IG9yaWdpbmFsVW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHModGhpcy52ZXJ0ZXhEZWZpbmVzLCBvcmlnaW5hbFZlcnRleERlZmluZXMpO1xuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLmZyYWdtZW50RGVmaW5lcywgb3JpZ2luYWxGcmFnbWVudERlZmluZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNoYWRlci50ZXh0dXJlcykge1xuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1trZXldID0ge1xuICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlci50ZXh0dXJlc1trZXldLnNoYWRlclR5cGUsXG4gICAgICAgICAgICAgICAgdHlwZTogc2hhZGVyLnRleHR1cmVzW2tleV0udHlwZSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiAoa2VlcFN0YXR1cyAmJiB0aGlzLl90ZXh0dXJlU3RhdHVzW2tleV0pID8gdGhpcy5fdGV4dHVyZVN0YXR1c1trZXldLmVuYWJsZWQgOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RleHR1cmVTdGF0dXMgPSB0ZXh0dXJlU3RhdHVzO1xuXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgbWF0ZXJpYWwgYW5kIGtlZXAgdW5pZm9ybXMsIHNoYWRlciB3aWxsIG5vdCBiZSBjbG9uZWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdGVyaWFsfVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5zaGFkZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0aGlzLnVuaWZvcm1zKSB7XG4gICAgICAgICAgICBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRoaXMuZGVwdGhUZXN0O1xuICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSB0aGlzLmRlcHRoTWFzaztcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xuICAgICAgICBtYXRlcmlhbC5ibGVuZCA9IHRoaXMuYmxlbmQ7XG5cbiAgICAgICAgbWF0ZXJpYWwudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy52ZXJ0ZXhEZWZpbmVzKTtcbiAgICAgICAgbWF0ZXJpYWwuZnJhZ21lbnREZWZpbmVzID0gdXRpbC5jbG9uZSh0aGlzLmZyYWdtZW50RGVmaW5lcyk7XG4gICAgICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUodGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKSk7XG4gICAgICAgIG1hdGVyaWFsLnByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xuXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXG4gICAgICovXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sLCB2YWwpIHtcbiAgICAgICAgdmFyIHZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XG4gICAgICAgIHZhciBmcmFnbWVudERlZmluZXMgPSB0aGlzLmZyYWdtZW50RGVmaW5lcztcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXG4gICAgICAgICAgICAmJiBhcmd1bWVudHMubGVuZ3RoIDwgM1xuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcbiAgICAgICAgICAgIHZhbCA9IHN5bWJvbDtcbiAgICAgICAgICAgIHN5bWJvbCA9IHNoYWRlclR5cGU7XG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IHZhbCAhPSBudWxsID8gdmFsIDogbnVsbDtcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xuICAgICAgICAgICAgaWYgKHZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgdmVydGV4RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgICAgICBpZiAoZnJhZ21lbnREZWZpbmVzW3N5bWJvbF0gIT09IHZhbCkge1xuICAgICAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xuICAgICAgICAgICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAnYm90aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxuICAgICAqL1xuICAgIHVuZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sKSB7XG4gICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAndmVydGV4JyAmJiBzaGFkZXJUeXBlICE9PSAnZnJhZ21lbnQnICYmIHNoYWRlclR5cGUgIT09ICdib3RoJ1xuICAgICAgICAgICAgJiYgYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBzaGFkZXJUeXBlIGRlZmF1bHQgdG8gYmUgJ2JvdGgnXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ3ZlcnRleCcsIHN5bWJvbCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XG4gICAgICAgICAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCBzeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIG1hY3JvIGlzIGRlZmluZWQgaW4gc2hhZGVyLlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKi9cbiAgICBpc0RlZmluZWQ6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcbiAgICAgICAgLy8gUEVORElORyBoYXNPd25Qcm9wZXJ0eSA/XG4gICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgbWFjcm8gdmFsdWUgZGVmaW5lZCBpbiBzaGFkZXIuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxuICAgICAqL1xuICAgIGdldERlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xuICAgICAgICBzd2l0Y2goc2hhZGVyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBhIHRleHR1cmUsIGFjdHVhbGx5IGl0IHdpbGwgYWRkIGEgI2RlZmluZSBtYWNybyBpbiB0aGUgc2hhZGVyIGNvZGVcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGV4dHVyZSBzeW1ib2wgaXMgZGlmZnVzZU1hcCwgaXQgd2lsbCBhZGQgYSBsaW5lIGAjZGVmaW5lIERJRkZVU0VNQVBfRU5BQkxFRGAgaW4gdGhlIHNoYWRlciBjb2RlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKi9cbiAgICBlbmFibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN5bWJvbCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICB2YXIgaXNFbmFibGVkID0gc3RhdHVzLmVuYWJsZWQ7XG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXG4gICAgICovXG4gICAgZW5hYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGV4dHVyZVN0YXR1cykge1xuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBhIHRleHR1cmUsIGl0IHJlbW92ZSBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXG4gICAgICovXG4gICAgZGlzYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICB2YXIgaXNEaXNhYmxlZCA9ICEgc3RhdHVzLmVuYWJsZWQ7XG4gICAgICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXG4gICAgICovXG4gICAgZGlzYWJsZVRleHR1cmVzQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1cztcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBJZiB0ZXh0dXJlIG9mIGdpdmVuIHR5cGUgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzVGV4dHVyZUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xuICAgICAgICByZXR1cm4gISF0ZXh0dXJlU3RhdHVzW3N5bWJvbF1cbiAgICAgICAgICAgICYmIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIGVuYWJsZWQgdGV4dHVyZXNcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBnZXRFbmFibGVkVGV4dHVyZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAodGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbmFibGVkVGV4dHVyZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1hcmsgZGVmaW5lcyBhcmUgdXBkYXRlZC5cbiAgICAgKi9cbiAgICBkaXJ0eURlZmluZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xuICAgIH1cbn0pO1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE1hdGVyaWFsLnByb3RvdHlwZSwgJ3NoYWRlcicsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVyIHx8IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyBjb25zb2xlLndhcm4oJ1lvdSBuZWVkIHRvIHVzZSBhdHRhY2hTaGFkZXIgdG8gc2V0IHRoZSBzaGFkZXIuJyk7XG4gICAgICAgICAgICB0aGlzLl9zaGFkZXIgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXRlcmlhbC5wcm90b3R5cGUsICdwcm9ncmFtS2V5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJvZ3JhbUtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSBnZXRQcm9ncmFtS2V5KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRleERlZmluZXMsIHRoaXMuZnJhZ21lbnREZWZpbmVzLCB0aGlzLmdldEVuYWJsZWRUZXh0dXJlcygpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtS2V5O1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGVyaWFsO1xuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuXG52YXIgU0hBREVSX1NUQVRFX1RPX0VOQUJMRSA9IDE7XG52YXIgU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFID0gMjtcbnZhciBTSEFERVJfU1RBVEVfUEVORElORyA9IDM7XG5cbi8vIEVuYWJsZSBhdHRyaWJ1dGUgb3BlcmF0aW9uIGlzIGdsb2JhbCB0byBhbGwgcHJvZ3JhbXNcbi8vIEhlcmUgc2F2ZWQgdGhlIGxpc3Qgb2YgYWxsIGVuYWJsZWQgYXR0cmlidXRlIGluZGV4XG4vLyBodHRwOi8vd3d3Lm1qYnNoYXcuY29tLzIwMTMvMDMvd2ViZ2wtZml4aW5nLWludmFsaWRvcGVyYXRpb24uaHRtbFxudmFyIGVuYWJsZWRBdHRyaWJ1dGVMaXN0ID0ge307XG5cbi8vIHNvbWUgdXRpbCBmdW5jdGlvbnNcbmZ1bmN0aW9uIGFkZExpbmVOdW1iZXJzKHN0cmluZykge1xuICAgIHZhciBjaHVua3MgPSBzdHJpbmcuc3BsaXQoJ1xcbicpO1xuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBpbDsgaSArKykge1xuICAgICAgICAvLyBDaHJvbWUgcmVwb3J0cyBzaGFkZXIgZXJyb3JzIG9uIGxpbmVzXG4gICAgICAgIC8vIHN0YXJ0aW5nIGNvdW50aW5nIGZyb20gMVxuICAgICAgICBjaHVua3NbaV0gPSAoaSArIDEpICsgJzogJyArIGNodW5rc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGNodW5rcy5qb2luKCdcXG4nKTtcbn1cblxuLy8gUmV0dXJuIHRydWUgb3IgZXJyb3IgbXNnIGlmIGVycm9yIGhhcHBlbmVkXG5mdW5jdGlvbiBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgc2hhZGVyLCBzaGFkZXJTdHJpbmcpIHtcbiAgICBpZiAoIV9nbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBfZ2wuQ09NUElMRV9TVEFUVVMpKSB7XG4gICAgICAgIHJldHVybiBbX2dsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSwgYWRkTGluZU51bWJlcnMoc2hhZGVyU3RyaW5nKV0uam9pbignXFxuJyk7XG4gICAgfVxufVxuXG52YXIgdG1wRmxvYXQzMkFycmF5MTYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSgxNik7XG5cbnZhciBHTFByb2dyYW0gPSBCYXNlLmV4dGVuZCh7XG5cbiAgICB1bmlmb3JtU2VtYW50aWNzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fVxuXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fbG9jYXRpb25zID0ge307XG5cbiAgICB0aGlzLl90ZXh0dXJlU2xvdCA9IDA7XG5cbiAgICB0aGlzLl9wcm9ncmFtID0gbnVsbDtcbn0sIHtcblxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLl90ZXh0dXJlU2xvdCA9IDA7XG4gICAgICAgIHJlbmRlcmVyLmdsLnVzZVByb2dyYW0odGhpcy5fcHJvZ3JhbSk7XG4gICAgfSxcblxuICAgIGhhc1VuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fbG9jYXRpb25zW3N5bWJvbF07XG4gICAgICAgIHJldHVybiBsb2NhdGlvbiAhPT0gbnVsbCAmJiBsb2NhdGlvbiAhPT0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICB1c2VUZXh0dXJlU2xvdDogZnVuY3Rpb24gKHJlbmRlcmVyLCB0ZXh0dXJlLCBzbG90KSB7XG4gICAgICAgIGlmICh0ZXh0dXJlKSB7XG4gICAgICAgICAgICByZW5kZXJlci5nbC5hY3RpdmVUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkUwICsgc2xvdCk7XG4gICAgICAgICAgICAvLyBNYXliZSB0ZXh0dXJlIGlzIG5vdCBsb2FkZWQgeWV0O1xuICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnVuYmluZChyZW5kZXJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlU2xvdDtcbiAgICB9LFxuXG4gICAgcmVzZXRUZXh0dXJlU2xvdDogZnVuY3Rpb24gKHNsb3QpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSBzbG90IHx8IDA7XG4gICAgfSxcblxuICAgIHRha2VDdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSkge1xuICAgICAgICB2YXIgdGV4dHVyZVNsb3QgPSB0aGlzLl90ZXh0dXJlU2xvdDtcblxuICAgICAgICB0aGlzLnVzZVRleHR1cmVTbG90KHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlU2xvdCk7XG5cbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QrKztcblxuICAgICAgICByZXR1cm4gdGV4dHVyZVNsb3Q7XG4gICAgfSxcblxuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChfZ2wsIHR5cGUsIHN5bWJvbCwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGxvY2F0aW9uTWFwID0gdGhpcy5fbG9jYXRpb25zO1xuICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xuICAgICAgICAvLyBVbmlmb3JtIGlzIG5vdCBleGlzdGVkIGluIHRoZSBzaGFkZXJcbiAgICAgICAgaWYgKGxvY2F0aW9uID09PSBudWxsIHx8IGxvY2F0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbTQnOlxuICAgICAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRmxvYXQzMkFycmF5IGlzIG11Y2ggZmFzdGVyIHRoYW4gYXJyYXkgd2hlbiB1bmlmb3JtTWF0cml4NGZ2LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBGbG9hdDMyQXJyYXkxNltpXSA9IHZhbHVlW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wRmxvYXQzMkFycmF5MTY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnMmknOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcyZic6XG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzNpJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzNmJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzRpJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnMWknOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzFmJzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcxZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcxaXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcyaXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcyZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICczaXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICczZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc0aXYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc0ZnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtMic6XG4gICAgICAgICAgICBjYXNlICdtMnYnOlxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbTMnOlxuICAgICAgICAgICAgY2FzZSAnbTN2JzpcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ200dic6XG4gICAgICAgICAgICAgICAgLy8gUmF3IHZhbHVlXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHZhbHVlLmxlbmd0aCAqIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdmFsdWVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IrK10gPSBpdGVtW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgYXJyYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgICAvLyBBcnJheUJ1ZmZlclZpZXdcbiAgICAgICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBzZXRVbmlmb3JtT2ZTZW1hbnRpYzogZnVuY3Rpb24gKF9nbCwgc2VtYW50aWMsIHZhbCkge1xuICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gdGhpcy51bmlmb3JtU2VtYW50aWNzW3NlbWFudGljXTtcbiAgICAgICAgaWYgKHNlbWFudGljSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLy8gVXNlZCBmb3IgY3JlYXRpbmcgVkFPXG4gICAgLy8gRW5hYmxlIHRoZSBhdHRyaWJ1dGVzIHBhc3NlZCBpbiBhbmQgZGlzYWJsZSB0aGUgcmVzdFxuICAgIC8vIEV4YW1wbGUgVXNhZ2U6XG4gICAgLy8gZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgW1wicG9zaXRpb25cIiwgXCJ0ZXhjb29yZHNcIl0pXG4gICAgZW5hYmxlQXR0cmlidXRlczogZnVuY3Rpb24gKHJlbmRlcmVyLCBhdHRyaWJMaXN0LCB2YW8pIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX3Byb2dyYW07XG5cbiAgICAgICAgdmFyIGxvY2F0aW9uTWFwID0gdGhpcy5fbG9jYXRpb25zO1xuXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dDtcbiAgICAgICAgaWYgKHZhbykge1xuICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQgPSB2YW8uX19lbmFibGVkQXR0cmlidXRlTGlzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gZW5hYmxlZEF0dHJpYnV0ZUxpc3RbcmVuZGVyZXIuX191aWRfX107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gSW4gdmVydGV4IGFycmF5IG9iamVjdCBjb250ZXh0XG4gICAgICAgICAgICAvLyBQRU5ESU5HIEVhY2ggdmFvIG9iamVjdCBuZWVkcyB0byBlbmFibGUgYXR0cmlidXRlcyBhZ2Fpbj9cbiAgICAgICAgICAgIGlmICh2YW8pIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxuICAgICAgICAgICAgICAgICAgICA9IHZhby5fX2VuYWJsZWRBdHRyaWJ1dGVMaXN0XG4gICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxuICAgICAgICAgICAgICAgICAgICA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dXG4gICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYkxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBhdHRyaWJMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uTGlzdFtpXSA9IC0xO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25NYXBbc3ltYm9sXTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBfZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgc3ltYm9sKTtcbiAgICAgICAgICAgICAgICAvLyBBdHRyaWIgbG9jYXRpb24gaXMgYSBudW1iZXIgZnJvbSAwIHRvIC4uLlxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhdGlvbk1hcFtzeW1ib2xdID0gbG9jYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSBsb2NhdGlvbjtcblxuICAgICAgICAgICAgaWYgKCFlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0gPSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoKGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldKXtcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9UT19FTkFCTEU6XG4gICAgICAgICAgICAgICAgICAgIF9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0gPSBTSEFERVJfU1RBVEVfUEVORElORztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEU6XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gU0hBREVSX1NUQVRFX1BFTkRJTkc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vIEV4cGlyZWRcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9QRU5ESU5HOlxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uTGlzdDtcbiAgICB9LFxuXG4gICAgYnVpbGRQcm9ncmFtOiBmdW5jdGlvbiAoX2dsLCBzaGFkZXIsIHZlcnRleFNoYWRlckNvZGUsIGZyYWdtZW50U2hhZGVyQ29kZSkge1xuICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIHZhciBwcm9ncmFtID0gX2dsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XG4gICAgICAgIF9nbC5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7XG5cbiAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICAgICAgX2dsLnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJDb2RlKTtcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuXG4gICAgICAgIHZhciBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgdmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlKTtcbiAgICAgICAgaWYgKG1zZykge1xuICAgICAgICAgICAgcmV0dXJuIG1zZztcbiAgICAgICAgfVxuICAgICAgICBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XG4gICAgICAgIGlmIChtc2cpIHtcbiAgICAgICAgICAgIHJldHVybiBtc2c7XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7XG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpO1xuICAgICAgICAvLyBGb3JjZSB0aGUgcG9zaXRpb24gYmluZCB0byBsb2NhdGlvbiAwO1xuICAgICAgICBpZiAoc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1snUE9TSVRJT04nXSkge1xuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddLnN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFbHNlIGNob29zZSBhbiBhdHRyaWJ1dGUgYW5kIGJpbmQgdG8gbG9jYXRpb24gMDtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIF9nbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwga2V5c1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7XG5cbiAgICAgICAgaWYgKCFfZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBfZ2wuTElOS19TVEFUVVMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBsaW5rIHByb2dyYW1cXG4nICsgJ1ZBTElEQVRFX1NUQVRVUzogJyArIF9nbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIF9nbC5WQUxJREFURV9TVEFUVVMpICsgJywgZ2wgZXJyb3IgWycgKyBfZ2wuZ2V0RXJyb3IoKSArICddJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIHVuaWZvcm0gbG9jYXRpb25zXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVyLnVuaWZvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdW5pZm9ybVN5bWJvbCA9IHNoYWRlci51bmlmb3Jtc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX2xvY2F0aW9uc1t1bmlmb3JtU3ltYm9sXSA9IF9nbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybVN5bWJvbCk7XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7XG4gICAgICAgIF9nbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuXG4gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtO1xuXG4gICAgICAgIC8vIFNhdmUgY29kZS5cbiAgICAgICAgdGhpcy52ZXJ0ZXhDb2RlID0gdmVydGV4U2hhZGVyQ29kZTtcbiAgICAgICAgdGhpcy5mcmFnbWVudENvZGUgPSBmcmFnbWVudFNoYWRlckNvZGU7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEdMUHJvZ3JhbTsiLCJpbXBvcnQgR0xQcm9ncmFtIGZyb20gJy4vR0xQcm9ncmFtJztcblxudmFyIGxvb3BSZWdleCA9IC9mb3JcXHMqP1xcKGludFxccyo/X2lkeF9cXHMqXFw9XFxzKihbXFx3LV0rKVxcO1xccypfaWR4X1xccyo8XFxzKihbXFx3LV0rKTtcXHMqX2lkeF9cXHMqXFwrXFwrXFxzKlxcKVxccypcXHtcXHsoW1xcc1xcU10rPykoPz1cXH1cXH0pXFx9XFx9L2c7XG5cbmZ1bmN0aW9uIHVucm9sbExvb3Aoc2hhZGVyU3RyLCBkZWZpbmVzLCBsaWdodHNOdW1iZXJzKSB7XG4gICAgLy8gTG9vcCB1bnJvbGwgZnJvbSB0aHJlZS5qcywgaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9ibG9iL21hc3Rlci9zcmMvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUHJvZ3JhbS5qcyNMMTc1XG4gICAgLy8gSW4gc29tZSBjYXNlIGxpa2Ugc2hhZG93TWFwIGluIGxvb3AgdXNlICdpJyB0byBpbmRleCB2YWx1ZSBtdWNoIHNsb3dlci5cblxuICAgIC8vIExvb3AgdXNlIF9pZHhfIGFuZCBpbmNyZWFzZWQgd2l0aCBfaWR4XysrIHdpbGwgYmUgdW5yb2xsZWRcbiAgICAvLyBVc2Uge3sgfX0gdG8gbWF0Y2ggdGhlIHBhaXIgc28gdGhlIGlmIHN0YXRlbWVudCB3aWxsIG5vdCBiZSBhZmZlY3RlZFxuICAgIC8vIFdyaXRlIGxpa2UgZm9sbG93aW5nXG4gICAgLy8gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IDQ7IF9pZHhfKyspIHt7XG4gICAgLy8gICAgIHZlYzMgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbX2lkeF9dLCB1dikucmdiO1xuICAgIC8vIH19XG4gICAgZnVuY3Rpb24gcmVwbGFjZShtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xuICAgICAgICB2YXIgdW5yb2xsID0gJyc7XG4gICAgICAgIC8vIFRyeSB0byB0cmVhdCBhcyBkZWZpbmVcbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIGRlZmluZXMpIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IGRlZmluZXNbc3RhcnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBsaWdodE51bWJlckRlZmluZXNbc3RhcnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihlbmQpKSB7XG4gICAgICAgICAgICBpZiAoZW5kIGluIGRlZmluZXMpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSBkZWZpbmVzW2VuZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbmQgPSBsaWdodE51bWJlckRlZmluZXNbZW5kXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIEVycm9yIGNoZWNraW5nXG5cbiAgICAgICAgZm9yICh2YXIgaWR4ID0gcGFyc2VJbnQoc3RhcnQpOyBpZHggPCBwYXJzZUludChlbmQpOyBpZHgrKykge1xuICAgICAgICAgICAgLy8gUEVORElORyBBZGQgc2NvcGU/XG4gICAgICAgICAgICB1bnJvbGwgKz0gJ3snXG4gICAgICAgICAgICAgICAgKyBzbmlwcGV0XG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9mbG9hdFxccypcXChcXHMqX2lkeF9cXHMqXFwpL2csIGlkeC50b0ZpeGVkKDEpKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvX2lkeF8vZywgaWR4KVxuICAgICAgICAgICAgKyAnfSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5yb2xsO1xuICAgIH1cblxuICAgIHZhciBsaWdodE51bWJlckRlZmluZXMgPSB7fTtcbiAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xuICAgICAgICBsaWdodE51bWJlckRlZmluZXNbbGlnaHRUeXBlICsgJ19DT1VOVCddID0gbGlnaHRzTnVtYmVyc1tsaWdodFR5cGVdO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZGVyU3RyLnJlcGxhY2UobG9vcFJlZ2V4LCByZXBsYWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpIHtcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XG4gICAgaWYgKGxpZ2h0c051bWJlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIGxpZ2h0c051bWJlcnMpIHtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IGxpZ2h0c051bWJlcnNbbGlnaHRUeXBlXTtcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgbGlnaHRUeXBlLnRvVXBwZXJDYXNlKCkgKyAnX0NPVU5UICcgKyBjb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuYWJsZWRUZXh0dXJlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRUZXh0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wudG9VcHBlckNhc2UoKSArICdfRU5BQkxFRCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEN1c3RvbSBEZWZpbmVzXG4gICAgZm9yICh2YXIgc3ltYm9sIGluIGRlZmluZXMpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1tzeW1ib2xdO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29kZShleHRzKSB7XG4gICAgLy8gRXh0ZW5zaW9uIGRlY2xhcmF0aW9uIG11c3QgYmVmb3JlIGFsbCBub24tcHJlcHJvY2Vzc29yIGNvZGVzXG4gICAgLy8gVE9ETyB2ZXJ0ZXggPyBleHRlbnNpb24gZW51bSA/XG4gICAgdmFyIGV4dGVuc2lvblN0ciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBleHRlbnNpb25TdHIucHVzaCgnI2V4dGVuc2lvbiBHTF8nICsgZXh0c1tpXSArICcgOiBlbmFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4dGVuc2lvblN0ci5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlY2lzaW9uQ29kZShwcmVjaXNpb24pIHtcbiAgICByZXR1cm4gWydwcmVjaXNpb24nLCBwcmVjaXNpb24sICdmbG9hdCddLmpvaW4oJyAnKSArICc7XFxuJ1xuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnaW50J10uam9pbignICcpICsgJztcXG4nXG4gICAgICAgIC8vIGRlcHRoIHRleHR1cmUgbWF5IGhhdmUgcHJlY2lzaW9uIHByb2JsZW0gb24gaU9TIGRldmljZS5cbiAgICAgICAgKyBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ3NhbXBsZXIyRCddLmpvaW4oJyAnKSArICc7XFxuJztcbn1cblxuZnVuY3Rpb24gUHJvZ3JhbU1hbmFnZXIocmVuZGVyZXIpIHtcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgIHRoaXMuX2NhY2hlID0ge307XG59XG5cblByb2dyYW1NYW5hZ2VyLnByb3RvdHlwZS5nZXRQcm9ncmFtID0gZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzY2VuZSkge1xuICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXG4gICAgdmFyIGtleSA9ICdzJyArIG1hdGVyaWFsLnNoYWRlci5zaGFkZXJJRCArICdtJyArIG1hdGVyaWFsLnByb2dyYW1LZXk7XG4gICAgaWYgKHNjZW5lKSB7XG4gICAgICAgIGtleSArPSAnc2UnICsgc2NlbmUuZ2V0UHJvZ3JhbUtleShyZW5kZXJhYmxlLmxpZ2h0R3JvdXApO1xuICAgIH1cbiAgICBpZiAocmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkpIHtcbiAgICAgICAga2V5ICs9ICcsJyArIHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgdmFyIHByb2dyYW0gPSBjYWNoZVtrZXldO1xuXG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgfVxuXG4gICAgdmFyIGxpZ2h0c051bWJlcnMgPSBzY2VuZSA/IHNjZW5lLmdldExpZ2h0c051bWJlcnMocmVuZGVyYWJsZS5saWdodEdyb3VwKSA6IHt9O1xuICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xuICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gbWF0ZXJpYWwuZ2V0RW5hYmxlZFRleHR1cmVzKCk7XG4gICAgdmFyIHNraW5EZWZpbmVDb2RlID0gJyc7XG4gICAgaWYgKHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpKSB7XG4gICAgICAgIC8vIFRPRE8gQWRkIHNraW5uaW5nIGNvZGU/XG4gICAgICAgIHNraW5EZWZpbmVDb2RlID0gJ1xcbicgKyBnZXREZWZpbmVDb2RlKHtcbiAgICAgICAgICAgIFNLSU5OSU5HOiBudWxsLFxuICAgICAgICAgICAgSk9JTlRfQ09VTlQ6IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aFxuICAgICAgICB9KSArICdcXG4nO1xuICAgIH1cbiAgICAvLyBUT0RPIE9wdGltaXplIGtleSBnZW5lcmF0aW9uXG4gICAgLy8gVkVSVEVYXG4gICAgdmFyIHZlcnRleERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpO1xuICAgIC8vIEZSQUdNRU5UXG4gICAgdmFyIGZyYWdtZW50RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKTtcblxuICAgIHZhciB2ZXJ0ZXhDb2RlID0gdmVydGV4RGVmaW5lU3RyICsgJ1xcbicgKyBtYXRlcmlhbC5zaGFkZXIudmVydGV4O1xuICAgIHZhciBmcmFnbWVudENvZGUgPSBnZXRFeHRlbnNpb25Db2RlKFtcbiAgICAgICAgICAgIC8vIFRPRE8gTm90IGhhcmQgY29kZWRcbiAgICAgICAgICAgICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnLFxuICAgICAgICAgICAgJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnXG4gICAgICAgIF0pICsgJ1xcbidcbiAgICAgICAgICAgICsgZ2V0UHJlY2lzaW9uQ29kZShtYXRlcmlhbC5wcmVjaXNpb24pICsgJ1xcbidcbiAgICAgICAgICAgICsgZnJhZ21lbnREZWZpbmVTdHIgKyAnXFxuJyArIG1hdGVyaWFsLnNoYWRlci5mcmFnbWVudDtcblxuICAgIHZhciBmaW5hbFZlcnRleENvZGUgPSB1bnJvbGxMb29wKHZlcnRleENvZGUsIG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xuICAgIHZhciBmaW5hbEZyYWdtZW50Q29kZSA9IHVucm9sbExvb3AoZnJhZ21lbnRDb2RlLCBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xuXG4gICAgdmFyIHByb2dyYW0gPSBuZXcgR0xQcm9ncmFtKCk7XG4gICAgcHJvZ3JhbS51bmlmb3JtU2VtYW50aWNzID0gbWF0ZXJpYWwuc2hhZGVyLnVuaWZvcm1TZW1hbnRpY3M7XG4gICAgcHJvZ3JhbS5hdHRyaWJ1dGVzID0gbWF0ZXJpYWwuc2hhZGVyLmF0dHJpYnV0ZXM7XG4gICAgdmFyIGVycm9yTXNnID0gcHJvZ3JhbS5idWlsZFByb2dyYW0oX2dsLCBtYXRlcmlhbC5zaGFkZXIsIGZpbmFsVmVydGV4Q29kZSwgZmluYWxGcmFnbWVudENvZGUpO1xuICAgIHByb2dyYW0uX19lcnJvciA9IGVycm9yTXNnO1xuXG4gICAgY2FjaGVba2V5XSA9IHByb2dyYW07XG5cbiAgICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb2dyYW1NYW5hZ2VyOyIsIi8qKlxuICogTWFpbmx5IGRvIHRoZSBwYXJzZSBhbmQgY29tcGlsZSBvZiBzaGFkZXIgc3RyaW5nXG4gKiBTdXBwb3J0IHNoYWRlciBjb2RlIGNodW5rIGltcG9ydCBhbmQgZXhwb3J0XG4gKiBTdXBwb3J0IHNoYWRlciBzZW1hbnRpY3NcbiAqIGh0dHA6Ly93d3cubnZpZGlhLmNvbS9vYmplY3QvdXNpbmdfc2FzLmh0bWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvY29sbGFkYTJqc29uL2lzc3Vlcy80NVxuICpcbiAqIFRPRE86IFVzZSBldHBsIG9yIG90aGVyIHN0cmluZyB0ZW1wbGF0ZSBlbmdpbmVcbiAqL1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XG52YXIgbWF0MiA9IGdsTWF0cml4Lm1hdDI7XG52YXIgbWF0MyA9IGdsTWF0cml4Lm1hdDM7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG5cbnZhciB1bmlmb3JtUmVnZXggPSAvdW5pZm9ybVxccysoYm9vbHxmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzR8aXZlYzJ8aXZlYzN8aXZlYzR8bWF0MnxtYXQzfG1hdDR8c2FtcGxlcjJEfHNhbXBsZXJDdWJlKVxccysoW1xcd1xcLF0rKT8oXFxbLio/XFxdKT9cXHMqKDpcXHMqKFtcXFNcXHNdKz8pKT87L2c7XG52YXIgYXR0cmlidXRlUmVnZXggPSAvYXR0cmlidXRlXFxzKyhmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzQpXFxzKyhcXHcqKVxccyooOlxccyooXFx3KykpPzsvZztcbnZhciBkZWZpbmVSZWdleCA9IC8jZGVmaW5lXFxzKyhcXHcrKT8oXFxzK1tcXHctLl0rKT9cXHMqOz9cXHMqXFxuL2c7XG5cbnZhciB1bmlmb3JtVHlwZU1hcCA9IHtcbiAgICAnYm9vbCc6ICcxaScsXG4gICAgJ2ludCc6ICcxaScsXG4gICAgJ3NhbXBsZXIyRCc6ICd0JyxcbiAgICAnc2FtcGxlckN1YmUnOiAndCcsXG4gICAgJ2Zsb2F0JzogJzFmJyxcbiAgICAndmVjMic6ICcyZicsXG4gICAgJ3ZlYzMnOiAnM2YnLFxuICAgICd2ZWM0JzogJzRmJyxcbiAgICAnaXZlYzInOiAnMmknLFxuICAgICdpdmVjMyc6ICczaScsXG4gICAgJ2l2ZWM0JzogJzRpJyxcbiAgICAnbWF0Mic6ICdtMicsXG4gICAgJ21hdDMnOiAnbTMnLFxuICAgICdtYXQ0JzogJ200J1xufTtcblxudmFyIHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yID0ge1xuICAgICdib29sJzogZnVuY3Rpb24gKCkge3JldHVybiB0cnVlO30sXG4gICAgJ2ludCc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gMDt9LFxuICAgICdmbG9hdCc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gMDt9LFxuICAgICdzYW1wbGVyMkQnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIG51bGw7fSxcbiAgICAnc2FtcGxlckN1YmUnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIG51bGw7fSxcblxuICAgICd2ZWMyJzogZnVuY3Rpb24gKCkge3JldHVybiBbMCwgMF07fSxcbiAgICAndmVjMyc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gWzAsIDAsIDBdO30sXG4gICAgJ3ZlYzQnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIFswLCAwLCAwLCAwXTt9LFxuXG4gICAgJ2l2ZWMyJzogZnVuY3Rpb24gKCkge3JldHVybiBbMCwgMF07fSxcbiAgICAnaXZlYzMnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIFswLCAwLCAwXTt9LFxuICAgICdpdmVjNCc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gWzAsIDAsIDAsIDBdO30sXG5cbiAgICAnbWF0Mic6IGZ1bmN0aW9uICgpIHtyZXR1cm4gbWF0Mi5jcmVhdGUoKTt9LFxuICAgICdtYXQzJzogZnVuY3Rpb24gKCkge3JldHVybiBtYXQzLmNyZWF0ZSgpO30sXG4gICAgJ21hdDQnOiBmdW5jdGlvbiAoKSB7cmV0dXJuIG1hdDQuY3JlYXRlKCk7fSxcblxuICAgICdhcnJheSc6IGZ1bmN0aW9uICgpIHtyZXR1cm4gW107fVxufTtcblxudmFyIGF0dHJpYnV0ZVNlbWFudGljcyA9IFtcbiAgICAnUE9TSVRJT04nLFxuICAgICdOT1JNQUwnLFxuICAgICdCSU5PUk1BTCcsXG4gICAgJ1RBTkdFTlQnLFxuICAgICdURVhDT09SRCcsXG4gICAgJ1RFWENPT1JEXzAnLFxuICAgICdURVhDT09SRF8xJyxcbiAgICAnQ09MT1InLFxuICAgIC8vIFNraW5uaW5nXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2Jsb2IvbWFzdGVyL3NwZWNpZmljYXRpb24vUkVBRE1FLm1kI3NlbWFudGljc1xuICAgICdKT0lOVCcsXG4gICAgJ1dFSUdIVCdcbl07XG52YXIgdW5pZm9ybVNlbWFudGljcyA9IFtcbiAgICAnU0tJTl9NQVRSSVgnLFxuICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHZpZXdwb3J0XG4gICAgJ1ZJRVdQT1JUX1NJWkUnLFxuICAgICdWSUVXUE9SVCcsXG4gICAgJ0RFVklDRVBJWEVMUkFUSU8nLFxuICAgIC8vIFdpbmRvdyBzaXplIGZvciB3aW5kb3cgcmVsYXRpdmUgY29vcmRpbmF0ZVxuICAgIC8vIGh0dHBzOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuL2h0bWwvZ2xfRnJhZ0Nvb3JkLnhodG1sXG4gICAgJ1dJTkRPV19TSVpFJyxcbiAgICAvLyBJbmZvbWF0aW9uIGFib3V0IGNhbWVyYVxuICAgICdORUFSJyxcbiAgICAnRkFSJyxcbiAgICAvLyBUaW1lXG4gICAgJ1RJTUUnXG5dO1xudmFyIG1hdHJpeFNlbWFudGljcyA9IFtcbiAgICAnV09STEQnLFxuICAgICdWSUVXJyxcbiAgICAnUFJPSkVDVElPTicsXG4gICAgJ1dPUkxEVklFVycsXG4gICAgJ1ZJRVdQUk9KRUNUSU9OJyxcbiAgICAnV09STERWSUVXUFJPSkVDVElPTicsXG4gICAgJ1dPUkxESU5WRVJTRScsXG4gICAgJ1ZJRVdJTlZFUlNFJyxcbiAgICAnUFJPSkVDVElPTklOVkVSU0UnLFxuICAgICdXT1JMRFZJRVdJTlZFUlNFJyxcbiAgICAnVklFV1BST0pFQ1RJT05JTlZFUlNFJyxcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxuICAgICdXT1JMRFRSQU5TUE9TRScsXG4gICAgJ1ZJRVdUUkFOU1BPU0UnLFxuICAgICdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcbiAgICAnV09STERWSUVXVFJBTlNQT1NFJyxcbiAgICAnVklFV1BST0pFQ1RJT05UUkFOU1BPU0UnLFxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcbiAgICAnV09STERJTlZFUlNFVFJBTlNQT1NFJyxcbiAgICAnVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxuICAgICdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXG4gICAgJ1dPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxuICAgICdWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnLFxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSdcbl07XG5cblxudmFyIHNoYWRlcklEQ2FjaGUgPSB7fTtcbnZhciBzaGFkZXJDb2RlQ2FjaGUgPSB7fTtcblxuZnVuY3Rpb24gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCkge1xuICAgIHZhciBrZXkgPSAndmVydGV4OicgKyB2ZXJ0ZXggKyAnZnJhZ21lbnQ6JyArIGZyYWdtZW50O1xuICAgIGlmIChzaGFkZXJJRENhY2hlW2tleV0pIHtcbiAgICAgICAgcmV0dXJuIHNoYWRlcklEQ2FjaGVba2V5XTtcbiAgICB9XG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XG4gICAgc2hhZGVySURDYWNoZVtrZXldID0gaWQ7XG5cbiAgICBzaGFkZXJDb2RlQ2FjaGVbaWRdID0ge1xuICAgICAgICB2ZXJ0ZXg6IHZlcnRleCxcbiAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50XG4gICAgfTtcblxuICAgIHJldHVybiBpZDtcbn1cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKiBAYWxpYXMgY2xheS5TaGFkZXJcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBwaG9uZyBzaGFkZXJcbiAqIHZhciBzaGFkZXIgPSBuZXcgY2xheS5TaGFkZXIoXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSxcbiAqICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLmZyYWdtZW50JylcbiAqICk7XG4gKi9cbmZ1bmN0aW9uIFNoYWRlcih2ZXJ0ZXgsIGZyYWdtZW50KSB7XG4gICAgLy8gRmlyc3QgYXJndW1lbnQgY2FuIGJlIHsgdmVydGV4LCBmcmFnbWVudCB9XG4gICAgaWYgKHR5cGVvZiB2ZXJ0ZXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZyYWdtZW50ID0gdmVydGV4LmZyYWdtZW50O1xuICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgudmVydGV4O1xuICAgIH1cblxuICAgIHRoaXMuX3NoYWRlcklEID0gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCk7XG5cbiAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHZlcnRleCk7XG4gICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KGZyYWdtZW50KTtcblxuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzID0ge307XG4gICAgLyoqXG4gICAgICogQHJlYWRPbmx5XG4gICAgICovXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY3MgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnVuaWZvcm1TZW1hbnRpY3MgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLm1hdHJpeFNlbWFudGljS2V5cyA9IFtdO1xuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudW5pZm9ybVRlbXBsYXRlcyA9IHt9O1xuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9O1xuICAgIC8qKlxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIHRoaXMudGV4dHVyZXMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLnZlcnRleERlZmluZXMgPSB7fTtcbiAgICAvKipcbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICB0aGlzLmZyYWdtZW50RGVmaW5lcyA9IHt9O1xuXG4gICAgdGhpcy5fcGFyc2VBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5fcGFyc2VVbmlmb3JtcygpO1xuICAgIHRoaXMuX3BhcnNlRGVmaW5lcygpO1xufVxuXG5TaGFkZXIucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IFNoYWRlcixcblxuICAgIC8vIENyZWF0ZSBhIG5ldyB1bmlmb3JtIGluc3RhbmNlIGZvciBtYXRlcmlhbFxuICAgIGNyZWF0ZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMpe1xuICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSB0aGlzLnVuaWZvcm1UZW1wbGF0ZXNbc3ltYm9sXTtcbiAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVRwbC50eXBlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtVHBsLnZhbHVlKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XG4gICAgfSxcblxuICAgIF9wYXJzZUltcG9ydDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMudmVydGV4KTtcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMuZnJhZ21lbnQpO1xuICAgIH0sXG5cbiAgICBfcGFyc2VVbmlmb3JtczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xuICAgICAgICB0aGlzLl91bmlmb3JtTGlzdCA9IFtdO1xuXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XG4gICAgICAgIHNoYWRlclR5cGUgPSAnZnJhZ21lbnQnO1xuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcblxuICAgICAgICBzZWxmLm1hdHJpeFNlbWFudGljS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubWF0cml4U2VtYW50aWNzKTtcblxuICAgICAgICBmdW5jdGlvbiBfdW5pZm9ybVBhcnNlcihzdHIsIHR5cGUsIHN5bWJvbCwgaXNBcnJheSwgc2VtYW50aWNXcmFwcGVyLCBzZW1hbnRpYykge1xuICAgICAgICAgICAgaWYgKHR5cGUgJiYgc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gdW5pZm9ybVR5cGVNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgdmFyIGlzQ29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFZhbHVlRnVuYztcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5pZm9ybUxpc3QucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NhbXBsZXIyRCcgfHwgdHlwZSA9PT0gJ3NhbXBsZXJDdWJlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBpcyBkZWZhdWx0IGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRleHR1cmVzW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZTogc2hhZGVyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVHlwZSArPSAndic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhc2UgaXMgb25seSBmb3IgU0tJTl9NQVRSSVhcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNUcmFuc3Bvc2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYy5tYXRjaCgvVFJBTlNQT1NFJC8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJhbnNwb3NlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljLnNsaWNlKDAsIC05KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXRyaXhTZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJhbnNwb3NlOiBpc1RyYW5zcG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZTogc2VtYW50aWNOb1RyYW5zcG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25maWd1cmFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudW5pZm9ybVNlbWFudGljc1tzZW1hbnRpY10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25maWd1cmFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB1bmlmb3JtIGlzIG5vdCBjb25maWd1cmFibGUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgbm90IGFwcGVhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtYXRlcmlhbCB1bmlmb3JtIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICd1bmNvbmZpZ3VyYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25maWd1cmFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaWZvcm0gaGF2ZSBhIGRlZmFsdXQgdmFsdWUsIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5pZm9ybSB2ZWMzIGNvbG9yOiBbMSwgMSwgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZUZ1bmMgPSBzZWxmLl9wYXJzZURlZmF1bHRWYWx1ZSh0eXBlLCBzZW1hbnRpYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVmYXVsdFZhbHVlRnVuYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtvd24gc2VtYW50aWMgXCInICsgc2VtYW50aWMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWFudGljID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb25maWd1cmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlzQXJyYXkgPyB1bmlmb3JtVmFsdWVDb25zdHJ1Y3RvclsnYXJyYXknXSA6IChkZWZhdWx0VmFsdWVGdW5jIHx8IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yW3R5cGVdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpYzogc2VtYW50aWMgfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gWyd1bmlmb3JtJywgdHlwZSwgc3ltYm9sLCBpc0FycmF5XS5qb2luKCcgJykgKyAnO1xcbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMgPSB1bmlmb3JtcztcbiAgICB9LFxuXG4gICAgX3BhcnNlRGVmYXVsdFZhbHVlOiBmdW5jdGlvbiAodHlwZSwgc3RyKSB7XG4gICAgICAgIHZhciBhcnJheVJlZ2V4ID0gL1xcW1xccyooLiopXFxzKlxcXS87XG4gICAgICAgIGlmICh0eXBlID09PSAndmVjMicgfHwgdHlwZSA9PT0gJ3ZlYzMnIHx8IHR5cGUgPT09ICd2ZWM0Jykge1xuICAgICAgICAgICAgdmFyIGFycmF5U3RyID0gYXJyYXlSZWdleC5leGVjKHN0cilbMV07XG4gICAgICAgICAgICBpZiAoYXJyYXlTdHIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gYXJyYXlTdHIuc3BsaXQoL1xccyosXFxzKi8pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShhcnIpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdib29sJykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3BhcnNlQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UoYXR0cmlidXRlUmVnZXgsIF9hdHRyaWJ1dGVQYXJzZXIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIF9hdHRyaWJ1dGVQYXJzZXIoc3RyLCB0eXBlLCBzeW1ib2wsIHNlbWFudGljV3JhcHBlciwgc2VtYW50aWMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlICYmIHN5bWJvbCkge1xuICAgICAgICAgICAgICAgIHZhciBzaXplID0gMTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVjNCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2ZWMzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZlYzInOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmxvYXQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3N5bWJvbF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhbiBvbmx5IGJlIGZsb2F0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmbG9hdCcsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgIHNlbWFudGljOiBzZW1hbnRpYyB8fCBudWxsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtvd24gc2VtYW50aWMgXCInICsgc2VtYW50aWMgKyAnXCInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gWydhdHRyaWJ1dGUnLCB0eXBlLCBzeW1ib2xdLmpvaW4oJyAnKSArICc7XFxuJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgfSxcblxuICAgIF9wYXJzZURlZmluZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XG4gICAgICAgIHRoaXMuX2ZyYWdtZW50Q29kZSA9IHRoaXMuX2ZyYWdtZW50Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcblxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUGFyc2VyKHN0ciwgc3ltYm9sLCB2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGRlZmluZXMgPSBzaGFkZXJUeXBlID09PSAndmVydGV4JyA/IHNlbGYudmVydGV4RGVmaW5lcyA6IHNlbGYuZnJhZ21lbnREZWZpbmVzO1xuICAgICAgICAgICAgaWYgKCFkZWZpbmVzW3N5bWJvbF0pIHsgLy8gSGF2ZW4ndCBiZWVuIGRlZmluZWQgYnkgdXNlclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW4gcGFyc2UgdG8gZmxvYXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKGlzTmFOKHBhcnNlRmxvYXQodmFsdWUpKSA/IHZhbHVlLnRyaW0oKSA6IHBhcnNlRmxvYXQodmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBzaGFkZXJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29kZSA9IHNoYWRlckNvZGVDYWNoZVt0aGlzLl9zaGFkZXJJRF07XG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGNvZGUudmVydGV4LCBjb2RlLmZyYWdtZW50KTtcbiAgICAgICAgcmV0dXJuIHNoYWRlcjtcbiAgICB9XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdzaGFkZXJJRCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVySUQ7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3ZlcnRleCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmVydGV4Q29kZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAnZnJhZ21lbnQnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYWdtZW50Q29kZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAndW5pZm9ybXMnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaWZvcm1MaXN0O1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbnZhciBpbXBvcnRSZWdleCA9IC8oQGltcG9ydClcXHMqKFswLTlhLXpBLVpfXFwtXFwuXSopL2c7XG5TaGFkZXIucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XG4gICAgc2hhZGVyU3RyID0gc2hhZGVyU3RyLnJlcGxhY2UoaW1wb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGltcG9ydFN5bWJvbCwgaW1wb3J0TmFtZSkge1xuICAgICAgICB2YXIgc3RyID0gU2hhZGVyLnNvdXJjZShpbXBvcnROYW1lKTtcbiAgICAgICAgaWYgKHN0cikge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcGFyc2VcbiAgICAgICAgICAgIHJldHVybiBTaGFkZXIucGFyc2VJbXBvcnQoc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBjaHVuayBcIicgKyBpbXBvcnROYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzaGFkZXJTdHI7XG59O1xuXG52YXIgZXhwb3J0UmVnZXggPSAvKEBleHBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKVxccypcXG4oW1xcc1xcU10qPylAZW5kL2c7XG5cbi8qKlxuICogSW1wb3J0IHNoYWRlciBzb3VyY2VcbiAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyU3RyXG4gKiBAbWVtYmVyT2YgY2xheS5TaGFkZXJcbiAqL1xuU2hhZGVyWydpbXBvcnQnXSA9IGZ1bmN0aW9uIChzaGFkZXJTdHIpIHtcbiAgICBzaGFkZXJTdHIucmVwbGFjZShleHBvcnRSZWdleCwgZnVuY3Rpb24gKHN0ciwgZXhwb3J0U3ltYm9sLCBleHBvcnROYW1lLCBjb2RlKSB7XG4gICAgICAgIHZhciBjb2RlID0gY29kZS5yZXBsYWNlKC8oXltcXHNcXHRcXHhhMFxcdTMwMDBdKyl8KFtcXHUzMDAwXFx4YTBcXHNcXHRdK1xceDI0KS9nLCAnJyk7XG4gICAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSBleHBvcnROYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xuICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgdmFyIGtleTtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgcGFydHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGtleSA9IHBhcnRzW2krK107XG4gICAgICAgICAgICAgICAgaWYgKCFvYmpba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvYmogPSBvYmpba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgb2JqW2tleV0gPSBjb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBMaWJyYXJ5IHRvIHN0b3JlIGFsbCB0aGUgbG9hZGVkIHNoYWRlciBjb2Rlc1xuICogQHR5cGUge09iamVjdH1cbiAqIEByZWFkT25seVxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXG4gKi9cblNoYWRlci5jb2RlcyA9IHt9O1xuXG4vKipcbiAqIEdldCBzaGFkZXIgc291cmNlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuU2hhZGVyLnNvdXJjZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBvYmogPSBTaGFkZXIuY29kZXM7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChvYmogJiYgaSA8IHBhcnRzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gcGFydHNbaSsrXTtcbiAgICAgICAgb2JqID0gb2JqW2tleV07XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBGSVhNRSBVc2UgZGVmYXVsdCBpbnN0ZWFkXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBcIicgKyBuYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2hhZGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJ2ZWMzIGNhbGNBbWJpZW50U0hMaWdodChpbnQgaWR4LCB2ZWMzIE4pIHtcXG4gICAgaW50IG9mZnNldCA9IDkgKiBpZHg7XFxuICAgIHJldHVybiBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1swXVxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1sxXSAqIE4ueFxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1szXSAqIE4uelxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s0XSAqIE4ueCAqIE4uelxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s2XSAqIE4ueSAqIE4ueFxcbiAgICAgICAgKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s3XSAqICgzLjAgKiBOLnogKiBOLnogLSAxLjApXFxuICAgICAgICArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVwiO1xuIiwiaW1wb3J0IGNhbGNBbWJpZW50U0hMaWdodEVzc2wgZnJvbSAnLi9jYWxjQW1iaWVudFNITGlnaHQuZ2xzbC5qcyc7XG5cbnZhciB1bmlmb3JtVmVjM1ByZWZpeCA9ICd1bmlmb3JtIHZlYzMgJztcbnZhciB1bmlmb3JtRmxvYXRQcmVmaXggPSAndW5pZm9ybSBmbG9hdCAnO1xudmFyIGV4cG9ydEhlYWRlclByZWZpeCA9ICdAZXhwb3J0IGNsYXkuaGVhZGVyLic7XG52YXIgZXhwb3J0RW5kID0gJ0BlbmQnO1xudmFyIHVuY29uZmlndXJhYmxlID0gJzp1bmNvbmZpZ3VyYWJsZTsnO1xuZXhwb3J0IGRlZmF1bHQgW1xuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdkaXJlY3Rpb25hbF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodENvbG9yW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmQsXG5cbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnYW1iaWVudF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudExpZ2h0Q29sb3JbQU1CSUVOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgZXhwb3J0RW5kLFxuXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfc2hfbGlnaHQnLFxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29sb3JbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVCAqIDldJyArIHVuY29uZmlndXJhYmxlLFxuICAgIGNhbGNBbWJpZW50U0hMaWdodEVzc2wsXG4gICAgZXhwb3J0RW5kLFxuXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfY3ViZW1hcF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgJ3VuaWZvcm0gc2FtcGxlckN1YmUgYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmQsXG5cbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAncG9pbnRfbGlnaHQnLFxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRQb3NpdGlvbltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3BvaW50TGlnaHRSYW5nZVtQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodENvbG9yW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmQsXG5cbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnc3BvdF9saWdodCcsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0UG9zaXRpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0RGlyZWN0aW9uW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRSYW5nZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRDb2xvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcbiAgICBleHBvcnRFbmRcbl0uam9pbignXFxuJyk7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wcmV6LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnByZXouZnJhZ21lbnRcXG52b2lkIG1haW4oKVxcbntcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xcbn1cXG5AZW5kXCI7XG4iLCIvLyBUT0RPIFJlc291cmNlcyBsaWtlIHNoYWRlciwgdGV4dHVyZSwgZ2VvbWV0cnkgcmVmZXJlbmNlIG1hbmFnZW1lbnRcbi8vIFRyYWNlIGFuZCBmaW5kIG91dCB3aGljaCBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IGNhbiBiZSBkZXN0cm95ZWRcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcbmltcG9ydCBHTEluZm8gZnJvbSAnLi9jb3JlL0dMSW5mbyc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xuaW1wb3J0IFByb2dyYW1NYW5hZ2VyIGZyb20gJy4vZ3B1L1Byb2dyYW1NYW5hZ2VyJztcblxuLy8gTGlnaHQgaGVhZGVyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcblxuaW1wb3J0IGxpZ2h0U2hhZGVyIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xuaW1wb3J0IHByZXpFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xuU2hhZGVyWydpbXBvcnQnXShsaWdodFNoYWRlcik7XG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcblxudmFyIG1hdDRDcmVhdGUgPSBtYXQ0LmNyZWF0ZTtcblxudmFyIGVycm9yU2hhZGVyID0ge307XG5cbmZ1bmN0aW9uIGRlZmF1bHRHZXRNYXRlcmlhbChyZW5kZXJhYmxlKSB7XG4gICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWw7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlJlbmRlcmVyXG4gKi9cbnZhciBSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyIyAqLyB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgICAgICogQHJlYWRvbmx5XG4gICAgICAgICAqL1xuICAgICAgICBjYW52YXM6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIF93aWR0aDogMTAwLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYW52YXMgd2lkdGgsIHNldCBieSByZXNpemUgbWV0aG9kXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBfaGVpZ2h0OiAxMDAsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldmljZSBwaXhlbCByYXRpbywgc2V0IGJ5IHNldERldmljZVBpeGVsUmF0aW8gbWV0aG9kXG4gICAgICAgICAqIFNwZWNpYWxseSBmb3IgaGlnaCBkZWZpbmF0aW9uIGRpc3BsYXlcbiAgICAgICAgICogQHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3dlYmdsL3dpa2kvSGFuZGxpbmdIaWdoRFBJXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAqL1xuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxLjAsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENsZWFyIGNvbG9yXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLjAsIDAuMCwgMC4wLCAwLjBdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZhdWx0OlxuICAgICAgICAgKiAgICAgX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCB8IF9nbC5TVEVOQ0lMX0JVRkZFUl9CSVRcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyQml0OiAxNzY2NCxcblxuICAgICAgICAvLyBTZXR0aW5ncyB3aGVuIGdldHRpbmcgY29udGV4dFxuICAgICAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8jMi40XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGVuYWJsZSBhbHBoYSwgZGVmYXVsdCB0cnVlXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBlbmFibGUgZGVwdGggYnVmZmVyLCBkZWZhdWx0IHRydWVcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBkZXB0aDogdHJ1ZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGVuYWJsZSBzdGVuY2lsIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHN0ZW5jaWw6IGZhbHNlLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgZW5hYmxlIGFudGlhbGlhcywgZGVmYXVsdCB0cnVlXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYW50aWFsaWFzOiB0cnVlLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgZW5hYmxlIHByZW11bHRpcGxpZWQgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdHJ1ZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHByZXNlcnZlIGRyYXdpbmcgYnVmZmVyLCBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRocm93IGNvbnRleHQgZXJyb3IsIHVzdWFsbHkgdHVybmVkIG9uIGluIGRlYnVnIG1vZGVcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aHJvd0Vycm9yOiB0cnVlLFxuICAgICAgICAvKipcbiAgICAgICAgICogV2ViR0wgQ29udGV4dCBjcmVhdGVkIGZyb20gZ2l2ZW4gY2FudmFzXG4gICAgICAgICAqIEB0eXBlIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9XG4gICAgICAgICAqL1xuICAgICAgICBnbDogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbmRlcmVyIHZpZXdwb3J0LCByZWFkLW9ubHksIGNhbiBiZSBzZXQgYnkgc2V0Vmlld3BvcnQgbWV0aG9kXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICB2aWV3cG9ydDoge30sXG5cbiAgICAgICAgLy8gU2V0IGJ5IEZyYW1lQnVmZmVyI2JpbmRcbiAgICAgICAgX19jdXJyZW50RnJhbWVCdWZmZXI6IG51bGwsXG5cbiAgICAgICAgX3ZpZXdwb3J0U3RhY2s6IFtdLFxuICAgICAgICBfY2xlYXJTdGFjazogW10sXG5cbiAgICAgICAgX3NjZW5lUmVuZGVyaW5nOiBudWxsXG4gICAgfTtcbn0sIGZ1bmN0aW9uICgpIHtcblxuICAgIGlmICghdGhpcy5jYW52YXMpIHtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB9XG4gICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBvcHRzID0ge1xuICAgICAgICAgICAgYWxwaGE6IHRoaXMuYWxwaGEsXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcbiAgICAgICAgICAgIHN0ZW5jaWw6IHRoaXMuc3RlbmNpbCxcbiAgICAgICAgICAgIGFudGlhbGlhczogdGhpcy5hbnRpYWxpYXMsXG4gICAgICAgICAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IHRoaXMucHJlbXVsdGlwbGllZEFscGhhLFxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRzKVxuICAgICAgICAgICAgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIG9wdHMpO1xuXG4gICAgICAgIGlmICghdGhpcy5nbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nbGluZm8gPSBuZXcgR0xJbmZvKHRoaXMuZ2wpO1xuXG4gICAgICAgIGlmICh0aGlzLmdsLnRhcmdldFJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbHJlYWR5IGNyZWF0ZWQgYSByZW5kZXJlcicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93ICdFcnJvciBjcmVhdGluZyBXZWJHTCBDb250ZXh0ICcgKyBlO1xuICAgIH1cblxuICAgIC8vIEluaXQgbWFuYWdlcnNcbiAgICB0aGlzLl9wcm9ncmFtTWdyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5SZW5kZXJlci5wcm90b3R5cGUuICoqL1xue1xuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgY2FudmFzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgICAqL1xuICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcbiAgICAgICAgLy8gc2V0IHRoZSBkaXNwbGF5IHNpemUgb2YgdGhlIGNhbnZhcy5cbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nQnVmZmVyXG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGRwcjtcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KDAsIDAsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgcmVuZGVyZXIgd2lkdGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0V2lkdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgcmVuZGVyZXIgaGVpZ2h0XG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldEhlaWdodDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdmlld3BvcnQgYXNwZWN0LFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXRWaWV3cG9ydEFzcGVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xuICAgICAgICByZXR1cm4gdmlld3BvcnQud2lkdGggLyB2aWV3cG9ydC5oZWlnaHQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBkZXZpY2VQaXhlbFJhdGlvXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cbiAgICAgKi9cbiAgICBzZXREZXZpY2VQaXhlbFJhdGlvOiBmdW5jdGlvbihkZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMucmVzaXplKHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZGV2aWNlUGl4ZWxSYXRpb1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXZpY2VQaXhlbFJhdGlvXG4gICAgICovXG4gICAgZ2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgV2ViR0wgZXh0ZW5zaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICovXG4gICAgZ2V0R0xFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0RXh0ZW5zaW9uKG5hbWUpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgV2ViR0wgcGFyYW1ldGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHsqfVxuICAgICAqL1xuICAgIGdldEdMUGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldFBhcmFtZXRlcihuYW1lKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHJlbmRlcmluZyB2aWV3cG9ydFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0geFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoXVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cbiAgICAgKiAgICAgICAgRGVmYXVsdGx5IHVzZSB0aGUgcmVuZGVyZXJlIGRldmljZVBpeGVsUmF0aW9cbiAgICAgKiAgICAgICAgSXQgbmVlZHMgdG8gYmUgMSB3aGVuIHNldFZpZXdwb3J0IGlzIGNhbGxlZCBieSBmcmFtZUJ1ZmZlclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgc2V0Vmlld3BvcnQoMCwwLHdpZHRoLGhlaWdodCwxKVxuICAgICAqICBzZXRWaWV3cG9ydCh7XG4gICAgICogICAgICB4OiAwLFxuICAgICAqICAgICAgeTogMCxcbiAgICAgKiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgKiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAqICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxuICAgICAqICB9KVxuICAgICAqL1xuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XG5cbiAgICAgICAgICAgIHggPSBvYmoueDtcbiAgICAgICAgICAgIHkgPSBvYmoueTtcbiAgICAgICAgICAgIHdpZHRoID0gb2JqLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gb2JqLmhlaWdodDtcbiAgICAgICAgICAgIGRwciA9IG9iai5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB9XG4gICAgICAgIGRwciA9IGRwciB8fCB0aGlzLmRldmljZVBpeGVsUmF0aW87XG5cbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydChcbiAgICAgICAgICAgIHggKiBkcHIsIHkgKiBkcHIsIHdpZHRoICogZHByLCBoZWlnaHQgKiBkcHJcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVXNlIGEgZnJlc2ggbmV3IG9iamVjdCwgbm90IHdyaXRlIHByb3BlcnR5LlxuICAgICAgICB0aGlzLnZpZXdwb3J0ID0ge1xuICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgIHk6IHksXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwclxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQdXNoIGN1cnJlbnQgdmlld3BvcnQgaW50byBhIHN0YWNrXG4gICAgICovXG4gICAgc2F2ZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0U3RhY2sucHVzaCh0aGlzLnZpZXdwb3J0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUG9wIHZpZXdwb3J0IGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXG4gICAgICovXG4gICAgcmVzdG9yZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydFN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQodGhpcy5fdmlld3BvcnRTdGFjay5wb3AoKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUHVzaCBjdXJyZW50IGNsZWFyIGludG8gYSBzdGFja1xuICAgICAqL1xuICAgIHNhdmVDbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9jbGVhclN0YWNrLnB1c2goe1xuICAgICAgICAgICAgY2xlYXJCaXQ6IHRoaXMuY2xlYXJCaXQsXG4gICAgICAgICAgICBjbGVhckNvbG9yOiB0aGlzLmNsZWFyQ29sb3JcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFBvcCBjbGVhciBmcm9tIHN0YWNrLCByZXN0b3JlIGluIHRoZSByZW5kZXJlclxuICAgICAqL1xuICAgIHJlc3RvcmVDbGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fY2xlYXJTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgb3B0ID0gdGhpcy5fY2xlYXJTdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG9wdC5jbGVhckNvbG9yO1xuICAgICAgICAgICAgdGhpcy5jbGVhckJpdCA9IG9wdC5jbGVhckJpdDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBiaW5kU2NlbmVSZW5kZXJpbmc6IGZ1bmN0aW9uIChzY2VuZSkge1xuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgdGhlIHNjZW5lIGluIGNhbWVyYSB0byB0aGUgc2NyZWVuIG9yIGJpbmRlZCBvZmZsaW5lIGZyYW1lYnVmZmVyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gICAgICAgc2NlbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gICAgICBjYW1lcmFcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSAgICAgW25vdFVwZGF0ZVNjZW5lXSBJZiBub3QgY2FsbCB0aGUgc2NlbmUudXBkYXRlIG1ldGhvZHMgaW4gdGhlIHJlbmRlcmluZywgZGVmYXVsdCB0cnVlXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtwcmVaXSAgICAgICAgICAgSWYgdXNlIHByZVogb3B0aW1pemF0aW9uLCBkZWZhdWx0IGZhbHNlXG4gICAgICogQHJldHVybiB7SVJlbmRlckluZm99XG4gICAgICovXG4gICAgcmVuZGVyOiBmdW5jdGlvbihzY2VuZSwgY2FtZXJhLCBub3RVcGRhdGVTY2VuZSwgcHJlWikge1xuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcblxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcblxuICAgICAgICBpZiAodGhpcy5jbGVhckJpdCkge1xuXG4gICAgICAgICAgICAvLyBNdXN0IHNldCBkZXB0aCBhbmQgY29sb3IgbWFzayB0cnVlIGJlZm9yZSBjbGVhclxuICAgICAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xuICAgICAgICAgICAgdmFyIG5lZWRzU2Npc3NvciA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIHZpZXdwb3J0RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydC53aWR0aCAhPT0gdGhpcy5fd2lkdGggfHwgdmlld3BvcnQuaGVpZ2h0ICE9PSB0aGlzLl9oZWlnaHRcbiAgICAgICAgICAgICAgICB8fCAodmlld3BvcnREcHIgJiYgdmlld3BvcnREcHIgIT09IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbylcbiAgICAgICAgICAgICAgICB8fCB2aWV3cG9ydC54IHx8IHZpZXdwb3J0LnlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5lZWRzU2Npc3NvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTU0NDYwOC9ob3ctdG8tY2xlYXItYS1yZWN0YW5nbGUtYXJlYS1pbi13ZWJnbFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIHZpZXdwb3J0XG4gICAgICAgICAgICAgICAgX2dsLmVuYWJsZShfZ2wuU0NJU1NPUl9URVNUKTtcbiAgICAgICAgICAgICAgICBfZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LnkgKiB2aWV3cG9ydERwciwgdmlld3BvcnQud2lkdGggKiB2aWV3cG9ydERwciwgdmlld3BvcnQuaGVpZ2h0ICogdmlld3BvcnREcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2dsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XG4gICAgICAgICAgICBfZ2wuY2xlYXIodGhpcy5jbGVhckJpdCk7XG4gICAgICAgICAgICBpZiAobmVlZHNTY2lzc29yKSB7XG4gICAgICAgICAgICAgICAgX2dsLmRpc2FibGUoX2dsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgc2NlbmUgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gdGhlIHByZXBhc3MgbGlrZSBzaGFkb3cgbWFwXG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGl0IGFnYWluXG4gICAgICAgIGlmICghbm90VXBkYXRlU2NlbmUpIHtcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FtZXJhID0gY2FtZXJhIHx8IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcbiAgICAgICAgaWYgKCFjYW1lcmEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhblxcJ3QgZmluZCBjYW1lcmEgaW4gdGhlIHNjZW5lLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSBpZiBjYW1lcmEgbm90IG1vdW50ZWQgb24gdGhlIHNjZW5lXG4gICAgICAgIGlmICghY2FtZXJhLmdldFNjZW5lKCkpIHtcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xuXG4gICAgICAgIC8vIFJlc2V0IHRoZSBzY2VuZSBib3VuZGluZyBib3g7XG4gICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xuICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnNldCgtSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5KTtcblxuICAgICAgICB2YXIgb3BhcXVlTGlzdCA9IHRoaXMuY3VsbFJlbmRlckxpc3Qoc2NlbmUub3BhcXVlTGlzdCwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIHZhciB0cmFuc3BhcmVudExpc3QgPSB0aGlzLmN1bGxSZW5kZXJMaXN0KHNjZW5lLnRyYW5zcGFyZW50TGlzdCwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIHZhciBzY2VuZU1hdGVyaWFsID0gc2NlbmUubWF0ZXJpYWw7XG5cbiAgICAgICAgc2NlbmUudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICAgICAgLy8gUmVuZGVyIHByZSB6XG4gICAgICAgIGlmIChwcmVaKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclByZVoob3BhcXVlTGlzdCwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgICAgICBfZ2wuZGVwdGhGdW5jKF9nbC5MRVFVQUwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVTUyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGRlcHRoIG9mIHRyYW5zcGFyZW50IGxpc3QuXG4gICAgICAgIHZhciB3b3JsZFZpZXdNYXQgPSBtYXQ0Q3JlYXRlKCk7XG4gICAgICAgIHZhciBwb3NWaWV3U3BhY2UgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSB0cmFuc3BhcmVudExpc3RbaV07XG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKHdvcmxkVmlld01hdCwgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXksIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHBvc1ZpZXdTcGFjZSwgcmVuZGVyYWJsZS5wb3NpdGlvbi5hcnJheSwgd29ybGRWaWV3TWF0KTtcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19kZXB0aCA9IHBvc1ZpZXdTcGFjZVsyXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbmRlciBvcGFxdWUgbGlzdFxuICAgICAgICB2YXIgb3BhcXVlUmVuZGVySW5mbyA9IHRoaXMucmVuZGVyUGFzcyhvcGFxdWVMaXN0LCBjYW1lcmEsIHtcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29ydENvbXBhcmU6IHRoaXMub3BhcXVlU29ydENvbXBhcmVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHRyYW5zcGFyZW50UmVuZGVySW5mbyA9IHRoaXMucmVuZGVyUGFzcyh0cmFuc3BhcmVudExpc3QsIGNhbWVyYSwge1xuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjZW5lTWF0ZXJpYWwgfHwgcmVuZGVyYWJsZS5tYXRlcmlhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy50cmFuc3BhcmVudFNvcnRDb21wYXJlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciByZW5kZXJJbmZvID0ge307XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb3BhcXVlUmVuZGVySW5mbykge1xuICAgICAgICAgICAgcmVuZGVySW5mb1tuYW1lXSA9IG9wYXF1ZVJlbmRlckluZm9bbmFtZV0gKyB0cmFuc3BhcmVudFJlbmRlckluZm9bbmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICBzY2VuZS50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHNjZW5lLCBjYW1lcmEsIHJlbmRlckluZm8pO1xuXG4gICAgICAgIC8vIENsZWFudXBcbiAgICAgICAgdGhpcy5fc2NlbmVSZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICByZXR1cm4gcmVuZGVySW5mbztcbiAgICB9LFxuXG4gICAgZ2V0UHJvZ3JhbTogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSkge1xuICAgICAgICByZW5kZXJNYXRlcmlhbCA9IHJlbmRlck1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtTWdyLmdldFByb2dyYW0ocmVuZGVyYWJsZSwgcmVuZGVyTWF0ZXJpYWwsIHNjZW5lKTtcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVQcm9ncmFtOiBmdW5jdGlvbiAocHJvZ3JhbSkge1xuICAgICAgICBpZiAocHJvZ3JhbS5fX2Vycm9yKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBwcm9ncmFtLl9fZXJyb3I7XG4gICAgICAgICAgICBpZiAoZXJyb3JTaGFkZXJbcHJvZ3JhbS5fX3VpZF9fXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVycm9yU2hhZGVyW3Byb2dyYW0uX191aWRfX10gPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aHJvd0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCBlcnJvck1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICB1cGRhdGVQcm9ncmFtczogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBwYXNzQ29uZmlnKSB7XG4gICAgICAgIHZhciBnZXRNYXRlcmlhbCA9IChwYXNzQ29uZmlnICYmIHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwpIHx8IGRlZmF1bHRHZXRNYXRlcmlhbDtcbiAgICAgICAgc2NlbmUgPSBzY2VuZSB8fCBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gbGlzdFtpXTtcbiAgICAgICAgICAgIHZhciByZW5kZXJNYXRlcmlhbCA9IGdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJldlJlbmRlcmFibGUgPSBsaXN0W2kgLSAxXTtcbiAgICAgICAgICAgICAgICB2YXIgcHJldkpvaW50c0xlbiA9IHByZXZSZW5kZXJhYmxlLmpvaW50cyA/IHByZXZSZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIHZhciBqb2ludHNMZW4gPSByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggPyByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIC8vIEtlZXAgcHJvZ3JhbSBub3QgY2hhbmdlIGlmIGpvaW50cywgbWF0ZXJpYWwsIGxpZ2h0R3JvdXAgYXJlIHNhbWUgb2YgdHdvIHJlbmRlcmFibGVzLlxuICAgICAgICAgICAgICAgIGlmIChqb2ludHNMZW4gPT09IHByZXZKb2ludHNMZW5cbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5tYXRlcmlhbCA9PT0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWxcbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5saWdodEdyb3VwID09PSBwcmV2UmVuZGVyYWJsZS5saWdodEdyb3VwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcm9ncmFtID0gcHJldlJlbmRlcmFibGUuX19wcm9ncmFtO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XG5cbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pO1xuXG4gICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJvZ3JhbSA9IHByb2dyYW07XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRG8gZnJ1c3R1bSBjdWxsaW5nIG9uIHJlbmRlciBsaXN0XG4gICAgICovXG4gICAgY3VsbFJlbmRlckxpc3Q6IGZ1bmN0aW9uIChsaXN0LCBzY2VuZSwgY2FtZXJhKSB7XG4gICAgICAgIHZhciBjdWxsZWRSZW5kZXJMaXN0ID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgICB2YXIgd29ybGRNID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkgPyBtYXRyaWNlcy5JREVOVElUWSA6IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXk7XG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKG1hdHJpY2VzLldPUkxEVklFVywgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkgLCB3b3JsZE0pO1xuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGcnVzdHVtQ3VsbGVkKFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBzY2VuZSwgY2FtZXJhLCBtYXRyaWNlcy5XT1JMRFZJRVcsIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5XG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1bGxlZFJlbmRlckxpc3QucHVzaChyZW5kZXJhYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdWxsZWRSZW5kZXJMaXN0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXIgYSBzaW5nbGUgcmVuZGVyYWJsZSBsaXN0IGluIGNhbWVyYSBpbiBzZXF1ZW5jZVxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJhYmxlW119IGxpc3QgTGlzdCBvZiBhbGwgcmVuZGVyYWJsZXMuXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwYXNzQ29uZmlnXVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmdldE1hdGVyaWFsXSBHZXQgcmVuZGVyYWJsZSBtYXRlcmlhbC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5iZWZvcmVSZW5kZXJdIEJlZm9yZSByZW5kZXIgZWFjaCByZW5kZXJhYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmFmdGVyUmVuZGVyXSBBZnRlciByZW5kZXIgZWFjaCByZW5kZXJhYmxlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuaWZSZW5kZXJdIElmIHJlbmRlciB0aGUgcmVuZGVyYWJsZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5zb3J0Q29tcGFyZV0gU29ydCBjb21wYXJlIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm4ge0lSZW5kZXJJbmZvfVxuICAgICAqL1xuICAgIHJlbmRlclBhc3M6IGZ1bmN0aW9uKGxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZykge1xuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xuXG4gICAgICAgIHZhciByZW5kZXJJbmZvID0ge1xuICAgICAgICAgICAgdHJpYW5nbGVDb3VudDogMCxcbiAgICAgICAgICAgIHZlcnRleENvdW50OiAwLFxuICAgICAgICAgICAgZHJhd0NhbGxDb3VudDogMCxcbiAgICAgICAgICAgIG1lc2hDb3VudDogbGlzdC5sZW5ndGgsXG4gICAgICAgICAgICByZW5kZXJlZE1lc2hDb3VudDogMFxuICAgICAgICB9O1xuICAgICAgICBwYXNzQ29uZmlnID0gcGFzc0NvbmZpZyB8fCB7fTtcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCA9IHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xuICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciA9IHBhc3NDb25maWcuYmVmb3JlUmVuZGVyIHx8IG5vb3A7XG4gICAgICAgIHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgPSBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyIHx8IG5vb3A7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcm9ncmFtcyhsaXN0LCB0aGlzLl9zY2VuZVJlbmRlcmluZywgcGFzc0NvbmZpZyk7XG4gICAgICAgIGlmIChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKSB7XG4gICAgICAgICAgICBsaXN0LnNvcnQocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb21lIGNvbW1vbiBidWlsdGluIHVuaWZvcm1zXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gICAgICAgIHZhciB2RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgdmFyIHZpZXdwb3J0VW5pZm9ybSA9IFtcbiAgICAgICAgICAgIHZpZXdwb3J0LnggKiB2RHByLCB2aWV3cG9ydC55ICogdkRwcixcbiAgICAgICAgICAgIHZpZXdwb3J0LndpZHRoICogdkRwciwgdmlld3BvcnQuaGVpZ2h0ICogdkRwclxuICAgICAgICBdO1xuICAgICAgICB2YXIgd2luZG93RHByID0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyXG4gICAgICAgICAgICA/IFt0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVXaWR0aCgpLCB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVIZWlnaHQoKV1cbiAgICAgICAgICAgIDogW3RoaXMuX3dpZHRoICogd2luZG93RHByLCB0aGlzLl9oZWlnaHQgKiB3aW5kb3dEcHJdO1xuICAgICAgICAvLyBERVBSRUNBVEVEXG4gICAgICAgIHZhciB2aWV3cG9ydFNpemVVbmlmb3JtID0gW1xuICAgICAgICAgICAgdmlld3BvcnRVbmlmb3JtWzJdLCB2aWV3cG9ydFVuaWZvcm1bM11cbiAgICAgICAgXTtcbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuVklFVywgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkpO1xuICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuUFJPSkVDVElPTiwgY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXkpO1xuICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSwgbWF0cmljZXMuVklFVyk7XG4gICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXSU5WRVJTRSwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlBST0pFQ1RJT04pO1xuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5WSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OKTtcblxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmVSZW5kZXJpbmc7XG5cbiAgICAgICAgdmFyIHByZXZNYXRlcmlhbDtcbiAgICAgICAgdmFyIHByZXZQcm9ncmFtO1xuXG4gICAgICAgIC8vIFN0YXR1c1xuICAgICAgICB2YXIgZGVwdGhUZXN0LCBkZXB0aE1hc2s7XG4gICAgICAgIHZhciBjdWxsaW5nLCBjdWxsRmFjZSwgZnJvbnRGYWNlO1xuICAgICAgICB2YXIgdHJhbnNwYXJlbnQ7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XG4gICAgICAgICAgICBpZiAocGFzc0NvbmZpZy5pZlJlbmRlciAmJiAhcGFzc0NvbmZpZy5pZlJlbmRlcihyZW5kZXJhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCB0cmFuc2Zvcm1lZCB0byBqb2ludCBzcGFjZS4gSWdub3JlIHRoZSBtZXNoIHRyYW5zZm9ybVxuICAgICAgICAgICAgdmFyIHdvcmxkTSA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpID8gbWF0cmljZXMuSURFTlRJVFkgOiByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtLmFycmF5O1xuXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBwYXNzQ29uZmlnLmdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XG5cbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gcmVuZGVyYWJsZS5fX3Byb2dyYW07XG4gICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xuXG4gICAgICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuV09STEQsIHdvcmxkTSk7XG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OICwgd29ybGRNKTtcbiAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxESU5WRVJTRSB8fFxuICAgICAgICAgICAgICAgIHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERJTlZFUlNFVFJBTlNQT1NFKSB7XG4gICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERJTlZFUlNFLCB3b3JsZE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXSU5WRVJTRSB8fFxuICAgICAgICAgICAgICAgIHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRSkge1xuICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxEVklFV0lOVkVSU0UsIG1hdHJpY2VzLldPUkxEVklFVyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRSB8fFxuICAgICAgICAgICAgICAgIHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UpIHtcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRSwgbWF0cmljZXMuV09STERWSUVXUFJPSkVDVElPTik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEJlZm9yZSByZW5kZXIgaG9va1xuICAgICAgICAgICAgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIodGhpcyk7XG4gICAgICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWwpO1xuXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbUNoYW5nZWQgPSBwcm9ncmFtICE9PSBwcmV2UHJvZ3JhbTtcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIFNldCBsaWdodHMgbnVtYmVyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlQnLCB2aWV3cG9ydFVuaWZvcm0pO1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnV0lORE9XX1NJWkUnLCB3aW5kb3dTaXplVW5pZm9ybSk7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdORUFSJywgY2FtZXJhLm5lYXIpO1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnRkFSJywgY2FtZXJhLmZhcik7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdERVZJQ0VQSVhFTFJBVElPJywgdkRwcik7XG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdUSU1FJywgdGltZSk7XG4gICAgICAgICAgICAgICAgLy8gREVQUkVDQVRFRFxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlRfU0laRScsIHZpZXdwb3J0U2l6ZVVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgb3B0aW1pemVkXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnNldExpZ2h0VW5pZm9ybXMocHJvZ3JhbSwgcmVuZGVyYWJsZS5saWdodEdyb3VwLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9ncmFtID0gcHJldlByb2dyYW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFByb2dyYW0gY2hhbmdlcyBhbHNvIG5lZWRzIHJlc2V0IHRoZSBtYXRlcmlhbHMuXG4gICAgICAgICAgICBpZiAocHJldk1hdGVyaWFsICE9PSBtYXRlcmlhbCB8fCBwcm9ncmFtQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kZXB0aFRlc3QgIT09IGRlcHRoVGVzdCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2dsLmVuYWJsZShfZ2wuREVQVEhfVEVTVClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2dsLmRpc2FibGUoX2dsLkRFUFRIX1RFU1QpO1xuICAgICAgICAgICAgICAgICAgICBkZXB0aFRlc3QgPSBtYXRlcmlhbC5kZXB0aFRlc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5kZXB0aE1hc2sgIT09IGRlcHRoTWFzaykge1xuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKG1hdGVyaWFsLmRlcHRoTWFzayk7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzayA9IG1hdGVyaWFsLmRlcHRoTWFzaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ICE9PSB0cmFuc3BhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfZ2wuZW5hYmxlKF9nbC5CTEVORClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjYWNoZSBibGVuZGluZ1xuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuYmxlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmJsZW5kKF9nbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGJsZW5kIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKF9nbC5GVU5DX0FERCwgX2dsLkZVTkNfQUREKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5ibGVuZEZ1bmNTZXBhcmF0ZShfZ2wuU1JDX0FMUEhBLCBfZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgX2dsLk9ORSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuYmluZCh0aGlzLCBwcm9ncmFtLCBwcmV2TWF0ZXJpYWwsIHByZXZQcm9ncmFtKTtcbiAgICAgICAgICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1hdHJpeFNlbWFudGljS2V5cyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY0tleXM7XG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG1hdHJpeFNlbWFudGljS2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IG1hdHJpeFNlbWFudGljS2V5c1trXTtcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gc2hhZGVyLm1hdHJpeFNlbWFudGljc1tzZW1hbnRpY107XG4gICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IG1hdHJpY2VzW3NlbWFudGljXTtcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWNJbmZvLmlzVHJhbnNwb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXhOb1RyYW5zcG9zZSA9IG1hdHJpY2VzW3NlbWFudGljSW5mby5zZW1hbnRpY05vVHJhbnNwb3NlXTtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UobWF0cml4LCBtYXRyaXhOb1RyYW5zcG9zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCBtYXRyaXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5jdWxsRmFjZSAhPT0gY3VsbEZhY2UpIHtcbiAgICAgICAgICAgICAgICBjdWxsRmFjZSA9IHJlbmRlcmFibGUuY3VsbEZhY2U7XG4gICAgICAgICAgICAgICAgX2dsLmN1bGxGYWNlKGN1bGxGYWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgZnJvbnRGYWNlID0gcmVuZGVyYWJsZS5mcm9udEZhY2U7XG4gICAgICAgICAgICAgICAgX2dsLmZyb250RmFjZShmcm9udEZhY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbGluZyAhPT0gY3VsbGluZykge1xuICAgICAgICAgICAgICAgIGN1bGxpbmcgPSByZW5kZXJhYmxlLmN1bGxpbmc7XG4gICAgICAgICAgICAgICAgY3VsbGluZyA/IF9nbC5lbmFibGUoX2dsLkNVTExfRkFDRSkgOiBfZ2wuZGlzYWJsZShfZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG9iamVjdFJlbmRlckluZm8gPSByZW5kZXJhYmxlLnJlbmRlcih0aGlzLCBtYXRlcmlhbCwgcHJvZ3JhbSk7XG5cbiAgICAgICAgICAgIGlmIChvYmplY3RSZW5kZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby50cmlhbmdsZUNvdW50ICs9IG9iamVjdFJlbmRlckluZm8udHJpYW5nbGVDb3VudDtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnZlcnRleENvdW50ICs9IG9iamVjdFJlbmRlckluZm8udmVydGV4Q291bnQ7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kcmF3Q2FsbENvdW50ICs9IG9iamVjdFJlbmRlckluZm8uZHJhd0NhbGxDb3VudDtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnJlbmRlcmVkTWVzaENvdW50ICsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZnRlciByZW5kZXIgaG9va1xuICAgICAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG9iamVjdFJlbmRlckluZm8pO1xuICAgICAgICAgICAgcmVuZGVyYWJsZS5hZnRlclJlbmRlcih0aGlzLCBvYmplY3RSZW5kZXJJbmZvKTtcblxuICAgICAgICAgICAgcHJldlByb2dyYW0gPSBwcm9ncmFtO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHByb2dyYW1zIGluY2FzZSBpdCdzIG5vdCB1cGRhdGVkIGluIHRoZSBvdGhlciBwYXNzZXMuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGlzdFtpXS5fX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xuXG4gICAgICAgIHJldHVybiByZW5kZXJJbmZvO1xuICAgIH0sXG5cbiAgICByZW5kZXJQcmVaOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIGNhbWVyYSkge1xuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcbiAgICAgICAgdmFyIHByZVpQYXNzTWF0ZXJpYWwgPSB0aGlzLl9wcmV6TWF0ZXJpYWwgfHwgbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcHJlek1hdGVyaWFsID0gcHJlWlBhc3NNYXRlcmlhbDtcblxuICAgICAgICBfZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcblxuICAgICAgICAvLyBTdGF0dXNcbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzKGxpc3QsIGNhbWVyYSwge1xuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLmlnbm9yZVByZVo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlWlBhc3NNYXRlcmlhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0OiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIGFuIHNjZW5lIG9iamVjdCBpcyBjdWxsZWQgYnkgY2FtZXJhIGZydXN0dW1cbiAgICAgKlxuICAgICAqIE9iamVjdCBjYW4gYmUgYSByZW5kZXJhYmxlIG9yIGEgbGlnaHRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBTY2VuZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB3b3JsZFZpZXdNYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHByb2plY3Rpb25NYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxuICAgICAqL1xuICAgIGlzRnJ1c3R1bUN1bGxlZDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuY3NlLmNoYWxtZXJzLnNlL351ZmZlL3ZmY19iYm94LnBkZlxuICAgICAgICB2YXIgY3VsbGluZ0JvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciBjdWxsaW5nTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmplY3QsIHNjZW5lLCBjYW1lcmEsIHdvcmxkVmlld01hdCwgcHJvamVjdGlvbk1hdCkge1xuICAgICAgICAgICAgLy8gQm91bmRpbmcgYm94IGNhbiBiZSBhIHByb3BlcnR5IG9mIG9iamVjdChsaWtlIGxpZ2h0KSBvciByZW5kZXJhYmxlLmdlb21ldHJ5XG4gICAgICAgICAgICB2YXIgZ2VvQkJveCA9IG9iamVjdC5ib3VuZGluZ0JveCB8fCBvYmplY3QuZ2VvbWV0cnkuYm91bmRpbmdCb3g7XG4gICAgICAgICAgICBjdWxsaW5nTWF0cml4LmFycmF5ID0gd29ybGRWaWV3TWF0O1xuICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LmNvcHkoZ2VvQkJveCk7XG4gICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3guYXBwbHlUcmFuc2Zvcm0oY3VsbGluZ01hdHJpeCk7XG5cbiAgICAgICAgICAgIC8vIFBhc3NpbmdseSB1cGRhdGUgdGhlIHNjZW5lIGJvdW5kaW5nIGJveFxuICAgICAgICAgICAgLy8gRklYTUUgZXhjbHVkZSB2ZXJ5IGxhcmdlIG1lc2ggbGlrZSBncm91bmQgcGxhbmUgb3IgdGVycmFpbiA/XG4gICAgICAgICAgICAvLyBGSVhNRSBPbmx5IHJlbmRlcmVyYWJsZSB3aGljaCBjYXN0IHNoYWRvdyA/XG5cbiAgICAgICAgICAgIC8vIEZJWE1FIGJvdW5kaW5nQm94IGJlY29tZXMgbXVjaCBsYXJnZXIgYWZ0ZXIgdHJhbnNmb3JtZC5cbiAgICAgICAgICAgIGlmIChzY2VuZSAmJiBvYmplY3QuaXNSZW5kZXJhYmxlKCkgJiYgb2JqZWN0LmNhc3RTaGFkb3cpIHtcbiAgICAgICAgICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUudW5pb24oY3VsbGluZ0JvdW5kaW5nQm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElnbm9yZSBmcnVzdHVtIGN1bGxpbmcgaWYgb2JqZWN0IGlzIHNraW5uZWQgbWVzaC5cbiAgICAgICAgICAgIGlmIChvYmplY3QuZnJ1c3R1bUN1bGxpbmcgJiYgIW9iamVjdC5pc1NraW5uZWRNZXNoKCkpICB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdWxsaW5nQm91bmRpbmdCb3guaW50ZXJzZWN0Qm91bmRpbmdCb3goY2FtZXJhLmZydXN0dW0uYm91bmRpbmdCb3gpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSBwcm9qZWN0aW9uTWF0O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheVsyXSA8IDBcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xpcCBpbiB0aGUgbmVhciBwbGFuZVxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5WzJdID0gLTFlLTIwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5hcHBseVByb2plY3Rpb24oY3VsbGluZ01hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWluID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheTtcbiAgICAgICAgICAgICAgICB2YXIgbWF4ID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWF4WzBdIDwgLTEgfHwgbWluWzBdID4gMVxuICAgICAgICAgICAgICAgICAgICB8fCBtYXhbMV0gPCAtMSB8fCBtaW5bMV0gPiAxXG4gICAgICAgICAgICAgICAgICAgIHx8IG1heFsyXSA8IC0xIHx8IG1pblsyXSA+IDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gc2NlbmUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmlzLCB0ZXh0dXJlcyBhbmQgc2hhZGVycyBpbiB0aGUgc2NlbmVcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXG4gICAgICovXG4gICAgZGlzcG9zZVNjZW5lOiBmdW5jdGlvbihzY2VuZSkge1xuICAgICAgICB0aGlzLmRpc3Bvc2VOb2RlKHNjZW5lLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgc2NlbmUuZGlzcG9zZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmllcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgYXR0YWNoZWQgb24gaXQgb3IgaXRzIGRlc2NlbmRhbnRcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rpc3Bvc2VHZW9tZXRyeT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgZ2VvbWV0cmllcyB1c2VkIGluIHRoZSBkZXNjZW5kYW50IG1lc2hcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlVGV4dHVyZT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgdGV4dHVyZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXG4gICAgICovXG4gICAgZGlzcG9zZU5vZGU6IGZ1bmN0aW9uKHJvb3QsIGRpc3Bvc2VHZW9tZXRyeSwgZGlzcG9zZVRleHR1cmUpIHtcbiAgICAgICAgLy8gRGV0dGFjaGVkIGZyb20gcGFyZW50XG4gICAgICAgIGlmIChyb290LmdldFBhcmVudCgpKSB7XG4gICAgICAgICAgICByb290LmdldFBhcmVudCgpLnJlbW92ZShyb290KTtcbiAgICAgICAgfVxuICAgICAgICByb290LnRyYXZlcnNlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmdlb21ldHJ5ICYmIGRpc3Bvc2VHZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIG5vZGUuZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBhcnRpY2xlIHN5c3RlbSBhbmQgQW1iaWVudEN1YmVtYXAgbGlnaHQgbmVlZCB0byBkaXNwb3NlXG4gICAgICAgICAgICBpZiAobm9kZS5kaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5kaXNwb3NlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBnaXZlbiBnZW9tZXRyeVxuICAgICAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcbiAgICAgKi9cbiAgICBkaXNwb3NlR2VvbWV0cnk6IGZ1bmN0aW9uKGdlb21ldHJ5KSB7XG4gICAgICAgIGdlb21ldHJ5LmRpc3Bvc2UodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gdGV4dHVyZVxuICAgICAqIEBwYXJhbSB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXG4gICAgICovXG4gICAgZGlzcG9zZVRleHR1cmU6IGZ1bmN0aW9uKHRleHR1cmUpIHtcbiAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHRoaXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlIGdpdmVuIGZyYW1lIGJ1ZmZlclxuICAgICAqIEBwYXJhbSB7Y2xheS5GcmFtZUJ1ZmZlcn0gZnJhbWVCdWZmZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlRnJhbWVCdWZmZXI6IGZ1bmN0aW9uKGZyYW1lQnVmZmVyKSB7XG4gICAgICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpc3Bvc2UgcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7fSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgc2NyZWVuIGNvb3JkcyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyhOREMpXG4gICAgICogU2NyZWVuIGNvb3JkcyBjYW4gZ2V0IGZyb20gbW91c2UgZXZlbnQsIGl0IGlzIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gY2FudmFzIGVsZW1lbnRcbiAgICAgKiBOREMgY2FuIGJlIHVzZWQgaW4gcmF5IGNhc3Rpbmcgd2l0aCBDYW1lcmEucHJvdG90eXBlLmNhc3RSYXkgbWV0aG9kc1xuICAgICAqXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB4XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjJ9XG4gICAgICovXG4gICAgc2NyZWVuVG9OREM6IGZ1bmN0aW9uKHgsIHksIG91dCkge1xuICAgICAgICBpZiAoIW91dCkge1xuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbnZlcnQgeTtcbiAgICAgICAgeSA9IHRoaXMuX2hlaWdodCAtIHk7XG5cbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydDtcbiAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcbiAgICAgICAgYXJyWzBdID0gKHggLSB2aWV3cG9ydC54KSAvIHZpZXdwb3J0LndpZHRoO1xuICAgICAgICBhcnJbMF0gPSBhcnJbMF0gKiAyIC0gMTtcbiAgICAgICAgYXJyWzFdID0gKHkgLSB2aWV3cG9ydC55KSAvIHZpZXdwb3J0LmhlaWdodDtcbiAgICAgICAgYXJyWzFdID0gYXJyWzFdICogMiAtIDE7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBPcGFxdWUgcmVuZGVyYWJsZXMgY29tcGFyZSBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSB4XG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAc3RhdGljXG4gKi9cblJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlID0gUmVuZGVyZXIucHJvdG90eXBlLm9wYXF1ZVNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xuICAgICAgICBpZiAoeC5fX3Byb2dyYW0gPT09IHkuX19wcm9ncmFtKSB7XG4gICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4Ll9fcHJvZ3JhbSAgJiYgeS5fX3Byb2dyYW0pIHtcbiAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHgucmVuZGVyT3JkZXIgLSB5LnJlbmRlck9yZGVyO1xufTtcblxuLyoqXG4gKiBUcmFuc3BhcmVudCByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGFcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0gYlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBzdGF0aWNcbiAqL1xuUmVuZGVyZXIudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS50cmFuc3BhcmVudFNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IGRlcHRoIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcblxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XG4gICAgICAgIGlmICh4Ll9fZGVwdGggPT09IHkuX19kZXB0aCkge1xuICAgICAgICAgICAgaWYgKHguX19wcm9ncmFtID09PSB5Ll9fcHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgIGlmICh4Lm1hdGVyaWFsID09PSB5Lm1hdGVyaWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB4Lm1hdGVyaWFsLl9fdWlkX18gLSB5Lm1hdGVyaWFsLl9fdWlkX187XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeC5fX3Byb2dyYW0gICYmIHkuX19wcm9ncmFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVwdGggaXMgbmVnYXRpdmVcbiAgICAgICAgLy8gU28gZmFydGhlciBvYmplY3QgaGFzIHNtYWxsZXIgZGVwdGggdmFsdWVcbiAgICAgICAgcmV0dXJuIHguX19kZXB0aCAtIHkuX19kZXB0aDtcbiAgICB9XG4gICAgcmV0dXJuIHgucmVuZGVyT3JkZXIgLSB5LnJlbmRlck9yZGVyO1xufTtcblxuLy8gVGVtcG9yYXJ5IHZhcmlhYmxlc1xudmFyIG1hdHJpY2VzID0ge1xuICAgIElERU5USVRZOiBtYXQ0Q3JlYXRlKCksXG5cbiAgICBXT1JMRDogbWF0NENyZWF0ZSgpLFxuICAgIFZJRVc6IG1hdDRDcmVhdGUoKSxcbiAgICBQUk9KRUNUSU9OOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERWSUVXOiBtYXQ0Q3JlYXRlKCksXG4gICAgVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OOiBtYXQ0Q3JlYXRlKCksXG5cbiAgICBXT1JMRElOVkVSU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxuICAgIFBST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxuICAgIFZJRVdQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXG5cbiAgICBXT1JMRFRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxuICAgIFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERWSUVXVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgV09STERJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXG4gICAgVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxuICAgIFdPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpXG59O1xuXG4vKipcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuQ09MT1JfQlVGRkVSX0JJVFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuUmVuZGVyZXIuQ09MT1JfQlVGRkVSX0JJVCA9IGdsZW51bS5DT0xPUl9CVUZGRVJfQklUO1xuLyoqXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVDtcbi8qKlxuICogQG5hbWUgY2xheS5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmVyLlNURU5DSUxfQlVGRkVSX0JJVCA9IGdsZW51bS5TVEVOQ0lMX0JVRkZFUl9CSVQ7XG5cbmV4cG9ydCBkZWZhdWx0IFJlbmRlcmVyO1xuIiwiaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgcXVhdCA9IGdsTWF0cml4LnF1YXQ7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLlF1YXRlcm5pb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHBhcmFtIHtudW1iZXJ9IHpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XG4gKi9cbnZhciBRdWF0ZXJuaW9uID0gZnVuY3Rpb24gKHgsIHksIHosIHcpIHtcblxuICAgIHggPSB4IHx8IDA7XG4gICAgeSA9IHkgfHwgMDtcbiAgICB6ID0geiB8fCAwO1xuICAgIHcgPSB3ID09PSB1bmRlZmluZWQgPyAxIDogdztcblxuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgUXVhdGVybmlvbiwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHosIHcgY29tcG9uZW50c1xuICAgICAqIEBuYW1lIGFycmF5XG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlF1YXRlcm5pb24jXG4gICAgICovXG4gICAgdGhpcy5hcnJheSA9IHF1YXQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcblxuICAgIC8qKlxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XG4gICAgICogQG5hbWUgX2RpcnR5XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5RdWF0ZXJuaW9uI1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cblF1YXRlcm5pb24ucHJvdG90eXBlID0ge1xuXG4gICAgY29uc3RydWN0b3I6IFF1YXRlcm5pb24sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgYiB0byBzZWxmXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBhZGQ6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHF1YXQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHcgY29tcG9uZW50IGZyb20geCwgeSwgeiBjb21wb25lbnRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBjYWxjdWxhdGVXOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1YXQuY2FsY3VsYXRlVyh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHdcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSB3O1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCwgeSwgeiBhbmQgdyBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XG5cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgUXVhdGVybmlvblxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2Ygc2VsZiBJZiB0aGUgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLFxuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gaW52ZXJ0IGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBjb25qdWdhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcXVhdC5jb25qdWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xuICAgICAgICBxdWF0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHJldHVybiBxdWF0LmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gbVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIGZyb21NYXQzOiBmdW5jdGlvbiAobSkge1xuICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0uYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgZnJvbSB0aGUgZ2l2ZW4gNHg0IHJvdGF0aW9uIG1hdHJpeFxuICAgICAqIFRoZSA0dGggY29sdW1uIGFuZCA0dGggcm93IHdpbGwgYmUgZHJvcGVkXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1cbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBmcm9tTWF0NDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG1hdDMgPSBnbE1hdHJpeC5tYXQzO1xuICAgICAgICB2YXIgbTMgPSBtYXQzLmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICAgIG1hdDMuZnJvbU1hdDQobTMsIG0uYXJyYXkpO1xuICAgICAgICAgICAgLy8gVE9ETyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxuICAgICAgICAgICAgbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcbiAgICAgICAgICAgIHF1YXQuZnJvbU1hdDModGhpcy5hcnJheSwgbTMpO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0byBpZGVudGl0eSBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcXVhdC5pZGVudGl0eSh0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEludmVydCBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1YXQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcXVhdC5sZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcXVhdC5sZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcbiAgICAgICAgcXVhdC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgcXVhdC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIG11bExlZnQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11dGlwbHkgYSBhbmQgc2VsZlxuICAgICAqIFF1YXRlcm5pb24gbXV0aXBseSBpcyBub3QgY29tbXV0YXRpdmUsIHNvIHRoZSByZXN1bHQgb2YgbXV0aXBseUxlZnQgaXMgZGlmZmVyZW50IHdpdGggbXVsdGlwbHkuXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1YXQubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBYIGF4aXNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gICAgICovXG4gICAgcm90YXRlWDogZnVuY3Rpb24gKHJhZCkge1xuICAgICAgICBxdWF0LnJvdGF0ZVgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWSBheGlzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHJvdGF0ZVk6IGZ1bmN0aW9uIChyYWQpIHtcbiAgICAgICAgcXVhdC5yb3RhdGVZKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFogYXhpc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICByb3RhdGVaOiBmdW5jdGlvbiAocmFkKSB7XG4gICAgICAgIHF1YXQucm90YXRlWih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHNlbGYgdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIFZlY3RvcjMgYSB0byBWZWN0b3IzIGIuXG4gICAgICogYSBhbmQgYiBuZWVkcyB0byBiZSBub3JtYWxpemVkXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHJvdGF0aW9uVG86IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHF1YXQucm90YXRpb25Ubyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNldHMgc2VsZiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBheGVzXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdmlld1xuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IHJpZ2h0XG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdXBcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzZXRBeGVzOiBmdW5jdGlvbiAodmlldywgcmlnaHQsIHVwKSB7XG4gICAgICAgIHF1YXQuc2V0QXhlcyh0aGlzLmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCBhIHJvdGF0aW9uIGF4aXMgYW5kIHJvdGF0aW9uIGFuZ2xlXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gYXhpc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzZXRBeGlzQW5nbGU6IGZ1bmN0aW9uIChheGlzLCByYWQpIHtcbiAgICAgICAgcXVhdC5zZXRBeGlzQW5nbGUodGhpcy5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAgICAgKi9cbiAgICBzbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcbiAgICAgICAgcXVhdC5zbGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBxdWF0LnNxckxlbih0aGlzLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3F1YXJlZCBsZW5ndGggb2Ygc2VsZlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXVhcmVkTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBxdWF0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBmcm9tIGV1bGVyXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxuICAgICAqL1xuICAgIGZyb21FdWxlcjogZnVuY3Rpb24gKHYsIG9yZGVyKSB7XG4gICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLmZyb21FdWxlcih0aGlzLCB2LCBvcmRlcik7XG4gICAgfSxcblxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIEdldHRlciBhbmQgU2V0dGVyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcblxuICAgIHZhciBwcm90byA9IFF1YXRlcm5pb24ucHJvdG90eXBlO1xuICAgIC8qKlxuICAgICAqIEBuYW1lIHhcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguUXVhdGVybmlvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgeVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5RdWF0ZXJuaW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSB6XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlF1YXRlcm5pb25cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHdcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguUXVhdGVybmlvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLmFkZCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICBxdWF0LmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHhcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHlcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHpcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHdcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLnNldCA9IGZ1bmN0aW9uIChvdXQsIHgsIHksIHosIHcpIHtcbiAgICBxdWF0LnNldChvdXQuYXJyYXksIHgsIHksIHosIHcpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uY29weSA9IGZ1bmN0aW9uIChvdXQsIGIpIHtcbiAgICBxdWF0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBxdWF0LmNhbGN1bGF0ZVcob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xuICAgIHF1YXQuY29uanVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgcXVhdC5pZGVudGl0eShvdXQuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgcXVhdC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuUXVhdGVybmlvbi5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBxdWF0LmRvdChhLmFycmF5LCBiLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuUXVhdGVybmlvbi5sZW4gPSBmdW5jdGlvbiAoYSkge1xuICAgIHJldHVybiBxdWF0Lmxlbmd0aChhLmFycmF5KTtcbn07XG5cbi8vIFF1YXRlcm5pb24ubGVuZ3RoID0gUXVhdGVybmlvbi5sZW47XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBiXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB0XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5sZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xuICAgIHF1YXQubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24uc2xlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XG4gICAgcXVhdC5zbGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24ubXVsID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xuICAgIHF1YXQubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24ubXVsdGlwbHkgPSBRdWF0ZXJuaW9uLm11bDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcXVhdC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcXVhdC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gYVxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XG4gICAgcXVhdC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgYXhpc1xuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguUXVhdGVybmlvbn1cbiAqL1xuUXVhdGVybmlvbi5zZXRBeGlzQW5nbGUgPSBmdW5jdGlvbiAob3V0LCBheGlzLCByYWQpIHtcbiAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQuYXJyYXksIGF4aXMuYXJyYXksIHJhZCk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBxdWF0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblF1YXRlcm5pb24uc3FyTGVuID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gcXVhdC5zcXJMZW4oYS5hcnJheSk7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuUXVhdGVybmlvbi5zcXVhcmVkTGVuZ3RoID0gUXVhdGVybmlvbi5zcXJMZW47XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9ICAgIG1cbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLmZyb21NYXQzID0gZnVuY3Rpb24gKG91dCwgbSkge1xuICAgIHF1YXQuZnJvbU1hdDMob3V0LmFycmF5LCBtLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgdmlld1xuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9ICAgIHJpZ2h0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgdXBcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICovXG5RdWF0ZXJuaW9uLnNldEF4ZXMgPSBmdW5jdGlvbiAob3V0LCB2aWV3LCByaWdodCwgdXApIHtcbiAgICBxdWF0LnNldEF4ZXMob3V0LmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSAgICBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gICAgYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlF1YXRlcm5pb259XG4gKi9cblF1YXRlcm5pb24ucm90YXRpb25UbyA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICBxdWF0LnJvdGF0aW9uVG8ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBTZXQgcXVhdGVybmlvbiBmcm9tIGV1bGVyXG4gKiBAcGFyYW0ge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBvdXRcbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IHZcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxuICovXG5RdWF0ZXJuaW9uLmZyb21FdWxlciA9IGZ1bmN0aW9uIChvdXQsIHYsIG9yZGVyKSB7XG5cbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIHYgPSB2LmFycmF5O1xuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XG4gICAgdmFyIGMxID0gTWF0aC5jb3ModlswXSAvIDIpO1xuICAgIHZhciBjMiA9IE1hdGguY29zKHZbMV0gLyAyKTtcbiAgICB2YXIgYzMgPSBNYXRoLmNvcyh2WzJdIC8gMik7XG4gICAgdmFyIHMxID0gTWF0aC5zaW4odlswXSAvIDIpO1xuICAgIHZhciBzMiA9IE1hdGguc2luKHZbMV0gLyAyKTtcbiAgICB2YXIgczMgPSBNYXRoLnNpbih2WzJdIC8gMik7XG5cbiAgICB2YXIgb3JkZXIgPSAob3JkZXIgfHwgJ1hZWicpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXG4gICAgLy8gIDIwNjk2LWZ1bmN0aW9uLXRvLWNvbnZlcnQtYmV0d2Vlbi1kY20tZXVsZXItYW5nbGVzLXF1YXRlcm5pb25zLWFuZC1ldWxlci12ZWN0b3JzL1xuICAgIC8vICBjb250ZW50L1NwaW5DYWxjLm1cblxuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICAgICAgY2FzZSAnWFlaJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdZWFonOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1pYWSc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnWllYJzpcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdZWlgnOlxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1haWSc6XG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBRdWF0ZXJuaW9uO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IFF1YXRlcm5pb24gZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xudmFyIG1hdDQgPSBnbE1hdHJpeC5tYXQ0O1xuXG52YXIgbmFtZUlkID0gMDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5Ob2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgTm9kZSA9IEJhc2UuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5Lk5vZGUjICovXG57XG4gICAgLyoqXG4gICAgICogU2NlbmUgbm9kZSBuYW1lXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBuYW1lOiAnJyxcblxuICAgIC8qKlxuICAgICAqIFBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gYWthIHRyYW5zbGF0aW9uLlxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBwb3NpdGlvbjogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gUmVwcmVzZW50ZWQgYnkgYSBxdWF0ZXJuaW9uXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5RdWF0ZXJuaW9ufVxuICAgICAqL1xuICAgIHJvdGF0aW9uOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHNjYWxlOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHJvb3Qgc2NlbmUuXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIHdvcmxkVHJhbnNmb3JtOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlLlxuICAgICAqIENvbXBvc2l0ZWQgd2l0aCBwb3NpdGlvbiwgcm90YXRpb24gYW5kIHNjYWxlLlxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgKi9cbiAgICBsb2NhbFRyYW5zZm9ybTogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIElmIHRoZSBsb2NhbCB0cmFuc2Zvcm0gaXMgdXBkYXRlIGZyb20gU1JUKHNjYWxlLCByb3RhdGlvbiwgdHJhbnNsYXRpb24sIHdoaWNoIGlzIHBvc2l0aW9uIGhlcmUpIGVhY2ggZnJhbWVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBhdXRvVXBkYXRlTG9jYWxUcmFuc2Zvcm06IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBQYXJlbnQgb2YgY3VycmVudCBzY2VuZSBub2RlXG4gICAgICogQHR5cGUgez9jbGF5Lk5vZGV9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcGFyZW50OiBudWxsLFxuICAgIC8qKlxuICAgICAqIFRoZSByb290IHNjZW5lIG1vdW50ZWQuIE51bGwgaWYgaXQgaXMgYSBpc29sYXRlZCBub2RlXG4gICAgICogQHR5cGUgez9jbGF5LlNjZW5lfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3NjZW5lOiBudWxsLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm06IHRydWUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaW5JdGVyYXRpbmc6IGZhbHNlLFxuXG4gICAgLy8gRGVwdGggZm9yIHRyYW5zcGFyZW50IGxpc3Qgc29ydGluZ1xuICAgIF9fZGVwdGg6IDBcblxufSwgZnVuY3Rpb24gKCkge1xuXG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gKHRoaXMudHlwZSB8fCAnTk9ERScpICsgJ18nICsgKG5hbWVJZCsrKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5yb3RhdGlvbikge1xuICAgICAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjYWxlKSB7XG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcbiAgICB0aGlzLmxvY2FsVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcblxuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XG5cbn0sXG4vKipAbGVuZHMgY2xheS5Ob2RlLnByb3RvdHlwZS4gKi9cbntcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHs/Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIC8qKlxuICAgICAqIElmIG5vZGUgYW5kIGl0cyBjaGlscmVuIGludmlzaWJsZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGludmlzaWJsZTogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBJZiBOb2RlIGlzIGEgc2tpbm5lZCBtZXNoXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIGl0IGlzIGEgcmVuZGVyYWJsZSBzY2VuZSBub2RlLCBsaWtlIE1lc2ggYW5kIFBhcnRpY2xlU3lzdGVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIG5vZGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqL1xuICAgIHNldE5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lO1xuICAgICAgICBpZiAoc2NlbmUpIHtcbiAgICAgICAgICAgIHZhciBub2RlUmVwb3NpdG9yeSA9IHNjZW5lLl9ub2RlUmVwb3NpdG9yeTtcbiAgICAgICAgICAgIGRlbGV0ZSBub2RlUmVwb3NpdG9yeVt0aGlzLm5hbWVdO1xuICAgICAgICAgICAgbm9kZVJlcG9zaXRvcnlbbmFtZV0gPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGNoaWxkIG5vZGVcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqL1xuICAgIGFkZDogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luSXRlcmF0aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0FkZCBvcGVyYXRpb24gY2FuIGNhdXNlIHVucHJlZGljdGFibGUgZXJyb3Igd2hlbiBpbiBpdGVyYXRpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3JpZ2luYWxQYXJlbnQgPSBub2RlLl9wYXJlbnQ7XG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCA9PT0gdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCkge1xuICAgICAgICAgICAgb3JpZ2luYWxQYXJlbnQucmVtb3ZlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuX3BhcmVudCA9IHRoaXM7XG4gICAgICAgIHRoaXMuX2NoaWxkcmVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XG4gICAgICAgIGlmIChzY2VuZSAmJiBzY2VuZSAhPT0gbm9kZS5zY2VuZSkge1xuICAgICAgICAgICAgbm9kZS50cmF2ZXJzZSh0aGlzLl9hZGRTZWxmVG9TY2VuZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBjaGlsZHJlbiBuZWVkcyB1cGRhdGUgdHJhbnNmb3JtXG4gICAgICAgIC8vIEluIGNhc2UgY2hpbGQgYXJlIHJlbW92ZSBhbmQgYWRkZWQgYWdhaW4gYWZ0ZXIgcGFyZW50IG1vdmVkXG4gICAgICAgIG5vZGUuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgdGhlIGdpdmVuIGNoaWxkIHNjZW5lIG5vZGVcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2luSXRlcmF0aW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbW92ZSBvcGVyYXRpb24gY2FuIGNhdXNlIHVucHJlZGljdGFibGUgZXJyb3Igd2hlbiBpbiBpdGVyYXRpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgdmFyIGlkeCA9IGNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBjaGlsZHJlblxuICAgICAqL1xuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcblxuICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjaGlsZHJlbltpZHhdLl9wYXJlbnQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpZHhdLnRyYXZlcnNlKHRoaXMuX3JlbW92ZVNlbGZGcm9tU2NlbmUsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBzY2VuZSBtb3VudGVkXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZX1cbiAgICAgKi9cbiAgICBnZXRTY2VuZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NlbmU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJlbnQgbm9kZVxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XG4gICAgICovXG4gICAgZ2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gICAgfSxcblxuICAgIF9yZW1vdmVTZWxmRnJvbVNjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZS5yZW1vdmVGcm9tU2NlbmUoZGVzY2VuZGFudCk7XG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gbnVsbDtcbiAgICB9LFxuXG4gICAgX2FkZFNlbGZUb1NjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xuICAgICAgICB0aGlzLl9zY2VuZS5hZGRUb1NjZW5lKGRlc2NlbmRhbnQpO1xuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZSA9IHRoaXMuX3NjZW5lO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gc2NlbmUgbm9kZVxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXG4gICAgICovXG4gICAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUuX3BhcmVudDtcbiAgICAgICAgd2hpbGUocGFyZW50KSB7XG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBhIG5ldyBjcmVhdGVkIGFycmF5IG9mIGFsbCBjaGlsZHJlbiBub2Rlc1xuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZVtdfVxuICAgICAqL1xuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5zbGljZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY2hpbGQgc2NlbmUgbm9kZSBhdCBnaXZlbiBpbmRleC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIGNoaWxkQXQ6IGZ1bmN0aW9uIChpZHgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2lkeF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBmaXJzdCBjaGlsZCB3aXRoIHRoZSBnaXZlbiBuYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XG4gICAgICovXG4gICAgZ2V0Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZmlyc3QgZGVzY2VuZGFudCBoYXZlIHRoZSBnaXZlbiBuYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XG4gICAgICovXG4gICAgZ2V0RGVzY2VuZGFudEJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjaGlsZC5nZXREZXNjZW5kYW50QnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUXVlcnkgZGVzY2VuZGFudCBub2RlIGJ5IHBhdGhcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBub2RlLnF1ZXJ5Tm9kZSgncm9vdC9wYXJlbnQvY2hpbGQnKTtcbiAgICAgKi9cbiAgICBxdWVyeU5vZGU6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8gTmFtZSBoYXZlIHNsYXNoID9cbiAgICAgICAgdmFyIHBhdGhBcnIgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHBhdGhBcnJbaV07XG4gICAgICAgICAgICAvLyBTa2lwIGVtcHR5XG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY3VycmVudC5fY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bal07XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkO1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEVhcmx5IHJldHVybiBpZiBub3QgZm91bmRcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHF1ZXJ5IHBhdGgsIHJlbGF0aXZlIHRvIHJvb3ROb2RlKGRlZmF1bHQgaXMgc2NlbmUpXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtyb290Tm9kZV1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0UGF0aDogZnVuY3Rpb24gKHJvb3ROb2RlKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gJy8nO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9wYXJlbnQ7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5uYW1lO1xuICAgICAgICB3aGlsZSAoY3VycmVudC5fcGFyZW50KSB7XG4gICAgICAgICAgICBwYXRoID0gY3VycmVudC5uYW1lICsgJy8nICsgcGF0aDtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Ll9wYXJlbnQgPT0gcm9vdE5vZGUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdXJyZW50Ll9wYXJlbnQgJiYgcm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXB0aCBmaXJzdCB0cmF2ZXJzZSBhbGwgaXRzIGRlc2NlbmRhbnQgc2NlbmUgbm9kZXMgYW5kXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge05vZGV9IFtjb250ZXh0XVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmaWx0ZXJdXG4gICAgICovXG4gICAgdHJhdmVyc2U6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgZmlsdGVyKSB7XG5cbiAgICAgICAgdGhpcy5faW5JdGVyYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlci5jYWxsKGNvbnRleHQsIHRoaXMpKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gX2NoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBfY2hpbGRyZW5baV0udHJhdmVyc2UoY2FsbGJhY2ssIGNvbnRleHQsIGZpbHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbkl0ZXJhdGluZyA9IGZhbHNlO1xuICAgIH0sXG5cbiAgICBlYWNoQ2hpbGQ6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCwgY3Rvcikge1xuICAgICAgICB0aGlzLl9pbkl0ZXJhdGluZyA9IHRydWU7XG5cbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xuICAgICAgICB2YXIgbm9DdG9yID0gY3RvciA9PSBudWxsO1xuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBfY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF9jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChub0N0b3IgfHwgY2hpbGQuY29uc3RydWN0b3IgPT09IGN0b3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIGNoaWxkLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2luSXRlcmF0aW5nID0gZmFsc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgbG9jYWwgdHJhbnNmb3JtIGFuZCBkZWNvbXBvc2UgdG8gU1JUXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguTWF0cml4NH0gbWF0cml4XG4gICAgICovXG4gICAgc2V0TG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcbiAgICAgICAgbWF0NC5jb3B5KHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXksIG1hdHJpeC5hcnJheSk7XG4gICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGVjb21wb3NlIHRoZSBsb2NhbCB0cmFuc2Zvcm0gdG8gU1JUXG4gICAgICovXG4gICAgZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChrZWVwU2NhbGUpIHtcbiAgICAgICAgdmFyIHNjYWxlID0gIWtlZXBTY2FsZSA/IHRoaXMuc2NhbGU6IG51bGw7XG4gICAgICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB3b3JsZCB0cmFuc2Zvcm0gYW5kIGRlY29tcG9zZSB0byBTUlRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5NYXRyaXg0fSBtYXRyaXhcbiAgICAgKi9cbiAgICBzZXRXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xuICAgICAgICBtYXQ0LmNvcHkodGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSwgbWF0cml4LmFycmF5KTtcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZWNvbXBvc2UgdGhlIHdvcmxkIHRyYW5zZm9ybSB0byBTUlRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cbiAgICBkZWNvbXBvc2VXb3JsZFRyYW5zZm9ybTogKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgdG1wID0gbWF0NC5jcmVhdGUoKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xuICAgICAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybTtcbiAgICAgICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XG4gICAgICAgICAgICAvLyBBc3N1bWUgd29ybGQgdHJhbnNmb3JtIGlzIHVwZGF0ZWRcbiAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydCh0bXAsIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybS5hcnJheSk7XG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsb2NhbFRyYW5zZm9ybS5hcnJheSwgdG1wLCB3b3JsZFRyYW5zZm9ybS5hcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1hdDQuY29weShsb2NhbFRyYW5zZm9ybS5hcnJheSwgd29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHNjYWxlID0gIWtlZXBTY2FsZSA/IHRoaXMuc2NhbGU6IG51bGw7XG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5kZWNvbXBvc2VNYXRyaXgoc2NhbGUsIHRoaXMucm90YXRpb24sIHRoaXMucG9zaXRpb24pO1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICB0cmFuc2Zvcm1OZWVkc1VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbi5fZGlydHlcbiAgICAgICAgICAgIHx8IHRoaXMucm90YXRpb24uX2RpcnR5XG4gICAgICAgICAgICB8fCB0aGlzLnNjYWxlLl9kaXJ0eTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGxvY2FsIHRyYW5zZm9ybSBmcm9tIFNSVFxuICAgICAqIE5vdGljZSB0aGF0IGxvY2FsIHRyYW5zZm9ybSB3aWxsIG5vdCBiZSB1cGRhdGVkIGlmIF9kaXJ0eSBtYXJrIG9mIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUgaXMgYWxsIGZhbHNlXG4gICAgICovXG4gICAgdXBkYXRlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcbiAgICAgICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZTtcblxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XG4gICAgICAgICAgICB2YXIgbSA9IHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXk7XG5cbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBvcmRlciwgc2NhbGUtPnJvdGF0aW9uLT5wb3NpdGlvblxuICAgICAgICAgICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihtLCByb3RhdGlvbi5hcnJheSwgcG9zaXRpb24uYXJyYXkpO1xuXG4gICAgICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIHNjYWxlLmFycmF5KTtcblxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICBzY2FsZS5fZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHBvc2l0aW9uLl9kaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtLCBhc3N1bWUgaXRzIHBhcmVudCB3b3JsZCB0cmFuc2Zvcm0gaGF2ZSBiZWVuIHVwZGF0ZWRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcbiAgICAgICAgdmFyIHdvcmxkVHJhbnNmb3JtID0gdGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheTtcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShcbiAgICAgICAgICAgICAgICB3b3JsZFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXksXG4gICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtYXQ0LmNvcHkod29ybGRUcmFuc2Zvcm0sIGxvY2FsVHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtIGJlZm9yZSB3aG9sZSBzY2VuZSBpcyB1cGRhdGVkLlxuICAgICAqL1xuICAgIHVwZGF0ZVdvcmxkVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHJvb3Qgbm9kZSB3aGljaCB0cmFuc2Zvcm0gbmVlZHMgdXBkYXRlO1xuICAgICAgICB2YXIgcm9vdE5vZGVJc0RpcnR5ID0gdGhpcztcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlSXNEaXJ0eSAmJiByb290Tm9kZUlzRGlydHkuZ2V0UGFyZW50KClcbiAgICAgICAgICAgICYmIHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcm9vdE5vZGVJc0RpcnR5ID0gcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpO1xuICAgICAgICB9MlxuICAgICAgICByb290Tm9kZUlzRGlydHkudXBkYXRlKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gYW5kIHdvcmxkIHRyYW5zZm9ybSByZWN1cnNpdmVseVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VVcGRhdGVXb3JsZFxuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlVXBkYXRlV29ybGQpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZUxvY2FsVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gaXMgbWFudWFsbHkgc2V0dGVkXG4gICAgICAgICAgICBmb3JjZVVwZGF0ZVdvcmxkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZVdvcmxkIHx8IHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVdvcmxkVHJhbnNmb3JtVG9wRG93bigpO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGVXb3JsZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZShmb3JjZVVwZGF0ZVdvcmxkKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYm91bmRpbmcgYm94IG9mIG5vZGVcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2ZpbHRlcl1cbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLkJvdW5kaW5nQm94fVxuICAgICAqL1xuICAgIC8vIFRPRE8gU2tpbm5pbmdcbiAgICBnZXRCb3VuZGluZ0JveDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEZpbHRlciAoZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAhZWwuaW52aXNpYmxlICYmIGVsLmdlb21ldHJ5O1xuICAgICAgICB9XG4gICAgICAgIHZhciB0bXBCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciB0bXBNYXQ0ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGludldvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0IHx8IG5ldyBCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgZmlsdGVyID0gZmlsdGVyIHx8IGRlZmF1bHRGaWx0ZXI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmludmVydChpbnZXb3JsZFRyYW5zZm9ybSwgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIE1hdHJpeDQuaWRlbnRpdHkoaW52V29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uIChtZXNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkgJiYgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmNvcHkobWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkodG1wTWF0NCwgaW52V29ybGRUcmFuc2Zvcm0sIG1lc2gud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xuICAgICAgICAgICAgICAgICAgICBvdXQudW5pb24odG1wQkJveCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcywgZGVmYXVsdEZpbHRlcik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIEdldCB3b3JsZCBwb3NpdGlvbiwgZXh0cmFjdGVkIGZyb20gd29ybGQgdHJhbnNmb3JtXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgZ2V0V29ybGRQb3NpdGlvbjogZnVuY3Rpb24gKG91dCkge1xuICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XG4gICAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgICAgIHZhciBhcnIgPSBvdXQuYXJyYXk7XG4gICAgICAgICAgICBhcnJbMF0gPSBtWzEyXTtcbiAgICAgICAgICAgIGFyclsxXSA9IG1bMTNdO1xuICAgICAgICAgICAgYXJyWzJdID0gbVsxNF07XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKG1bMTJdLCBtWzEzXSwgbVsxNF0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IG5vZGVcbiAgICAgKiBAcmV0dXJuIHtOb2RlfVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XG5cbiAgICAgICAgbm9kZS5zZXROYW1lKHRoaXMubmFtZSk7XG4gICAgICAgIG5vZGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgbm9kZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xuICAgICAgICBub2RlLnNjYWxlLmNvcHkodGhpcy5zY2FsZSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbm9kZS5hZGQoY2hpbGRyZW5baV0uY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGUgbm9kZSBhcm91bmQgYSBheGlzIGJ5IGFuZ2xlIGRlZ3JlZXMsIGF4aXMgcGFzc2VzIHRocm91Z2ggcG9pbnRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBwb2ludCBDZW50ZXIgcG9pbnRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBheGlzICBDZW50ZXIgYXhpc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSAgICAgICBhbmdsZSBSb3RhdGlvbiBhbmdsZVxuICAgICAqIEBzZWUgaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9TY3JpcHRSZWZlcmVuY2UvVHJhbnNmb3JtLlJvdGF0ZUFyb3VuZC5odG1sXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICovXG4gICAgcm90YXRlQXJvdW5kOiAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdiA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgIHZhciBSVE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIHBlcmZvcm1hbmNlXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocG9pbnQsIGF4aXMsIGFuZ2xlKSB7XG5cbiAgICAgICAgICAgIHYuY29weSh0aGlzLnBvc2l0aW9uKS5zdWJ0cmFjdChwb2ludCk7XG5cbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5pZGVudGl0eSgpO1xuICAgICAgICAgICAgLy8gcGFyZW50IG5vZGVcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZShwb2ludCk7XG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5yb3RhdGUoYW5nbGUsIGF4aXMpO1xuXG4gICAgICAgICAgICBSVE1hdHJpeC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLnJvdGF0aW9uLCB2KTtcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KFJUTWF0cml4KTtcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnNjYWxlKHRoaXMuc2NhbGUpO1xuXG4gICAgICAgICAgICB0aGlzLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gdGFyZ2V0XG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW3VwXVxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5vcGVuZ2wub3JnL3Nkay9kb2NzL21hbjIveGh0bWwvZ2x1TG9va0F0LnhtbFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqL1xuICAgIGxvb2tBdDogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG0gPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdXApIHtcbiAgICAgICAgICAgIG0ubG9va0F0KHRoaXMucG9zaXRpb24sIHRhcmdldCwgdXAgfHwgdGhpcy5sb2NhbFRyYW5zZm9ybS55KS5pbnZlcnQoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxUcmFuc2Zvcm0obSk7XG5cbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9O1xuICAgIH0pKClcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBOb2RlO1xuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5MaWdodFxuICogQGV4dGVuZHMgY2xheS5Ob2RlXG4gKi9cbnZhciBMaWdodCA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5MaWdodCMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogTGlnaHQgUkdCIGNvbG9yXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgICAgICovXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIExpZ2h0IGludGVuc2l0eVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgaW50ZW5zaXR5OiAxLjAsXG5cbiAgICAgICAgLy8gQ29uZmlnIGZvciBzaGFkb3cgbWFwXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBsaWdodCBjYXN0IHNoYWRvd1xuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGNhc3RTaGFkb3c6IHRydWUsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNoYWRvdyBtYXAgc2l6ZVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc2hhZG93UmVzb2x1dGlvbjogNTEyLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaWdodCBncm91cCwgc2hhZGVyIHdpdGggc2FtZSBgbGlnaHRHcm91cGAgd2lsbCBiZSBhZmZlY3RlZFxuICAgICAgICAgKlxuICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmb3J3YXJkIHJlbmRlcmluZ1xuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgZ3JvdXA6IDBcbiAgICB9O1xufSxcbi8qKiBAbGVuZHMgY2xheS5MaWdodC5wcm90b3R5cGUuICovXG57XG4gICAgLyoqXG4gICAgICogTGlnaHQgdHlwZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQG1lbWJlck9mIGNsYXkuTGlnaHQjXG4gICAgICovXG4gICAgdHlwZTogJycsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkxpZ2h0fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkxpZ2h0LnByb3RvdHlwZVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGxpZ2h0ID0gTm9kZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcbiAgICAgICAgbGlnaHQuY29sb3IgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmNvbG9yKTtcbiAgICAgICAgbGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XG4gICAgICAgIGxpZ2h0LmNhc3RTaGFkb3cgPSB0aGlzLmNhc3RTaGFkb3c7XG4gICAgICAgIGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gPSB0aGlzLnNoYWRvd1Jlc29sdXRpb247XG5cbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWM0ID0gZ2xNYXRyaXgudmVjNDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguUGxhbmVcbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtub3JtYWxdXG4gKiBAcGFyYW0ge251bWJlcn0gW2Rpc3RhbmNlXVxuICovXG52YXIgUGxhbmUgPSBmdW5jdGlvbihub3JtYWwsIGRpc3RhbmNlKSB7XG4gICAgLyoqXG4gICAgICogTm9ybWFsIG9mIHRoZSBwbGFuZVxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbCB8fCBuZXcgVmVjdG9yMygwLCAxLCAwKTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0YW50IG9mIHRoZSBwbGFuZSBlcXVhdGlvbiwgdXNlZCBhcyBkaXN0YW5jZSB0byB0aGUgb3JpZ2luXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2UgfHwgMDtcbn07XG5cblBsYW5lLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBQbGFuZSxcblxuICAgIC8qKlxuICAgICAqIERpc3RhbmNlIGZyb20gYSBnaXZlbiBwb2ludCB0byB0aGUgcGxhbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbihwb2ludCkge1xuICAgICAgICByZXR1cm4gdmVjMy5kb3QocG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5KSAtIHRoaXMuZGlzdGFuY2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcHJvamVjdGlvbiBwb2ludCBvbiB0aGUgcGxhbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gcG9pbnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yM30gb3V0XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgcHJvamVjdFBvaW50OiBmdW5jdGlvbihwb2ludCwgb3V0KSB7XG4gICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQocG9pbnQpO1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5LCAtZCk7XG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIHBsYW5lJ3Mgbm9ybWFsIGFuZCBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlXG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGludkxlbiA9IDEgLyB2ZWMzLmxlbih0aGlzLm5vcm1hbC5hcnJheSk7XG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5ub3JtYWwuYXJyYXksIGludkxlbik7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgKj0gaW52TGVuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcGxhbmUgaW50ZXJzZWN0IGEgZnJ1c3R1bVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5GcnVzdHVtfSBGcnVzdHVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpbnRlcnNlY3RGcnVzdHVtOiBmdW5jdGlvbihmcnVzdHVtKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCBjb29yZHMgb2YgZnJ1c3R1bSBpcyBvbiBwbGFuZSBhbGwgdW5kZXIgcGxhbmVcbiAgICAgICAgdmFyIGNvb3JkcyA9IGZydXN0dW0udmVydGljZXM7XG4gICAgICAgIHZhciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcnJheTtcbiAgICAgICAgdmFyIG9uUGxhbmUgPSB2ZWMzLmRvdChjb29yZHNbMF0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlO1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCh2ZWMzLmRvdChjb29yZHNbaV0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlKSAhPSBvblBsYW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiBwbGFuZSBhbmQgYSBnaXZlbiBsaW5lXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gc3RhcnQgc3RhcnQgcG9pbnQgb2YgbGluZVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IGVuZCBlbmQgcG9pbnQgb2YgbGluZVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgaW50ZXJzZWN0TGluZTogKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmQgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgb3V0KSB7XG4gICAgICAgICAgICB2YXIgZDAgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChzdGFydCk7XG4gICAgICAgICAgICB2YXIgZDEgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChlbmQpO1xuICAgICAgICAgICAgaWYgKChkMCA+IDAgJiYgZDEgPiAwKSB8fCAoZDAgPCAwICYmIGQxIDwgMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJheSBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIHZhciBwbiA9IHRoaXMubm9ybWFsLmFycmF5O1xuICAgICAgICAgICAgdmFyIGQgPSB0aGlzLmRpc3RhbmNlO1xuICAgICAgICAgICAgdmFyIHJvID0gc3RhcnQuYXJyYXk7XG4gICAgICAgICAgICAvLyBkaXJlY3Rpb25cbiAgICAgICAgICAgIHZlYzMuc3ViKHJkLCBlbmQuYXJyYXksIHN0YXJ0LmFycmF5KTtcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJkLCByZCk7XG5cbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gdmVjMy5kb3QocG4sIHJkKTtcbiAgICAgICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcbiAgICAgICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW91dCkge1xuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHJvLCByZCwgLXQpO1xuICAgICAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBwbGFuZVxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqL1xuICAgIGFwcGx5VHJhbnNmb3JtOiAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgdmFyIG5vcm1hbHY0ID0gdmVjNC5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHBvaW50djQgPSB2ZWM0LmNyZWF0ZSgpO1xuICAgICAgICBwb2ludHY0WzNdID0gMTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG00KSB7XG4gICAgICAgICAgICBtNCA9IG00LmFycmF5O1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvaW50IG9uIHBsYW5lXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHBvaW50djQsIHRoaXMubm9ybWFsLmFycmF5LCB0aGlzLmRpc3RhbmNlKTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwb2ludHY0LCBwb2ludHY0LCBtNCk7XG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gdmVjMy5kb3QocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXkpO1xuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBsYW5lIG5vcm1hbFxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZSwgbTQpO1xuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZSwgaW52ZXJzZVRyYW5zcG9zZSk7XG4gICAgICAgICAgICBub3JtYWx2NFszXSA9IDA7XG4gICAgICAgICAgICB2ZWMzLmNvcHkobm9ybWFsdjQsIHRoaXMubm9ybWFsLmFycmF5KTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChub3JtYWx2NCwgbm9ybWFsdjQsIGludmVyc2VUcmFuc3Bvc2UpO1xuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBub3JtYWx2NCk7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBhbm90aGVyIHBsYW5lXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHBsYW5lXG4gICAgICovXG4gICAgY29weTogZnVuY3Rpb24ocGxhbmUpIHtcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXkpO1xuICAgICAgICB0aGlzLm5vcm1hbC5fZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IHBsYW5lXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlBsYW5lfVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHBsYW5lID0gbmV3IFBsYW5lKCk7XG4gICAgICAgIHBsYW5lLmNvcHkodGhpcyk7XG4gICAgICAgIHJldHVybiBwbGFuZTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgUGxhbmUgZnJvbSAnLi9QbGFuZSc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG52YXIgdmVjM1NldCA9IHZlYzMuc2V0O1xudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xudmFyIHZlYzNUcmFuZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XG52YXIgbWF0aE1pbiA9IE1hdGgubWluO1xudmFyIG1hdGhNYXggPSBNYXRoLm1heDtcbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLkZydXN0dW1cbiAqL1xudmFyIEZydXN0dW0gPSBmdW5jdGlvbigpIHtcblxuICAgIC8qKlxuICAgICAqIEVpZ2h0IHBsYW5lcyB0byBlbmNsb3NlIHRoZSBmcnVzdHVtXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5QbGFuZVtdfVxuICAgICAqL1xuICAgIHRoaXMucGxhbmVzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICB0aGlzLnBsYW5lcy5wdXNoKG5ldyBQbGFuZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCb3VuZGluZyBib3ggb2YgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9XG4gICAgICovXG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuXG4gICAgLyoqXG4gICAgICogRWlnaHQgdmVydGljZXMgb2YgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cbiAgICAgKi9cbiAgICB0aGlzLnZlcnRpY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgdGhpcy52ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcbiAgICB9XG59O1xuXG5GcnVzdHVtLnByb3RvdHlwZSA9IHtcblxuICAgIC8vIGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTIwNTMxMjMxMDA1L2h0dHA6Ly9jcmF6eWpva2UuZnJlZS5mci9kb2MvM0QvcGxhbmUlMjBleHRyYWN0aW9uLnBkZlxuICAgIC8qKlxuICAgICAqIFNldCBmcnVzdHVtIGZyb20gYSBwcm9qZWN0aW9uIG1hdHJpeFxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcbiAgICAgKi9cbiAgICBzZXRGcm9tUHJvamVjdGlvbjogZnVuY3Rpb24ocHJvamVjdGlvbk1hdHJpeCkge1xuXG4gICAgICAgIHZhciBwbGFuZXMgPSB0aGlzLnBsYW5lcztcbiAgICAgICAgdmFyIG0gPSBwcm9qZWN0aW9uTWF0cml4LmFycmF5O1xuICAgICAgICB2YXIgbTAgPSBtWzBdLCBtMSA9IG1bMV0sIG0yID0gbVsyXSwgbTMgPSBtWzNdO1xuICAgICAgICB2YXIgbTQgPSBtWzRdLCBtNSA9IG1bNV0sIG02ID0gbVs2XSwgbTcgPSBtWzddO1xuICAgICAgICB2YXIgbTggPSBtWzhdLCBtOSA9IG1bOV0sIG0xMCA9IG1bMTBdLCBtMTEgPSBtWzExXTtcbiAgICAgICAgdmFyIG0xMiA9IG1bMTJdLCBtMTMgPSBtWzEzXSwgbTE0ID0gbVsxNF0sIG0xNSA9IG1bMTVdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBwbGFuZXNcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMF0ubm9ybWFsLmFycmF5LCBtMyAtIG0wLCBtNyAtIG00LCBtMTEgLSBtOCk7XG4gICAgICAgIHBsYW5lc1swXS5kaXN0YW5jZSA9IC0obTE1IC0gbTEyKTtcbiAgICAgICAgcGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzFdLm5vcm1hbC5hcnJheSwgbTMgKyBtMCwgbTcgKyBtNCwgbTExICsgbTgpO1xuICAgICAgICBwbGFuZXNbMV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMik7XG4gICAgICAgIHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcblxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1syXS5ub3JtYWwuYXJyYXksIG0zICsgbTEsIG03ICsgbTUsIG0xMSArIG05KTtcbiAgICAgICAgcGxhbmVzWzJdLmRpc3RhbmNlID0gLShtMTUgKyBtMTMpO1xuICAgICAgICBwbGFuZXNbMl0ubm9ybWFsaXplKCk7XG5cbiAgICAgICAgdmVjM1NldChwbGFuZXNbM10ubm9ybWFsLmFycmF5LCBtMyAtIG0xLCBtNyAtIG01LCBtMTEgLSBtOSk7XG4gICAgICAgIHBsYW5lc1szXS5kaXN0YW5jZSA9IC0obTE1IC0gbTEzKTtcbiAgICAgICAgcGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzRdLm5vcm1hbC5hcnJheSwgbTMgLSBtMiwgbTcgLSBtNiwgbTExIC0gbTEwKTtcbiAgICAgICAgcGxhbmVzWzRdLmRpc3RhbmNlID0gLShtMTUgLSBtMTQpO1xuICAgICAgICBwbGFuZXNbNF0ubm9ybWFsaXplKCk7XG5cbiAgICAgICAgdmVjM1NldChwbGFuZXNbNV0ubm9ybWFsLmFycmF5LCBtMyArIG0yLCBtNyArIG02LCBtMTEgKyBtMTApO1xuICAgICAgICBwbGFuZXNbNV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xNCk7XG4gICAgICAgIHBsYW5lc1s1XS5ub3JtYWxpemUoKTtcblxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXG4gICAgICAgIHZhciBib3VuZGluZ0JveCA9IHRoaXMuYm91bmRpbmdCb3g7XG4gICAgICAgIGlmIChtMTUgPT09IDApICB7XG4gICAgICAgICAgICB2YXIgYXNwZWN0ID0gbTUgLyBtMDtcbiAgICAgICAgICAgIHZhciB6TmVhciA9IC1tMTQgLyAobTEwIC0gMSk7XG4gICAgICAgICAgICB2YXIgekZhciA9IC1tMTQgLyAobTEwICsgMSk7XG4gICAgICAgICAgICB2YXIgZmFyWSA9IC16RmFyIC8gbTU7XG4gICAgICAgICAgICB2YXIgbmVhclkgPSAtek5lYXIgLyBtNTtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3hcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoLWZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoZmFyWSAqIGFzcGVjdCwgZmFyWSwgek5lYXIpO1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZlcnRpY2VzXG4gICAgICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xuICAgICAgICAgICAgLy8tLS0gbWluIHpcbiAgICAgICAgICAgIC8vIG1pbiB4XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzBdLCAtZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgLWZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xuICAgICAgICAgICAgLy8gbWF4IHhcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMl0sIGZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIGZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xuICAgICAgICAgICAgLy8tLSBtYXggelxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgLW5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIC1uZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG5lYXJZICogYXNwZWN0LCBuZWFyWSwgek5lYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBPcnRob2dyYXBoaWMgcHJvamVjdGlvblxuICAgICAgICAgICAgdmFyIGxlZnQgPSAoLTEgLSBtMTIpIC8gbTA7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoMSAtIG0xMikgLyBtMDtcbiAgICAgICAgICAgIHZhciB0b3AgPSAoMSAtIG0xMykgLyBtNTtcbiAgICAgICAgICAgIHZhciBib3R0b20gPSAoLTEgLSBtMTMpIC8gbTU7XG4gICAgICAgICAgICB2YXIgbmVhciA9ICgtMSAtIG0xNCkgLyBtMTA7XG4gICAgICAgICAgICB2YXIgZmFyID0gKDEgLSBtMTQpIC8gbTEwO1xuXG5cbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoTWF0aC5taW4obGVmdCwgcmlnaHQpLCBNYXRoLm1pbihib3R0b20sIHRvcCksIE1hdGgubWluKGZhciwgbmVhcikpO1xuICAgICAgICAgICAgYm91bmRpbmdCb3gubWF4LnNldChNYXRoLm1heChyaWdodCwgbGVmdCksIE1hdGgubWF4KHRvcCwgYm90dG9tKSwgTWF0aC5tYXgobmVhciwgZmFyKSk7XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSBib3VuZGluZ0JveC5taW4uYXJyYXk7XG4gICAgICAgICAgICB2YXIgbWF4ID0gYm91bmRpbmdCb3gubWF4LmFycmF5O1xuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XG4gICAgICAgICAgICAvLyBtaW4geFxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcbiAgICAgICAgICAgIC8vIG1heCB4XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xuICAgICAgICAgICAgLy8tLSBtYXggelxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCBtaW5bMF0sIG1heFsxXSwgbWF4WzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQXBwbHkgYSBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCBhbmQgc2V0IHRvIHRoZSBnaXZlbiBib3VuZGluZyBib3hcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgKi9cbiAgICBnZXRUcmFuc2Zvcm1lZEJvdW5kaW5nQm94OiAoZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIHRtcFZlYzMgPSB2ZWMzLmNyZWF0ZSgpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiYm94LCBtYXRyaXgpIHtcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XG5cbiAgICAgICAgICAgIHZhciBtNCA9IG1hdHJpeC5hcnJheTtcbiAgICAgICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbjtcbiAgICAgICAgICAgIHZhciBtYXggPSBiYm94Lm1heDtcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xuICAgICAgICAgICAgdmFyIHYgPSB2ZXJ0aWNlc1swXTtcbiAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xuICAgICAgICAgICAgdmVjM0NvcHkobWluQXJyLCB0bXBWZWMzKTtcbiAgICAgICAgICAgIHZlYzNDb3B5KG1heEFyciwgdG1wVmVjMyk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdiA9IHZlcnRpY2VzW2ldO1xuICAgICAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xuXG4gICAgICAgICAgICAgICAgbWluQXJyWzBdID0gbWF0aE1pbih0bXBWZWMzWzBdLCBtaW5BcnJbMF0pO1xuICAgICAgICAgICAgICAgIG1pbkFyclsxXSA9IG1hdGhNaW4odG1wVmVjM1sxXSwgbWluQXJyWzFdKTtcbiAgICAgICAgICAgICAgICBtaW5BcnJbMl0gPSBtYXRoTWluKHRtcFZlYzNbMl0sIG1pbkFyclsyXSk7XG5cbiAgICAgICAgICAgICAgICBtYXhBcnJbMF0gPSBtYXRoTWF4KHRtcFZlYzNbMF0sIG1heEFyclswXSk7XG4gICAgICAgICAgICAgICAgbWF4QXJyWzFdID0gbWF0aE1heCh0bXBWZWMzWzFdLCBtYXhBcnJbMV0pO1xuICAgICAgICAgICAgICAgIG1heEFyclsyXSA9IG1hdGhNYXgodG1wVmVjM1syXSwgbWF4QXJyWzJdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIGJib3g7XG4gICAgICAgIH07XG4gICAgfSkgKClcbn07XG5leHBvcnQgZGVmYXVsdCBGcnVzdHVtO1xuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG52YXIgRVBTSUxPTiA9IDFlLTU7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLlJheVxuICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gW29yaWdpbl1cbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtkaXJlY3Rpb25dXG4gKi9cbnZhciBSYXkgPSBmdW5jdGlvbiAob3JpZ2luLCBkaXJlY3Rpb24pIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW4gfHwgbmV3IFZlY3RvcjMoKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgbmV3IFZlY3RvcjMoKTtcbn07XG5cblJheS5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogUmF5LFxuXG4gICAgLy8gaHR0cDovL3d3dy5zaWdncmFwaC5vcmcvZWR1Y2F0aW9uL21hdGVyaWFscy9IeXBlckdyYXBoL3JheXRyYWNlL3JheXBsYW5lX2ludGVyc2VjdGlvbi5odG1cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBhIGdpdmUgcGxhbmVcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUGxhbmV9IHBsYW5lXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgaW50ZXJzZWN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSwgb3V0KSB7XG4gICAgICAgIHZhciBwbiA9IHBsYW5lLm5vcm1hbC5hcnJheTtcbiAgICAgICAgdmFyIGQgPSBwbGFuZS5kaXN0YW5jZTtcbiAgICAgICAgdmFyIHJvID0gdGhpcy5vcmlnaW4uYXJyYXk7XG4gICAgICAgIHZhciByZCA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xuXG4gICAgICAgIHZhciBkaXZpZGVyID0gdmVjMy5kb3QocG4sIHJkKTtcbiAgICAgICAgLy8gcmF5IGlzIHBhcmFsbGVsIHRvIHRoZSBwbGFuZVxuICAgICAgICBpZiAoZGl2aWRlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHQgPSAodmVjMy5kb3QocG4sIHJvKSAtIGQpIC8gZGl2aWRlcjtcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHJvLCByZCwgLXQpO1xuICAgICAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWlycm9yIHRoZSByYXkgYWdhaW5zdCBwbGFuZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5QbGFuZX0gcGxhbmVcbiAgICAgKi9cbiAgICBtaXJyb3JBZ2FpbnN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSkge1xuICAgICAgICAvLyBEaXN0YW5jZSB0byBwbGFuZVxuICAgICAgICB2YXIgZCA9IHZlYzMuZG90KHBsYW5lLm5vcm1hbC5hcnJheSwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMuZGlyZWN0aW9uLmFycmF5LCB0aGlzLmRpcmVjdGlvbi5hcnJheSwgcGxhbmUubm9ybWFsLmFycmF5LCAtZCAqIDIpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5fZGlydHkgPSB0cnVlO1xuICAgIH0sXG5cbiAgICBkaXN0YW5jZVRvUG9pbnQ6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCkge1xuICAgICAgICAgICAgdmVjMy5zdWIodiwgcG9pbnQsIHRoaXMub3JpZ2luLmFycmF5KTtcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cbiAgICAgICAgICAgIHZhciBiID0gdmVjMy5kb3QodiwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xuICAgICAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5vcmlnaW4uYXJyYXksIHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gb3JpZ2luXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLmxlblNxdWFyZWQodik7XG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIHByb2plY3Rpb24gcG9pbnRcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoYzIgLSBiICogYik7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiByYXkgYW5kIHNwaGVyZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBjZW50ZXJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJhZGl1c1xuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IzfSBvdXRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICBpbnRlcnNlY3RTcGhlcmU6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjZW50ZXIsIHJhZGl1cywgb3V0KSB7XG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5kaXJlY3Rpb24uYXJyYXk7XG4gICAgICAgICAgICBjZW50ZXIgPSBjZW50ZXIuYXJyYXk7XG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBjZW50ZXIsIG9yaWdpbik7XG4gICAgICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHByb2plY3Rpb24gcG9pbnQgdG8gb3JpZ2luXG4gICAgICAgICAgICB2YXIgYiA9IHZlYzMuZG90KHYsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxuICAgICAgICAgICAgdmFyIGMyID0gdmVjMy5zcXVhcmVkTGVuZ3RoKHYpO1xuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBwcm9qZWN0aW9uIHBvaW50XG4gICAgICAgICAgICB2YXIgZDIgPSBjMiAtIGIgKiBiO1xuXG4gICAgICAgICAgICB2YXIgcjIgPSByYWRpdXMgKiByYWRpdXM7XG4gICAgICAgICAgICAvLyBObyBpbnRlcnNlY3Rpb25cbiAgICAgICAgICAgIGlmIChkMiA+IHIyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYSA9IE1hdGguc3FydChyMiAtIGQyKTtcbiAgICAgICAgICAgIC8vIEZpcnN0IGludGVyc2VjdCBwb2ludFxuICAgICAgICAgICAgdmFyIHQwID0gYiAtIGE7XG4gICAgICAgICAgICAvLyBTZWNvbmQgaW50ZXJzZWN0IHBvaW50XG4gICAgICAgICAgICB2YXIgdDEgPSBiICsgYTtcblxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHQwIDwgMCkge1xuICAgICAgICAgICAgICAgIGlmICh0MSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICAvLyBodHRwOi8vd3d3LnNjcmF0Y2hhcGl4ZWwuY29tL2xlc3NvbnMvM2QtYmFzaWMtbGVzc29ucy9sZXNzb24tNy1pbnRlcnNlY3Rpbmctc2ltcGxlLXNoYXBlcy9yYXktYm94LWludGVyc2VjdGlvbi9cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBib3VuZGluZyBib3hcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5Cb3VuZGluZ0JveH0gYmJveFxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94LCBvdXQpIHtcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xuICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XG4gICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbi5hcnJheTtcbiAgICAgICAgdmFyIG1heCA9IGJib3gubWF4LmFycmF5O1xuXG4gICAgICAgIHZhciBpbnZkaXJ4ID0gMSAvIGRpclswXTtcbiAgICAgICAgdmFyIGludmRpcnkgPSAxIC8gZGlyWzFdO1xuICAgICAgICB2YXIgaW52ZGlyeiA9IDEgLyBkaXJbMl07XG5cbiAgICAgICAgdmFyIHRtaW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4O1xuICAgICAgICBpZiAoaW52ZGlyeCA+PSAwKSB7XG4gICAgICAgICAgICB0bWluID0gKG1pblswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xuICAgICAgICAgICAgdG1heCA9IChtYXhbMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRtYXggPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XG4gICAgICAgICAgICB0bWluID0gKG1heFswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnZkaXJ5ID49IDApIHtcbiAgICAgICAgICAgIHR5bWluID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xuICAgICAgICAgICAgdHltYXggPSAobWF4WzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0eW1heCA9IChtaW5bMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcbiAgICAgICAgICAgIHR5bWluID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh0bWluID4gdHltYXgpIHx8ICh0eW1pbiA+IHRtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eW1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xuICAgICAgICAgICAgdG1pbiA9IHR5bWluO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eW1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xuICAgICAgICAgICAgdG1heCA9IHR5bWF4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludmRpcnogPj0gMCkge1xuICAgICAgICAgICAgdHptaW4gPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XG4gICAgICAgICAgICB0em1heCA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHR6bWF4ID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xuICAgICAgICAgICAgdHptaW4gPSAobWF4WzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHRtaW4gPiB0em1heCkgfHwgKHR6bWluID4gdG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XG4gICAgICAgICAgICB0bWluID0gdHptaW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XG4gICAgICAgICAgICB0bWF4ID0gdHptYXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRtYXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gdG1pbiA+PSAwID8gdG1pbiA6IHRtYXg7XG5cbiAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NJUMzJUI2bGxlciVFMiU4MCU5M1RydW1ib3JlX2ludGVyc2VjdGlvbl9hbGdvcml0aG1cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCB0aHJlZSB0cmlhbmdsZSB2ZXJ0aWNlc1xuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IGFcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBiXG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguVmVjdG9yM30gY1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgIHNpbmdsZVNpZGVkLCBDVyB0cmlhbmdsZSB3aWxsIGJlIGlnbm9yZWRcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBbb3V0XVxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IFtiYXJ5Y2VudGVyaWNdIGJhcnljZW50cmljIGNvb3Jkc1xuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIGludGVyc2VjdFRyaWFuZ2xlOiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBlQkEgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgICAgICB2YXIgZUNBID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgdmFyIEFPID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHZDcm9zcyA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBzaW5nbGVTaWRlZCwgb3V0LCBiYXJ5Y2VudGVyaWMpIHtcbiAgICAgICAgICAgIHZhciBkaXIgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcbiAgICAgICAgICAgIGEgPSBhLmFycmF5O1xuICAgICAgICAgICAgYiA9IGIuYXJyYXk7XG4gICAgICAgICAgICBjID0gYy5hcnJheTtcblxuICAgICAgICAgICAgdmVjMy5zdWIoZUJBLCBiLCBhKTtcbiAgICAgICAgICAgIHZlYzMuc3ViKGVDQSwgYywgYSk7XG5cbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQ0EsIGRpcik7XG5cbiAgICAgICAgICAgIHZhciBkZXQgPSB2ZWMzLmRvdChlQkEsIHZDcm9zcyk7XG5cbiAgICAgICAgICAgIGlmIChzaW5nbGVTaWRlZCkge1xuICAgICAgICAgICAgICAgIGlmIChkZXQgPiAtRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGV0ID4gLUVQU0lMT04gJiYgZGV0IDwgRVBTSUxPTikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlYzMuc3ViKEFPLCBvcmlnaW4sIGEpO1xuICAgICAgICAgICAgdmFyIHUgPSB2ZWMzLmRvdCh2Q3Jvc3MsIEFPKSAvIGRldDtcbiAgICAgICAgICAgIGlmICh1IDwgMCB8fCB1ID4gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUJBLCBBTyk7XG4gICAgICAgICAgICB2YXIgdiA9IHZlYzMuZG90KGRpciwgdkNyb3NzKSAvIGRldDtcblxuICAgICAgICAgICAgaWYgKHYgPCAwIHx8IHYgPiAxIHx8ICh1ICsgdiA+IDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIGVDQSk7XG4gICAgICAgICAgICB2YXIgdCA9IC12ZWMzLmRvdChBTywgdkNyb3NzKSAvIGRldDtcblxuICAgICAgICAgICAgaWYgKHQgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYXJ5Y2VudGVyaWMpIHtcbiAgICAgICAgICAgICAgICBWZWN0b3IzLnNldChiYXJ5Y2VudGVyaWMsICgxIC0gdSAtIHYpLCB1LCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IGFuIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRvIHRoZSByYXlcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4NH0gbWF0cml4XG4gICAgICovXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcbiAgICAgICAgVmVjdG9yMy5hZGQodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLm9yaWdpbiwgdGhpcy5vcmlnaW4sIG1hdHJpeCk7XG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIG1hdHJpeCk7XG5cbiAgICAgICAgVmVjdG9yMy5zdWIodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XG4gICAgICAgIFZlY3RvcjMubm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciByYXlcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5SYXl9IHJheVxuICAgICAqL1xuICAgIGNvcHk6IGZ1bmN0aW9uIChyYXkpIHtcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMub3JpZ2luLCByYXkub3JpZ2luKTtcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMuZGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgcmF5XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlJheX1cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xuICAgICAgICByYXkuY29weSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJheTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSYXk7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi9tYXRoL0ZydXN0dW0nO1xuaW1wb3J0IFJheSBmcm9tICcuL21hdGgvUmF5JztcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciB2ZWM0ID0gZ2xNYXRyaXgudmVjNDtcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5DYW1lcmFcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxuICovXG52YXIgQ2FtZXJhID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuQ2FtZXJhIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAgICAgKi9cbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW52ZXJzZSBvZiBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5NYXRyaXg0fVxuICAgICAgICAgKi9cbiAgICAgICAgaW52UHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVmlldyBtYXRyaXgsIGVxdWFsIHRvIGludmVyc2Ugb2YgY2FtZXJhJ3Mgd29ybGQgbWF0cml4XG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguTWF0cml4NH1cbiAgICAgICAgICovXG4gICAgICAgIHZpZXdNYXRyaXg6IG5ldyBNYXRyaXg0KCksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBmcnVzdHVtIGluIHZpZXcgc3BhY2VcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5GcnVzdHVtfVxuICAgICAgICAgKi9cbiAgICAgICAgZnJ1c3R1bTogbmV3IEZydXN0dW0oKVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy51cGRhdGUodHJ1ZSk7XG59LFxuLyoqIEBsZW5kcyBjbGF5LkNhbWVyYS5wcm90b3R5cGUgKi9cbntcblxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlKSB7XG4gICAgICAgIE5vZGUucHJvdG90eXBlLnVwZGF0ZS5jYWxsKHRoaXMsIGZvcmNlKTtcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy52aWV3TWF0cml4LCB0aGlzLndvcmxkVHJhbnNmb3JtKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LCB0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICAgIHRoaXMuZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbih0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgY2FtZXJhIHZpZXcgbWF0cml4XG4gICAgICovXG4gICAgc2V0Vmlld01hdHJpeDogZnVuY3Rpb24gKHZpZXdNYXRyaXgpIHtcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMudmlld01hdHJpeCwgdmlld01hdHJpeCk7XG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMud29ybGRUcmFuc2Zvcm0sIHZpZXdNYXRyaXgpO1xuICAgICAgICB0aGlzLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERlY29tcG9zZSBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKi9cbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7fSxcblxuICAgIC8qKlxuICAgICAqIFNldCBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5NYXRyaXg0fSBwcm9qZWN0aW9uTWF0cml4XG4gICAgICovXG4gICAgc2V0UHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKHByb2plY3Rpb25NYXRyaXgpIHtcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIHRoaXMuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHByb2plY3Rpb24gbWF0cml4LCBjYWxsZWQgYWZ0ZXIgdXBkYXRlXG4gICAgICovXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXG5cbiAgICAvKipcbiAgICAgKiBDYXN0IGEgcGlja2luZyByYXkgZnJvbSBjYW1lcmEgbmVhciBwbGFuZSB0byBmYXIgcGxhbmVcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IyfSBuZGNcbiAgICAgKiBAcGFyYW0ge2NsYXkubWF0aC5SYXl9IFtvdXRdXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlJheX1cbiAgICAgKi9cbiAgICBjYXN0UmF5OiAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdjQgPSB2ZWM0LmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5kYywgb3V0KSB7XG4gICAgICAgICAgICB2YXIgcmF5ID0gb3V0ICE9PSB1bmRlZmluZWQgPyBvdXQgOiBuZXcgUmF5KCk7XG4gICAgICAgICAgICB2YXIgeCA9IG5kYy5hcnJheVswXTtcbiAgICAgICAgICAgIHZhciB5ID0gbmRjLmFycmF5WzFdO1xuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIC0xLCAxKTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocmF5Lm9yaWdpbi5hcnJheSwgdjQsIDEgLyB2NFszXSk7XG5cbiAgICAgICAgICAgIHZlYzQuc2V0KHY0LCB4LCB5LCAxLCAxKTtcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgIHZlYzMuc2NhbGUodjQsIHY0LCAxIC8gdjRbM10pO1xuICAgICAgICAgICAgdmVjMy5zdWIocmF5LmRpcmVjdGlvbi5hcnJheSwgdjQsIHJheS5vcmlnaW4uYXJyYXkpO1xuXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShyYXkuZGlyZWN0aW9uLmFycmF5LCByYXkuZGlyZWN0aW9uLmFycmF5KTtcbiAgICAgICAgICAgIHJheS5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJheS5vcmlnaW4uX2RpcnR5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHJheTtcbiAgICAgICAgfTtcbiAgICB9KSgpXG5cbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEByZXR1cm4ge2NsYXkuQ2FtZXJhfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkNhbWVyYS5wcm90b3R5cGVcbiAgICAgKi9cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW1lcmE7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuaW1wb3J0IExpZ2h0IGZyb20gJy4vTGlnaHQnO1xuaW1wb3J0IENhbWVyYSBmcm9tICcuL0NhbWVyYSc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcblxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xuXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KGxpZ2h0TnVtYmVycykge1xuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcbiAgICB2YXIgbGlnaHRUeXBlcyA9IE9iamVjdC5rZXlzKGxpZ2h0TnVtYmVycyk7XG4gICAgbGlnaHRUeXBlcy5zb3J0KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsaWdodFR5cGUgPSBsaWdodE51bWJlcnNbaV07XG4gICAgICAgIGRlZmluZVN0ci5wdXNoKGxpZ2h0VHlwZSArICcgJyArIGxpZ2h0TnVtYmVyc1tsaWdodFR5cGVdKTtcbiAgICB9XG4gICAgdmFyIGtleSA9IGRlZmluZVN0ci5qb2luKCdcXG4nKTtcblxuICAgIGlmIChwcm9ncmFtS2V5Q2FjaGVba2V5XSkge1xuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XG4gICAgfVxuXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XG4gICAgcHJvZ3JhbUtleUNhY2hlW2tleV0gPSBpZDtcbiAgICByZXR1cm4gaWQ7XG59XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2NlbmVcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxuICovXG52YXIgU2NlbmUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TY2VuZSMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2xvYmFsIG1hdGVyaWFsIG9mIHNjZW5lXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxuICAgICAgICAgKi9cbiAgICAgICAgbWF0ZXJpYWw6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0b1VwZGF0ZTogdHJ1ZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogT3BhcXVlIHJlbmRlcmFibGUgbGlzdCwgaXQgd2lsbCBiZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyYWJsZVtdfVxuICAgICAgICAgKiBAcmVhZG9ubHlcbiAgICAgICAgICovXG4gICAgICAgIG9wYXF1ZUxpc3Q6IFtdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcGFxdWUgcmVuZGVyYWJsZSBsaXN0LCBpdCB3aWxsIGJlIHVwZGF0ZWQgYXV0b21hdGljYWxseVxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJhYmxlW119XG4gICAgICAgICAqIEByZWFkb25seVxuICAgICAgICAgKi9cbiAgICAgICAgdHJhbnNwYXJlbnRMaXN0OiBbXSxcblxuICAgICAgICBsaWdodHM6IFtdLFxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNjZW5lIGJvdW5kaW5nIGJveCBpbiB2aWV3IHNwYWNlLlxuICAgICAgICAgKiBVc2VkIHdoZW4gY2FtZXJhIG5lZWRzIHRvIGFkdWpzdCB0aGUgbmVhciBhbmQgZmFyIHBsYW5lIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICogc28gdGhhdCB0aGUgdmlldyBmcnVzdHVtIGNvbnRhaW5zIHRoZSB2aXNpYmxlIG9iamVjdHMgYXMgdGlnaHRseSBhcyBwb3NzaWJsZS5cbiAgICAgICAgICogTm90aWNlOlxuICAgICAgICAgKiAgSXQgaXMgdXBkYXRlZCBhZnRlciByZW5kZXJpbmcgKGluIHRoZSBzdGVwIG9mIGZydXN0dW0gY3VsbGluZyBwYXNzaW5nbHkpLiBTbyBtYXkgYmUgbm90IHNvIGFjY3VyYXRlLCBidXQgc2F2ZXMgYSBsb3Qgb2YgY2FsY3VsYXRpb25cbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgICAgICovXG4gICAgICAgIHZpZXdCb3VuZGluZ0JveExhc3RGcmFtZTogbmV3IEJvdW5kaW5nQm94KCksXG5cbiAgICAgICAgLy8gVW5pZm9ybXMgZm9yIHNoYWRvdyBtYXAuXG4gICAgICAgIHNoYWRvd1VuaWZvcm1zOiB7fSxcblxuICAgICAgICBfY2FtZXJhTGlzdDogW10sXG5cbiAgICAgICAgLy8gUHJvcGVydGllcyB0byBzYXZlIHRoZSBsaWdodCBpbmZvcm1hdGlvbiBpbiB0aGUgc2NlbmVcbiAgICAgICAgLy8gV2lsbCBiZSBzZXQgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgICAgICBfbGlnaHRVbmlmb3Jtczoge30sXG5cbiAgICAgICAgX3ByZXZpb3VzTGlnaHROdW1iZXI6IHt9LFxuXG4gICAgICAgIF9saWdodE51bWJlcjoge1xuICAgICAgICAgICAgLy8gZ3JvdXBJZDoge1xuICAgICAgICAgICAgICAgIC8vIFBPSU5UX0xJR0hUOiAwLFxuICAgICAgICAgICAgICAgIC8vIERJUkVDVElPTkFMX0xJR0hUOiAwLFxuICAgICAgICAgICAgICAgIC8vIFNQT1RfTElHSFQ6IDAsXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9MSUdIVDogMCxcbiAgICAgICAgICAgICAgICAvLyBBTUJJRU5UX1NIX0xJR0hUOiAwXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2xpZ2h0UHJvZ3JhbUtleXM6IHt9LFxuXG4gICAgICAgIF9vcGFxdWVPYmplY3RDb3VudDogMCxcbiAgICAgICAgX3RyYW5zcGFyZW50T2JqZWN0Q291bnQ6IDAsXG5cbiAgICAgICAgX25vZGVSZXBvc2l0b3J5OiB7fSxcblxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc2NlbmUgPSB0aGlzO1xufSxcbi8qKiBAbGVuZHMgY2xheS5TY2VuZS5wcm90b3R5cGUuICovXG57XG5cbiAgICAvLyBBZGQgbm9kZSB0byBzY2VuZVxuICAgIGFkZFRvU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FtZXJhTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGb3VuZCBtdWx0aXBsZSBjYW1lcmEgaW4gb25lIHNjZW5lLiBVc2UgdGhlIGZpc3Qgb25lLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX25vZGVSZXBvc2l0b3J5W25vZGUubmFtZV0gPSBub2RlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIFJlbW92ZSBub2RlIGZyb20gc2NlbmVcbiAgICByZW1vdmVGcm9tU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2FtZXJhTGlzdC5pbmRleE9mKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbm9kZVJlcG9zaXRvcnlbbm9kZS5uYW1lXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgbm9kZSBieSBuYW1lXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7Tm9kZX1cbiAgICAgKiBAREVQUkVDQVRFRFxuICAgICAqL1xuICAgIGdldE5vZGU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlUmVwb3NpdG9yeVtuYW1lXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgc2NlbmUgbm9kZSByZWN1cnNpdmVseSwgaW5jbHVkaW5nIG1hdGVyaWFsLCBza2VsZXRvbi5cbiAgICAgKiBTaGFkZXIgYW5kIGdlb21ldHJ5IGluc3RhbmNlcyB3aWxsIG5vdCBiZWVuIGNsb25lZFxuICAgICAqIEBwYXJhbSAge2NsYXkuTm9kZX0gbm9kZVxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cbiAgICAgKi9cbiAgICBjbG9uZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBuZXdOb2RlID0gbm9kZS5jbG9uZSgpO1xuICAgICAgICB2YXIgbWF0ZXJpYWxzTWFwID0ge307XG5cbiAgICAgICAgdmFyIGNsb25lU2tlbGV0b24gPSBmdW5jdGlvbiAoY3VycmVudCwgY3VycmVudE5ldykge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQuc2tlbGV0b24pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50TmV3LnNrZWxldG9uID0gY3VycmVudC5za2VsZXRvbi5jbG9uZShub2RlLCBuZXdOb2RlKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50TmV3LmpvaW50cyA9IGN1cnJlbnQuam9pbnRzLnNsaWNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VycmVudC5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsc01hcFtjdXJyZW50Lm1hdGVyaWFsLl9fdWlkX19dID0ge1xuICAgICAgICAgICAgICAgICAgICBvbGRNYXQ6IGN1cnJlbnQubWF0ZXJpYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50Ll9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lU2tlbGV0b24oY3VycmVudC5fY2hpbGRyZW5baV0sIGN1cnJlbnROZXcuX2NoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjbG9uZVNrZWxldG9uKG5vZGUsIG5ld05vZGUpO1xuXG4gICAgICAgIGZvciAodmFyIGd1aWQgaW4gbWF0ZXJpYWxzTWFwKSB7XG4gICAgICAgICAgICBtYXRlcmlhbHNNYXBbZ3VpZF0ubmV3TWF0ID0gbWF0ZXJpYWxzTWFwW2d1aWRdLm9sZE1hdC5jbG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVwbGFjZSBtYXRlcmlhbFxuICAgICAgICBuZXdOb2RlLnRyYXZlcnNlKGZ1bmN0aW9uIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5tYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQubWF0ZXJpYWwgPSBtYXRlcmlhbHNNYXBbY3VycmVudC5tYXRlcmlhbC5fX3VpZF9fXS5uZXdNYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqIFNjZW5lIHVwZGF0ZVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGZvcmNlXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gbm90VXBkYXRlTGlnaHRzXG4gICAgICogICAgICAgICBVc2VmdWwgaW4gZGVmZXJyZWQgcGlwZWxpbmVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChmb3JjZSwgbm90VXBkYXRlTGlnaHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMuYXV0b1VwZGF0ZSB8fCBmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBOb2RlLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCBmb3JjZSk7XG5cbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50ID0gdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50O1xuXG4gICAgICAgIHRoaXMuX29wYXF1ZU9iamVjdENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRPYmplY3RDb3VudCA9IDA7XG5cbiAgICAgICAgbGlnaHRzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlUmVuZGVyTGlzdCh0aGlzLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpO1xuXG4gICAgICAgIHRoaXMub3BhcXVlTGlzdC5sZW5ndGggPSB0aGlzLl9vcGFxdWVPYmplY3RDb3VudDtcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudExpc3QubGVuZ3RoID0gdGhpcy5fdHJhbnNwYXJlbnRPYmplY3RDb3VudDtcblxuICAgICAgICAvLyByZXNldFxuICAgICAgICBpZiAoIW5vdFVwZGF0ZUxpZ2h0cykge1xuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xuXG4gICAgICAgICAgICB2YXIgbGlnaHROdW1iZXIgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xuICAgICAgICAgICAgICAgIGlmICghbGlnaHROdW1iZXJbZ3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVc2VyIGNhbiB1c2UgYW55IHR5cGUgb2YgbGlnaHRcbiAgICAgICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gPSBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gfHwgMDtcbiAgICAgICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0rKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0gbGlnaHROdW1iZXI7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbGlnaHROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodFByb2dyYW1LZXlzW2dyb3VwSWRdID0gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcltncm91cElkXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxpZ2h0VW5pZm9ybXMoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW1lcmFMaXN0WzBdO1xuICAgIH0sXG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgc2NlbmUgYW5kIGFkZCB0aGUgcmVuZGVyYWJsZVxuICAgIC8vIG9iamVjdCB0byB0aGUgcmVuZGVyIGxpc3RcbiAgICBfdXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKHBhcmVudCwgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQuaW52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHBhcmVudC5fY2hpbGRyZW5baV07XG5cbiAgICAgICAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIExpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saWdodHMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGlsZC5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVudExpc3RbdGhpcy5fdHJhbnNwYXJlbnRPYmplY3RDb3VudCsrXSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGFxdWVMaXN0W3RoaXMuX29wYXF1ZU9iamVjdENvdW50KytdID0gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlUmVuZGVyTGlzdChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3VwZGF0ZUxpZ2h0VW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xuICAgICAgICAvLyBQdXQgdGhlIGxpZ2h0IGNhc3Qgc2hhZG93IGJlZm9yZSB0aGUgbGlnaHQgbm90IGNhc3Qgc2hhZG93XG4gICAgICAgIGxpZ2h0cy5zb3J0KGxpZ2h0U29ydEZ1bmMpO1xuXG4gICAgICAgIHZhciBsaWdodFVuaWZvcm1zID0gdGhpcy5fbGlnaHRVbmlmb3JtcztcbiAgICAgICAgZm9yICh2YXIgZ3JvdXAgaW4gbGlnaHRVbmlmb3Jtcykge1xuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXS52YWx1ZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgICAgIHZhciBsaWdodCA9IGxpZ2h0c1tpXTtcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHQudW5pZm9ybVRlbXBsYXRlcykge1xuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlc1tzeW1ib2xdO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHVuaWZvcm1UcGwudmFsdWUobGlnaHQpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXSkge1xuICAgICAgICAgICAgICAgICAgICBsaWdodFVuaWZvcm1zW2dyb3VwXVtzeW1ib2xdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXTtcbiAgICAgICAgICAgICAgICBsdS50eXBlID0gdW5pZm9ybVRwbC50eXBlICsgJ3YnO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodW5pZm9ybVRwbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzFpJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMWYnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzJmJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnM2YnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICc0Zic6XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHUudmFsdWUucHVzaCh2YWx1ZVtqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vua293biBsaWdodCB1bmlmb3JtIHR5cGUgJyArIHVuaWZvcm1UcGwudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICBsaWdodEdyb3Vwcy5wdXNoKGdyb3VwSWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaWdodEdyb3VwcztcbiAgICB9LFxuXG4gICAgZ2V0TnVtYmVyQ2hhbmdlZExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpZ2h0TnVtYmVyQ2hhbmdlZChncm91cElkKSkge1xuICAgICAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpZ2h0R3JvdXBzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgaWYgbGlnaHQgZ3JvdXAgaXMgZGlmZmVyZW50IHdpdGggc2luY2UgbGFzdCBmcmFtZVxuICAgICAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXBkYXRlIHNoYWRlciBhbmQgc2NlbmUncyB1bmlmb3JtcyBpbiBSZW5kZXJlci5yZW5kZXJcbiAgICAgKiBAcGFyYW0ge1NoYWRlcn0gc2hhZGVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgaXNMaWdodE51bWJlckNoYW5nZWQ6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XG4gICAgICAgIHZhciBwcmV2TGlnaHROdW1iZXIgPSB0aGlzLl9wcmV2aW91c0xpZ2h0TnVtYmVyO1xuICAgICAgICB2YXIgY3VycmVudExpZ2h0TnVtYmVyID0gdGhpcy5fbGlnaHROdW1iZXI7XG4gICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcbiAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBjdXJyZW50TGlnaHROdW1iZXJbbGlnaHRHcm91cF0pIHtcbiAgICAgICAgICAgIGlmICghcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50TGlnaHROdW1iZXJbbGlnaHRHcm91cF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0gIT09IHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHNoYWRlcidzIGxpZ2h0IGdyb3VwIHdpdGggc2NlbmUnc1xuICAgICAqIEBwYXJhbSB7U2hhZGVyfSBzaGFkZXJcbiAgICAgKi9cbiAgICBnZXRMaWdodHNOdW1iZXJzOiBmdW5jdGlvbiAobGlnaHRHcm91cCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHROdW1iZXJbbGlnaHRHcm91cF07XG4gICAgfSxcblxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodFByb2dyYW1LZXlzW2xpZ2h0R3JvdXBdO1xuICAgIH0sXG5cbiAgICBzZXRMaWdodFVuaWZvcm1zOiAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBzZXRVbmlmb3Jtcyh1bmlmb3JtcywgcHJvZ3JhbSwgcmVuZGVyZXIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB1bmlmb3Jtcykge1xuICAgICAgICAgICAgICAgIHZhciBsdSA9IHVuaWZvcm1zW3N5bWJvbF07XG4gICAgICAgICAgICAgICAgaWYgKGx1LnR5cGUgPT09ICd0dicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmhhc1VuaWZvcm0oc3ltYm9sKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleFNsb3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbHUudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbHUudmFsdWVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhTbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgJzFpdicsIHN5bWJvbCwgdGV4U2xvdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKHJlbmRlcmVyLmdsLCBsdS50eXBlLCBzeW1ib2wsIGx1LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHByb2dyYW0sIGxpZ2h0R3JvdXAsIHJlbmRlcmVyKSB7XG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLl9saWdodFVuaWZvcm1zW2xpZ2h0R3JvdXBdLCBwcm9ncmFtLCByZW5kZXJlcik7XG4gICAgICAgICAgICAvLyBTZXQgc2hhZG93c1xuICAgICAgICAgICAgc2V0VW5pZm9ybXModGhpcy5zaGFkb3dVbmlmb3JtcywgcHJvZ3JhbSwgcmVuZGVyZXIpO1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlIHNlbGYsIGNsZWFyIGFsbCB0aGUgc2NlbmUgb2JqZWN0c1xuICAgICAqIEJ1dCByZXNvdXJjZXMgb2YgZ2wgbGlrZSB0ZXh1dHVyZSwgc2hhZGVyIHdpbGwgbm90IGJlIGRpc3Bvc2VkLlxuICAgICAqIE1vc3RseSB5b3Ugc2hvdWxkIHVzZSBkaXNwb3NlU2NlbmUgbWV0aG9kIGluIFJlbmRlcmVyIHRvIGRvIGRpc3Bvc2UuXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1hdGVyaWFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcGFxdWVMaXN0ID0gW107XG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRMaXN0ID0gW107XG5cbiAgICAgICAgdGhpcy5saWdodHMgPSBbXTtcblxuICAgICAgICB0aGlzLl9saWdodFVuaWZvcm1zID0ge307XG5cbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSB7fTtcbiAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnkgPSB7fTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gbGlnaHRTb3J0RnVuYyhhLCBiKSB7XG4gICAgaWYgKGIuY2FzdFNoYWRvdyAmJiAhYS5jYXN0U2hhZG93KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2NlbmU7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xuXG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG5cbnZhciB2ZWMzQ3JlYXRlID0gdmVjMy5jcmVhdGU7XG52YXIgdmVjM0FkZCA9IHZlYzMuYWRkO1xudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcblxuZnVuY3Rpb24gZ2V0QXJyYXlDdG9yQnlUeXBlICh0eXBlKSB7XG4gICAgcmV0dXJuICh7XG4gICAgICAgICdieXRlJzogdmVuZG9yLkludDhBcnJheSxcbiAgICAgICAgJ3VieXRlJzogdmVuZG9yLlVpbnQ4QXJyYXksXG4gICAgICAgICdzaG9ydCc6IHZlbmRvci5JbnQxNkFycmF5LFxuICAgICAgICAndXNob3J0JzogdmVuZG9yLlVpbnQxNkFycmF5XG4gICAgfSlbdHlwZV0gfHwgdmVuZG9yLkZsb2F0MzJBcnJheTtcbn1cblxuZnVuY3Rpb24gbWFrZUF0dHJLZXkoYXR0ck5hbWUpIHtcbiAgICByZXR1cm4gJ2F0dHJfJyArIGF0dHJOYW1lO1xufVxuLyoqXG4gKiBHZW9tZXRyeSBhdHRyaWJ1dGVcbiAqIEBhbGlhcyBjbGF5Lkdlb21ldHJ5LkF0dHJpYnV0ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEF0dHJpYnV0ZShuYW1lLCB0eXBlLCBzaXplLCBzZW1hbnRpYykge1xuICAgIC8qKlxuICAgICAqIEF0dHJpYnV0ZSBuYW1lXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIC8qKlxuICAgICAqIEF0dHJpYnV0ZSB0eXBlXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIGAnYnl0ZSdgXG4gICAgICogICsgYCd1Ynl0ZSdgXG4gICAgICogICsgYCdzaG9ydCdgXG4gICAgICogICsgYCd1c2hvcnQnYFxuICAgICAqICArIGAnZmxvYXQnYCBNb3N0IGNvbW1vbmx5IHVzZWQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIC8qKlxuICAgICAqIFNpemUgb2YgYXR0cmlidXRlIGNvbXBvbmVudC4gMSAtIDQuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIC8qKlxuICAgICAqIFNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlLlxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcbiAgICAgKiAgKyBgJ1BPU0lUSU9OJ2BcbiAgICAgKiAgKyBgJ05PUk1BTCdgXG4gICAgICogICsgYCdCSU5PUk1BTCdgXG4gICAgICogICsgYCdUQU5HRU5UJ2BcbiAgICAgKiAgKyBgJ1RFWENPT1JEJ2BcbiAgICAgKiAgKyBgJ1RFWENPT1JEXzAnYFxuICAgICAqICArIGAnVEVYQ09PUkRfMSdgXG4gICAgICogICsgYCdDT0xPUidgXG4gICAgICogICsgYCdKT0lOVCdgXG4gICAgICogICsgYCdXRUlHSFQnYFxuICAgICAqXG4gICAgICogSW4gc2hhZGVyLCBhdHRyaWJ1dGUgd2l0aCBzYW1lIHNlbWFudGljIHdpbGwgYmUgYXV0b21hdGljYWxseSBtYXBwZWQuIEZvciBleGFtcGxlOlxuICAgICAqIGBgYGdsc2xcbiAgICAgKiBhdHRyaWJ1dGUgdmVjMyBwb3M6IFBPU0lUSU9OXG4gICAgICogYGBgXG4gICAgICogd2lsbCB1c2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHNlbWFudGljIFBPU0lUSU9OIGluIGdlb21ldHJ5LCBubyBtYXR0ZXIgd2hhdCBuYW1lIGl0IHVzZWQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWMgfHwgJyc7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxuICAgICAqIEB0eXBlIHtUeXBlZEFycmF5fVxuICAgICAqL1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuXG4gICAgLy8gSW5pdCBnZXR0ZXIgc2V0dGVyXG4gICAgc3dpdGNoIChzaXplKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlW2lkeF07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaWR4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIENvcHkgZnJvbSBzb3VyY2UgdG8gdGFyZ2V0XG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3RhcmdldF0gPSB0aGlzLnZhbHVlW3RhcmdldF07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeCAqIDJdO1xuICAgICAgICAgICAgICAgIG91dFsxXSA9IGFycltpZHggKiAyICsgMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICAgIGFycltpZHggKiAyXSA9IHZhbFswXTtcbiAgICAgICAgICAgICAgICBhcnJbaWR4ICogMiArIDFdID0gdmFsWzFdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICAgIHNvdXJjZSAqPSAyO1xuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAyO1xuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDFdID0gYXJyW3NvdXJjZSArIDFdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xuICAgICAgICAgICAgICAgIHZhciBpZHgzID0gaWR4ICogMztcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4M107XG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeDMgKyAxXTtcbiAgICAgICAgICAgICAgICBvdXRbMl0gPSBhcnJbaWR4MyArIDJdO1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgYXJyW2lkeDNdID0gdmFsWzBdO1xuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMV0gPSB2YWxbMV07XG4gICAgICAgICAgICAgICAgYXJyW2lkeDMgKyAyXSA9IHZhbFsyXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMztcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gMztcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0XSA9IGFycltzb3VyY2VdO1xuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xuICAgICAgICAgICAgICAgIG91dFswXSA9IGFycltpZHg0XTtcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4NCArIDFdO1xuICAgICAgICAgICAgICAgIG91dFsyXSA9IGFycltpZHg0ICsgMl07XG4gICAgICAgICAgICAgICAgb3V0WzNdID0gYXJyW2lkeDQgKyAzXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xuICAgICAgICAgICAgICAgIGFycltpZHg0XSA9IHZhbFswXTtcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDFdID0gdmFsWzFdO1xuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgMl0gPSB2YWxbMl07XG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAzXSA9IHZhbFszXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gNDtcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gNDtcbiAgICAgICAgICAgICAgICAvLyBjb3B5V2l0aGluIGlzIGV4dHJlbWVseSBzbG93XG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDJdID0gYXJyW3NvdXJjZSArIDJdO1xuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAzXSA9IGFycltzb3VyY2UgKyAzXTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuXG4vKipcbiAqIFNldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgdmFsIGlzIG51bWJlciBpZiBzaXplIGlzIDFcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgY2xheS5HZW9tZXRyeS5BdHRyaWJ1dGUjc2V0XG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XG4gKiBAcGFyYW0ge251bWJlcltdfG51bWJlcn0gdmFsXG4gKiBAZXhhbXBsZVxuICogZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLnNldCgwLCBbMSwgMSwgMV0pO1xuICovXG5cbi8qKlxuICogR2V0IGl0ZW0gdmFsdWUgYXQgZ2l2ZSBpbmRleC4gU2Vjb25kIHBhcmFtZXRlciBvdXQgaXMgbm8gbmVlZCBpZiBzaXplIGlzIDFcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgY2xheS5HZW9tZXRyeS5BdHRyaWJ1dGUjc2V0XG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XG4gKiBAcGFyYW0ge251bWJlcltdfSBbb3V0XVxuICogQGV4YW1wbGVcbiAqIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5nZXQoMCwgb3V0KTtcbiAqL1xuXG4vKipcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gdmVydGV4IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gblZlcnRleFxuICovXG5BdHRyaWJ1dGUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoblZlcnRleCkge1xuICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCAhPSBuVmVydGV4ICogdGhpcy5zaXplKSB7XG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gZ2V0QXJyYXlDdG9yQnlUeXBlKHRoaXMudHlwZSk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihuVmVydGV4ICogdGhpcy5zaXplKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gYXJyYXkuIFdoaWNoIGNhbiBiZSAxIGRpbWVuc2lvbmFsIG9yIDIgZGltZW5zaW9uYWxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAZXhhbXBsZVxuICogIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5mcm9tQXJyYXkoXG4gKiAgICAgIFstMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMF1cbiAqICApO1xuICogIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5mcm9tQXJyYXkoXG4gKiAgICAgIFsgWy0xLCAwLCAwXSwgWzEsIDAsIDBdLCBbMCwgMSwgMF0gXVxuICogICk7XG4gKi9cbkF0dHJpYnV0ZS5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XG4gICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQ29udmVydCAyZCBhcnJheSB0byBmbGF0XG4gICAgaWYgKGFycmF5WzBdICYmIChhcnJheVswXS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xufTtcblxuQXR0cmlidXRlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKGNvcHlWYWx1ZSkge1xuICAgIHZhciByZXQgPSBuZXcgQXR0cmlidXRlKHRoaXMubmFtZSwgdGhpcy50eXBlLCB0aGlzLnNpemUsIHRoaXMuc2VtYW50aWMpO1xuICAgIC8vIEZJWE1FXG4gICAgaWYgKGNvcHlWYWx1ZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ3RvZG8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIEF0dHJpYnV0ZUJ1ZmZlcihuYW1lLCB0eXBlLCBidWZmZXIsIHNpemUsIHNlbWFudGljKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljO1xuXG4gICAgLy8gVG8gYmUgc2V0IGluIG1lc2hcbiAgICAvLyBzeW1ib2wgaW4gdGhlIHNoYWRlclxuICAgIHRoaXMuc3ltYm9sID0gJyc7XG5cbiAgICAvLyBOZWVkcyByZW1vdmUgZmxhZ1xuICAgIHRoaXMubmVlZHNSZW1vdmUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gSW5kaWNlc0J1ZmZlcihidWZmZXIpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICB0aGlzLmNvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5HZW9tZXRyeVxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEdlb21ldHJ5ID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEF0dHJpYnV0ZXMgb2YgZ2VvbWV0cnkuIEluY2x1ZGluZzpcbiAgICAgICAgICogICsgYHBvc2l0aW9uYFxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQwYFxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQxYFxuICAgICAgICAgKiAgKyBgbm9ybWFsYFxuICAgICAgICAgKiAgKyBgdGFuZ2VudGBcbiAgICAgICAgICogICsgYGNvbG9yYFxuICAgICAgICAgKiAgKyBgd2VpZ2h0YFxuICAgICAgICAgKiAgKyBgam9pbnRgXG4gICAgICAgICAqICArIGBiYXJ5Y2VudHJpY2BcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQXR0cmlidXRlKCdwb3NpdGlvbicsICdmbG9hdCcsIDMsICdQT1NJVElPTicpLFxuICAgICAgICAgICAgdGV4Y29vcmQwOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDAnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMCcpLFxuICAgICAgICAgICAgdGV4Y29vcmQxOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDEnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMScpLFxuICAgICAgICAgICAgbm9ybWFsOiBuZXcgQXR0cmlidXRlKCdub3JtYWwnLCAnZmxvYXQnLCAzLCAnTk9STUFMJyksXG4gICAgICAgICAgICB0YW5nZW50OiBuZXcgQXR0cmlidXRlKCd0YW5nZW50JywgJ2Zsb2F0JywgNCwgJ1RBTkdFTlQnKSxcbiAgICAgICAgICAgIGNvbG9yOiBuZXcgQXR0cmlidXRlKCdjb2xvcicsICdmbG9hdCcsIDQsICdDT0xPUicpLFxuICAgICAgICAgICAgLy8gU2tpbm5pbmcgYXR0cmlidXRlc1xuICAgICAgICAgICAgLy8gRWFjaCB2ZXJ0ZXggY2FuIGJlIGJpbmQgdG8gNCBib25lcywgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgIC8vIHN1bSBvZiB3ZWlnaHRzIGlzIDEsIHNvIHRoZSB3ZWlnaHRzIGlzIHN0b3JlZCBpbiB2ZWMzIGFuZCB0aGUgbGFzdFxuICAgICAgICAgICAgLy8gY2FuIGJlIGNhbGN1bGF0ZWQgYnkgMS13Lngtdy55LXcuelxuICAgICAgICAgICAgd2VpZ2h0OiBuZXcgQXR0cmlidXRlKCd3ZWlnaHQnLCAnZmxvYXQnLCAzLCAnV0VJR0hUJyksXG4gICAgICAgICAgICBqb2ludDogbmV3IEF0dHJpYnV0ZSgnam9pbnQnLCAnZmxvYXQnLCA0LCAnSk9JTlQnKSxcbiAgICAgICAgICAgIC8vIEZvciB3aXJlZnJhbWUgZGlzcGxheVxuICAgICAgICAgICAgLy8gaHR0cDovL2NvZGVmbG93Lm9yZy9lbnRyaWVzLzIwMTIvYXVnLzAyL2Vhc3ktd2lyZWZyYW1lLWRpc3BsYXktd2l0aC1iYXJ5Y2VudHJpYy1jb29yZGluYXRlcy9cbiAgICAgICAgICAgIGJhcnljZW50cmljOiBuZXcgQXR0cmlidXRlKCdiYXJ5Y2VudHJpYycsICdmbG9hdCcsIDMsIG51bGwpLFxuICAgICAgICB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsY3VsYXRlZCBib3VuZGluZyBib3ggb2YgZ2VvbWV0cnkuXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguQm91bmRpbmdCb3h9XG4gICAgICAgICAqL1xuICAgICAgICBib3VuZGluZ0JveDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNlcyBvZiBnZW9tZXRyeS5cbiAgICAgICAgICogQHR5cGUge1VpbnQxNkFycmF5fFVpbnQzMkFycmF5fVxuICAgICAgICAgKi9cbiAgICAgICAgaW5kaWNlczogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSXMgdmVydGljZXMgZGF0YSBkeW5hbWljYWxseSB1cGRhdGVkLlxuICAgICAgICAgKiBBdHRyaWJ1dGVzIHZhbHVlIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXIgZmlyc3QgcmVuZGVyIGlmIGR5YW5taWMgaXMgZmFsc2UuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZHluYW1pYzogdHJ1ZSxcblxuICAgICAgICBfZW5hYmxlZEF0dHJpYnV0ZXM6IG51bGxcbiAgICB9O1xufSwgZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGNhY2hlXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcblxuICAgIHRoaXMuX2F0dHJpYnV0ZUxpc3QgPSBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBNYWluIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgdG8gY291bnQgdmVydGV4IG51bWJlclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgbWFpbkF0dHJpYnV0ZTogJ3Bvc2l0aW9uJyxcbiAgICAvKipcbiAgICAgKiBVc2VyIGRlZmluZWQgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxuICAgICAqIHgsIHkgYXJlIE5EQy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogKHgsIHksIHJlbmRlcmVyLCBjYW1lcmEsIHJlbmRlcmFibGUsIG91dCkgPT4gYm9vbGVhblxuICAgICAqIGBgYFxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XG4gICAgICovXG4gICAgcGljazogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAocmF5OiBjbGF5Lm1hdGguUmF5LCByZW5kZXJhYmxlOiBjbGF5LlJlbmRlcmFibGUsIG91dDogQXJyYXkpID0+IGJvb2xlYW5cbiAgICAgKiBgYGBcbiAgICAgKiBAdHlwZSB7P0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIHBpY2tCeVJheTogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBib3VuZGluZ0JveCBvZiBHZW9tZXRyeVxuICAgICAqL1xuICAgIHVwZGF0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBiYm94ID0gdGhpcy5ib3VuZGluZ0JveDtcbiAgICAgICAgaWYgKCFiYm94KSB7XG4gICAgICAgICAgICBiYm94ID0gdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwb3NBcnIgPSB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XG4gICAgICAgIGlmIChwb3NBcnIgJiYgcG9zQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xuICAgICAgICAgICAgdmFyIG1heCA9IGJib3gubWF4O1xuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XG4gICAgICAgICAgICB2ZWMzLnNldChtaW5BcnIsIHBvc0FyclswXSwgcG9zQXJyWzFdLCBwb3NBcnJbMl0pO1xuICAgICAgICAgICAgdmVjMy5zZXQobWF4QXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgcG9zQXJyLmxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICB2YXIgeCA9IHBvc0FycltpKytdO1xuICAgICAgICAgICAgICAgIHZhciB5ID0gcG9zQXJyW2krK107XG4gICAgICAgICAgICAgICAgdmFyIHogPSBwb3NBcnJbaSsrXTtcbiAgICAgICAgICAgICAgICBpZiAoeCA8IG1pbkFyclswXSkgeyBtaW5BcnJbMF0gPSB4OyB9XG4gICAgICAgICAgICAgICAgaWYgKHkgPCBtaW5BcnJbMV0pIHsgbWluQXJyWzFdID0geTsgfVxuICAgICAgICAgICAgICAgIGlmICh6IDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHo7IH1cblxuICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHg7IH1cbiAgICAgICAgICAgICAgICBpZiAoeSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB5OyB9XG4gICAgICAgICAgICAgICAgaWYgKHogPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gejsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogTWFyayBhdHRyaWJ1dGVzIGFuZCBpbmRpY2VzIGluIGdlb21ldHJ5IG5lZWRzIHRvIHVwZGF0ZS5cbiAgICAgKi9cbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZGlydHlBdHRyaWJ1dGUoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlydHlJbmRpY2VzKCk7XG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eSgnYW55Jyk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBNYXJrIHRoZSBpbmRpY2VzIG5lZWRzIHRvIHVwZGF0ZS5cbiAgICAgKi9cbiAgICBkaXJ0eUluZGljZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2luZGljZXMnKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIE1hcmsgdGhlIGF0dHJpYnV0ZXMgbmVlZHMgdG8gdXBkYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0ck5hbWVdXG4gICAgICovXG4gICAgZGlydHlBdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyTmFtZSkge1xuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbChtYWtlQXR0cktleShhdHRyTmFtZSkpO1xuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbCgnYXR0cmlidXRlcycpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG91dFxuICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxuICAgICAqL1xuICAgIGdldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgb3V0KSB7XG4gICAgICAgIGlmIChpZHggPCB0aGlzLnRyaWFuZ2xlQ291bnQgJiYgaWR4ID49IDApIHtcbiAgICAgICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICAgICAgb3V0ID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgICAgICBvdXRbMF0gPSBpbmRpY2VzW2lkeCAqIDNdO1xuICAgICAgICAgICAgb3V0WzFdID0gaW5kaWNlc1tpZHggKiAzICsgMV07XG4gICAgICAgICAgICBvdXRbMl0gPSBpbmRpY2VzW2lkeCAqIDMgKyAyXTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgICAqL1xuICAgIHNldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgYXJyKSB7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuICAgICAgICBpbmRpY2VzW2lkeCAqIDNdID0gYXJyWzBdO1xuICAgICAgICBpbmRpY2VzW2lkeCAqIDMgKyAxXSA9IGFyclsxXTtcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMl0gPSBhcnJbMl07XG4gICAgfSxcblxuICAgIGlzVXNlSW5kaWNlczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmluZGljZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgaW5kaWNlcyBmcm9tIGFuIGFycmF5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAgICovXG4gICAgaW5pdEluZGljZXNGcm9tQXJyYXk6IGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gdGhpcy52ZXJ0ZXhDb3VudCA+IDB4ZmZmZlxuICAgICAgICAgICAgPyB2ZW5kb3IuVWludDMyQXJyYXkgOiB2ZW5kb3IuVWludDE2QXJyYXk7XG4gICAgICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxuICAgICAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgICAgIHZhciBzaXplID0gMztcblxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheS5sZW5ndGggKiBzaXplKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVtuKytdID0gYXJyYXlbaV1bal07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluZGljZXMgPSB2YWx1ZTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbWFudGljXVxuICAgICAqL1xuICAgIGNyZWF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XG4gICAgICAgIHZhciBhdHRyaWIgPSBuZXcgQXR0cmlidXRlKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKTtcbiAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlc1tuYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cmliO1xuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0LnB1c2gobmFtZSk7XG4gICAgICAgIHJldHVybiBhdHRyaWI7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYXR0cmlidXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKi9cbiAgICByZW1vdmVBdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcbiAgICAgICAgdmFyIGlkeCA9IGF0dHJpYnV0ZUxpc3QuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGF0dHJpYnV0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7Y2xheS5HZW9tZXRyeS5BdHRyaWJ1dGV9XG4gICAgICovXG4gICAgZ2V0QXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgZW5hYmxlZCBhdHRyaWJ1dGVzIG5hbWUgbGlzdFxuICAgICAqIEF0dHJpYnV0ZSB3aGljaCBoYXMgdGhlIHNhbWUgdmVydGV4IG51bWJlciB3aXRoIHBvc2l0aW9uIGlzIHRyZWF0ZWQgYXMgYSBlbmFibGVkIGF0dHJpYnV0ZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICAgICAqL1xuICAgIGdldEVuYWJsZWRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XG4gICAgICAgIC8vIENhY2hlXG4gICAgICAgIGlmIChlbmFibGVkQXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICB2YXIgblZlcnRleCA9IHRoaXMudmVydGV4Q291bnQ7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZUxpc3RbaV07XG4gICAgICAgICAgICB2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyaWIudmFsdWUubGVuZ3RoID09PSBuVmVydGV4ICogYXR0cmliLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZW5hYmxlZEF0dHJpYnV0ZXMgPSByZXN1bHQ7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgZ2V0QnVmZmVyQ2h1bmtzOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcbiAgICAgICAgdmFyIGlzQXR0cmlidXRlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnYXR0cmlidXRlcycpO1xuICAgICAgICB2YXIgaXNJbmRpY2VzRGlydHkgPSBjYWNoZS5pc0RpcnR5KCdpbmRpY2VzJyk7XG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBpc0luZGljZXNEaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnVmZmVyKHJlbmRlcmVyLmdsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpO1xuICAgICAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVzID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNhY2hlLmZyZXNoKG1ha2VBdHRyS2V5KGVuYWJsZWRBdHRyaWJ1dGVzW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnYXR0cmlidXRlcycpO1xuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2luZGljZXMnKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5mcmVzaCgnYW55Jyk7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoJ2NodW5rcycpO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlQnVmZmVyOiBmdW5jdGlvbiAoX2dsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xuICAgICAgICB2YXIgZmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFjaHVua3MpIHtcbiAgICAgICAgICAgIGNodW5rcyA9IFtdO1xuICAgICAgICAgICAgLy8gSW50aWFsaXplXG4gICAgICAgICAgICBjaHVua3NbMF0gPSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyczogW10sXG4gICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlcjogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNhY2hlLnB1dCgnY2h1bmtzJywgY2h1bmtzKTtcbiAgICAgICAgICAgIGZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlcnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzO1xuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XG5cbiAgICAgICAgaWYgKGlzQXR0cmlidXRlc0RpcnR5IHx8IGZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlck1hcCA9IHt9O1xuICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJNYXBbYXR0cmlidXRlQnVmZmVyc1tpXS5uYW1lXSA9IGF0dHJpYnV0ZUJ1ZmZlcnNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRklYTUUgSWYgc29tZSBhdHRyaWJ1dGVzIHJlbW92ZWRcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtrXTtcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckluZm87XG5cbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJNYXBbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBidWZmZXI7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlckluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVySW5mby5idWZmZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBfZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjYWNoZS5pc0RpcnR5KG1ha2VBdHRyS2V5KG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSB3aGVuIHRoZXkgYXJlIGRpcnR5LlxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgQnVmZmVyU3ViRGF0YT9cbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoX2dsLkFSUkFZX0JVRkZFUiwgYXR0cmlidXRlLnZhbHVlLCB0aGlzLmR5bmFtaWMgPyBnbGVudW0uRFlOQU1JQ19EUkFXIDogZ2xlbnVtLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzW2tdID0gbmV3IEF0dHJpYnV0ZUJ1ZmZlcihuYW1lLCBhdHRyaWJ1dGUudHlwZSwgYnVmZmVyLCBhdHRyaWJ1dGUuc2l6ZSwgYXR0cmlidXRlLnNlbWFudGljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlcyBidWZmZXJzLlxuICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJ1dGVCdWZmZXJzW2ldLmJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aCA9IGs7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpICYmIChpc0luZGljZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkpIHtcbiAgICAgICAgICAgIGlmICghaW5kaWNlc0J1ZmZlcikge1xuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXIgPSBuZXcgSW5kaWNlc0J1ZmZlcihfZ2wuY3JlYXRlQnVmZmVyKCkpO1xuICAgICAgICAgICAgICAgIGNodW5rLmluZGljZXNCdWZmZXIgPSBpbmRpY2VzQnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kaWNlc0J1ZmZlci5jb3VudCA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcbiAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdGhpcy5pbmRpY2VzLCB0aGlzLmR5bmFtaWMgPyBnbGVudW0uRFlOQU1JQ19EUkFXIDogZ2xlbnVtLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciB2ZXJ0ZXguXG4gICAgICovXG4gICAgZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcblxuICAgICAgICBpZiAoIW5vcm1hbHMgfHwgbm9ybWFscy5sZW5ndGggIT09IHBvc2l0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzZXRcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG5vcm1hbHNbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHAxID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcblxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIHZhciBsZW4gPSBpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiB0aGlzLnZlcnRleENvdW50O1xuICAgICAgICB2YXIgaTEsIGkyLCBpMztcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XG4gICAgICAgICAgICBpZiAoaW5kaWNlcykge1xuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xuICAgICAgICAgICAgICAgIGkzID0gaW5kaWNlc1tmKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaTEgPSBmKys7XG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQocDIsIHBvc2l0aW9uc1tpMiozXSwgcG9zaXRpb25zW2kyKjMrMV0sIHBvc2l0aW9uc1tpMiozKzJdKTtcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcblxuICAgICAgICAgICAgdmVjMy5zdWIodjIxLCBwMSwgcDIpO1xuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XG4gICAgICAgICAgICAvLyBBbHJlYWR5IGJlIHdlaWdodGVkIGJ5IHRoZSB0cmlhbmdsZSBhcmVhXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMytpXSA9IG5vcm1hbHNbaTEqMytpXSArIG5baV07XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMiozK2ldID0gbm9ybWFsc1tpMiozK2ldICsgbltpXTtcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMraV0gPSBub3JtYWxzW2kzKjMraV0gKyBuW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzLmxlbmd0aDspIHtcbiAgICAgICAgICAgIHZlYzNTZXQobiwgbm9ybWFsc1tpXSwgbm9ybWFsc1tpKzFdLCBub3JtYWxzW2krMl0pO1xuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobiwgbik7XG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzBdO1xuICAgICAgICAgICAgbm9ybWFsc1tpKytdID0gblsxXTtcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMl07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciBmYWNlLlxuICAgICAqL1xuICAgIGdlbmVyYXRlRmFjZU5vcm1hbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVVuaXF1ZVZlcnRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcblxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBwMiA9IHZlYzNDcmVhdGUoKTtcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIHZhciB2MjEgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xuXG4gICAgICAgIGlmICghbm9ybWFscykge1xuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XG4gICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgbGVuOykge1xuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcbiAgICAgICAgICAgICAgICBpMiA9IGluZGljZXNbZisrXTtcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGkxID0gZisrO1xuICAgICAgICAgICAgICAgIGkyID0gZisrO1xuICAgICAgICAgICAgICAgIGkzID0gZisrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2ZWMzU2V0KHAxLCBwb3NpdGlvbnNbaTEqM10sIHBvc2l0aW9uc1tpMSozKzFdLCBwb3NpdGlvbnNbaTEqMysyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XG5cbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcbiAgICAgICAgICAgIHZlYzMuY3Jvc3MobiwgdjIxLCB2MzIpO1xuXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShuLCBuKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kxKjMgKyBpXSA9IG5baV07XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMiozICsgaV0gPSBuW2ldO1xuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTMqMyArIGldID0gbltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIHRhbmdlbnRzIGF0dHJpYnV0ZXMuXG4gICAgICovXG4gICAgZ2VuZXJhdGVUYW5nZW50czogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuVmVydGV4ID0gdGhpcy52ZXJ0ZXhDb3VudDtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgICAgIGlmICghYXR0cmlidXRlcy50YW5nZW50LnZhbHVlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KG5WZXJ0ZXggKiA0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XG5cbiAgICAgICAgaWYgKCF0ZXhjb29yZHMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbWV0cnkgd2l0aG91dCB0ZXhjb29yZHMgY2FuXFwndCBnZW5lcmF0ZSB0YW5nZW50cy4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0YW4xID0gW107XG4gICAgICAgIHZhciB0YW4yID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDsgaSsrKSB7XG4gICAgICAgICAgICB0YW4xW2ldID0gWzAuMCwgMC4wLCAwLjBdO1xuICAgICAgICAgICAgdGFuMltpXSA9IFswLjAsIDAuMCwgMC4wXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xuICAgICAgICB2YXIgdGRpciA9IFswLjAsIDAuMCwgMC4wXTtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG5cbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XG4gICAgICAgIHZhciBpMSwgaTIsIGkzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XG4gICAgICAgICAgICAgICAgaTEgPSBpbmRpY2VzW2krK107XG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2krK107XG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2krK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpMSA9IGkrKztcbiAgICAgICAgICAgICAgICBpMiA9IGkrKztcbiAgICAgICAgICAgICAgICBpMyA9IGkrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN0MXMgPSB0ZXhjb29yZHNbaTEgKiAyXSxcbiAgICAgICAgICAgICAgICBzdDJzID0gdGV4Y29vcmRzW2kyICogMl0sXG4gICAgICAgICAgICAgICAgc3QzcyA9IHRleGNvb3Jkc1tpMyAqIDJdLFxuICAgICAgICAgICAgICAgIHN0MXQgPSB0ZXhjb29yZHNbaTEgKiAyICsgMV0sXG4gICAgICAgICAgICAgICAgc3QydCA9IHRleGNvb3Jkc1tpMiAqIDIgKyAxXSxcbiAgICAgICAgICAgICAgICBzdDN0ID0gdGV4Y29vcmRzW2kzICogMiArIDFdLFxuXG4gICAgICAgICAgICAgICAgcDF4ID0gcG9zaXRpb25zW2kxICogM10sXG4gICAgICAgICAgICAgICAgcDJ4ID0gcG9zaXRpb25zW2kyICogM10sXG4gICAgICAgICAgICAgICAgcDN4ID0gcG9zaXRpb25zW2kzICogM10sXG4gICAgICAgICAgICAgICAgcDF5ID0gcG9zaXRpb25zW2kxICogMyArIDFdLFxuICAgICAgICAgICAgICAgIHAyeSA9IHBvc2l0aW9uc1tpMiAqIDMgKyAxXSxcbiAgICAgICAgICAgICAgICBwM3kgPSBwb3NpdGlvbnNbaTMgKiAzICsgMV0sXG4gICAgICAgICAgICAgICAgcDF6ID0gcG9zaXRpb25zW2kxICogMyArIDJdLFxuICAgICAgICAgICAgICAgIHAyeiA9IHBvc2l0aW9uc1tpMiAqIDMgKyAyXSxcbiAgICAgICAgICAgICAgICBwM3ogPSBwb3NpdGlvbnNbaTMgKiAzICsgMl07XG5cbiAgICAgICAgICAgIHZhciB4MSA9IHAyeCAtIHAxeCxcbiAgICAgICAgICAgICAgICB4MiA9IHAzeCAtIHAxeCxcbiAgICAgICAgICAgICAgICB5MSA9IHAyeSAtIHAxeSxcbiAgICAgICAgICAgICAgICB5MiA9IHAzeSAtIHAxeSxcbiAgICAgICAgICAgICAgICB6MSA9IHAyeiAtIHAxeixcbiAgICAgICAgICAgICAgICB6MiA9IHAzeiAtIHAxejtcblxuICAgICAgICAgICAgdmFyIHMxID0gc3QycyAtIHN0MXMsXG4gICAgICAgICAgICAgICAgczIgPSBzdDNzIC0gc3QxcyxcbiAgICAgICAgICAgICAgICB0MSA9IHN0MnQgLSBzdDF0LFxuICAgICAgICAgICAgICAgIHQyID0gc3QzdCAtIHN0MXQ7XG5cbiAgICAgICAgICAgIHZhciByID0gMS4wIC8gKHMxICogdDIgLSB0MSAqIHMyKTtcbiAgICAgICAgICAgIHNkaXJbMF0gPSAodDIgKiB4MSAtIHQxICogeDIpICogcjtcbiAgICAgICAgICAgIHNkaXJbMV0gPSAodDIgKiB5MSAtIHQxICogeTIpICogcjtcbiAgICAgICAgICAgIHNkaXJbMl0gPSAodDIgKiB6MSAtIHQxICogejIpICogcjtcblxuICAgICAgICAgICAgdGRpclswXSA9IChzMSAqIHgyIC0gczIgKiB4MSkgKiByO1xuICAgICAgICAgICAgdGRpclsxXSA9IChzMSAqIHkyIC0gczIgKiB5MSkgKiByO1xuICAgICAgICAgICAgdGRpclsyXSA9IChzMSAqIHoyIC0gczIgKiB6MSkgKiByO1xuXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTFdLCB0YW4xW2kxXSwgc2Rpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTJdLCB0YW4xW2kyXSwgc2Rpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTNdLCB0YW4xW2kzXSwgc2Rpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTFdLCB0YW4yW2kxXSwgdGRpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTJdLCB0YW4yW2kyXSwgdGRpcik7XG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTNdLCB0YW4yW2kzXSwgdGRpcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRtcCA9IHZlYzNDcmVhdGUoKTtcbiAgICAgICAgdmFyIG5Dcm9zc1QgPSB2ZWMzQ3JlYXRlKCk7XG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXg7IGkrKykge1xuICAgICAgICAgICAgblswXSA9IG5vcm1hbHNbaSAqIDNdO1xuICAgICAgICAgICAgblsxXSA9IG5vcm1hbHNbaSAqIDMgKyAxXTtcbiAgICAgICAgICAgIG5bMl0gPSBub3JtYWxzW2kgKiAzICsgMl07XG4gICAgICAgICAgICB2YXIgdCA9IHRhbjFbaV07XG5cbiAgICAgICAgICAgIC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHRtcCwgbiwgdmVjMy5kb3QobiwgdCkpO1xuICAgICAgICAgICAgdmVjMy5zdWIodG1wLCB0LCB0bXApO1xuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wLCB0bXApO1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhhbmRlZG5lc3MuXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG5Dcm9zc1QsIG4sIHQpO1xuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDRdID0gdG1wWzBdO1xuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAxXSA9IHRtcFsxXTtcbiAgICAgICAgICAgIHRhbmdlbnRzW2kgKiA0ICsgMl0gPSB0bXBbMl07XG4gICAgICAgICAgICAvLyBQRU5ESU5HIGNhbiBjb25maWcgP1xuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAzXSA9IHZlYzMuZG90KG5Dcm9zc1QsIHRhbjJbaV0pIDwgMC4wID8gLTEuMCA6IDEuMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIElmIHZlcnRpY2VzIGFyZSBub3Qgc2hhcmVkIGJ5IGRpZmZlcmVudCBpbmRpY2VzLlxuICAgICAqL1xuICAgIGlzVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhDb3VudCA9PT0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB1bmlxdWUgdmVydGV4IGZvciBlYWNoIGluZGV4LlxuICAgICAqL1xuICAgIGdlbmVyYXRlVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCB8fCAhdGhpcy5pbmRpY2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbmRpY2VzLmxlbmd0aCA+IDB4ZmZmZikge1xuICAgICAgICAgICAgdGhpcy5pbmRpY2VzID0gbmV3IHZlbmRvci5VaW50MzJBcnJheSh0aGlzLmluZGljZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xuXG4gICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICB2YXIgb2xkQXR0clZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZU5hbWVMaXN0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xuICAgICAgICAgICAgb2xkQXR0clZhbHVlc1tuYW1lXSA9IGF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW25hbWVdLmluaXQodGhpcy5pbmRpY2VzLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3Vyc29yID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJ1dGVOYW1lTGlzdC5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZUxpc3RbYV07XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGF0dHJpYnV0ZXNbbmFtZV0uc2l6ZTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2N1cnNvciAqIHNpemUgKyBrXSA9IG9sZEF0dHJWYWx1ZXNbbmFtZV1baWkgKiBzaXplICsga107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGN1cnNvcjtcbiAgICAgICAgICAgIGN1cnNvcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBmb3Igd2lyZWZyYW1lIGRyYXcuXG4gICAgICovXG4gICAgZ2VuZXJhdGVCYXJ5Y2VudHJpYzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc1VuaXF1ZVZlcnRleCgpKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcbiAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlcy5iYXJ5Y2VudHJpYy52YWx1ZTtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RlZDtcbiAgICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gaW5kaWNlcy5sZW5ndGggKiAzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShpbmRpY2VzLmxlbmd0aCAqIDMpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQgLyAzKTspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlpID0gaW5kaWNlcyA/IGluZGljZXNbaSsrXSA6IChpICogMyArIGopO1xuICAgICAgICAgICAgICAgIGFycmF5W2lpICogMyArIGpdID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpcnR5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHRyYW5zZm9ybSB0byBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxuICAgICAqIEBwYXJhbSB7Y2xheS5tYXRoLk1hdHJpeDR9IG1hdHJpeFxuICAgICAqL1xuICAgIGFwcGx5VHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XG5cbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XG5cbiAgICAgICAgbWF0cml4ID0gbWF0cml4LmFycmF5O1xuICAgICAgICAvLyBOb3JtYWwgTWF0cml4XG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlTWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcbiAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XG5cbiAgICAgICAgdmFyIHZlYzNUcmFuc2Zvcm1NYXQ0ID0gdmVjMy50cmFuc2Zvcm1NYXQ0O1xuICAgICAgICB2YXIgdmVjM0ZvckVhY2ggPSB2ZWMzLmZvckVhY2g7XG4gICAgICAgIHZlYzNGb3JFYWNoKHBvc2l0aW9ucywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XG4gICAgICAgIGlmIChub3JtYWxzKSB7XG4gICAgICAgICAgICB2ZWMzRm9yRWFjaChub3JtYWxzLCAzLCAwLCBudWxsLCB2ZWMzVHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhbmdlbnRzKSB7XG4gICAgICAgICAgICB2ZWMzRm9yRWFjaCh0YW5nZW50cywgNCwgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBnZW9tZXRyeSBkYXRhIGluIEdMIGNvbnRleHQuXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XG4gICAgICAgIGlmIChjaHVua3MpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2h1bmtzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnMuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsuaW5kaWNlc0J1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoY2h1bmsuaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xuICAgIH1cblxufSk7XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5I3ZlcnRleENvdW50XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAcmVhZE9ubHlcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnkucHJvdG90eXBlLCAndmVydGV4Q291bnQnLCB7XG5cbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG5cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbWFpbkF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1t0aGlzLm1haW5BdHRyaWJ1dGVdO1xuICAgICAgICAgICAgaWYgKCFtYWluQXR0cmlidXRlIHx8ICFtYWluQXR0cmlidXRlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWFpbkF0dHJpYnV0ZS52YWx1ZS5sZW5ndGggLyBtYWluQXR0cmlidXRlLnNpemU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5I3RyaWFuZ2xlQ291bnRcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEByZWFkT25seVxuICAgICAqL1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeS5wcm90b3R5cGUsICd0cmlhbmdsZUNvdW50Jywge1xuXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XG4gICAgICAgICAgICBpZiAoIWluZGljZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRpY2VzLmxlbmd0aCAvIDM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuR2VvbWV0cnkuU1RBVElDX0RSQVcgPSBnbGVudW0uU1RBVElDX0RSQVc7XG5HZW9tZXRyeS5EWU5BTUlDX0RSQVcgPSBnbGVudW0uRFlOQU1JQ19EUkFXO1xuR2VvbWV0cnkuU1RSRUFNX0RSQVcgPSBnbGVudW0uU1RSRUFNX0RSQVc7XG5cbkdlb21ldHJ5LkF0dHJpYnV0ZUJ1ZmZlciA9IEF0dHJpYnV0ZUJ1ZmZlcjtcbkdlb21ldHJ5LkluZGljZXNCdWZmZXIgPSBJbmRpY2VzQnVmZmVyO1xuXG5HZW9tZXRyeS5BdHRyaWJ1dGUgPSBBdHRyaWJ1dGU7XG5cbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5O1xuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5QbGFuZVxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXG4gKi9cbnZhciBQbGFuZSA9IEdlb21ldHJ5LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZSMgKi9cbntcbiAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHdpZHRoU2VnbWVudHM6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBoZWlnaHRTZWdtZW50czogMVxufSwgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5idWlsZCgpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBCdWlsZCBwbGFuZSBnZW9tZXRyeVxuICAgICAqL1xuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcbiAgICAgICAgdmFyIHdpZHRoU2VnbWVudHMgPSB0aGlzLndpZHRoU2VnbWVudHM7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBbXTtcbiAgICAgICAgdmFyIGZhY2VzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPD0gaGVpZ2h0U2VnbWVudHM7IHkrKykge1xuICAgICAgICAgICAgdmFyIHQgPSB5IC8gaGVpZ2h0U2VnbWVudHM7XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8PSB3aWR0aFNlZ21lbnRzOyB4KyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcyA9IHggLyB3aWR0aFNlZ21lbnRzO1xuXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goWzIgKiBzIC0gMSwgMiAqIHQgLSAxLCAwXSk7XG4gICAgICAgICAgICAgICAgaWYgKHRleGNvb3Jkcykge1xuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaChbcywgdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9ybWFscykge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goWzAsIDAsIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHggPCB3aWR0aFNlZ21lbnRzICYmIHkgPCBoZWlnaHRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHggKyB5ICogKHdpZHRoU2VnbWVudHMgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMV0pO1xuICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtpICsgd2lkdGhTZWdtZW50cyArIDEsIGkgKyAxLCBpICsgd2lkdGhTZWdtZW50cyArIDJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xuICAgICAgICBhdHRyaWJ1dGVzLnRleGNvb3JkMC5mcm9tQXJyYXkodGV4Y29vcmRzKTtcbiAgICAgICAgYXR0cmlidXRlcy5ub3JtYWwuZnJvbUFycmF5KG5vcm1hbHMpO1xuXG4gICAgICAgIHRoaXMuaW5pdEluZGljZXNGcm9tQXJyYXkoZmFjZXMpO1xuXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC0xLCAtMSwgMCk7XG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldCgxLCAxLCAwKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IFBsYW5lIGZyb20gJy4vUGxhbmUnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcblxudmFyIHBsYW5lTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DdWJlXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LndpZHRoU2VnbWVudHNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmRlcHRoU2VnbWVudHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHQuaW5zaWRlXVxuICovXG52YXIgQ3ViZSA9IEdlb21ldHJ5LmV4dGVuZChcbi8qKkBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN1YmUjICovXG57XG4gICAgZHluYW1pYzogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB3aWR0aFNlZ21lbnRzOiAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgaGVpZ2h0U2VnbWVudHM6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBkZXB0aFNlZ21lbnRzOiAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGluc2lkZTogZmFsc2Vcbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYnVpbGQoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3ViZS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBCdWlsZCBjdWJlIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBwbGFuZXMgPSB7XG4gICAgICAgICAgICAncHgnOiBjcmVhdGVQbGFuZSgncHgnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxuICAgICAgICAgICAgJ254JzogY3JlYXRlUGxhbmUoJ254JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcbiAgICAgICAgICAgICdweSc6IGNyZWF0ZVBsYW5lKCdweScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcbiAgICAgICAgICAgICdueSc6IGNyZWF0ZVBsYW5lKCdueScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcbiAgICAgICAgICAgICdweic6IGNyZWF0ZVBsYW5lKCdweicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXG4gICAgICAgICAgICAnbnonOiBjcmVhdGVQbGFuZSgnbnonLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBhdHRyTGlzdCA9IFsncG9zaXRpb24nLCAndGV4Y29vcmQwJywgJ25vcm1hbCddO1xuICAgICAgICB2YXIgdmVydGV4TnVtYmVyID0gMDtcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSAwO1xuICAgICAgICBmb3IgKHZhciBwb3MgaW4gcGxhbmVzKSB7XG4gICAgICAgICAgICB2ZXJ0ZXhOdW1iZXIgKz0gcGxhbmVzW3Bvc10udmVydGV4Q291bnQ7XG4gICAgICAgICAgICBmYWNlTnVtYmVyICs9IHBsYW5lc1twb3NdLmluZGljZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTGlzdFtrXV0uaW5pdCh2ZXJ0ZXhOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZmFjZU51bWJlcik7XG4gICAgICAgIHZhciBmYWNlT2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIHZlcnRleE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcbiAgICAgICAgICAgIHZhciBwbGFuZSA9IHBsYW5lc1twb3NdO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBhdHRyTGlzdC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJMaXN0W2tdO1xuICAgICAgICAgICAgICAgIHZhciBhdHRyQXJyYXkgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB2YXIgYXR0clNpemUgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS5zaXplO1xuICAgICAgICAgICAgICAgIHZhciBpc05vcm1hbCA9IGF0dHJOYW1lID09PSAnbm9ybWFsJztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhdHRyQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc2lkZSAmJiBpc05vcm1hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVtpICsgYXR0clNpemUgKiB2ZXJ0ZXhPZmZzZXRdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGxlbiA9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFuZS5pbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRpY2VzW2kgKyBmYWNlT2Zmc2V0XSA9IHZlcnRleE9mZnNldCArIHBsYW5lLmluZGljZXNbdGhpcy5pbnNpZGUgPyAobGVuIC0gaSAtIDEpIDogaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmYWNlT2Zmc2V0ICs9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgdmVydGV4T2Zmc2V0ICs9IHBsYW5lLnZlcnRleENvdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMSk7XG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIC0xKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gY3JlYXRlUGxhbmUocG9zLCB3aWR0aFNlZ21lbnRzLCBoZWlnaHRTZWdtZW50cykge1xuXG4gICAgcGxhbmVNYXRyaXguaWRlbnRpdHkoKTtcblxuICAgIHZhciBwbGFuZSA9IG5ldyBQbGFuZSh7XG4gICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXG4gICAgICAgIGhlaWdodFNlZ21lbnRzOiBoZWlnaHRTZWdtZW50c1xuICAgIH0pO1xuXG4gICAgc3dpdGNoKHBvcykge1xuICAgICAgICBjYXNlICdweCc6XG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWCk7XG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVkocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBNYXRoLlBJIC8gMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbngnOlxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1gpO1xuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgLU1hdGguUEkgLyAyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdweSc6XG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWSk7XG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCAtTWF0aC5QSSAvIDIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ255JzpcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWChwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkgLyAyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdweic6XG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnonOlxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1opO1xuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcGxhbmUuYXBwbHlUcmFuc2Zvcm0ocGxhbmVNYXRyaXgpO1xuICAgIHJldHVybiBwbGFuZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3ViZTtcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuU3BoZXJlXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhTZWdtZW50c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0U2VnbWVudHNdXG4gKiBAcGFyYW0ge251bWJlcn0gW3BoaVN0YXJ0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlMZW5ndGhdXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhU3RhcnRdXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhTGVuZ3RoXVxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXNdXG4gKi9cbnZhciBTcGhlcmUgPSBHZW9tZXRyeS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlIyAqL1xue1xuICAgIGR5bmFtaWM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgd2lkdGhTZWdtZW50czogNDAsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBoZWlnaHRTZWdtZW50czogMjAsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHBoaVN0YXJ0OiAwLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcGhpTGVuZ3RoOiBNYXRoLlBJICogMixcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhldGFTdGFydDogMCxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoZXRhTGVuZ3RoOiBNYXRoLlBJLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICByYWRpdXM6IDFcblxufSwgZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5idWlsZCgpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQnVpbGQgc3BoZXJlIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaGVpZ2h0U2VnbWVudHMgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcblxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcbiAgICAgICAgdmFyIG5vcm1hbEF0dHIgPSB0aGlzLmF0dHJpYnV0ZXMubm9ybWFsO1xuXG4gICAgICAgIHZhciB2ZXJ0ZXhDb3VudCA9ICh3aWR0aFNlZ21lbnRzICsgMSkgKiAoaGVpZ2h0U2VnbWVudHMgKyAxKTtcbiAgICAgICAgcG9zaXRpb25BdHRyLmluaXQodmVydGV4Q291bnQpO1xuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XG4gICAgICAgIG5vcm1hbEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XG5cbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4Q291bnQgPiAweGZmZmYgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5O1xuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcyA9IG5ldyBJbmRpY2VzQ3Rvcih3aWR0aFNlZ21lbnRzICogaGVpZ2h0U2VnbWVudHMgKiA2KTtcblxuICAgICAgICB2YXIgeCwgeSwgeixcbiAgICAgICAgICAgIHUsIHYsXG4gICAgICAgICAgICBpLCBqO1xuXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcbiAgICAgICAgdmFyIHBoaVN0YXJ0ID0gdGhpcy5waGlTdGFydDtcbiAgICAgICAgdmFyIHBoaUxlbmd0aCA9IHRoaXMucGhpTGVuZ3RoO1xuICAgICAgICB2YXIgdGhldGFTdGFydCA9IHRoaXMudGhldGFTdGFydDtcbiAgICAgICAgdmFyIHRoZXRhTGVuZ3RoID0gdGhpcy50aGV0YUxlbmd0aDtcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xuXG4gICAgICAgIHZhciBwb3MgPSBbXTtcbiAgICAgICAgdmFyIHV2ID0gW107XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgZGl2aWRlciA9IDEgLyByYWRpdXM7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPD0gaGVpZ2h0U2VnbWVudHM7IGogKyspIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gd2lkdGhTZWdtZW50czsgaSArKykge1xuICAgICAgICAgICAgICAgIHUgPSBpIC8gd2lkdGhTZWdtZW50cztcbiAgICAgICAgICAgICAgICB2ID0gaiAvIGhlaWdodFNlZ21lbnRzO1xuXG4gICAgICAgICAgICAgICAgLy8gWCBheGlzIGlzIGludmVydGVkIHNvIHRleHR1cmUgY2FuIGJlIG1hcHBlZCBmcm9tIGxlZnQgdG8gcmlnaHRcbiAgICAgICAgICAgICAgICB4ID0gLXJhZGl1cyAqIE1hdGguY29zKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB5ID0gcmFkaXVzICogTWF0aC5jb3ModGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgeiA9IHJhZGl1cyAqIE1hdGguc2luKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHg7IHBvc1sxXSA9IHk7IHBvc1syXSA9IHo7XG4gICAgICAgICAgICAgICAgdXZbMF0gPSB1OyB1dlsxXSA9IHY7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChvZmZzZXQsIHBvcyk7XG4gICAgICAgICAgICAgICAgdGV4Y29vcmRBdHRyLnNldChvZmZzZXQsIHV2KTtcbiAgICAgICAgICAgICAgICBwb3NbMF0gKj0gZGl2aWRlcjtcbiAgICAgICAgICAgICAgICBwb3NbMV0gKj0gZGl2aWRlcjtcbiAgICAgICAgICAgICAgICBwb3NbMl0gKj0gZGl2aWRlcjtcbiAgICAgICAgICAgICAgICBub3JtYWxBdHRyLnNldChvZmZzZXQsIHBvcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaTEsIGkyLCBpMywgaTQ7XG5cbiAgICAgICAgdmFyIGxlbiA9IHdpZHRoU2VnbWVudHMgKyAxO1xuXG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhTZWdtZW50czsgaSArKykge1xuICAgICAgICAgICAgICAgIGkyID0gaiAqIGxlbiArIGk7XG4gICAgICAgICAgICAgICAgaTEgPSAoaiAqIGxlbiArIGkgKyAxKTtcbiAgICAgICAgICAgICAgICBpNCA9IChqICsgMSkgKiBsZW4gKyBpICsgMTtcbiAgICAgICAgICAgICAgICBpMyA9IChqICsgMSkgKiBsZW4gKyBpO1xuXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XG5cbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHJhZGl1cywgcmFkaXVzLCByYWRpdXMpO1xuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXJhZGl1cywgLXJhZGl1cywgLXJhZGl1cyk7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNwaGVyZTtcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2VcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxuICogQHBhcmFtIHtPYmplY3R9IFtnZW5lcmF0b3JdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cbiAqL1xudmFyIFBhcmFtZXRyaWNTdXJmYWNlID0gR2VvbWV0cnkuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlIyAqL1xue1xuICAgIGR5bmFtaWM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgZ2VuZXJhdG9yOiBudWxsXG5cbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYnVpbGQoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQnVpbGQgcGFyYW1ldHJpYyBzdXJmYWNlIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xuXG4gICAgICAgIGlmICghZ2VuZXJhdG9yIHx8ICFnZW5lcmF0b3IueCB8fCAhZ2VuZXJhdG9yLnkgfHwgIWdlbmVyYXRvci56KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHhGdW5jID0gZ2VuZXJhdG9yLng7XG4gICAgICAgIHZhciB5RnVuYyA9IGdlbmVyYXRvci55O1xuICAgICAgICB2YXIgekZ1bmMgPSBnZW5lcmF0b3IuejtcbiAgICAgICAgdmFyIHVSYW5nZSA9IGdlbmVyYXRvci51IHx8IFswLCAxLCAwLjA1XTtcbiAgICAgICAgdmFyIHZSYW5nZSA9IGdlbmVyYXRvci52IHx8IFswLCAxLCAwLjA1XTtcblxuICAgICAgICB2YXIgdU51bSA9IE1hdGguZmxvb3IoKHVSYW5nZVsxXSAtIHVSYW5nZVswXSArIHVSYW5nZVsyXSkgLyB1UmFuZ2VbMl0pO1xuICAgICAgICB2YXIgdk51bSA9IE1hdGguZmxvb3IoKHZSYW5nZVsxXSAtIHZSYW5nZVswXSArIHZSYW5nZVsyXSkgLyB2UmFuZ2VbMl0pO1xuXG4gICAgICAgIGlmICghaXNGaW5pdGUodU51bSkgfHwgIWlzRmluaXRlKHZOdW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZmluaXRlIGdlbmVyYXRvcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZlcnRleE51bSA9IHVOdW0gKiB2TnVtO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uaW5pdCh2ZXJ0ZXhOdW0pO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQodmVydGV4TnVtKTtcblxuICAgICAgICB2YXIgcG9zID0gW107XG4gICAgICAgIHZhciB0ZXhjb29yZCA9IFtdO1xuICAgICAgICB2YXIgblZlcnRleCA9IDA7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdk51bTsgaisrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW07IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciB1ID0gaSAqIHVSYW5nZVsyXSArIHVSYW5nZVswXTtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogKiB2UmFuZ2VbMl0gKyB2UmFuZ2VbMF07XG4gICAgICAgICAgICAgICAgcG9zWzBdID0geEZ1bmModSwgdik7XG4gICAgICAgICAgICAgICAgcG9zWzFdID0geUZ1bmModSwgdik7XG4gICAgICAgICAgICAgICAgcG9zWzJdID0gekZ1bmModSwgdik7XG5cbiAgICAgICAgICAgICAgICB0ZXhjb29yZFswXSA9IGkgLyAodU51bSAtIDEpO1xuICAgICAgICAgICAgICAgIHRleGNvb3JkWzFdID0gaiAvICh2TnVtIC0gMSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uc2V0KG5WZXJ0ZXgsIHBvcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC5zZXQoblZlcnRleCwgdGV4Y29vcmQpO1xuICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleE51bSA+IDB4ZmZmZiA/IFVpbnQzMkFycmF5IDogVWludDE2QXJyYXk7XG4gICAgICAgIHZhciBuSW5kaWNlcyA9ICh1TnVtIC0gMSkgKiAodk51bSAtIDEpICogNjtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXMgPSBuZXcgSW5kaWNlc0N0b3IobkluZGljZXMpO1xuXG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtIC0gMTsgaisrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW0gLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSBqICogdU51bSArIGk7XG4gICAgICAgICAgICAgICAgdmFyIGkxID0gKGogKiB1TnVtICsgaSArIDEpO1xuICAgICAgICAgICAgICAgIHZhciBpNCA9IChqICsgMSkgKiB1TnVtICsgaSArIDE7XG4gICAgICAgICAgICAgICAgdmFyIGkzID0gKGogKyAxKSAqIHVOdW0gKyBpO1xuXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XG5cbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUGFyYW1ldHJpY1N1cmZhY2U7XG4iLCJ2YXIgbWF0aFV0aWwgPSB7fTtcblxubWF0aFV0aWwuaXNQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PT0gMDtcbn07XG5cbm1hdGhVdGlsLm5leHRQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFsdWUgLS07XG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTtcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAyO1xuICAgIHZhbHVlIHw9IHZhbHVlID4+IDQ7XG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gODtcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAxNjtcbiAgICB2YWx1ZSArKztcblxuICAgIHJldHVybiB2YWx1ZTtcbn07XG5cbm1hdGhVdGlsLm5lYXJlc3RQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLnJvdW5kKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGhVdGlsO1xuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgbWF0aFV0aWwgZnJvbSAnLi9tYXRoL3V0aWwnO1xudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlMkRcbiAqIEBleHRlbmRzIGNsYXkuVGV4dHVyZVxuICpcbiAqIEBleGFtcGxlXG4gKiAgICAgLi4uXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcbiAqICAgICAgICAgc2hhZGVyOiBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5waG9uZycsICdkaWZmdXNlTWFwJylcbiAqICAgICB9KTtcbiAqICAgICB2YXIgZGlmZnVzZU1hcCA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xuICogICAgIGRpZmZ1c2VNYXAubG9hZCgnYXNzZXRzL3RleHR1cmVzL2RpZmZ1c2UuanBnJyk7XG4gKiAgICAgbWF0LnNldCgnZGlmZnVzZU1hcCcsIGRpZmZ1c2VNYXApO1xuICogICAgIC4uLlxuICogICAgIGRpZmZ1c2VNYXAuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XG4gKiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBkaWZmdXNlIHRleHR1cmUgbG9hZGVkXG4gKiAgICAgICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgICAgIH0pO1xuICogICAgIH0pO1xuICovXG52YXIgVGV4dHVyZTJEID0gVGV4dHVyZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZTJEIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9XG4gICAgICAgICAqL1xuICAgICAgICBpbWFnZTogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBpeGVscyBkYXRhLiBXaWxsIGJlIGlnbm9yZWQgaWYgaW1hZ2UgaXMgc2V0LlxuICAgICAgICAgKiBAdHlwZSB7P1VpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fVxuICAgICAgICAgKi9cbiAgICAgICAgcGl4ZWxzOiBudWxsLFxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiAgICAgW3tcbiAgICAgICAgICogICAgICAgICBpbWFnZTogbWlwbWFwMCxcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcbiAgICAgICAgICogICAgIH0sIHtcbiAgICAgICAgICogICAgICAgICBpbWFnZTogbWlwbWFwMSxcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcbiAgICAgICAgICogICAgIH0sIC4uLi5dXG4gICAgICAgICAqL1xuICAgICAgICBtaXBtYXBzOiBbXVxuICAgIH07XG59LCB7XG5cbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmUyRCcsXG5cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFXzJELCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xuXG4gICAgICAgIHZhciBnbEZvcm1hdCA9IHRoaXMuZm9ybWF0O1xuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xuXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9XUkFQX1MsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFMoKSk7XG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XG5cbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWFnRmlsdGVyKCkpO1xuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XG5cbiAgICAgICAgdmFyIGFuaXNvdHJvcGljRXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpO1xuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFXzJELCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxuICAgICAgICBpZiAoZ2xUeXBlID09PSAzNjE5Mykge1xuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xuICAgICAgICAgICAgICAgIGdsVHlwZSA9IGdsZW51bS5GTE9BVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgbWlwbWFwLCBpLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKTtcbiAgICAgICAgICAgICAgICB3aWR0aCAvPSAyO1xuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCB0aGlzLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XG4gICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFXzJEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG4gICAgfSxcblxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpIHtcbiAgICAgICAgaWYgKGRhdGEuaW1hZ2UpIHtcbiAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEuaW1hZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2FuIGJlIHVzZWQgYXMgYSBibGFuayB0ZXh0dXJlIHdoZW4gd3JpdGluZyByZW5kZXIgdG8gdGV4dHVyZShSVFQpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2xGb3JtYXQgPD0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxuICAgICAgICAgICAgICAgICYmIGdsRm9ybWF0ID49IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEucGl4ZWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElzIGEgcmVuZGVyIHRhcmdldCBpZiBwaXhlbHMgaXMgbnVsbFxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlRleHR1cmUyRC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFXzJEKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0O1xuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHdpZHRoKSAmJiBpc1Bvd2VyT2ZUd28oaGVpZ2h0KTtcbiAgICB9LFxuXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5ub2RlTmFtZSA9PT0gJ0NBTlZBUydcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmltYWdlLm5vZGVOYW1lID09PSAnVklERU8nXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5pbWFnZS5jb21wbGV0ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAhISh0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcbiAgICB9LFxuXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XG4gICAgfSxcblxuICAgIGxvYWQ6IGZ1bmN0aW9uIChzcmMsIGNyb3NzT3JpZ2luKSB7XG4gICAgICAgIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLmRpcnR5KCk7XG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBzZWxmKTtcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgc2VsZik7XG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUyRC5wcm90b3R5cGUsICd3aWR0aCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCB3aWR0aCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3dpZHRoICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgaGVpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faGVpZ2h0ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmUyRDtcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcbnZhciBpc1Bvd2VyT2ZUd28gPSBtYXRoVXRpbC5pc1Bvd2VyT2ZUd287XG5cbnZhciB0YXJnZXRMaXN0ID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmVDdWJlXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgIC4uLlxuICogICAgIHZhciBtYXQgPSBuZXcgY2xheS5NYXRlcmlhbCh7XG4gKiAgICAgICAgIHNoYWRlcjogY2xheS5zaGFkZXIubGlicmFyeS5nZXQoJ2NsYXkucGhvbmcnLCAnZW52aXJvbm1lbnRNYXAnKVxuICogICAgIH0pO1xuICogICAgIHZhciBlbnZNYXAgPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSgpO1xuICogICAgIGVudk1hcC5sb2FkKHtcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcbiAqICAgICAgICAgJ254JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnguanBnJ1xuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcbiAqICAgICAgICAgJ3B6JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHouanBnJ1xuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXG4gKiAgICAgfSk7XG4gKiAgICAgbWF0LnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuICogICAgIC4uLlxuICogICAgIGVudk1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAqICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNreSB0ZXh0dXJlIGxvYWRlZFxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xuICogICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuICogICAgICAgICB9KTtcbiAqICAgICB9KTtcbiAqL1xudmFyIFRleHR1cmVDdWJlID0gVGV4dHVyZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZUN1YmUjICove1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIC8vIFBFTkRJTkcgY3ViZW1hcCBzaG91bGQgbm90IGZsaXBZIGluIGRlZmF1bHQuXG4gICAgICAgIC8vIGZsaXBZOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHhcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnhcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHlcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnlcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHpcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnpcbiAgICAgICAgICovXG4gICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgICBweDogbnVsbCxcbiAgICAgICAgICAgIG54OiBudWxsLFxuICAgICAgICAgICAgcHk6IG51bGwsXG4gICAgICAgICAgICBueTogbnVsbCxcbiAgICAgICAgICAgIHB6OiBudWxsLFxuICAgICAgICAgICAgbno6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBpeGVscyBkYXRhIG9mIGVhY2ggc2lkZS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlcyBhcmUgc2V0LlxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweFxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueFxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweVxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueVxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBwelxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBuelxuICAgICAgICAgKi9cbiAgICAgICAgcGl4ZWxzOiB7XG4gICAgICAgICAgICBweDogbnVsbCxcbiAgICAgICAgICAgIG54OiBudWxsLFxuICAgICAgICAgICAgcHk6IG51bGwsXG4gICAgICAgICAgICBueTogbnVsbCxcbiAgICAgICAgICAgIHB6OiBudWxsLFxuICAgICAgICAgICAgbno6IG51bGxcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxuICAgICAgICAgKi9cbiAgICAgICAgbWlwbWFwczogW11cbiAgICB9O1xufSwge1xuXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlQ3ViZScsXG5cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29tbW9uKHJlbmRlcmVyKTtcblxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgdmFyIGdsVHlwZSA9IHRoaXMudHlwZTtcblxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLmdldEF2YWlsYWJsZVdyYXBTKCkpO1xuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9ULCB0aGlzLmdldEF2YWlsYWJsZVdyYXBUKCkpO1xuXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCB0aGlzLmdldEF2YWlsYWJsZU1hZ0ZpbHRlcigpKTtcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xuXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XG4gICAgICAgICAgICBfZ2wudGV4UGFyYW1ldGVyZihfZ2wuVEVYVFVSRV9DVUJFX01BUCwgYW5pc290cm9waWNFeHQuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsIHRoaXMuYW5pc290cm9waWMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gZmxvYXQgdHlwZSBpZiBicm93c2VyIGRvbid0IGhhdmUgaGFsZiBmbG9hdCBleHRlbnNpb25cbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xuICAgICAgICAgICAgaWYgKCFoYWxmRmxvYXRFeHQpIHtcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pcG1hcCA9IHRoaXMubWlwbWFwc1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcbiAgICAgICAgICAgICAgICBoZWlnaHQgLz0gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgdGhpcywgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuTlBPVCAmJiB0aGlzLnVzZU1pcG1hcCkge1xuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0TGlzdFtpXTtcbiAgICAgICAgICAgIHZhciBpbWcgPSBkYXRhLmltYWdlICYmIGRhdGEuaW1hZ2VbdGFyZ2V0XTtcbiAgICAgICAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICBfZ2wudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgbGV2ZWwsIGdsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMgJiYgZGF0YS5waXhlbHNbdGFyZ2V0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlQ3ViZS5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcbiAgICB9LFxuXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XG4gICAgfSxcblxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgaXNQb3dlck9mVHdvIG1ldGhvZFxuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LndpZHRoKVxuICAgICAgICAgICAgICAgICYmIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMud2lkdGgpXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UucHgpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB4KVxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubngpXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weSlcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm55KVxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHopXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gISEodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgbG9hZDogZnVuY3Rpb24gKGltYWdlTGlzdCwgY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHV0aWwuZWFjaChpbWFnZUxpc3QsIGZ1bmN0aW9uIChzcmMsIHRhcmdldCl7XG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGlmIChjcm9zc09yaWdpbikge1xuICAgICAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgc2VsZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsb2FkaW5nIC0tO1xuICAgICAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZGluZysrO1xuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xuICAgICAgICAgICAgc2VsZi5pbWFnZVt0YXJnZXRdID0gaW1hZ2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLnB4LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UucHguaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCBoZWlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbmZ1bmN0aW9uIGlzSW1hZ2VSZW5kZXJhYmxlKGltYWdlKSB7XG4gICAgcmV0dXJuIGltYWdlLm5vZGVOYW1lID09PSAnQ0FOVkFTJyB8fFxuICAgICAgICAgICAgaW1hZ2Uubm9kZU5hbWUgPT09ICdWSURFTycgfHxcbiAgICAgICAgICAgIGltYWdlLmNvbXBsZXRlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlQ3ViZTtcbiIsImltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcblxudmFyIF9saWJyYXJ5ID0ge307XG5cbmZ1bmN0aW9uIFNoYWRlckxpYnJhcnkgKCkge1xuICAgIHRoaXMuX3Bvb2wgPSB7fTtcbn1cblxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBrZXkgPSBuYW1lO1xuXG4gICAgaWYgKHRoaXMuX3Bvb2xba2V5XSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9vbFtrZXldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IF9saWJyYXJ5W25hbWVdO1xuICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCInICsgJyBpcyBub3QgaW4gdGhlIGxpYnJhcnknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihzb3VyY2UudmVydGV4LCBzb3VyY2UuZnJhZ21lbnQpO1xuICAgICAgICB0aGlzLl9wb29sW2tleV0gPSBzaGFkZXI7XG4gICAgICAgIHJldHVybiBzaGFkZXI7XG4gICAgfVxufTtcblxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wb29sID0ge307XG59O1xuXG5mdW5jdGlvbiB0ZW1wbGF0ZShuYW1lLCB2ZXJ0ZXgsIGZyYWdtZW50KSB7XG4gICAgX2xpYnJhcnlbbmFtZV0gPSB7XG4gICAgICAgIHZlcnRleDogdmVydGV4LFxuICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRcbiAgICB9O1xufVxuXG52YXIgZGVmYXVsdExpYnJhcnkgPSBuZXcgU2hhZGVyTGlicmFyeSgpO1xuXG4vKipcbiAqICMjIyBCdWlsaW4gc2hhZGVyc1xuICogKyBjbGF5LnN0YW5kYXJkXG4gKiArIGNsYXkuYmFzaWNcbiAqICsgY2xheS5sYW1iZXJ0XG4gKiArIGNsYXkud2lyZWZyYW1lXG4gKlxuICogQG5hbWVzcGFjZSBjbGF5LnNoYWRlci5saWJyYXJ5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgc2hhZGVyIGxpYnJhcnkuXG4gICAgICovXG4gICAgY3JlYXRlTGlicmFyeTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNoYWRlckxpYnJhcnkoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldCBzaGFkZXIgZnJvbSBkZWZhdWx0IGxpYnJhcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxuICAgICAqIEBleGFtcGxlXG4gICAgICogICAgIGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnN0YW5kYXJkJylcbiAgICAgKi9cbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmdldC5hcHBseShkZWZhdWx0TGlicmFyeSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB2ZXJ0ZXggLSBWZXJ0ZXggc2hhZGVyIGNvZGVcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGZyYWdtZW50IC0gRnJhZ21lbnQgc2hhZGVyIGNvZGVcbiAgICAgKi9cbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmNsZWFyKCk7XG4gICAgfVxufTtcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuXG4vLyBDYWNoZVxudmFyIHByZXZEcmF3SUQgPSAwO1xudmFyIHByZXZEcmF3SW5kaWNlc0J1ZmZlciA9IG51bGw7XG52YXIgcHJldkRyYXdJc1VzZUluZGljZXMgPSB0cnVlO1xuXG52YXIgY3VycmVudERyYXdJRDtcblxudmFyIFJlbmRlckluZm8gPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRyaWFuZ2xlQ291bnQgPSAwO1xuICAgIHRoaXMudmVydGV4Q291bnQgPSAwO1xuICAgIHRoaXMuZHJhd0NhbGxDb3VudCA9IDA7XG59O1xuXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChcbiAgICBhdmFpbGFibGVBdHRyaWJ1dGVzLFxuICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsXG4gICAgaW5kaWNlc0J1ZmZlclxuKSB7XG4gICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVzID0gYXZhaWxhYmxlQXR0cmlidXRlcztcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMgPSBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzO1xuICAgIHRoaXMuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XG5cbiAgICB0aGlzLnZhbyA9IG51bGw7XG59XG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuUmVuZGVyYWJsZVxuICogQGV4dGVuZHMgY2xheS5Ob2RlXG4gKi9cbnZhciBSZW5kZXJhYmxlID0gTm9kZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZSMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5NYXRlcmlhbH1cbiAgICAgKi9cbiAgICBtYXRlcmlhbDogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5Lkdlb21ldHJ5fVxuICAgICAqL1xuICAgIGdlb21ldHJ5OiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBtb2RlOiBnbGVudW0uVFJJQU5HTEVTLFxuXG4gICAgX2RyYXdDYWNoZTogbnVsbCxcblxuICAgIF9yZW5kZXJJbmZvOiBudWxsXG59LCBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9kcmF3Q2FjaGUgPSB7fTtcbiAgICB0aGlzLl9yZW5kZXJJbmZvID0gbmV3IFJlbmRlckluZm8oKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZS5wcm90b3R5cGUgKi9cbntcblxuICAgIF9fcHJvZ3JhbTogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIEdyb3VwIG9mIHJlY2VpdmVkIGxpZ2h0LlxuICAgICAqL1xuICAgIGxpZ2h0R3JvdXA6IDAsXG4gICAgLyoqXG4gICAgICogUmVuZGVyIG9yZGVyLCBOb2RlcyB3aXRoIHNtYWxsZXIgdmFsdWUgcmVuZGVycyBiZWZvcmUgbm9kZXMgd2l0aCBsYXJnZXIgdmFsdWVzLlxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgcmVuZGVyT3JkZXI6IDAsXG4gICAgLyoqXG4gICAgICogVXNlZCB3aGVuIG1vZGUgaXMgTElORVMsIExJTkVfU1RSSVAgb3IgTElORV9MT09QXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBsaW5lV2lkdGg6IDEsXG5cbiAgICAvKipcbiAgICAgKiBJZiBlbmFibGUgY3VsbGluZ1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGN1bGxpbmc6IHRydWUsXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIG9mIHBvbHlnb24gd2lsbCBiZSBjdWxsZWQuXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQkFDS31cbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UfVxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuRlJPTlRfQU5EX0JBQ0t9XG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2N1bGxGYWNlXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBjdWxsRmFjZTogZ2xlbnVtLkJBQ0ssXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIGlzIGZyb250IGZhY2UuXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ1d9XG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5DQ1d9XG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2Zyb250RmFjZVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnJvbnRGYWNlOiBnbGVudW0uQ0NXLFxuXG4gICAgLyoqXG4gICAgICogSWYgZW5hYmxlIHNvZnR3YXJlIGZydXN0dW0gY3VsbGluZ1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGZydXN0dW1DdWxsaW5nOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHJlY2VpdmVTaGFkb3c6IHRydWUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FzdFNoYWRvdzogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpZ25vcmVQaWNraW5nOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpZ25vcmVQcmVaOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGlnbm9yZUdCdWZmZXI6IGZhbHNlLFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBUT0RPIFNoYWRlciA/XG4gICAgICAgIHJldHVybiB0aGlzLmdlb21ldHJ5ICYmIHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC5zaGFkZXIgJiYgIXRoaXMuaW52aXNpYmxlXG4gICAgICAgICAgICAmJiB0aGlzLmdlb21ldHJ5LnZlcnRleENvdW50ID4gMDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIGJlZm9yZVJlbmRlcjogZnVuY3Rpb24gKF9nbCkge30sXG5cbiAgICAvKipcbiAgICAgKiBCZWZvcmUgcmVuZGVyIGhvb2tcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChfZ2wsIHJlbmRlclN0YXQpIHt9LFxuXG4gICAgZ2V0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xuICAgICAgICBvdXQgPSBOb2RlLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveC5jYWxsKHRoaXMsIGZpbHRlciwgb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgb3V0LnVuaW9uKHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdCb3gpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAqL1xuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBtYXRlcmlhbCwgcHJvZ3JhbSkge1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIG1hdGVyaWFsID0gbWF0ZXJpYWwgfHwgdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgLy8gTWF5IHVzZSBzaGFkZXIgb2Ygb3RoZXIgbWF0ZXJpYWwgaWYgc2hhZGVyIGNvZGUgYXJlIHNhbWVcbiAgICAgICAgdmFyIHNoYWRlciA9IG1hdGVyaWFsLnNoYWRlcjtcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcblxuICAgICAgICB2YXIgZ2xEcmF3TW9kZSA9IHRoaXMubW9kZTtcblxuICAgICAgICB2YXIgblZlcnRleCA9IGdlb21ldHJ5LnZlcnRleENvdW50O1xuICAgICAgICB2YXIgaXNVc2VJbmRpY2VzID0gZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCk7XG5cbiAgICAgICAgdmFyIHVpbnRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX2VsZW1lbnRfaW5kZXhfdWludCcpO1xuICAgICAgICB2YXIgdXNlVWludEV4dCA9IHVpbnRFeHQgJiYgblZlcnRleCA+IDB4ZmZmZjtcbiAgICAgICAgdmFyIGluZGljZXNUeXBlID0gdXNlVWludEV4dCA/IF9nbC5VTlNJR05FRF9JTlQgOiBfZ2wuVU5TSUdORURfU0hPUlQ7XG5cbiAgICAgICAgdmFyIHZhb0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xuICAgICAgICAvLyB2YXIgdmFvRXh0ID0gbnVsbDtcblxuICAgICAgICB2YXIgaXNTdGF0aWMgPSAhZ2VvbWV0cnkuZHluYW1pYztcblxuICAgICAgICB2YXIgcmVuZGVySW5mbyA9IHRoaXMuX3JlbmRlckluZm87XG4gICAgICAgIHJlbmRlckluZm8udmVydGV4Q291bnQgPSBuVmVydGV4O1xuICAgICAgICByZW5kZXJJbmZvLnRyaWFuZ2xlQ291bnQgPSAwO1xuICAgICAgICByZW5kZXJJbmZvLmRyYXdDYWxsQ291bnQgPSAwO1xuICAgICAgICAvLyBEcmF3IGVhY2ggY2h1bmtcbiAgICAgICAgdmFyIGRyYXdIYXNoQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAvLyBIYXNoIHdpdGggc2hhZGVyIGlkIGluIGNhc2UgcHJldmlvdXMgbWF0ZXJpYWwgaGFzIGxlc3MgYXR0cmlidXRlcyB0aGFuIG5leHQgbWF0ZXJpYWxcbiAgICAgICAgY3VycmVudERyYXdJRCA9IHJlbmRlcmVyLl9fdWlkX18gKyAnLScgKyBnZW9tZXRyeS5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xuXG4gICAgICAgIGlmIChjdXJyZW50RHJhd0lEICE9PSBwcmV2RHJhd0lEKSB7XG4gICAgICAgICAgICBkcmF3SGFzaENoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIGNhY2hlIHdpbGwgYmUgaW52YWxpZCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzXG4gICAgICAgICAgICAvLyAxLiBWQU8gaXMgZW5hYmxlZCBhbmQgaXMgYmluZGVkIHRvIG51bGwgYWZ0ZXIgcmVuZGVyXG4gICAgICAgICAgICAvLyAyLiBHZW9tZXRyeSBuZWVkcyB1cGRhdGVcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAvLyBUT0RPIE9wdGltaXplXG4gICAgICAgICAgICAgICAgKHZhb0V4dCAmJiBpc1N0YXRpYylcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgICAgICAgICAgfHwgZ2VvbWV0cnkuX2NhY2hlLmlzRGlydHkoJ2FueScpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkcmF3SGFzaENoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZEcmF3SUQgPSBjdXJyZW50RHJhd0lEO1xuXG4gICAgICAgIGlmICghZHJhd0hhc2hDaGFuZ2VkKSB7XG4gICAgICAgICAgICAvLyBEaXJlY3QgZHJhd1xuICAgICAgICAgICAgaWYgKHByZXZEcmF3SXNVc2VJbmRpY2VzKSB7XG4gICAgICAgICAgICAgICAgX2dsLmRyYXdFbGVtZW50cyhnbERyYXdNb2RlLCBwcmV2RHJhd0luZGljZXNCdWZmZXIuY291bnQsIGluZGljZXNUeXBlLCAwKTtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRyaWFuZ2xlQ291bnQgPSBwcmV2RHJhd0luZGljZXNCdWZmZXIuY291bnQgLyAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRklYTUUgVXNlIHZlcnRleCBudW1iZXIgaW4gYnVmZmVyXG4gICAgICAgICAgICAgICAgLy8gdmVydGV4Q291bnQgbWF5IGdldCB0aGUgd3JvbmcgdmFsdWUgd2hlbiBnZW9tZXRyeSBmb3JnZXQgdG8gbWFyayBkaXJ0eSBhZnRlciB1cGRhdGVcbiAgICAgICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyhnbERyYXdNb2RlLCAwLCBuVmVydGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlbmRlckluZm8uZHJhd0NhbGxDb3VudCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGNhY2hlIG9mIHN0YXRpYyBnZW9tZXRyeVxuICAgICAgICAgICAgdmFyIHZhb0xpc3QgPSB0aGlzLl9kcmF3Q2FjaGVbY3VycmVudERyYXdJRF07XG4gICAgICAgICAgICBpZiAoIXZhb0xpc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmtzID0gZ2VvbWV0cnkuZ2V0QnVmZmVyQ2h1bmtzKHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNodW5rcykgeyAgLy8gRW1wdHkgbWVzaFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhb0xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbY107XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVycztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSBjaHVuay5pbmRpY2VzQnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJzW2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNlbWFudGljO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBzZW1hbnRpY0luZm8gJiYgc2VtYW50aWNJbmZvLnN5bWJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIHByb2dyYW0uYXR0cmlidXRlc1tzeW1ib2xdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZUJ1ZmZlckluZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbyA9IG5ldyBWZXJ0ZXhBcnJheU9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlclxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB2YW9MaXN0LnB1c2godmFvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RyYXdDYWNoZVtjdXJyZW50RHJhd0lEXSA9IHZhb0xpc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhb0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdmFvTGlzdFtpXTtcbiAgICAgICAgICAgICAgICB2YXIgbmVlZHNCaW5kQXR0cmlidXRlcyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdmVydGV4IG9iamVjdCBhcnJheSBjb3N0IGEgbG90XG4gICAgICAgICAgICAgICAgLy8gU28gd2UgZG9uJ3QgdXNlIGl0IG9uIHRoZSBkeW5hbWljIG9iamVjdFxuICAgICAgICAgICAgICAgIGlmICh2YW9FeHQgJiYgaXNTdGF0aWMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHZlcnRleCBhcnJheSBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2Jsb2cudG9qaWNvZGUuY29tLzIwMTIvMTAvb2VzdmVydGV4YXJyYXlvYmplY3QtZXh0ZW5zaW9uLmh0bWxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhby52YW8gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFvLnZhbyA9IHZhb0V4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNCaW5kQXR0cmlidXRlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvLnZhbyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGF2YWlsYWJsZUF0dHJpYnV0ZXMgPSB2YW8uYXZhaWxhYmxlQXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IHZhby5pbmRpY2VzQnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IHByb2dyYW0uZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgdmFvLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsICh2YW9FeHQgJiYgaXNTdGF0aWMgJiYgdmFvLnZhbykpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGF0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXZhaWxhYmxlQXR0cmlidXRlcy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25MaXN0W2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdmFpbGFibGVBdHRyaWJ1dGVzW2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGF0dHJpYnV0ZUJ1ZmZlckluZm8uYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVCdWZmZXJJbmZvLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5GTE9BVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnl0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5CWVRFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1Ynl0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5VTlNJR05FRF9CWVRFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzaG9ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsVHlwZSA9IF9nbC5TSE9SVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndXNob3J0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xUeXBlID0gX2dsLlVOU0lHTkVEX1NIT1JUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbFR5cGUgPSBfZ2wuRkxPQVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIHNpemUsIGdsVHlwZSwgZmFsc2UsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZ2xEcmF3TW9kZSA9PSBnbGVudW0uTElORVMgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2xEcmF3TW9kZSA9PSBnbGVudW0uTElORV9TVFJJUCB8fFxuICAgICAgICAgICAgICAgICAgICBnbERyYXdNb2RlID09IGdsZW51bS5MSU5FX0xPT1BcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcHJldkRyYXdJbmRpY2VzQnVmZmVyID0gaW5kaWNlc0J1ZmZlcjtcbiAgICAgICAgICAgICAgICBwcmV2RHJhd0lzVXNlSW5kaWNlcyA9IGdlb21ldHJ5LmlzVXNlSW5kaWNlcygpO1xuICAgICAgICAgICAgICAgIC8vIERvIGRyYXdpbmdcbiAgICAgICAgICAgICAgICBpZiAocHJldkRyYXdJc1VzZUluZGljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9nbC5kcmF3RWxlbWVudHMoZ2xEcmF3TW9kZSwgaW5kaWNlc0J1ZmZlci5jb3VudCwgaW5kaWNlc1R5cGUsIDApO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRyaWFuZ2xlQ291bnQgKz0gaW5kaWNlc0J1ZmZlci5jb3VudCAvIDM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRyYXdBcnJheXMoZ2xEcmF3TW9kZSwgMCwgblZlcnRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZhb0V4dCAmJiBpc1N0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZHJhd0NhbGxDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlbmRlckluZm87XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsb25lIGEgbmV3IHJlbmRlcmFibGVcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJlbmRlcmFibGV9XG4gICAgICovXG4gICAgY2xvbmU6IChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAnY2FzdFNoYWRvdycsICdyZWNlaXZlU2hhZG93JyxcbiAgICAgICAgICAgICdtb2RlJywgJ2N1bGxpbmcnLCAnY3VsbEZhY2UnLCAnZnJvbnRGYWNlJyxcbiAgICAgICAgICAgICdmcnVzdHVtQ3VsbGluZycsXG4gICAgICAgICAgICAncmVuZGVyT3JkZXInLCAnbGluZVdpZHRoJyxcbiAgICAgICAgICAgICdpZ25vcmVQaWNraW5nJywgJ2lnbm9yZVByZVonLCAnaWdub3JlR0J1ZmZlcidcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBOb2RlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICByZW5kZXJhYmxlLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcbiAgICAgICAgICAgIHJlbmRlcmFibGUubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgLy8gVHJ5IG5vdCB0byBvdmVyd3JpdGUgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlW25hbWVdICE9PSB0aGlzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGVbbmFtZV0gPSB0aGlzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGU7XG4gICAgICAgIH07XG4gICAgfSkoKVxufSk7XG5cbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuUmVuZGVyYWJsZS5QT0lOVFMgPSBnbGVudW0uUE9JTlRTO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5SZW5kZXJhYmxlLkxJTkVTID0gZ2xlbnVtLkxJTkVTO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5SZW5kZXJhYmxlLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuTElORV9TVFJJUCA9IGdsZW51bS5MSU5FX1NUUklQO1xuLyoqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5SZW5kZXJhYmxlLlRSSUFOR0xFUyA9IGdsZW51bS5UUklBTkdMRVM7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuVFJJQU5HTEVfRkFOID0gZ2xlbnVtLlRSSUFOR0xFX0ZBTjtcbi8qKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuUmVuZGVyYWJsZS5CQUNLID0gZ2xlbnVtLkJBQ0s7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuRlJPTlQgPSBnbGVudW0uRlJPTlQ7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuQ1cgPSBnbGVudW0uQ1c7XG4vKipcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblJlbmRlcmFibGUuQ0NXID0gZ2xlbnVtLkNDVztcblxuUmVuZGVyYWJsZS5SZW5kZXJJbmZvID0gUmVuZGVySW5mbztcblxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyYWJsZTtcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4vUmVuZGVyYWJsZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWVzaFxuICogQGV4dGVuZHMgY2xheS5SZW5kZXJhYmxlXG4gKi9cbnZhciBNZXNoID0gUmVuZGVyYWJsZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuTWVzaCMgKi9cbntcbiAgICAvKipcbiAgICAgKiBVc2VkIHdoZW4gaXQgaXMgYSBza2lubmVkIG1lc2hcbiAgICAgKiBAdHlwZSB7Y2xheS5Ta2VsZXRvbn1cbiAgICAgKi9cbiAgICBza2VsZXRvbjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBKb2ludHMgaW5kaWNlcyBNZXNoZXMgY2FuIHNoYXJlIHRoZSBvbmUgc2tlbGV0b24gaW5zdGFuY2UgYW5kIGVhY2ggbWVzaCBjYW4gdXNlIG9uZSBwYXJ0IG9mIGpvaW50cy4gSm9pbnRzIGluZGljZXMgaW5kaWNhdGUgdGhlIGluZGV4IG9mIGpvaW50IGluIHRoZSBza2VsZXRvbiBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICBqb2ludHM6IG51bGwsXG5cbiAgICAvKipcbiAgICAgKiBJZiBzdG9yZSB0aGUgc2tpbiBtYXRyaWNlcyBpbiB2ZXJ0ZXggdGV4dHVyZVxuICAgICAqIEB0eXBlIHtib29sfVxuICAgICAqL1xuICAgIHVzZVNraW5NYXRyaWNlc1RleHR1cmU6IGZhbHNlXG5cbn0sIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuam9pbnRzKSB7XG4gICAgICAgIHRoaXMuam9pbnRzID0gW107XG4gICAgfVxufSwge1xuXG4gICAgaXNTa2lubmVkTWVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy5za2VsZXRvbiAmJiB0aGlzLmpvaW50cyAmJiB0aGlzLmpvaW50cy5sZW5ndGggPiAwKTtcbiAgICB9LFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNoYWRlciwgcHJvZ3JhbSkge1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIC8vIFNldCBwb3NlIG1hdHJpY2VzIG9mIHNraW5uZWQgbWVzaFxuICAgICAgICBpZiAodGhpcy5za2VsZXRvbikge1xuICAgICAgICAgICAgLy8gVE9ETyBNdWx0aXBsZSBtZXNoIHNoYXJlIHNhbWUgc2tlbGV0b25cbiAgICAgICAgICAgIHRoaXMuc2tlbGV0b24udXBkYXRlKCk7XG5cbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheSA9IHRoaXMuc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKHRoaXMuX191aWRfXywgdGhpcy5qb2ludHMpO1xuXG4gICAgICAgICAgICAvLyBpZiAodGhpcy51c2VTa2luTWF0cmljZXNUZXh0dXJlKSB7XG4gICAgICAgICAgICAvLyAgICAgdmFyIHNpemU7XG4gICAgICAgICAgICAvLyAgICAgdmFyIG51bUpvaW50cyA9IHRoaXMuam9pbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIC8vICAgICBpZiAobnVtSm9pbnRzID4gMjU2KSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHNpemUgPSA2NDtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gNjQpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc2l6ZSA9IDMyO1xuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgICBlbHNlIGlmIChudW1Kb2ludHMgPiAxNikge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaXplID0gMTY7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gICAgICAgICBzaXplID0gODtcbiAgICAgICAgICAgIC8vICAgICB9XG5cbiAgICAgICAgICAgIC8vICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZSgpO1xuICAgICAgICAgICAgLy8gICAgIHRleHR1cmUud2lkdGggPSBzaXplO1xuICAgICAgICAgICAgLy8gICAgIHRleHR1cmUuaGVpZ2h0ID0gc2l6ZTtcblxuICAgICAgICAgICAgLy8gICAgIGlmICghdGV4dHVyZS5waXhlbHMgfHwgdGV4dHVyZS5waXhlbHMubGVuZ3RoICE9PSBzaXplICogc2l6ZSAqIDQpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGV4dHVyZS5waXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiBzaXplICogNCk7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gICAgIHRleHR1cmUucGl4ZWxzLnNldChza2luTWF0cmljZXNBcnJheSk7XG4gICAgICAgICAgICAvLyAgICAgdGV4dHVyZS5kaXJ0eSgpO1xuXG4gICAgICAgICAgICAvLyAgICAgc2hhZGVyLnNldFVuaWZvcm0oX2dsLCAnMWYnLCAnc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUnLCBzaXplKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdTS0lOX01BVFJJWCcsIHNraW5NYXRyaWNlc0FycmF5KTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBSZW5kZXJhYmxlLnByb3RvdHlwZS5yZW5kZXIuY2FsbCh0aGlzLCByZW5kZXJlciwgc2hhZGVyLCBwcm9ncmFtKTtcbiAgICB9LFxuXG4gICAgZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9za2luTWF0cmljZXNUZXh0dXJlID0gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZSB8fCBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIHR5cGU6IGdsZW51bS5GTE9BVCxcbiAgICAgICAgICAgIG1pbkZpbHRlcjogZ2xlbnVtLk5FQVJFU1QsXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IGdsZW51bS5ORUFSRVNULFxuICAgICAgICAgICAgdXNlTWlwbWFwOiBmYWxzZSxcbiAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZTtcbiAgICB9XG59KTtcblxuLy8gRW51bXNcbk1lc2guUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcbk1lc2guTElORVMgPSBnbGVudW0uTElORVM7XG5NZXNoLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XG5NZXNoLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcbk1lc2guVFJJQU5HTEVTID0gZ2xlbnVtLlRSSUFOR0xFUztcbk1lc2guVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XG5NZXNoLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XG5cbk1lc2guQkFDSyA9IGdsZW51bS5CQUNLO1xuTWVzaC5GUk9OVCA9IGdsZW51bS5GUk9OVDtcbk1lc2guRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XG5NZXNoLkNXID0gZ2xlbnVtLkNXO1xuTWVzaC5DQ1cgPSBnbGVudW0uQ0NXO1xuXG5leHBvcnQgZGVmYXVsdCBNZXNoO1xuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZVxuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcbiAqL1xudmFyIFBlcnNwZWN0aXZlID0gQ2FtZXJhLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmUjICovXG57XG4gICAgLyoqXG4gICAgICogVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiBkZWdyZWVzXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBmb3Y6IDUwLFxuICAgIC8qKlxuICAgICAqIEFzcGVjdCByYXRpbywgdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoIC8gaGVpZ2h0XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBhc3BlY3Q6IDEsXG4gICAgLyoqXG4gICAgICogTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbmVhcjogMC4xLFxuICAgIC8qKlxuICAgICAqIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZmFyOiAyMDAwXG59LFxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZS5wcm90b3R5cGUgKi9cbntcblxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmFkID0gdGhpcy5mb3YgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgucGVyc3BlY3RpdmUocmFkLCB0aGlzLmFzcGVjdCwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XG4gICAgfSxcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xuICAgICAgICB2YXIgcmFkID0gTWF0aC5hdGFuKDEgLyBtWzVdKSAqIDI7XG4gICAgICAgIHRoaXMuZm92ID0gcmFkIC8gTWF0aC5QSSAqIDE4MDtcbiAgICAgICAgdGhpcy5hc3BlY3QgPSBtWzVdIC8gbVswXTtcbiAgICAgICAgdGhpcy5uZWFyID0gbVsxNF0gLyAobVsxMF0gLSAxKTtcbiAgICAgICAgdGhpcy5mYXIgPSBtWzE0XSAvIChtWzEwXSArIDEpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjYW1lcmEuZm92ID0gdGhpcy5mb3Y7XG4gICAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLmFzcGVjdDtcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcblxuICAgICAgICByZXR1cm4gY2FtZXJhO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQZXJzcGVjdGl2ZTtcbiIsImltcG9ydCBDYW1lcmEgZnJvbSAnLi4vQ2FtZXJhJztcbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY1xuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcbiAqL1xudmFyIE9ydGhvZ3JhcGhpYyA9IENhbWVyYS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpYyMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGxlZnQ6IC0xLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcmlnaHQ6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBuZWFyOiAtMSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGZhcjogMSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRvcDogMSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGJvdHRvbTogLTFcbn0sXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpYy5wcm90b3R5cGUgKi9cbntcblxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgub3J0aG8odGhpcy5sZWZ0LCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSwgdGhpcy50b3AsIHRoaXMubmVhciwgdGhpcy5mYXIpO1xuICAgIH0sXG5cbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xuICAgICAgICB0aGlzLmxlZnQgPSAoLTEgLSBtWzEyXSkgLyBtWzBdO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gKDEgLSBtWzEyXSkgLyBtWzBdO1xuICAgICAgICB0aGlzLnRvcCA9ICgxIC0gbVsxM10pIC8gbVs1XTtcbiAgICAgICAgdGhpcy5ib3R0b20gPSAoLTEgLSBtWzEzXSkgLyBtWzVdO1xuICAgICAgICB0aGlzLm5lYXIgPSAtKC0xIC0gbVsxNF0pIC8gbVsxMF07XG4gICAgICAgIHRoaXMuZmFyID0gLSgxIC0gbVsxNF0pIC8gbVsxMF07XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBjYW1lcmEubGVmdCA9IHRoaXMubGVmdDtcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gdGhpcy5yaWdodDtcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcbiAgICAgICAgY2FtZXJhLnRvcCA9IHRoaXMudG9wO1xuICAgICAgICBjYW1lcmEuYm90dG9tID0gdGhpcy5ib3R0b207XG5cbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgT3J0aG9ncmFwaGljO1xuIiwiZnVuY3Rpb24gZ2V0KG9wdGlvbnMpIHtcblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHhoci5vcGVuKCdnZXQnLCBvcHRpb25zLnVybCk7XG4gICAgLy8gV2l0aCByZXNwb25zZSB0eXBlIHNldCBicm93c2VyIGNhbiBnZXQgYW5kIHB1dCBiaW5hcnkgZGF0YVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1NlbmRpbmdfYW5kX1JlY2VpdmluZ19CaW5hcnlfRGF0YVxuICAgIC8vIERlZmF1bHQgaXMgdGV4dCwgYW5kIGl0IGNhbiBiZSBzZXRcbiAgICAvLyBhcnJheWJ1ZmZlciwgYmxvYiwgZG9jdW1lbnQsIGpzb24sIHRleHRcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgaWYgKG9wdGlvbnMub25wcm9ncmVzcykge1xuICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0XG4gICAgICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gZS5sb2FkZWQgLyBlLnRvdGFsO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhwZXJjZW50LCBlLmxvYWRlZCwgZS50b3RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9ucHJvZ3Jlc3MobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xuICAgICAgICAgICAgb3B0aW9ucy5vbmVycm9yICYmIG9wdGlvbnMub25lcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQgJiYgb3B0aW9ucy5vbmxvYWQoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMub25lcnJvcikge1xuICAgICAgICB4aHIub25lcnJvciA9IG9wdGlvbnMub25lcnJvcjtcbiAgICB9XG4gICAgeGhyLnNlbmQobnVsbCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBnZXQgOiBnZXRcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHN0YW5kYXJkXFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQyIDogVEVYQ09PUkRfMTtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmIGRlZmluZWQoUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRCkgfHwgZGVmaW5lZChOT1JNQUxNQVBfRU5BQkxFRClcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChBT01BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkMjtcXG4jZW5kaWZcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gICAgdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiAgICB2ZWMzIHNraW5uZWRUYW5nZW50ID0gdGFuZ2VudC54eXo7XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAgICBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuICAgIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuICAgIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuICAgIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuICAgIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gICAgdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiAgICB2X1RhbmdlbnQgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZFRhbmdlbnQsIDAuMCkpLnh5eik7XFxuICAgIHZfQml0YW5nZW50ID0gbm9ybWFsaXplKGNyb3NzKHZfTm9ybWFsLCB2X1RhbmdlbnQpICogdGFuZ2VudC53KTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuICAgIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuICAgIHZfVGV4Y29vcmQyID0gdGV4Y29vcmQyO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5XFxuI2RlZmluZSBHTE9TU0lORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgUk9VR0hORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgTUVUQUxORVNTX0NIQU5ORUwgMVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MgOiAwLjU7XFxuICAgICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4gICAgI2VuZGlmXFxuI2Vsc2VcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M6IDAuNTtcXG4gICAgI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdsb3NzaW5lc3NNYXA7XFxuICAgICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuICAgICNpZmRlZiBQQVJBTExBWF9DT1JSRUNURURcXG51bmlmb3JtIHZlYzMgZW52aXJvbm1lbnRCb3hNaW47XFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWF4O1xcbiAgICAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG4jZW5kaWZcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBzc2FvTWFwO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XFxudW5pZm9ybSBmbG9hdCBhb0ludGVuc2l0eTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDI7XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcyA6IDAuMDtcXG4jZWxzZVxcbnVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yIDogWzAuMSwgMC4xLCAwLjFdO1xcbiNlbmRpZlxcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGVtaXNzaW9uSW50ZW5zaXR5OiAxO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxudW5pZm9ybSBmbG9hdCBtYXhNaXBtYXBMZXZlbDogNTtcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X3NoX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9jdWJlbWFwX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5wb2ludF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuZGlyZWN0aW9uYWxfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgU1BPVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuc3BvdF9saWdodFxcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG5AaW1wb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbkBpbXBvcnQgY2xheS51dGlsLnBhcmFsbGF4X2NvcnJlY3RcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxuZmxvYXQgR19TbWl0aChmbG9hdCBnLCBmbG9hdCBuZHYsIGZsb2F0IG5kbClcXG57XFxuICAgIGZsb2F0IHJvdWdobmVzcyA9IDEuMCAtIGc7XFxuICAgIGZsb2F0IGsgPSByb3VnaG5lc3MgKiByb3VnaG5lc3MgLyAyLjA7XFxuICAgIGZsb2F0IEcxViA9IG5kdiAvIChuZHYgKiAoMS4wIC0gaykgKyBrKTtcXG4gICAgZmxvYXQgRzFMID0gbmRsIC8gKG5kbCAqICgxLjAgLSBrKSArIGspO1xcbiAgICByZXR1cm4gRzFMICogRzFWO1xcbn1cXG52ZWMzIEZfU2NobGljayhmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiAgICByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbmZsb2F0IERfUGhvbmcoZmxvYXQgZywgZmxvYXQgbmRoKSB7XFxuICAgIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gICAgcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChmbG9hdCBnLCBmbG9hdCBuZGgpIHtcXG4gICAgZmxvYXQgciA9IDEuMCAtIGc7XFxuICAgIGZsb2F0IGEgPSByICogcjtcXG4gICAgZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiAgICByZXR1cm4gYSAvIChQSSAqIHRtcCAqIHRtcCk7XFxufVxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE9jY2x1c2lvblNjYWxlIDogMC4wMjtcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4TWF4TGF5ZXJzIDogMjA7XFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE1pbkxheWVycyA6IDU7XFxudW5pZm9ybSBzYW1wbGVyMkQgcGFyYWxsYXhPY2NsdXNpb25NYXA7XFxubWF0MyB0cmFuc3Bvc2UoaW4gbWF0MyBpbk1hdClcXG57XFxuICAgIHZlYzMgaTAgPSBpbk1hdFswXTtcXG4gICAgdmVjMyBpMSA9IGluTWF0WzFdO1xcbiAgICB2ZWMzIGkyID0gaW5NYXRbMl07XFxuICAgIHJldHVybiBtYXQzKFxcbiAgICAgICAgdmVjMyhpMC54LCBpMS54LCBpMi54KSxcXG4gICAgICAgIHZlYzMoaTAueSwgaTEueSwgaTIueSksXFxuICAgICAgICB2ZWMzKGkwLnosIGkxLnosIGkyLnopXFxuICAgICk7XFxufVxcbnZlYzIgcGFyYWxsYXhVdih2ZWMyIHV2LCB2ZWMzIHZpZXdEaXIpXFxue1xcbiAgICBmbG9hdCBudW1MYXllcnMgPSBtaXgocGFyYWxsYXhNYXhMYXllcnMsIHBhcmFsbGF4TWluTGF5ZXJzLCBhYnMoZG90KHZlYzMoMC4wLCAwLjAsIDEuMCksIHZpZXdEaXIpKSk7XFxuICAgIGZsb2F0IGxheWVySGVpZ2h0ID0gMS4wIC8gbnVtTGF5ZXJzO1xcbiAgICBmbG9hdCBjdXJMYXllckhlaWdodCA9IDAuMDtcXG4gICAgdmVjMiBkZWx0YVV2ID0gdmlld0Rpci54eSAqIHBhcmFsbGF4T2NjbHVzaW9uU2NhbGUgLyAodmlld0Rpci56ICogbnVtTGF5ZXJzKTtcXG4gICAgdmVjMiBjdXJVdiA9IHV2O1xcbiAgICBmbG9hdCBoZWlnaHQgPSAxLjAgLSB0ZXh0dXJlMkQocGFyYWxsYXhPY2NsdXNpb25NYXAsIGN1clV2KS5yO1xcbiAgICBmb3IgKGludCBpID0gMDsgaSA8IDMwOyBpKyspIHtcXG4gICAgICAgIGN1ckxheWVySGVpZ2h0ICs9IGxheWVySGVpZ2h0O1xcbiAgICAgICAgY3VyVXYgLT0gZGVsdGFVdjtcXG4gICAgICAgIGhlaWdodCA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgY3VyVXYpLnI7XFxuICAgICAgICBpZiAoaGVpZ2h0IDwgY3VyTGF5ZXJIZWlnaHQpIHtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB2ZWMyIHByZXZVdiA9IGN1clV2ICsgZGVsdGFVdjtcXG4gICAgZmxvYXQgbmV4dCA9IGhlaWdodCAtIGN1ckxheWVySGVpZ2h0O1xcbiAgICBmbG9hdCBwcmV2ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBwcmV2VXYpLnIgLSBjdXJMYXllckhlaWdodCArIGxheWVySGVpZ2h0O1xcbiAgICByZXR1cm4gbWl4KGN1clV2LCBwcmV2VXYsIG5leHQgLyAobmV4dCAtIHByZXYpKTtcXG59XFxuI2VuZGlmXFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IGFsYmVkb0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gICAgYWxiZWRvQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4gICAgdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuICAgIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3MgLSB2X1dvcmxkUG9zaXRpb24pO1xcbiAgICB2ZWMyIHV2ID0gdl9UZXhjb29yZDtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiAgICBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuICAgIHV2ID0gcGFyYWxsYXhVdih2X1RleGNvb3JkLCBub3JtYWxpemUodHJhbnNwb3NlKHRibikgKiAtVikpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gICAgdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB1dik7XFxuICAgICNpZmRlZiBTUkdCX0RFQ09ERVxcbiAgICB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuICAgICNlbmRpZlxcbiAgICBhbGJlZG9Db2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiAgICAjaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiAgICBhbGJlZG9Db2xvci5hICo9IHRleGVsLmE7XFxuICAgICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUVUQUxORVNTXFxuICAgIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICAgICNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbiAgICBmbG9hdCBtMiA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHV2KVtNRVRBTE5FU1NfQ0hBTk5FTF07XFxuICAgIG0gPSBjbGFtcChtMiArIChtIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICAjZW5kaWZcXG4gICAgdmVjMyBiYXNlQ29sb3IgPSBhbGJlZG9Db2xvci5yZ2I7XFxuICAgIGFsYmVkb0NvbG9yLnJnYiA9IGJhc2VDb2xvciAqICgxLjAgLSBtKTtcXG4gICAgdmVjMyBzcGVjID0gbWl4KHZlYzMoMC4wNCksIGJhc2VDb2xvciwgbSk7XFxuI2Vsc2VcXG4gICAgdmVjMyBzcGVjID0gc3BlY3VsYXJDb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1JPVUdITkVTU1xcbiAgICBmbG9hdCBnID0gMS4wIC0gcm91Z2huZXNzO1xcbiAgICAjaWZkZWYgUk9VR0hORVNTTUFQX0VOQUJMRURcXG4gICAgZmxvYXQgZzIgPSAxLjAgLSB0ZXh0dXJlMkQocm91Z2huZXNzTWFwLCB1dilbUk9VR0hORVNTX0NIQU5ORUxdO1xcbiAgICBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gICAgI2VuZGlmXFxuI2Vsc2VcXG4gICAgZmxvYXQgZyA9IGdsb3NzaW5lc3M7XFxuICAgICNpZmRlZiBHTE9TU0lORVNTTUFQX0VOQUJMRURcXG4gICAgZmxvYXQgZzIgPSB0ZXh0dXJlMkQoZ2xvc3NpbmVzc01hcCwgdXYpW0dMT1NTSU5FU1NfQ0hBTk5FTF07XFxuICAgIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAgICAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbiAgICBzcGVjICo9IHNSR0JUb0xpbmVhcih0ZXh0dXJlMkQoc3BlY3VsYXJNYXAsIHV2KSkucmdiO1xcbiNlbmRpZlxcbiAgICB2ZWMzIE4gPSB2X05vcm1hbDtcXG4jaWZkZWYgRE9VQkxFX1NJREVEXFxuICAgIGlmIChkb3QoTiwgVikgPCAwLjApIHtcXG4gICAgICAgIE4gPSAtTjtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbiAgICBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiAgICAgICAgdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHV2KS54eXo7XFxuICAgICAgICBpZiAoZG90KG5vcm1hbFRleGVsLCBub3JtYWxUZXhlbCkgPiAwLjApIHsgICAgICAgICAgICBOID0gbm9ybWFsVGV4ZWwgKiAyLjAgLSAxLjA7XFxuICAgICAgICAgICAgdGJuWzFdID0gLXRiblsxXTtcXG4gICAgICAgICAgICBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiAgICAgICAgfVxcbiAgICB9XFxuI2VuZGlmXFxuICAgIHZlYzMgZGlmZnVzZVRlcm0gPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiAgICB2ZWMzIHNwZWN1bGFyVGVybSA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuICAgIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiAgICB2ZWMzIGZyZXNuZWxUZXJtID0gRl9TY2hsaWNrKG5kdiwgc3BlYyk7XFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4gICAge3tcXG4gICAgICAgIGRpZmZ1c2VUZXJtICs9IGFtYmllbnRMaWdodENvbG9yW19pZHhfXTtcXG4gICAgfX1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiAgICB7e1xcbiAgICAgICAgZGlmZnVzZVRlcm0gKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCBOKSAqIGFtYmllbnRTSExpZ2h0Q29sb3JbX2lkeF9dO1xcbiAgICB9fVxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYnNQb2ludFtQT0lOVF9MSUdIVF9DT1VOVF07XFxuICAgIGlmKHNoYWRvd0VuYWJsZWQpXFxuICAgIHtcXG4gICAgICAgIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNQb2ludCk7XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuICAgIHt7XFxuICAgICAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiAgICAgICAgdmVjMyBsYyA9IHBvaW50TGlnaHRDb2xvcltfaWR4X107XFxuICAgICAgICBmbG9hdCByYW5nZSA9IHBvaW50TGlnaHRSYW5nZVtfaWR4X107XFxuICAgICAgICB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiAgICAgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gICAgICAgIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuICAgICAgICBMIC89IGRpc3Q7XFxuICAgICAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiAgICAgICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtfaWR4X107XFxuICAgICAgICB9XFxuI2VuZGlmXFxuICAgICAgICB2ZWMzIGxpID0gbGMgKiBuZGwgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuICAgICAgICBkaWZmdXNlVGVybSArPSBsaTtcXG4gICAgICAgIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiAgICB9fVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiAgICBpZihzaGFkb3dFbmFibGVkKVxcbiAgICB7XFxuICAgICAgICBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzRGlyKTtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4gICAge3tcXG4gICAgICAgIHZlYzMgTCA9IC1ub3JtYWxpemUoZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltfaWR4X10pO1xcbiAgICAgICAgdmVjMyBsYyA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltfaWR4X107XFxuICAgICAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiAgICAgICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNEaXJbX2lkeF9dO1xcbiAgICAgICAgfVxcbiNlbmRpZlxcbiAgICAgICAgdmVjMyBsaSA9IGxjICogbmRsICogc2hhZG93Q29udHJpYjtcXG4gICAgICAgIGRpZmZ1c2VUZXJtICs9IGxpO1xcbiAgICAgICAgc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuICAgIH19XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiAgICBpZihzaGFkb3dFbmFibGVkKVxcbiAgICB7XFxuICAgICAgICBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiAgICB7XFxuICAgICAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBzcG90TGlnaHRQb3NpdGlvbltpXTtcXG4gICAgICAgIHZlYzMgc3BvdExpZ2h0RGlyZWN0aW9uID0gLW5vcm1hbGl6ZShzcG90TGlnaHREaXJlY3Rpb25baV0pO1xcbiAgICAgICAgdmVjMyBsYyA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiAgICAgICAgZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gICAgICAgIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiAgICAgICAgZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuICAgICAgICBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gICAgICAgIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuICAgICAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiAgICAgICAgZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gICAgICAgIEwgLz0gZGlzdDtcXG4gICAgICAgIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBMKTtcXG4gICAgICAgIGZsb2F0IGZhbGxvZmY7XFxuICAgICAgICBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKCBiIC0gYSksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuICAgICAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgICAgICBpZiAoc2hhZG93RW5hYmxlZClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNTcG90W2ldO1xcbiAgICAgICAgfVxcbiNlbmRpZlxcbiAgICAgICAgdmVjMyBsaSA9IGxjICogYXR0ZW51YXRpb24gKiAoMS4wIC0gZmFsbG9mZikgKiBzaGFkb3dDb250cmliICogbmRsO1xcbiAgICAgICAgZGlmZnVzZVRlcm0gKz0gbGk7XFxuICAgICAgICBzcGVjdWxhclRlcm0gKz0gbGkgKiBmcmVzbmVsVGVybSAqIERfUGhvbmcoZywgbmRoKTtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICB2ZWM0IG91dENvbG9yID0gYWxiZWRvQ29sb3I7XFxuICAgIG91dENvbG9yLnJnYiAqPSBkaWZmdXNlVGVybTtcXG4gICAgb3V0Q29sb3IucmdiICs9IHNwZWN1bGFyVGVybTtcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuICAgIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAgICBmbG9hdCByb3VnaDIgPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGJpYXMyID0gcm91Z2gyICogNS4wO1xcbiAgICB2ZWMyIGJyZGZQYXJhbTIgPSB0ZXh0dXJlMkQoYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbMF0sIHZlYzIocm91Z2gyLCBuZHYpKS54eTtcXG4gICAgdmVjMyBlbnZXZWlnaHQyID0gc3BlYyAqIGJyZGZQYXJhbTIueCArIGJyZGZQYXJhbTIueTtcXG4gICAgdmVjMyBlbnZUZXhlbDI7XFxuICAgIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4gICAge3tcXG4gICAgICAgIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMLCBiaWFzMiksIDUxLjUpO1xcbiAgICAgICAgb3V0Q29sb3IucmdiICs9IGFtYmllbnRDdWJlbWFwTGlnaHRDb2xvcltfaWR4X10gKiBlbnZUZXhlbDIgKiBlbnZXZWlnaHQyO1xcbiAgICB9fVxcbiNlbmRpZlxcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9FTkFCTEVEXFxuICAgIHZlYzMgZW52V2VpZ2h0ID0gZyAqIGZyZXNuZWxUZXJtO1xcbiAgICB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gICAgI2lmZGVmIFBBUkFMTEFYX0NPUlJFQ1RFRFxcbiAgICBMID0gcGFyYWxsYXhDb3JyZWN0KEwsIHZfV29ybGRQb3NpdGlvbiwgZW52aXJvbm1lbnRCb3hNaW4sIGVudmlyb25tZW50Qm94TWF4KTtcXG4gICAgI2VuZGlmXFxuICAgICNpZmRlZiBFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVJcXG4gICAgZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGJpYXMgPSByb3VnaCAqIG1heE1pcG1hcExldmVsO1xcbiAgICB2ZWMzIGVudlRleGVsID0gZGVjb2RlSERSKHRleHR1cmVDdWJlTG9kRVhUKGVudmlyb25tZW50TWFwLCBMLCBiaWFzKSkucmdiO1xcbiAgICAgICAgI2lmZGVmIEJSREZMT09LVVBfRU5BQkxFRFxcbiAgICB2ZWMyIGJyZGZQYXJhbSA9IHRleHR1cmUyRChicmRmTG9va3VwLCB2ZWMyKHJvdWdoLCBuZHYpKS54eTtcXG4gICAgZW52V2VpZ2h0ID0gc3BlYyAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuICAgICAgICAjZW5kaWZcXG4gICAgI2Vsc2VcXG4gICAgdmVjMyBlbnZUZXhlbCA9IHRleHR1cmVDdWJlKGVudmlyb25tZW50TWFwLCBMKS54eXo7XFxuICAgICNlbmRpZlxcbiAgICBvdXRDb2xvci5yZ2IgKz0gZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuI2VuZGlmXFxuICAgIGZsb2F0IGFvRmFjdG9yID0gMS4wO1xcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG4gICAgYW9GYWN0b3IgPSBtaW4odGV4dHVyZTJEKHNzYW9NYXAsIChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dykuciwgYW9GYWN0b3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxuICAgIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQoYW9NYXAsIHZfVGV4Y29vcmQyKS5yKSAqIGFvSW50ZW5zaXR5LCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4gICAgb3V0Q29sb3IucmdiICo9IGFvRmFjdG9yO1xcbiAgICB2ZWMzIGxFbWlzc2lvbiA9IGVtaXNzaW9uO1xcbiNpZmRlZiBFTUlTU0lWRU1BUF9FTkFCTEVEXFxuICAgIGxFbWlzc2lvbiAqPSB0ZXh0dXJlMkQoZW1pc3NpdmVNYXAsIHV2KS5yZ2I7XFxuI2VuZGlmXFxuICAgIG91dENvbG9yLnJnYiArPSBsRW1pc3Npb24gKiBlbWlzc2lvbkludGVuc2l0eTtcXG4gICAgaWYobGluZVdpZHRoID4gMC4pXFxuICAgIHtcXG4gICAgICAgIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiAgICB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gICAgaWYgKG91dENvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiAgICAgICAgZGlzY2FyZDtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiAgICBvdXRDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcob3V0Q29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gICAgb3V0Q29sb3IgPSBsaW5lYXJUb3NSR0Iob3V0Q29sb3IpO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIob3V0Q29sb3IpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkTVIudmVydGV4XFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLnZlcnRleFxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmRNUi5mcmFnbWVudFxcbiNkZWZpbmUgVVNFX01FVEFMTkVTU1xcbiNkZWZpbmUgVVNFX1JPVUdITkVTU1xcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5mcmFnbWVudFxcbkBlbmRcIjtcbiIsImltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcblxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XG5pbXBvcnQgc3RhbmRhcmRFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcblxuLy8gSW1wb3J0IHN0YW5kYXJkIHNoYWRlclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xuXG52YXIgVEVYVFVSRV9QUk9QRVJUSUVTID0gWydkaWZmdXNlTWFwJywgJ25vcm1hbE1hcCcsICdyb3VnaG5lc3NNYXAnLCAnbWV0YWxuZXNzTWFwJywgJ2VtaXNzaXZlTWFwJywgJ2Vudmlyb25tZW50TWFwJywgJ2JyZGZMb29rdXAnLCAnc3Nhb01hcCcsICdhb01hcCddO1xudmFyIFNJTVBMRV9QUk9QRVJUSUVTID0gWydjb2xvcicsICdlbWlzc2lvbicsICdlbWlzc2lvbkludGVuc2l0eScsICdhbHBoYScsICdyb3VnaG5lc3MnLCAnbWV0YWxuZXNzJywgJ3V2UmVwZWF0JywgJ3V2T2Zmc2V0JywgJ2FvSW50ZW5zaXR5JywgJ2FscGhhQ3V0b2ZmJ107XG52YXIgUFJPUEVSVElFU19DSEFOR0VfU0hBREVSID0gWydsaW5lYXInLCAnZW5jb2RlUkdCTScsICdkZWNvZGVSR0JNJywgJ2RvdWJsZVNpZGVkJywgJ2FscGhhVGVzdCcsICdyb3VnaG5lc3NDaGFubmVsJywgJ21ldGFsbmVzc0NoYW5uZWwnLCAnZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZCddO1xuXG52YXIgTlVNX0RFRklORV9NQVAgPSB7XG4gICAgJ3JvdWdobmVzc0NoYW5uZWwnOiAnUk9VR0hORVNTX0NIQU5ORUwnLFxuICAgICdtZXRhbG5lc3NDaGFubmVsJzogJ01FVEFMTkVTU19DSEFOTkVMJ1xufTtcbnZhciBCT09MX0RFRklORV9NQVAgPSB7XG4gICAgJ2xpbmVhcic6ICdTUkdCX0RFQ09ERScsXG4gICAgJ2VuY29kZVJHQk0nOiAnUkdCTV9FTkNPREUnLFxuICAgICdkZWNvZGVSR0JNJzogJ1JHQk1fREVDT0RFJyxcbiAgICAnZG91YmxlU2lkZWQnOiAnRE9VQkxFX1NJREVEJyxcbiAgICAnYWxwaGFUZXN0JzogJ0FMUEhBX1RFU1QnLFxuICAgICdlbnZpcm9ubWVudE1hcFByZWZpbHRlcmVkJzogJ0VOVklST05NRU5UTUFQX1BSRUZJTFRFUidcbn1cblxuXG52YXIgc3RhbmRhcmRTaGFkZXI7XG4vKipcbiAqIFN0YW5kYXJkIG1hdGVyaWFsIHdpdGhvdXQgY3VzdG9tIHNoYWRlci5cbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlN0YW5kYXJkTWF0ZXJpYWxcbiAqIEBleHRlbmRzIGNsYXkuQmFzZVxuICogQGV4YW1wbGVcbiAqIHZhciBtYXQgPSBuZXcgY2xheS5TdGFuZGFyZE1hdGVyaWFsKHtcbiAqICAgICBjb2xvcjogWzEsIDEsIDFdLFxuICogICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VUZXh0dXJlXG4gKiB9KTtcbiAqIG1hdC5yb3VnaG5lc3MgPSAxO1xuICovXG52YXIgU3RhbmRhcmRNYXRlcmlhbCA9IE1hdGVyaWFsLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzdGFuZGFyZFNoYWRlcikge1xuICAgICAgICBzdGFuZGFyZFNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyB7XG4gICAgICAgIHNoYWRlcjogc3RhbmRhcmRTaGFkZXJcbiAgICB9O1xufSwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIC8vIFBFTkRJTkdcbiAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRpb24pO1xuICAgIC8vIEV4dGVuZCBhZnRlciBzaGFkZXIgaXMgY3JlYXRlZC5cbiAgICB1dGlsLmRlZmF1bHRzKHRoaXMsIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyAge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMSwgMV1cbiAgICAgICAgICovXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDAsIDBdXG4gICAgICAgICAqL1xuICAgICAgICBlbWlzc2lvbjogWzAsIDAsIDBdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAwXG4gICAgICAgICAqL1xuICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQGRlZmF1bHQgMC41XG4gICAgICAgICAqL1xuICAgICAgICByb3VnaG5lc3M6IDAuNSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQGRlZmF1bHQgMFxuICAgICAgICAgKi9cbiAgICAgICAgbWV0YWxuZXNzOiAwLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAxXG4gICAgICAgICAqL1xuICAgICAgICBhbHBoYTogMSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBhbHBoYVRlc3Q6IGZhbHNlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDdXRvZmYgdGhyZXNob2xkIGZvciBhbHBoYSB0ZXN0XG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBhbHBoYUN1dG9mZjogMC45LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIC8vIFRPRE8gTXVzdCBkaXNhYmxlIGN1bGxpbmcuXG4gICAgICAgIGRvdWJsZVNpZGVkOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxuICAgICAgICAgKi9cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkubWF0aC5Cb3VuZGluZ0JveH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJSREYgTG9va3VwIGlzIGdlbmVyYXRlZCBieSBjbGF5LnV0aWwuY3ViZW1hcC5pbnRlZ3JhdGVCcmRmXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cbiAgICAgICAgICogQGRlZmF1bHQgWzEsIDFdXG4gICAgICAgICAqL1xuICAgICAgICB1dlJlcGVhdDogWzEsIDFdLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XG4gICAgICAgICAqIEBkZWZhdWx0IFswLCAwXVxuICAgICAgICAgKi9cbiAgICAgICAgdXZPZmZzZXQ6IFswLCAwXSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQGRlZmF1bHQgMVxuICAgICAgICAgKi9cbiAgICAgICAgYW9JbnRlbnNpdHk6IDEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZDogZmFsc2UsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgbGluZWFyOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBlbmNvZGVSR0JNOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBkZWNvZGVSR0JNOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge051bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIHJvdWdobmVzc0NoYW5uZWw6IDAsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMVxuICAgIH0pO1xuXG4gICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9NRVRBTE5FU1MnKTtcbiAgICB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xufSwge1xuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpc1twcm9wTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIFNJTVBMRV9QUk9QRVJUSUVTLmNvbmNhdChQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcbiAgICB9XG59KTtcblxuU0lNUExFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHByb3BOYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShwcm9wTmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChwcm9wTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0ocHJvcE5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG5cblBST1BFUlRJRVNfQ0hBTkdFX1NIQURFUi5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgIHZhciBwcml2YXRlS2V5ID0gJ18nICsgcHJvcE5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3ByaXZhdGVLZXldO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpc1twcml2YXRlS2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKHByb3BOYW1lIGluIE5VTV9ERUZJTkVfTUFQKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBOVU1fREVGSU5FX01BUFtwcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBCT09MX0RFRklORV9NQVBbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIHZhbHVlID8gdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSkgOiB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAnZW52aXJvbm1lbnRCb3gnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbnZCb3ggPSB0aGlzLl9lbnZpcm9ubWVudEJveDtcbiAgICAgICAgaWYgKGVudkJveCkge1xuICAgICAgICAgICAgZW52Qm94Lm1pbi5zZXRBcnJheSh0aGlzLmdldCgnZW52aXJvbm1lbnRCb3hNaW4nKSk7XG4gICAgICAgICAgICBlbnZCb3gubWF4LnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1heCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW52Qm94O1xuICAgIH0sXG5cbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9lbnZpcm9ubWVudEJveCA9IHZhbHVlO1xuXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zIHx8IHt9O1xuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1pbiddIHx8IHtcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddID0gdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWF4J10gfHwge1xuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUT0RPIENhbid0IGRldGVjdCBvcGVyYXRpb24gbGlrZSBib3gubWluID0gbmV3IFZlY3RvcigpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudEJveE1pbicsIHZhbHVlLm1pbi5hcnJheSk7XG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50Qm94TWF4JywgdmFsdWUubWF4LmFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BBUkFMTEFYX0NPUlJFQ1RFRCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bmRlZmluZSgnZnJhZ21lbnQnLCAnUEFSQUxMQVhfQ09SUkVDVEVEJyk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU3RhbmRhcmRNYXRlcmlhbDtcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5Kb2ludFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEpvaW50ID0gQmFzZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuSm9pbnQjICovXG57XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTMjaXNzdWVjb21tZW50LTI5MjE2NTc2XG4gICAgLyoqXG4gICAgICogSm9pbnQgbmFtZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgbmFtZTogJycsXG4gICAgLyoqXG4gICAgICogSW5kZXggb2Ygam9pbnQgaW4gdGhlIHNrZWxldG9uXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBpbmRleDogLTEsXG5cbiAgICAvKipcbiAgICAgKiBTY2VuZSBub2RlIGF0dGFjaGVkIHRvXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cbiAgICAgKi9cbiAgICBub2RlOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogUm9vdCBzY2VuZSBub2RlIG9mIHRoZSBza2VsZXRvbiwgd2hpY2ggcGFyZW50IG5vZGUgaXMgbnVsbCBvciBkb24ndCBoYXZlIGEgam9pbnRcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIHJvb3ROb2RlOiBudWxsXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSm9pbnQ7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgSm9pbnQgZnJvbSAnLi9Kb2ludCc7XG5cbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XG52YXIgcXVhdCA9IGdsTWF0cml4LnF1YXQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2tlbGV0b25cbiAqL1xudmFyIFNrZWxldG9uID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU2tlbGV0b24jICove1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWxhdGl2ZSByb290IG5vZGUgdGhhdCBub3QgYWZmZWN0IHRyYW5zZm9ybSBvZiBqb2ludC5cbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cbiAgICAgICAgICovXG4gICAgICAgIHJlbGF0aXZlUm9vdE5vZGU6IG51bGwsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgbmFtZTogJycsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGpvaW50c1xuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPGNsYXkuSm9pbnQ+fVxuICAgICAgICAgKi9cbiAgICAgICAgam9pbnRzOiBbXSxcblxuICAgICAgICBfY2xpcHM6IFtdLFxuXG4gICAgICAgIC8vIE1hdHJpeCB0byBqb2ludCBzcGFjZSAocmVsYXRpdmUgdG8gcm9vdCBqb2ludClcbiAgICAgICAgX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheTogbnVsbCxcblxuICAgICAgICAvLyBVc2Ugc3ViYXJyYXkgaW5zdGVhZCBvZiBjb3B5IGJhY2sgZWFjaCB0aW1lIGNvbXB1dGluZyBtYXRyaXhcbiAgICAgICAgLy8gaHR0cDovL2pzcGVyZi5jb20vc3ViYXJyYXktdnMtY29weS1mb3ItYXJyYXktdHJhbnNmb3JtLzVcbiAgICAgICAgX2pvaW50TWF0cmljZXNTdWJBcnJheXM6IFtdLFxuXG4gICAgICAgIC8vIGpvaW50TWF0cml4ICogY3VycmVudFBvc2VNYXRyaXhcbiAgICAgICAgLy8gd29ybGRUcmFuc2Zvcm0gaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgYm9uZVxuICAgICAgICAvLyBzdGlsbCBpbiBtb2RlbCBzcGFjZSBub3Qgd29ybGQgc3BhY2VcbiAgICAgICAgX3NraW5NYXRyaWNlc0FycmF5OiBudWxsLFxuXG4gICAgICAgIF9za2luTWF0cmljZXNTdWJBcnJheXM6IFtdLFxuXG4gICAgICAgIF9zdWJTa2luTWF0cmljZXNBcnJheToge31cbiAgICB9O1xufSxcbi8qKiBAbGVuZHMgY2xheS5Ta2VsZXRvbi5wcm90b3R5cGUgKi9cbntcblxuICAgIC8qKlxuICAgICAqIEFkZCBhIHNraW5uaW5nIGNsaXAgYW5kIGNyZWF0ZSBhIG1hcCBiZXR3ZWVuIGNsaXAgYW5kIHNrZWxldG9uXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5Ta2lubmluZ0NsaXB9IGNsaXBcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW21hcFJ1bGVdIE1hcCBiZXR3ZWVuIGpvaW50IG5hbWUgaW4gc2tlbGV0b24gYW5kIGpvaW50IG5hbWUgaW4gY2xpcFxuICAgICAqL1xuICAgIGFkZENsaXA6IGZ1bmN0aW9uIChjbGlwLCBtYXBSdWxlKSB7XG4gICAgICAgIC8vIENsaXAgaGF2ZSBiZWVuIGV4aXN0cyBpblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpcHNbaV0uY2xpcCA9PT0gY2xpcCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXAgdGhlIGpvaW50IGluZGV4IGluIHNrZWxldG9uIHRvIGpvaW50IHBvc2UgaW5kZXggaW4gY2xpcFxuICAgICAgICB2YXIgbWFwcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBtYXBzW2ldID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ3JlYXRlIGF2YXRhclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gdGhpcy5qb2ludHNbal07XG4gICAgICAgICAgICAgICAgdmFyIHRyYWNrID0gY2xpcC50cmFja3NbaV07XG4gICAgICAgICAgICAgICAgdmFyIGpvaW50TmFtZSA9IGpvaW50Lm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG1hcFJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgam9pbnROYW1lID0gbWFwUnVsZVtqb2ludE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHJhY2submFtZSA9PT0gam9pbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcHNbal0gPSBpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jbGlwcy5wdXNoKHtcbiAgICAgICAgICAgIG1hcHM6IG1hcHMsXG4gICAgICAgICAgICBjbGlwOiBjbGlwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwcy5sZW5ndGggLSAxO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxuICAgICAqL1xuICAgIHJlbW92ZUNsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XG4gICAgICAgIHZhciBpZHggPSAtMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jbGlwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2ldLmNsaXAgPT09IGNsaXApIHtcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpZHggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGlwcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xuICAgICAqL1xuICAgIHJlbW92ZUNsaXBzQWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBjbGlwIGJ5IGluZGV4XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBpbmRleFxuICAgICAqL1xuICAgIGdldENsaXA6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5fY2xpcHNbaW5kZXhdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHNbaW5kZXhdLmNsaXA7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldENsaXBOdW1iZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzLmxlbmd0aDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIGpvaW50IG1hdHJpY2VzIGZyb20gbm9kZSB0cmFuc2Zvcm1cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cbiAgICB1cGRhdGVKb2ludE1hdHJpY2VzOiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBtNCA9IG1hdDQuY3JlYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5qb2ludHMubGVuZ3RoICogMTYpO1xuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xuICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLnJlbGF0aXZlUm9vdE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgbWF0NC5pbnZlcnQobTQsIHRoaXMucmVsYXRpdmVSb290Tm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XG4gICAgICAgICAgICAgICAgLy8gICAgIG1hdDQubXVsdGlwbHkoXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBtNCxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIG00LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheVxuICAgICAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgICAgIC8vICAgICBtYXQ0LmludmVydChtNCwgbTQpO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5jb3B5KG00LCBqb2ludC5ub2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobTQsIG00KTtcbiAgICAgICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaSAqIDE2O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXlbb2Zmc2V0ICsgal0gPSBtNFtqXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgc2V0Sm9pbnRNYXRyaWNlc0FycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IGFycjtcbiAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFyci5sZW5ndGgpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XG4gICAgfSxcblxuICAgIHVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcbiAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5LnN1YmFycmF5KGkgKiAxNiwgKGkrMSkgKiAxNik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXG4gICAgICovXG4gICAgdXBkYXRlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyB2YXIgbTQgPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHkoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcbiAgICAgICAgICAgICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fam9pbnRNYXRyaWNlc1N1YkFycmF5c1tpXVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBKb2ludCBzcGFjZSBpcyByZWxhdGl2ZSB0byByb290LCBpZiBoYXZlXG4gICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucmVsYXRpdmVSb290Tm9kZSkge1xuICAgICAgICAgICAgICAgIC8vICAgICBtYXQ0LmludmVydChtNCwgdGhpcy5yZWxhdGl2ZVJvb3ROb2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgbWF0NC5tdWx0aXBseShcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIG00LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldXG4gICAgICAgICAgICAgICAgLy8gICAgICk7XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICBnZXRTdWJTa2luTWF0cmljZXM6IGZ1bmN0aW9uIChtZXNoSWQsIGpvaW50cykge1xuICAgICAgICB2YXIgc3ViQXJyYXkgPSB0aGlzLl9zdWJTa2luTWF0cmljZXNBcnJheVttZXNoSWRdO1xuICAgICAgICBpZiAoIXN1YkFycmF5KSB7XG4gICAgICAgICAgICBzdWJBcnJheVxuICAgICAgICAgICAgICAgID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXVxuICAgICAgICAgICAgICAgID0gbmV3IEZsb2F0MzJBcnJheShqb2ludHMubGVuZ3RoICogMTYpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGlkeCA9IGpvaW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xuICAgICAgICAgICAgICAgIHN1YkFycmF5W2N1cnNvcisrXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5W2lkeCAqIDE2ICsgal07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1YkFycmF5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgcG9zZSBhbmQgdXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNsaXBJbmRleFxuICAgICAqL1xuICAgIHNldFBvc2U6IGZ1bmN0aW9uIChjbGlwSW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2NsaXBJbmRleF0pIHtcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcHNbY2xpcEluZGV4XS5jbGlwO1xuICAgICAgICAgICAgdmFyIG1hcHMgPSB0aGlzLl9jbGlwc1tjbGlwSW5kZXhdLm1hcHM7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAobWFwc1tpXSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBwb3NlID0gY2xpcC50cmFja3NbbWFwc1tpXV07XG5cbiAgICAgICAgICAgICAgICAvLyBOb3QgdXBkYXRlIGlmIHRoZXJlIGlzIG5vIGRhdGEuXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBJZiBzeW5jIHBvc2UucG9zaXRpb24sIHBvc2Uucm90YXRpb24sIHBvc2Uuc2NhbGVcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB2ZWMzLmNvcHkoam9pbnQubm9kZS5wb3NpdGlvbi5hcnJheSwgcG9zZS5wb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1YXQuY29weShqb2ludC5ub2RlLnJvdGF0aW9uLmFycmF5LCBwb3NlLnJvdGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMuc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUuc2NhbGUuYXJyYXksIHBvc2Uuc2NhbGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnJvdGF0aW9uLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgam9pbnQubm9kZS5zY2FsZS5fZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfSxcblxuICAgIGNsb25lOiBmdW5jdGlvbiAocm9vdE5vZGUsIG5ld1Jvb3ROb2RlKSB7XG4gICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpO1xuICAgICAgICBza2VsZXRvbi5uYW1lID0gdGhpcy5uYW1lO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBuZXdKb2ludCA9IG5ldyBKb2ludCgpO1xuICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSA9IHRoaXMuam9pbnRzW2ldLm5hbWU7XG4gICAgICAgICAgICBuZXdKb2ludC5pbmRleCA9IHRoaXMuam9pbnRzW2ldLmluZGV4O1xuXG4gICAgICAgICAgICB2YXIgcGF0aCA9IHRoaXMuam9pbnRzW2ldLm5vZGUuZ2V0UGF0aChyb290Tm9kZSk7XG4gICAgICAgICAgICB2YXIgcm9vdE5vZGVQYXRoID0gdGhpcy5qb2ludHNbaV0ucm9vdE5vZGUuZ2V0UGF0aChyb290Tm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChwYXRoICE9IG51bGwgJiYgcm9vdE5vZGVQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdKb2ludC5ub2RlID0gbmV3Um9vdE5vZGUucXVlcnlOb2RlKHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignU29tZXRoaW5nIHdyb25nIGluIGNsb25lLCBtYXkgYmUgdGhlIHNrZWxldG9uIHJvb3Qgbm9kZXMgaXMgbm90IG1vdW50ZWQgb24gdGhlIGNsb25lZCByb290IG5vZGUuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNrZWxldG9uLmpvaW50cy5wdXNoKG5ld0pvaW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkpIHtcbiAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBza2VsZXRvbi5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XG5cbiAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBza2VsZXRvbi51cGRhdGUoKTtcblxuICAgICAgICByZXR1cm4gc2tlbGV0b247XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNrZWxldG9uO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkudXRpbC5yYW5kXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIHV2KSB7XFxuICAgIGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MztcXG4gICAgaGlnaHAgZmxvYXQgZHQgPSBkb3QodXYueHksIHZlYzIoYSxiKSksIHNuID0gbW9kKGR0LCAzLjE0MTU5MjY1MzU4OTc5Myk7XFxuICAgIHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG51bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRmFjdG9yIDogNS4wO1xcbmZsb2F0IGxpZ2h0QXR0ZW51YXRpb24oZmxvYXQgZGlzdCwgZmxvYXQgcmFuZ2UpXFxue1xcbiAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IDEuMDtcXG4gICAgYXR0ZW51YXRpb24gPSBkaXN0KmRpc3QvKHJhbmdlKnJhbmdlKzEuMCk7XFxuICAgIGZsb2F0IGF0dF9zID0gYXR0ZW51YXRpb25GYWN0b3I7XFxuICAgIGF0dGVudWF0aW9uID0gMS4wLyhhdHRlbnVhdGlvbiphdHRfcysxLjApO1xcbiAgICBhdHRfcyA9IDEuMC8oYXR0X3MrMS4wKTtcXG4gICAgYXR0ZW51YXRpb24gPSBhdHRlbnVhdGlvbiAtIGF0dF9zO1xcbiAgICBhdHRlbnVhdGlvbiAvPSAxLjAgLSBhdHRfcztcXG4gICAgcmV0dXJuIGNsYW1wKGF0dGVudWF0aW9uLCAwLjAsIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiAgICB2ZWMzIGQgPSBmd2lkdGgodl9CYXJ5Y2VudHJpYyk7XFxuICAgIHZlYzMgYTMgPSBzbW9vdGhzdGVwKHZlYzMoMC4wKSwgZCAqIHdpZHRoLCB2X0JhcnljZW50cmljKTtcXG4gICAgcmV0dXJuIG1pbihtaW4oYTMueCwgYTMueSksIGEzLnopO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudmVjNCBlbmNvZGVGbG9hdChjb25zdCBpbiBmbG9hdCBkZXB0aClcXG57XFxuICAgIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgyNTYuMCoyNTYuMCoyNTYuMCwgMjU2LjAqMjU2LjAsIDI1Ni4wLCAxLjApO1xcbiAgICBjb25zdCB2ZWM0IGJpdF9tYXNrICA9IHZlYzQoMC4wLCAxLjAvMjU2LjAsIDEuMC8yNTYuMCwgMS4wLzI1Ni4wKTtcXG4gICAgdmVjNCByZXMgPSBmcmFjdChkZXB0aCAqIGJpdFNoaWZ0cyk7XFxuICAgIHJlcyAtPSByZXMueHh5eiAqIGJpdF9tYXNrO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuZmxvYXQgZGVjb2RlRmxvYXQoY29uc3QgaW4gdmVjNCBjb2xvcilcXG57XFxuICAgIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgxLjAvKDI1Ni4wKjI1Ni4wKjI1Ni4wKSwgMS4wLygyNTYuMCoyNTYuMCksIDEuMC8yNTYuMCwgMS4wKTtcXG4gICAgcmV0dXJuIGRvdChjb2xvciwgYml0U2hpZnRzKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmZsb2F0XFxuQGltcG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxudmVjMyBSR0JNRGVjb2RlKHZlYzQgcmdibSwgZmxvYXQgcmFuZ2UpIHtcXG4gIHJldHVybiByYW5nZSAqIHJnYm0ucmdiICogcmdibS5hO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IFJHQk1FbmNvZGUodmVjMyBjb2xvciwgZmxvYXQgcmFuZ2UpIHtcXG4gICAgaWYgKGRvdChjb2xvciwgY29sb3IpID09IDAuMCkge1xcbiAgICAgICAgcmV0dXJuIHZlYzQoMC4wKTtcXG4gICAgfVxcbiAgICB2ZWM0IHJnYm07XFxuICAgIGNvbG9yIC89IHJhbmdlO1xcbiAgICByZ2JtLmEgPSBjbGFtcChtYXgobWF4KGNvbG9yLnIsIGNvbG9yLmcpLCBtYXgoY29sb3IuYiwgMWUtNikpLCAwLjAsIDEuMCk7XFxuICAgIHJnYm0uYSA9IGNlaWwocmdibS5hICogMjU1LjApIC8gMjU1LjA7XFxuICAgIHJnYm0ucmdiID0gY29sb3IgLyByZ2JtLmE7XFxuICAgIHJldHVybiByZ2JtO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IGRlY29kZUhEUih2ZWM0IGNvbG9yKVxcbntcXG4jaWYgZGVmaW5lZChSR0JNX0RFQ09ERSkgfHwgZGVmaW5lZChSR0JNKVxcbiAgICByZXR1cm4gdmVjNChSR0JNRGVjb2RlKGNvbG9yLCA1MS41KSwgMS4wKTtcXG4jZWxzZVxcbiAgICByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbnZlYzQgZW5jb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fRU5DT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuICAgIHJldHVybiBSR0JNRW5jb2RlKGNvbG9yLnh5eiwgNTEuNSk7XFxuI2Vsc2VcXG4gICAgcmV0dXJuIGNvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzQgc1JHQlRvTGluZWFyKGluIHZlYzQgdmFsdWUpIHtcXG4gICAgcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKDAuMDUyMTMyNzAxNCksIHZlYzMoMi40KSksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjA0MDQ1KSkpKSwgdmFsdWUudyk7XFxufVxcbnZlYzQgbGluZWFyVG9zUkdCKGluIHZlYzQgdmFsdWUpIHtcXG4gICAgcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IsIHZlYzMoMC40MTY2NikpICogMS4wNTUgLSB2ZWMzKDAuMDU1KSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMobGVzc1RoYW5FcXVhbCh2YWx1ZS5yZ2IsIHZlYzMoMC4wMDMxMzA4KSkpKSwgdmFsdWUudyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFNLSU5OSU5HXFxuYXR0cmlidXRlIHZlYzMgd2VpZ2h0IDogV0VJR0hUO1xcbmF0dHJpYnV0ZSB2ZWM0IGpvaW50IDogSk9JTlQ7XFxudW5pZm9ybSBtYXQ0IHNraW5NYXRyaXhbSk9JTlRfQ09VTlRdIDogU0tJTl9NQVRSSVg7XFxubWF0NCBnZXRTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiAgICByZXR1cm4gc2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG5tYXQ0IHNraW5NYXRyaXhXUyA9IGdldFNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG5pZiAod2VpZ2h0LnkgPiAxZS00KVxcbntcXG4gICAgc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTtcXG59XFxuaWYgKHdlaWdodC56ID4gMWUtNClcXG57XFxuICAgIHNraW5NYXRyaXhXUyArPSBnZXRTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7XFxufVxcbmZsb2F0IHdlaWdodFcgPSAxLjAtd2VpZ2h0Lngtd2VpZ2h0Lnktd2VpZ2h0Lno7XFxuaWYgKHdlaWdodFcgPiAxZS00KVxcbntcXG4gICAgc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbnZlYzMgcGFyYWxsYXhDb3JyZWN0KGluIHZlYzMgZGlyLCBpbiB2ZWMzIHBvcywgaW4gdmVjMyBib3hNaW4sIGluIHZlYzMgYm94TWF4KSB7XFxuICAgIHZlYzMgZmlyc3QgPSAoYm94TWF4IC0gcG9zKSAvIGRpcjtcXG4gICAgdmVjMyBzZWNvbmQgPSAoYm94TWluIC0gcG9zKSAvIGRpcjtcXG4gICAgdmVjMyBmdXJ0aGVyID0gbWF4KGZpcnN0LCBzZWNvbmQpO1xcbiAgICBmbG9hdCBkaXN0ID0gbWluKGZ1cnRoZXIueCwgbWluKGZ1cnRoZXIueSwgZnVydGhlci56KSk7XFxuICAgIHZlYzMgZml4ZWRQb3MgPSBwb3MgKyBkaXIgKiBkaXN0O1xcbiAgICB2ZWMzIGJveENlbnRlciA9IChib3hNYXggKyBib3hNaW4pICogMC41O1xcbiAgICByZXR1cm4gbm9ybWFsaXplKGZpeGVkUG9zIC0gYm94Q2VudGVyKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZlYzQgY2xhbXBTYW1wbGUoY29uc3QgaW4gc2FtcGxlcjJEIHRleHR1cmUsIGNvbnN0IGluIHZlYzIgY29vcmQpXFxue1xcbiNpZmRlZiBTVEVSRU9cXG4gICAgZmxvYXQgZXllID0gc3RlcCgwLjUsIGNvb3JkLngpICogMC41O1xcbiAgICB2ZWMyIGNvb3JkQ2xhbXBlZCA9IGNsYW1wKGNvb3JkLCB2ZWMyKGV5ZSwgMC4wKSwgdmVjMigwLjUgKyBleWUsIDEuMCkpO1xcbiNlbHNlXFxuICAgIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoMC4wKSwgdmVjMigxLjApKTtcXG4jZW5kaWZcXG4gICAgcmV0dXJuIHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZENsYW1wZWQpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiAgICBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gICAgY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuICAgIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiAgICBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gICAgY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuICAgIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmJhc2ljLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgOiBbMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA6IFswLjAsIDAuMF07XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG5hdHRyaWJ1dGUgdmVjNCBhX0NvbG9yIDogQ09MT1I7XFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiAgICB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiAgICB2X0JhcnljZW50cmljID0gYmFyeWNlbnRyaWM7XFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gICAgdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuYmFzaWMuZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAwLjA7XFxudW5pZm9ybSB2ZWM0IGxpbmVDb2xvciA6IFswLjAsIDAuMCwgMC4wLCAwLjZdO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuI2lmZGVmIFJFTkRFUl9URVhDT09SRFxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZfVGV4Y29vcmQsIDEuMCwgMS4wKTtcXG4gICAgcmV0dXJuO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiAgICBnbF9GcmFnQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxuICAgIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuICAgIHRleCA9IHNSR0JUb0xpbmVhcih0ZXgpO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKERJRkZVU0VNQVBfQUxQSEFfQUxQSEEpXFxuICAgIGdsX0ZyYWdDb2xvci5hID0gdGV4LmE7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4LnJnYjtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gICAgaWYoIGxpbmVXaWR0aCA+IDAuKVxcbiAgICB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiAgICB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gICAgaWYgKGdsX0ZyYWdDb2xvci5hIDwgYWxwaGFDdXRvZmYpIHtcXG4gICAgICAgIGRpc2NhcmQ7XFxuICAgIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhnbF9GcmFnQ29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gICAgZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9zUkdCKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5sYW1iZXJ0LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICAgIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuICAgIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNCggc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gICAgdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gICAgdl9Ob3JtYWwgPSBub3JtYWxpemUoICggd29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApICkueHl6ICk7XFxuICAgIHZfV29ybGRQb3NpdGlvbiA9ICggd29ybGQgKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCkgKS54eXo7XFxuICAgIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuICAgIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQuZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuI2lmZGVmIFJFTkRFUl9OT1JNQUxcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2X05vcm1hbCAqIDAuNSArIDAuNSwgMS4wKTtcXG4gICAgcmV0dXJuO1xcbiNlbmRpZlxcbiNpZmRlZiBSRU5ERVJfVEVYQ09PUkRcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2X1RleGNvb3JkLCAxLjAsIDEuMCk7XFxuICAgIHJldHVybjtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gICAgZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCggZGlmZnVzZU1hcCwgdl9UZXhjb29yZCApO1xcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiAgICB0ZXgucmdiID0gcG93KHRleC5yZ2IsIHZlYzMoMi4yKSk7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4LnJnYjtcXG4jaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiAgICBnbF9GcmFnQ29sb3IuYSAqPSB0ZXguYTtcXG4jZW5kaWZcXG4jZW5kaWZcXG4gICAgdmVjMyBkaWZmdXNlQ29sb3IgPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuICAgIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuICAgIHtcXG4gICAgICAgIGRpZmZ1c2VDb2xvciArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuICAgIH1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiAgICB7e1xcbiAgICAgICAgZGlmZnVzZUNvbG9yICs9IGNhbGNBbWJpZW50U0hMaWdodChfaWR4Xywgdl9Ob3JtYWwpICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuICAgIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiAgICBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gICAgaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiAgICB7XFxuICAgICAgICBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzUG9pbnQpO1xcbiAgICB9XFxuI2VuZGlmXFxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCBQT0lOVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiAgICB7XFxuICAgICAgICB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25baV07XFxuICAgICAgICB2ZWMzIGxpZ2h0Q29sb3IgPSBwb2ludExpZ2h0Q29sb3JbaV07XFxuICAgICAgICBmbG9hdCByYW5nZSA9IHBvaW50TGlnaHRSYW5nZVtpXTtcXG4gICAgICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiAgICAgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiAgICAgICAgbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gICAgICAgIGZsb2F0IG5kbCA9IGRvdCggdl9Ob3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XFxuICAgICAgICBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgICAgIGlmKCBzaGFkb3dFbmFibGVkIClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtpXTtcXG4gICAgICAgIH1cXG4jZW5kaWZcXG4gICAgICAgIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogY2xhbXAobmRsLCAwLjAsIDEuMCkgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuICAgIH1cXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgIGZsb2F0IHNoYWRvd0NvbnRyaWJzRGlyW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXTtcXG4gICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAge1xcbiAgICAgICAgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic0Rpcik7XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZm9yKGludCBpID0gMDsgaSA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBpKyspXFxuICAgIHtcXG4gICAgICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSAtZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltpXTtcXG4gICAgICAgIHZlYzMgbGlnaHRDb2xvciA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltpXTtcXG4gICAgICAgIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKSk7XFxuICAgICAgICBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gICAgICAgIGlmKCBzaGFkb3dFbmFibGVkIClcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNEaXJbaV07XFxuICAgICAgICB9XFxuI2VuZGlmXFxuICAgICAgICBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogc2hhZG93Q29udHJpYjtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gICAgaWYoc2hhZG93RW5hYmxlZClcXG4gICAge1xcbiAgICAgICAgY29tcHV0ZVNoYWRvd09mU3BvdExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzU3BvdCk7XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZm9yKGludCBpID0gMDsgaSA8IFNQT1RfTElHSFRfQ09VTlQ7IGkrKylcXG4gICAge1xcbiAgICAgICAgdmVjMyBsaWdodFBvc2l0aW9uID0gLXNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiAgICAgICAgdmVjMyBzcG90TGlnaHREaXJlY3Rpb24gPSAtbm9ybWFsaXplKCBzcG90TGlnaHREaXJlY3Rpb25baV0gKTtcXG4gICAgICAgIHZlYzMgbGlnaHRDb2xvciA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiAgICAgICAgZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gICAgICAgIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiAgICAgICAgZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuICAgICAgICBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gICAgICAgIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiAgICAgICAgZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiAgICAgICAgbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gICAgICAgIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBmbG9hdCBmYWxsb2ZmO1xcbiAgICAgICAgZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyggYiAtIGEpLCAwLjAsIDEuMCk7XFxuICAgICAgICBmYWxsb2ZmID0gcG93KGZhbGxvZmYsIGZhbGxvZmZGYWN0b3IpO1xcbiAgICAgICAgZmxvYXQgbmRsID0gZG90KHZfTm9ybWFsLCBsaWdodERpcmVjdGlvbik7XFxuICAgICAgICBuZGwgPSBjbGFtcChuZGwsIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuICAgICAgICBpZiggc2hhZG93RW5hYmxlZCApXFxuICAgICAgICB7XFxuICAgICAgICAgICAgc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzU3BvdFtpXTtcXG4gICAgICAgIH1cXG4jZW5kaWZcXG4gICAgICAgIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogbmRsICogYXR0ZW51YXRpb24gKiAoMS4wLWZhbGxvZmYpICogc2hhZG93Q29udHJpYjtcXG4gICAgfVxcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IucmdiICo9IGRpZmZ1c2VDb2xvcjtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gICAgaWYobGluZVdpZHRoID4gMC4pXFxuICAgIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuICAgIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiAgICBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiAgICAgICAgZGlzY2FyZDtcXG4gICAgfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKGdsX0ZyYWdDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiAgICBnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb3NSR0IoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LndpcmVmcmFtZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiAgICBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wICk7XFxuICAgIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS53aXJlZnJhbWUuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDEuMDtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbnZvaWQgbWFpbigpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gY29sb3I7XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gKDEuMC1lZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogYWxwaGE7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNreWJveC52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc2t5Ym94LmZyYWdtZW50XFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZpcm9ubWVudE1hcDtcXG51bmlmb3JtIGZsb2F0IGxvZDogMC4wO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiAgICB2ZWMzIHZpZXdEaXJlY3Rpb24gPSBub3JtYWxpemUodl9Xb3JsZFBvc2l0aW9uIC0gZXllUG9zKTtcXG4jaWZkZWYgTE9EXFxuICAgIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmVMb2RFWFQoZW52aXJvbm1lbnRNYXAsIHZpZXdEaXJlY3Rpb24sIGxvZCkpO1xcbiNlbHNlXFxuICAgIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIHZpZXdEaXJlY3Rpb24pKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gICAgdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiAgICB0ZXhlbC5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcodGV4ZWwucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gICAgdGV4ZWwgPSBsaW5lYXJUb3NSR0IodGV4ZWwpO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh0ZXhlbC5yZ2IsIDEuMCkpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmNvbG9yYWRqdXN0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgZ2FtbWEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBzYXR1cmF0aW9uIDogMS4wO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IGNsYW1wKHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpLCAwLjAsIDEuMCk7XFxuICAgIGNvbG9yID0gY2xhbXAoIChjb2xvci12ZWMzKDAuNSkpKmNvbnRyYXN0K3ZlYzMoMC41KSwgMC4wLCAxLjApO1xcbiAgICBjb2xvciA9IGNsYW1wKCBjb2xvciAqIHBvdygyLjAsIGV4cG9zdXJlKSwgMC4wLCAxLjApO1xcbiAgICBjb2xvciA9IGNsYW1wKCBwb3coY29sb3IsIHZlYzMoZ2FtbWEpKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoIGNvbG9yLCB3ICk7XFxuICAgIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRuZXNzXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb250cmFzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiAgICB2ZWMzIGNvbG9yID0gKHRleC5yZ2ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmV4cG9zdXJlXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHRleC5yZ2IgKiBwb3coMi4wLCBleHBvc3VyZSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmdhbW1hXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHBvdyh0ZXgucmdiLCB2ZWMzKGdhbW1hKSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnNhdHVyYXRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gICAgdmVjMyBjb2xvciA9IHRleC5yZ2I7XFxuICAgIGZsb2F0IGx1bWluYW5jZSA9IGRvdChjb2xvciwgdyk7XFxuICAgIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFs5XTtcXG5nYXVzc2lhbktlcm5lbFswXSA9IDAuMDc7XFxuZ2F1c3NpYW5LZXJuZWxbMV0gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzJdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFszXSA9IDAuMTQ7XFxuZ2F1c3NpYW5LZXJuZWxbNF0gPSAwLjE2O1xcbmdhdXNzaWFuS2VybmVsWzVdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs2XSA9IDAuMTI7XFxuZ2F1c3NpYW5LZXJuZWxbN10gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzhdID0gMC4wNztcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzEzXFxuZmxvYXQgZ2F1c3NpYW5LZXJuZWxbMTNdO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wMjtcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjEzO1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjExO1xcbmdhdXNzaWFuS2VybmVsWzldID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFsxMF0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzExXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMTJdID0gMC4wMjtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1clxcbiNkZWZpbmUgU0hBREVSX05BTUUgZ2F1c3NpYW5fYmx1clxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7dmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDIuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG51bmlmb3JtIGZsb2F0IGJsdXJEaXIgOiAwLjA7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbiAodm9pZClcXG57XFxuICAgIEBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmtlcm5lbC5nYXVzc2lhbl85XFxuICAgIHZlYzIgb2ZmID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4gICAgb2ZmICo9IHZlYzIoMS4wIC0gYmx1ckRpciwgYmx1ckRpcik7XFxuICAgIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCB3ZWlnaHRBbGwgPSAwLjA7XFxuICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7XFxuICAgICAgICBmbG9hdCB3ID0gZ2F1c3NpYW5LZXJuZWxbaV07XFxuICAgICAgICB2ZWM0IHRleGVsID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBmbG9hdChpIC0gNCkgKiBvZmYpKTtcXG4gICAgICAgIHN1bSArPSB0ZXhlbCAqIHc7XFxuICAgICAgICB3ZWlnaHRBbGwgKz0gdztcXG4gICAgfVxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoc3VtIC8gbWF4KHdlaWdodEFsbCwgMC4wMSkpO1xcbn1cXG5AZW5kXFxuXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sb2dfbHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCB0ZXggPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gICAgZmxvYXQgbHVtaW5hbmNlID0gZG90KHRleC5yZ2IsIHcpO1xcbiAgICBsdW1pbmFuY2UgPSBsb2cobHVtaW5hbmNlICsgMC4wMDEpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmx1bV9hZGFwdGlvblxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFkYXB0ZWRMdW07XFxudW5pZm9ybSBzYW1wbGVyMkQgY3VycmVudEx1bTtcXG51bmlmb3JtIGZsb2F0IGZyYW1lVGltZSA6IDAuMDI7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICBmbG9hdCBmQWRhcHRlZEx1bSA9IGRlY29kZUhEUih0ZXh0dXJlMkQoYWRhcHRlZEx1bSwgdmVjMigwLjUsIDAuNSkpKS5yO1xcbiAgICBmbG9hdCBmQ3VycmVudEx1bSA9IGV4cChlbmNvZGVIRFIodGV4dHVyZTJEKGN1cnJlbnRMdW0sIHZlYzIoMC41LCAwLjUpKSkucik7XFxuICAgIGZBZGFwdGVkTHVtICs9IChmQ3VycmVudEx1bSAtIGZBZGFwdGVkTHVtKSAqICgxLjAgLSBwb3coMC45OCwgMzAuMCAqIGZyYW1lVGltZSkpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGZBZGFwdGVkTHVtKSwgMS4wKSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdW1cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkICk7XFxuICAgIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHV0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsb29rdXA7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiAgICBmbG9hdCBibHVlQ29sb3IgPSB0ZXguYiAqIDYzLjA7XFxuICAgIHZlYzIgcXVhZDE7XFxuICAgIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gICAgcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuICAgIHZlYzIgcXVhZDI7XFxuICAgIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiAgICBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiAgICB2ZWMyIHRleFBvczE7XFxuICAgIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXgucik7XFxuICAgIHRleFBvczEueSA9IChxdWFkMS55ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXguZyk7XFxuICAgIHZlYzIgdGV4UG9zMjtcXG4gICAgdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gICAgdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gICAgdmVjNCBuZXdDb2xvcjEgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MxKTtcXG4gICAgdmVjNCBuZXdDb2xvcjIgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MyKTtcXG4gICAgdmVjNCBuZXdDb2xvciA9IG1peChuZXdDb2xvcjEsIG5ld0NvbG9yMiwgZnJhY3QoYmx1ZUNvbG9yKSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobmV3Q29sb3IucmdiLCB0ZXgudyk7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudmlnbmV0dGVcXG4jZGVmaW5lIE9VVFBVVF9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBkYXJrbmVzczogMTtcXG51bmlmb3JtIGZsb2F0IG9mZnNldDogMTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IHRleGVsLnJnYjtcXG4gICAgdmVjMiB1diA9ICh2X1RleGNvb3JkIC0gdmVjMigwLjUpKSAqIHZlYzIob2Zmc2V0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQobWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSBkYXJrbmVzcyksIGRvdCh1diwgdXYpKSwgdGV4ZWwuYSkpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLm91dHB1dFxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXgucmdiO1xcbiNpZmRlZiBPVVRQVVRfQUxQSEFcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSB0ZXguYTtcXG4jZWxzZVxcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxuI2lmZGVmIFBSRU1VTFRJUExZX0FMUEhBXFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHRocmVzaG9sZCA6IDE7XFxudW5pZm9ybSBmbG9hdCBzY2FsZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemU6IFs1MTIsIDUxMl07XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuY29uc3QgdmVjMyBsdW1XZWlnaHQgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWM0IG1lZGlhbih2ZWM0IGEsIHZlYzQgYiwgdmVjNCBjKVxcbntcXG4gICAgcmV0dXJuIGEgKyBiICsgYyAtIG1pbihtaW4oYSwgYiksIGMpIC0gbWF4KG1heChhLCBiKSwgYyk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiAgICB2ZWMzIGQgPSAxLjAgLyB0ZXh0dXJlU2l6ZS54eXggKiB2ZWMzKDEuMCwgMS4wLCAwLjApO1xcbiAgICB2ZWM0IHMxID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eikpO1xcbiAgICB2ZWM0IHMyID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eikpO1xcbiAgICB2ZWM0IHMzID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiAgICB2ZWM0IHM0ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiAgICB0ZXhlbCA9IG1lZGlhbihtZWRpYW4odGV4ZWwsIHMxLCBzMiksIHMzLCBzNCk7XFxuI2VuZGlmXFxuICAgIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IgLCBsdW1XZWlnaHQpO1xcbiAgICB2ZWM0IGNvbG9yO1xcbiAgICBpZiAobHVtID4gdGhyZXNob2xkICYmIHRleGVsLmEgPiAwLjApXFxuICAgIHtcXG4gICAgICAgIGNvbG9yID0gdmVjNCh0ZXhlbC5yZ2IgKiBzY2FsZSwgdGV4ZWwuYSAqIHNjYWxlKTtcXG4gICAgfVxcbiAgICBlbHNlXFxuICAgIHtcXG4gICAgICAgIGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICB9XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5cIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG93bnNhbXBsZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuZmxvYXQgYnJpZ2h0bmVzcyh2ZWMzIGMpXFxue1xcbiAgICByZXR1cm4gbWF4KG1heChjLnIsIGMuZyksIGMuYik7XFxufVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiAgICB2ZWMzIHMxID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSkucmdiO1xcbiAgICB2ZWMzIHMyID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSkucmdiO1xcbiAgICB2ZWMzIHMzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkucmdiO1xcbiAgICB2ZWMzIHM0ID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkucmdiO1xcbiAgICBmbG9hdCBzMXcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMSkgKyAxLjApO1xcbiAgICBmbG9hdCBzMncgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMikgKyAxLjApO1xcbiAgICBmbG9hdCBzM3cgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMykgKyAxLjApO1xcbiAgICBmbG9hdCBzNHcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzNCkgKyAxLjApO1xcbiAgICBmbG9hdCBvbmVEaXZpZGVTdW0gPSAxLjAgLyAoczF3ICsgczJ3ICsgczN3ICsgczR3KTtcXG4gICAgdmVjNCBjb2xvciA9IHZlYzQoXFxuICAgICAgICAoczEgKiBzMXcgKyBzMiAqIHMydyArIHMzICogczN3ICsgczQgKiBzNHcpICogb25lRGl2aWRlU3VtLFxcbiAgICAgICAgMS4wXFxuICAgICk7XFxuI2Vsc2VcXG4gICAgdmVjNCBjb2xvciA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiAgICBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gICAgY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSk7XFxuICAgIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiAgICBjb2xvciAqPSAwLjI1O1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnVwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIsIDUxMl07XFxudW5pZm9ybSBmbG9hdCBzYW1wbGVTY2FsZTogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5jbGFtcF9zYW1wbGVcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuICAgIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuICAgIHZlYzQgcztcXG4gICAgcyAgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAtIGQueHkpKTtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAtIGQud3kpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAtIGQuenkpKTtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCAgICAgICApKSAqIDQuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQud3kpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHMgLyAxNi4wKTtcXG4jZWxzZVxcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsICsxLjAsICsxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4gICAgdmVjNCBzO1xcbiAgICBzICA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiAgICBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiAgICBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiAgICBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDQuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmNvbXBvc2l0ZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zZmxhcmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2RpcnQ7XFxuI2VuZGlmXFxuI2lmZGVmIExVTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbHVtO1xcbiNlbmRpZlxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1dDtcXG4jZW5kaWZcXG4jaWZkZWYgQ09MT1JfQ09SUkVDVElPTlxcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0bmVzcyA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGNvbnRyYXN0IDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVklHTkVUVEVcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlRGFya25lc3M6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlT2Zmc2V0OiAxLjA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGJsb29tSW50ZW5zaXR5IDogMC4yNTtcXG51bmlmb3JtIGZsb2F0IGxlbnNmbGFyZUludGVuc2l0eSA6IDE7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiAgICBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gICAgY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuICAgIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiAgICBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gICAgY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuICAgIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbmZsb2F0IGV5ZUFkYXB0aW9uKGZsb2F0IGZMdW0pXFxue1xcbiAgICByZXR1cm4gbWl4KDAuMiwgZkx1bSwgMC41KTtcXG59XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxudmVjMyBsdXRUcmFuc2Zvcm0odmVjMyBjb2xvcikge1xcbiAgICBmbG9hdCBibHVlQ29sb3IgPSBjb2xvci5iICogNjMuMDtcXG4gICAgdmVjMiBxdWFkMTtcXG4gICAgcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiAgICBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gICAgdmVjMiBxdWFkMjtcXG4gICAgcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuICAgIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuICAgIHZlYzIgdGV4UG9zMTtcXG4gICAgdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiAgICB0ZXhQb3MxLnkgPSAocXVhZDEueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuICAgIHZlYzIgdGV4UG9zMjtcXG4gICAgdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiAgICB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuICAgIHZlYzQgbmV3Q29sb3IxID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMSk7XFxuICAgIHZlYzQgbmV3Q29sb3IyID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMik7XFxuICAgIHZlYzQgbmV3Q29sb3IgPSBtaXgobmV3Q29sb3IxLCBuZXdDb2xvcjIsIGZyYWN0KGJsdWVDb2xvcikpO1xcbiAgICByZXR1cm4gbmV3Q29sb3IucmdiO1xcbn1cXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ZWwgPSB2ZWM0KDAuMCk7XFxuICAgIHZlYzQgb3JpZ2luYWxUZXhlbCA9IHZlYzQoMC4wKTtcXG4jaWZkZWYgVEVYVFVSRV9FTkFCTEVEXFxuICAgIHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuICAgIG9yaWdpbmFsVGV4ZWwgPSB0ZXhlbDtcXG4jZW5kaWZcXG4jaWZkZWYgQkxPT01fRU5BQkxFRFxcbiAgICB2ZWM0IGJsb29tVGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSk7XFxuICAgIHRleGVsLnJnYiArPSBibG9vbVRleGVsLnJnYiAqIGJsb29tSW50ZW5zaXR5O1xcbiAgICB0ZXhlbC5hICs9IGJsb29tVGV4ZWwuYSAqIGJsb29tSW50ZW5zaXR5O1xcbiNlbmRpZlxcbiNpZmRlZiBMRU5TRkxBUkVfRU5BQkxFRFxcbiAgICB0ZXhlbCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkpICogdGV4dHVyZTJEKGxlbnNkaXJ0LCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eTtcXG4jZW5kaWZcXG4gICAgdGV4ZWwuYSA9IG1pbih0ZXhlbC5hLCAxLjApO1xcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbiAgICBmbG9hdCBmTHVtID0gdGV4dHVyZTJEKGx1bSwgdmVjMigwLjUsIDAuNSkpLnI7XFxuICAgIGZsb2F0IGFkYXB0ZWRMdW1EZXN0ID0gMy4wIC8gKG1heCgwLjEsIDEuMCArIDEwLjAqZXllQWRhcHRpb24oZkx1bSkpKTtcXG4gICAgZmxvYXQgZXhwb3N1cmVCaWFzID0gYWRhcHRlZEx1bURlc3QgKiBleHBvc3VyZTtcXG4jZWxzZVxcbiAgICBmbG9hdCBleHBvc3VyZUJpYXMgPSBleHBvc3VyZTtcXG4jZW5kaWZcXG4gICAgdGV4ZWwucmdiICo9IGV4cG9zdXJlQmlhcztcXG4gICAgdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuICAgIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG4gICAgdGV4ZWwucmdiID0gbHV0VHJhbnNmb3JtKGNsYW1wKHRleGVsLnJnYix2ZWMzKDAuMCksdmVjMygxLjApKSk7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG4gICAgdGV4ZWwucmdiID0gY2xhbXAodGV4ZWwucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiAgICB0ZXhlbC5yZ2IgPSBjbGFtcCgodGV4ZWwucmdiIC0gdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuICAgIHRleGVsLnJnYiA9IG1peCh2ZWMzKGx1bSksIHRleGVsLnJnYiwgc2F0dXJhdGlvbik7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxuICAgIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKHZpZ25ldHRlT2Zmc2V0KTtcXG4gICAgdGV4ZWwucmdiID0gbWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSB2aWduZXR0ZURhcmtuZXNzKSwgZG90KHV2LCB1dikpO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4ZWwpO1xcbiNpZmRlZiBERUJVR1xcbiAgICAjaWYgREVCVUcgPT0gMVxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSkpO1xcbiAgICAjZWxpZiBERUJVRyA9PSAyXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSkgKiBibG9vbUludGVuc2l0eSk7XFxuICAgICNlbGlmIERFQlVHID09IDNcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQobGVuc2ZsYXJlLCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eSkpO1xcbiAgICAjZW5kaWZcXG4jZW5kaWZcXG4gICAgaWYgKG9yaWdpbmFsVGV4ZWwuYSA8PSAwLjAxICYmIGdsX0ZyYWdDb2xvci5hID4gMWUtNSkge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yLmEgPSBkb3QoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuICAgIH1cXG4jaWZkZWYgUFJFTVVMVElQTFlfQUxQSEFcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcXG4jZW5kaWZcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuY29jXFxudW5pZm9ybSBzYW1wbGVyMkQgZGVwdGg7XFxudW5pZm9ybSBmbG9hdCB6TmVhcjogMC4xO1xcbnVuaWZvcm0gZmxvYXQgekZhcjogMjAwMDtcXG51bmlmb3JtIGZsb2F0IGZvY2FsRGlzdDogMztcXG51bmlmb3JtIGZsb2F0IGZvY2FsUmFuZ2U6IDE7XFxudW5pZm9ybSBmbG9hdCBmb2NhbExlbmd0aDogMzA7XFxudW5pZm9ybSBmbG9hdCBmc3RvcDogMi44O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpXFxue1xcbiAgICBmbG9hdCB6ID0gdGV4dHVyZTJEKGRlcHRoLCB2X1RleGNvb3JkKS5yICogMi4wIC0gMS4wO1xcbiAgICBmbG9hdCBkaXN0ID0gMi4wICogek5lYXIgKiB6RmFyIC8gKHpGYXIgKyB6TmVhciAtIHogKiAoekZhciAtIHpOZWFyKSk7XFxuICAgIGZsb2F0IGFwZXJ0dXJlID0gZm9jYWxMZW5ndGggLyBmc3RvcDtcXG4gICAgZmxvYXQgY29jO1xcbiAgICBmbG9hdCB1cHBwZXIgPSBmb2NhbERpc3QgKyBmb2NhbFJhbmdlO1xcbiAgICBmbG9hdCBsb3dlciA9IGZvY2FsRGlzdCAtIGZvY2FsUmFuZ2U7XFxuICAgIGlmIChkaXN0IDw9IHVwcHBlciAmJiBkaXN0ID49IGxvd2VyKSB7XFxuICAgICAgICBjb2MgPSAwLjU7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBmbG9hdCBmb2NhbEFkanVzdGVkID0gZGlzdCA+IHVwcHBlciA/IHVwcHBlciA6IGxvd2VyO1xcbiAgICAgICAgY29jID0gYWJzKGFwZXJ0dXJlICogKGZvY2FsTGVuZ3RoICogKGRpc3QgLSBmb2NhbEFkanVzdGVkKSkgLyAoZGlzdCAqIChmb2NhbEFkanVzdGVkIC0gZm9jYWxMZW5ndGgpKSk7XFxuICAgICAgICBjb2MgPSBjbGFtcChjb2MsIDAuMCwgMC40KSAvIDAuNDAwMDAwMTtcXG4gICAgICAgIGlmIChkaXN0IDwgbG93ZXIpIHtcXG4gICAgICAgICAgICBjb2MgPSAtY29jO1xcbiAgICAgICAgfVxcbiAgICAgICAgY29jID0gY29jICogMC41ICsgMC41O1xcbiAgICB9XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGNvYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YucHJlbXVsdGlwbHlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvYztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxudm9pZCBtYWluKCkge1xcbiAgICBmbG9hdCBmQ29jID0gbWF4KGFicyhkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkKSkgKiAyLjAgLSAxLjApLCAwLjEpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoXFxuICAgICAgICB2ZWM0KGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpLnJnYiAqIGZDb2MsIDEuMClcXG4gICAgKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmRvZi5taW5fY29jXFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbkBpbXBvcnQgY2xheS51dGlsLmZsb2F0XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgMS4wLCAxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4gICAgZmxvYXQgZkNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuICAgIGZDb2MgPSBtaW4oZkNvYywgZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuenkpKSk7XFxuICAgIGZDb2MgPSBtaW4oZkNvYywgZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQueHcpKSk7XFxuICAgIGZDb2MgPSBtaW4oZkNvYywgZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuencpKSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGZDb2MpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLm1heF9jb2NcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMi4wLCA1MTIuMF07XFxuQGltcG9ydCBjbGF5LnV0aWwuZmxvYXRcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCAxLjAsIDEuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5O1xcbiAgICBmbG9hdCBmQ29jID0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gICAgZkNvYyA9IG1heChmQ29jLCBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC56eSkpKTtcXG4gICAgZkNvYyA9IG1heChmQ29jLCBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC54dykpKTtcXG4gICAgZkNvYyA9IG1heChmQ29jLCBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC56dykpKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZkNvYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuY29jX3Vwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2M7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuZmxvYXRcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuICAgIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuICAgIGZsb2F0IHM7XFxuICAgIHMgID0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCAtIGQueHkpKTtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkIC0gZC53eSkpICogMi4wO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuICAgIHMgKz0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuencpKSAqIDIuMDtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICAgICAgICkpICogNC4wO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnh3KSkgKiAyLjA7XFxuICAgIHMgKz0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC53eSkpICogMi4wO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KHMgLyAxNi4wKTtcXG4jZWxzZVxcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsICsxLjAsICsxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4gICAgZmxvYXQgcztcXG4gICAgcyAgPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiAgICBzICs9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuICAgIHMgKz0gZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCArIGQueHcpKTtcXG4gICAgcyArPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChzIC8gNC4wKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmRvZi51cHNhbXBsZVxcbiNkZWZpbmUgSElHSF9RVUFMSVRZXFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IHRhcCh2ZWMyIHV2LCBpbm91dCB2ZWM0IGNvbG9yLCBmbG9hdCBiYXNlV2VpZ2h0KSB7XFxuICAgIGZsb2F0IHdlaWdodCA9IGFicyhkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB1dikpICogMi4wIC0gMS4wKSAqIGJhc2VXZWlnaHQ7XFxuICAgIGNvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdXYpKSAqIHdlaWdodDtcXG4gICAgcmV0dXJuIHdlaWdodDtcXG59XFxudm9pZCBtYWluKClcXG57XFxuI2lmZGVmIEhJR0hfUVVBTElUWVxcbiAgICB2ZWM0IGQgPSB2ZWM0KDEuMCwgMS4wLCAtMS4wLCAwLjApIC8gdGV4dHVyZVNpemUueHl4eSAqIHNhbXBsZVNjYWxlO1xcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiAgICBmbG9hdCBiYXNlV2VpZ2h0ID0gMS4wIC8gMTYuMDtcXG4gICAgZmxvYXQgdyAgPSB0YXAodl9UZXhjb29yZCAtIGQueHksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCAtIGQud3ksIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCAtIGQuenksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQuencsIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCAgICAgICAsIGNvbG9yLCBiYXNlV2VpZ2h0ICogNC4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQueHcsIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQuenksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQud3ksIGNvbG9yLCBiYXNlV2VpZ2h0ICogMi4wKTtcXG4gICAgdyArPSB0YXAodl9UZXhjb29yZCArIGQueHksIGNvbG9yLCBiYXNlV2VpZ2h0KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGNvbG9yIC8gdyk7XFxuI2Vsc2VcXG4gICAgdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCArMS4wLCArMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IGJhc2VXZWlnaHQgPSAxLjAgLyA0LjA7XFxuICAgIGZsb2F0IHcgID0gdGFwKHZfVGV4Y29vcmQgKyBkLnh5LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIHcgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnp5LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIHcgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnh3LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIHcgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnp3LCBjb2xvciwgYmFzZVdlaWdodCk7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvciAvIHcpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmRvd25zYW1wbGVcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvYztcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCB0YXAodmVjMiB1diwgaW5vdXQgdmVjNCBjb2xvcikge1xcbiAgICBmbG9hdCB3ZWlnaHQgPSBhYnMoZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdXYpKSAqIDIuMCAtIDEuMCkgKiAwLjI1O1xcbiAgICBjb2xvciArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHV2KSkgKiB3ZWlnaHQ7XFxuICAgIHJldHVybiB3ZWlnaHQ7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KDAuMCk7XFxuICAgIGZsb2F0IHdlaWdodCA9IHRhcCh2X1RleGNvb3JkICsgZC54eSwgY29sb3IpO1xcbiAgICB3ZWlnaHQgKz0gdGFwKHZfVGV4Y29vcmQgKyBkLnp5LCBjb2xvcik7XFxuICAgIHdlaWdodCArPSB0YXAodl9UZXhjb29yZCArIGQueHcsIGNvbG9yKTtcXG4gICAgd2VpZ2h0ICs9IHRhcCh2X1RleGNvb3JkICsgZC56dywgY29sb3IpO1xcbiAgICBjb2xvciAvPSB3ZWlnaHQ7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuaGV4YWdvbmFsX2JsdXJfZnJhZ1xcbkBpbXBvcnQgY2xheS51dGlsLmZsb2F0XFxudmVjNCBkb0JsdXIoc2FtcGxlcjJEIHRhcmdldFRleHR1cmUsIHZlYzIgb2Zmc2V0KSB7XFxuI2lmZGVmIEJMVVJfQ09DXFxuICAgIGZsb2F0IGNvY1N1bSA9IDAuMDtcXG4jZWxzZVxcbiAgICB2ZWM0IGNvbG9yID0gdmVjNCgwLjApO1xcbiNlbmRpZlxcbiAgICBmbG9hdCB3ZWlnaHRTdW0gPSAwLjA7XFxuICAgIGZsb2F0IGtlcm5lbFdlaWdodCA9IDEuMCAvIGZsb2F0KEtFUk5FTF9TSVpFKTtcXG4gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBLRVJORUxfU0laRTsgaSsrKSB7XFxuICAgICAgICB2ZWMyIGNvb3JkID0gdl9UZXhjb29yZCArIG9mZnNldCAqIGZsb2F0KGkpO1xcbiAgICAgICAgZmxvYXQgdyA9IGtlcm5lbFdlaWdodDtcXG4jaWZkZWYgQkxVUl9DT0NcXG4gICAgICAgIGZsb2F0IGZDb2MgPSBkZWNvZGVGbG9hdCh0ZXh0dXJlMkQodGFyZ2V0VGV4dHVyZSwgY29vcmQpKSAqIDIuMCAtIDEuMDtcXG4gICAgICAgIGNvY1N1bSArPSBjbGFtcChmQ29jLCAtMS4wLCAwLjApICogdztcXG4jZWxzZVxcbiAgICAgICAgZmxvYXQgZkNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIGNvb3JkKSkgKiAyLjAgLSAxLjA7XFxuICAgICAgICB2ZWM0IHRleGVsID0gdGV4dHVyZTJEKHRhcmdldFRleHR1cmUsIGNvb3JkKTtcXG4gICAgI2lmICFkZWZpbmVkKEJMVVJfTkVBUkZJRUxEKVxcbiAgICAgICAgdyAqPSBhYnMoZkNvYyk7XFxuICAgICNlbmRpZlxcbiAgICAgICAgY29sb3IgKz0gZGVjb2RlSERSKHRleGVsKSAqIHc7XFxuI2VuZGlmXFxuICAgICAgICB3ZWlnaHRTdW0gKz0gdztcXG4gICAgfVxcbiNpZmRlZiBCTFVSX0NPQ1xcbiAgICByZXR1cm4gZW5jb2RlRmxvYXQoY2xhbXAoY29jU3VtIC8gd2VpZ2h0U3VtLCAtMS4wLCAwLjApICogMC41ICsgMC41KTtcXG4jZWxzZVxcbiAgICByZXR1cm4gY29sb3IgLyB3ZWlnaHRTdW07XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuaGV4YWdvbmFsX2JsdXJfMVxcbiNkZWZpbmUgS0VSTkVMX1NJWkUgNVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gZmxvYXQgYmx1clNpemUgOiAxLjA7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMi4wLCA1MTIuMF07XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmRvZi5oZXhhZ29uYWxfYmx1cl9mcmFnXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzIgb2Zmc2V0ID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4jaWYgIWRlZmluZWQoQkxVUl9ORUFSRklFTEQpICYmICFkZWZpbmVkKEJMVVJfQ09DKVxcbiAgICBvZmZzZXQgKj0gYWJzKGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQpKSAqIDIuMCAtIDEuMCk7XFxuI2VuZGlmXFxuICAgIGdsX0ZyYWdDb2xvciA9IGRvQmx1cih0ZXh0dXJlLCB2ZWMyKDAuMCwgb2Zmc2V0LnkpKTtcXG4jaWYgIWRlZmluZWQoQkxVUl9DT0MpXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmhleGFnb25hbF9ibHVyXzJcXG4jZGVmaW5lIEtFUk5FTF9TSVpFIDVcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGNvYztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJsdXJTaXplIDogMS4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuaGV4YWdvbmFsX2JsdXJfZnJhZ1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICB2ZWMyIG9mZnNldCA9IGJsdXJTaXplIC8gdGV4dHVyZVNpemU7XFxuI2lmICFkZWZpbmVkKEJMVVJfTkVBUkZJRUxEKSAmJiAhZGVmaW5lZChCTFVSX0NPQylcXG4gICAgb2Zmc2V0ICo9IGFicyhkZWNvZGVGbG9hdCh0ZXh0dXJlMkQoY29jLCB2X1RleGNvb3JkKSkgKiAyLjAgLSAxLjApO1xcbiNlbmRpZlxcbiAgICBvZmZzZXQueSAvPSAyLjA7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGRvQmx1cih0ZXh0dXJlLCAtb2Zmc2V0KTtcXG4jaWYgIWRlZmluZWQoQkxVUl9DT0MpXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmhleGFnb25hbF9ibHVyXzNcXG4jZGVmaW5lIEtFUk5FTF9TSVpFIDVcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlMjtcXG51bmlmb3JtIHNhbXBsZXIyRCBjb2M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LmNvbXBvc2l0b3IuZG9mLmhleGFnb25hbF9ibHVyX2ZyYWdcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiBvZmZzZXQgPSBibHVyU2l6ZSAvIHRleHR1cmVTaXplO1xcbiNpZiAhZGVmaW5lZChCTFVSX05FQVJGSUVMRCkgJiYgIWRlZmluZWQoQkxVUl9DT0MpXFxuICAgIG9mZnNldCAqPSBhYnMoZGVjb2RlRmxvYXQodGV4dHVyZTJEKGNvYywgdl9UZXhjb29yZCkpICogMi4wIC0gMS4wKTtcXG4jZW5kaWZcXG4gICAgb2Zmc2V0LnkgLz0gMi4wO1xcbiAgICB2ZWMyIHZEb3duUmlnaHQgPSB2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpO1xcbiAgICB2ZWM0IHRleGVsMSA9IGRvQmx1cih0ZXh0dXJlMSwgLW9mZnNldCk7XFxuICAgIHZlYzQgdGV4ZWwyID0gZG9CbHVyKHRleHR1cmUxLCB2RG93blJpZ2h0KTtcXG4gICAgdmVjNCB0ZXhlbDMgPSBkb0JsdXIodGV4dHVyZTIsIHZEb3duUmlnaHQpO1xcbiNpZmRlZiBCTFVSX0NPQ1xcbiAgICBmbG9hdCBjb2MxID0gZGVjb2RlRmxvYXQodGV4ZWwxKSAqIDIuMCAtIDEuMDtcXG4gICAgZmxvYXQgY29jMiA9IGRlY29kZUZsb2F0KHRleGVsMikgKiAyLjAgLSAxLjA7XFxuICAgIGZsb2F0IGNvYzMgPSBkZWNvZGVGbG9hdCh0ZXhlbDMpICogMi4wIC0gMS4wO1xcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChcXG4gICAgICAgICgoY29jMSArIGNvYzIgKyBjb2MzKSAvIDMuMCkgKiAwLjUgKyAwLjVcXG4gICAgKTtcXG4jZWxzZVxcbiAgICB2ZWM0IGNvbG9yID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMykgLyAzLjA7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb2YuY29tcG9zaXRlXFxuI2RlZmluZSBERUJVRyAwXFxudW5pZm9ybSBzYW1wbGVyMkQgb3JpZ2luYWw7XFxudW5pZm9ybSBzYW1wbGVyMkQgYmx1cnJlZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBuZWFyZmllbGQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgY29jO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5lYXJjb2M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmZsb2F0XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgYmx1cnJlZENvbG9yID0gZGVjb2RlSERSKHRleHR1cmUyRChibHVycmVkLCB2X1RleGNvb3JkKSk7XFxuICAgIHZlYzQgb3JpZ2luYWxDb2xvciA9IGRlY29kZUhEUih0ZXh0dXJlMkQob3JpZ2luYWwsIHZfVGV4Y29vcmQpKTtcXG4gICAgZmxvYXQgZkNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChjb2MsIHZfVGV4Y29vcmQpKTtcXG4gICAgZkNvYyA9IGFicyhmQ29jICogMi4wIC0gMS4wKTtcXG4gICAgZmxvYXQgd2VpZ2h0ID0gc21vb3Roc3RlcCgwLjAsIDEuMCwgZkNvYyk7XFxuI2lmZGVmIE5FQVJGSUVMRF9FTkFCTEVEXFxuICAgIHZlYzQgbmVhcmZpZWxkQ29sb3IgPSBkZWNvZGVIRFIodGV4dHVyZTJEKG5lYXJmaWVsZCwgdl9UZXhjb29yZCkpO1xcbiAgICBmbG9hdCBmTmVhckNvYyA9IGRlY29kZUZsb2F0KHRleHR1cmUyRChuZWFyY29jLCB2X1RleGNvb3JkKSk7XFxuICAgIGZOZWFyQ29jID0gYWJzKGZOZWFyQ29jICogMi4wIC0gMS4wKTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKFxcbiAgICAgICAgbWl4KFxcbiAgICAgICAgICAgIG5lYXJmaWVsZENvbG9yLCBtaXgob3JpZ2luYWxDb2xvciwgYmx1cnJlZENvbG9yLCB3ZWlnaHQpLFxcbiAgICAgICAgICAgIHBvdygxLjAgLSBmTmVhckNvYywgNC4wKVxcbiAgICAgICAgKVxcbiAgICApO1xcbiNlbHNlXFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihtaXgob3JpZ2luYWxDb2xvciwgYmx1cnJlZENvbG9yLCB3ZWlnaHQpKTtcXG4jZW5kaWZcXG4jaWYgREVCVUcgPT0gMVxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoZkNvYyksIDEuMCk7XFxuI2VsaWYgREVCVUcgPT0gMlxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoZk5lYXJDb2MpLCAxLjApO1xcbiNlbGlmIERFQlVHID09IDNcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGJsdXJyZWRDb2xvcik7XFxuI2VsaWYgREVCVUcgPT0gNFxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIobmVhcmZpZWxkQ29sb3IpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmxlbnNmbGFyZVxcbiNkZWZpbmUgU0FNUExFX05VTUJFUiA4XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zY29sb3I7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IGRpc3BlcnNhbCA6IDAuMztcXG51bmlmb3JtIGZsb2F0IGhhbG9XaWR0aCA6IDAuNDtcXG51bmlmb3JtIGZsb2F0IGRpc3RvcnRpb24gOiAxLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgdGV4dHVyZURpc3RvcnRlZChcXG4gICAgaW4gdmVjMiB0ZXhjb29yZCxcXG4gICAgaW4gdmVjMiBkaXJlY3Rpb24sXFxuICAgIGluIHZlYzMgZGlzdG9ydGlvblxcbikge1xcbiAgICByZXR1cm4gdmVjNChcXG4gICAgICAgIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLnIpKS5yLFxcbiAgICAgICAgZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24uZykpLmcsXFxuICAgICAgICBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5iKSkuYixcXG4gICAgICAgIDEuMFxcbiAgICApO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB0ZXhjb29yZCA9IC12X1RleGNvb3JkICsgdmVjMigxLjApOyAgICB2ZWMyIHRleHR1cmVPZmZzZXQgPSAxLjAgLyB0ZXh0dXJlU2l6ZTtcXG4gICAgdmVjMiBnaG9zdFZlYyA9ICh2ZWMyKDAuNSkgLSB0ZXhjb29yZCkgKiBkaXNwZXJzYWw7XFxuICAgIHZlYzIgaGFsb1ZlYyA9IG5vcm1hbGl6ZShnaG9zdFZlYykgKiBoYWxvV2lkdGg7XFxuICAgIHZlYzMgZGlzdG9ydGlvbiA9IHZlYzMoLXRleHR1cmVPZmZzZXQueCAqIGRpc3RvcnRpb24sIDAuMCwgdGV4dHVyZU9mZnNldC54ICogZGlzdG9ydGlvbik7XFxuICAgIHZlYzQgcmVzdWx0ID0gdmVjNCgwLjApO1xcbiAgICBmb3IgKGludCBpID0gMDsgaSA8IFNBTVBMRV9OVU1CRVI7IGkrKylcXG4gICAge1xcbiAgICAgICAgdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGdob3N0VmVjICogZmxvYXQoaSkpO1xcbiAgICAgICAgZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIG9mZnNldCkgLyBsZW5ndGgodmVjMigwLjUpKTtcXG4gICAgICAgIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiAgICAgICAgcmVzdWx0ICs9IHRleHR1cmVEaXN0b3J0ZWQob2Zmc2V0LCBub3JtYWxpemUoZ2hvc3RWZWMpLCBkaXN0b3J0aW9uKSAqIHdlaWdodDtcXG4gICAgfVxcbiAgICByZXN1bHQgKj0gdGV4dHVyZTJEKGxlbnNjb2xvciwgdmVjMihsZW5ndGgodmVjMigwLjUpIC0gdGV4Y29vcmQpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpKTtcXG4gICAgZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYykpIC8gbGVuZ3RoKHZlYzIoMC41KSk7XFxuICAgIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiAgICB2ZWMyIG9mZnNldCA9IGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYyk7XFxuICAgIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuICAgIGdsX0ZyYWdDb2xvciA9IHJlc3VsdDtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5ibGVuZFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYmxlbmRcXG4jaWZkZWYgVEVYVFVSRTFfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUxO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTJfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUyO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTNfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUzO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MyA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU0O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NCA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTVfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU1O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTZfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU2O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NiA6IDEuMDtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgdGV4ID0gdmVjNCgwLjApO1xcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUxLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQxO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUyLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQyO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUzLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQzO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU0LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ0O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU1LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ1O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxuICAgIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU2LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ2O1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4KTtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5meGFhXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQgOiBWSUVXUE9SVDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG4jZGVmaW5lIEZYQUFfUkVEVUNFX01JTiAgICgxLjAvMTI4LjApXFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NVUwgICAoMS4wLzguMClcXG4jZGVmaW5lIEZYQUFfU1BBTl9NQVggICAgIDguMFxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiByZXNvbHV0aW9uID0gMS4wIC8gdmlld3BvcnQuenc7XFxuICAgIHZlYzMgcmdiTlcgPSAgZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggLTEuMCwgLTEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuICAgIHZlYzMgcmdiTkUgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAxLjAsIC0xLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiAgICB2ZWMzIHJnYlNXID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggLTEuMCwgMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gICAgdmVjMyByZ2JTRSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDEuMCwgMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gICAgdmVjNCByZ2JhTSAgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgIGdsX0ZyYWdDb29yZC54eSAgKiByZXNvbHV0aW9uICkgKTtcXG4gICAgdmVjMyByZ2JNICA9IHJnYmFNLnh5ejtcXG4gICAgZmxvYXQgb3BhY2l0eSAgPSByZ2JhTS53O1xcbiAgICB2ZWMzIGx1bWEgPSB2ZWMzKCAwLjI5OSwgMC41ODcsIDAuMTE0ICk7XFxuICAgIGZsb2F0IGx1bWFOVyA9IGRvdCggcmdiTlcsIGx1bWEgKTtcXG4gICAgZmxvYXQgbHVtYU5FID0gZG90KCByZ2JORSwgbHVtYSApO1xcbiAgICBmbG9hdCBsdW1hU1cgPSBkb3QoIHJnYlNXLCBsdW1hICk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IGRvdCggcmdiU0UsIGx1bWEgKTtcXG4gICAgZmxvYXQgbHVtYU0gID0gZG90KCByZ2JNLCAgbHVtYSApO1xcbiAgICBmbG9hdCBsdW1hTWluID0gbWluKCBsdW1hTSwgbWluKCBtaW4oIGx1bWFOVywgbHVtYU5FICksIG1pbiggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuICAgIGZsb2F0IGx1bWFNYXggPSBtYXgoIGx1bWFNLCBtYXgoIG1heCggbHVtYU5XLCBsdW1hTkUpICwgbWF4KCBsdW1hU1csIGx1bWFTRSApICkgKTtcXG4gICAgdmVjMiBkaXI7XFxuICAgIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gICAgZGlyLnkgPSAgKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcbiAgICBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoICggbHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFICkgKiAoIDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwgKSwgRlhBQV9SRURVQ0VfTUlOICk7XFxuICAgIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvICggbWluKCBhYnMoIGRpci54ICksIGFicyggZGlyLnkgKSApICsgZGlyUmVkdWNlICk7XFxuICAgIGRpciA9IG1pbiggdmVjMiggRlhBQV9TUEFOX01BWCwgIEZYQUFfU1BBTl9NQVgpLFxcbiAgICAgICAgICBtYXgoIHZlYzIoLUZYQUFfU1BBTl9NQVgsIC1GWEFBX1NQQU5fTUFYKSxcXG4gICAgICAgICAgICAgICAgZGlyICogcmNwRGlyTWluKSkgKiByZXNvbHV0aW9uO1xcbiAgICB2ZWMzIHJnYkEgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDEuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuICAgIHJnYkEgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAgKiByZXNvbHV0aW9uICsgZGlyICogKCAyLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiAgICByZ2JBICo9IDAuNTtcXG4gICAgdmVjMyByZ2JCID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAgKiByZXNvbHV0aW9uICsgZGlyICogLTAuNSApICkueHl6O1xcbiAgICByZ2JCICs9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgICogcmVzb2x1dGlvbiArIGRpciAqIDAuNSApICkueHl6O1xcbiAgICByZ2JCICo9IDAuMjU7XFxuICAgIHJnYkIgKz0gcmdiQSAqIDAuNTtcXG4gICAgZmxvYXQgbHVtYUIgPSBkb3QoIHJnYkIsIGx1bWEgKTtcXG4gICAgaWYgKCAoIGx1bWFCIDwgbHVtYU1pbiApIHx8ICggbHVtYUIgPiBsdW1hTWF4ICkgKVxcbiAgICB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JBLCBvcGFjaXR5ICk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JCLCBvcGFjaXR5ICk7XFxuICAgIH1cXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5meGFhM1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0IDogVklFV1BPUlQ7XFxudW5pZm9ybSBmbG9hdCBzdWJwaXhlbDogMC43NTtcXG51bmlmb3JtIGZsb2F0IGVkZ2VUaHJlc2hvbGQ6IDAuMTI1O1xcbnVuaWZvcm0gZmxvYXQgZWRnZVRocmVzaG9sZE1pbjogMC4wNjI1O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5mbG9hdCBGeGFhTHVtYSh2ZWM0IHJnYmEpIHsgcmV0dXJuIHJnYmEueTsgfVxcbnZlYzQgRnhhYVBpeGVsU2hhZGVyKFxcbiAgICB2ZWMyIHBvc1xcbiAgICAsc2FtcGxlcjJEIHRleFxcbiAgICAsdmVjMiBmeGFhUXVhbGl0eVJjcEZyYW1lXFxuICAgICxmbG9hdCBmeGFhUXVhbGl0eVN1YnBpeFxcbiAgICAsZmxvYXQgZnhhYVF1YWxpdHlFZGdlVGhyZXNob2xkXFxuICAgICxmbG9hdCBmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGRNaW5cXG4pIHtcXG4gICAgdmVjMiBwb3NNO1xcbiAgICBwb3NNLnggPSBwb3MueDtcXG4gICAgcG9zTS55ID0gcG9zLnk7XFxuICAgIHZlYzQgcmdieU0gPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc00sIDAuMCkpO1xcbiAgICBmbG9hdCBsdW1hUyA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAwLjAsIDEuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hRSA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAxLjAsIDAuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hTiA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAwLjAsLTEuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hVyA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKC0xLjAsIDAuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBtYXhTTSA9IG1heChsdW1hUywgcmdieU0ueSk7XFxuICAgIGZsb2F0IG1pblNNID0gbWluKGx1bWFTLCByZ2J5TS55KTtcXG4gICAgZmxvYXQgbWF4RVNNID0gbWF4KGx1bWFFLCBtYXhTTSk7XFxuICAgIGZsb2F0IG1pbkVTTSA9IG1pbihsdW1hRSwgbWluU00pO1xcbiAgICBmbG9hdCBtYXhXTiA9IG1heChsdW1hTiwgbHVtYVcpO1xcbiAgICBmbG9hdCBtaW5XTiA9IG1pbihsdW1hTiwgbHVtYVcpO1xcbiAgICBmbG9hdCByYW5nZU1heCA9IG1heChtYXhXTiwgbWF4RVNNKTtcXG4gICAgZmxvYXQgcmFuZ2VNaW4gPSBtaW4obWluV04sIG1pbkVTTSk7XFxuICAgIGZsb2F0IHJhbmdlTWF4U2NhbGVkID0gcmFuZ2VNYXggKiBmeGFhUXVhbGl0eUVkZ2VUaHJlc2hvbGQ7XFxuICAgIGZsb2F0IHJhbmdlID0gcmFuZ2VNYXggLSByYW5nZU1pbjtcXG4gICAgZmxvYXQgcmFuZ2VNYXhDbGFtcGVkID0gbWF4KGZ4YWFRdWFsaXR5RWRnZVRocmVzaG9sZE1pbiwgcmFuZ2VNYXhTY2FsZWQpO1xcbiAgICBib29sIGVhcmx5RXhpdCA9IHJhbmdlIDwgcmFuZ2VNYXhDbGFtcGVkO1xcbiAgICBpZihlYXJseUV4aXQpIHJldHVybiByZ2J5TTtcXG4gICAgZmxvYXQgbHVtYU5XID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NNICsgKHZlYzIoLTEuMCwtMS4wKSAqIGZ4YWFRdWFsaXR5UmNwRnJhbWUueHkpLCAwLjApKSk7XFxuICAgIGZsb2F0IGx1bWFTRSA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSArICh2ZWMyKCAxLjAsIDEuMCkgKiBmeGFhUXVhbGl0eVJjcEZyYW1lLnh5KSwgMC4wKSkpO1xcbiAgICBmbG9hdCBsdW1hTkUgPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc00gKyAodmVjMiggMS4wLC0xLjApICogZnhhYVF1YWxpdHlSY3BGcmFtZS54eSksIDAuMCkpKTtcXG4gICAgZmxvYXQgbHVtYVNXID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NNICsgKHZlYzIoLTEuMCwgMS4wKSAqIGZ4YWFRdWFsaXR5UmNwRnJhbWUueHkpLCAwLjApKSk7XFxuICAgIGZsb2F0IGx1bWFOUyA9IGx1bWFOICsgbHVtYVM7XFxuICAgIGZsb2F0IGx1bWFXRSA9IGx1bWFXICsgbHVtYUU7XFxuICAgIGZsb2F0IHN1YnBpeFJjcFJhbmdlID0gMS4wL3JhbmdlO1xcbiAgICBmbG9hdCBzdWJwaXhOU1dFID0gbHVtYU5TICsgbHVtYVdFO1xcbiAgICBmbG9hdCBlZGdlSG9yejEgPSAoLTIuMCAqIHJnYnlNLnkpICsgbHVtYU5TO1xcbiAgICBmbG9hdCBlZGdlVmVydDEgPSAoLTIuMCAqIHJnYnlNLnkpICsgbHVtYVdFO1xcbiAgICBmbG9hdCBsdW1hTkVTRSA9IGx1bWFORSArIGx1bWFTRTtcXG4gICAgZmxvYXQgbHVtYU5XTkUgPSBsdW1hTlcgKyBsdW1hTkU7XFxuICAgIGZsb2F0IGVkZ2VIb3J6MiA9ICgtMi4wICogbHVtYUUpICsgbHVtYU5FU0U7XFxuICAgIGZsb2F0IGVkZ2VWZXJ0MiA9ICgtMi4wICogbHVtYU4pICsgbHVtYU5XTkU7XFxuICAgIGZsb2F0IGx1bWFOV1NXID0gbHVtYU5XICsgbHVtYVNXO1xcbiAgICBmbG9hdCBsdW1hU1dTRSA9IGx1bWFTVyArIGx1bWFTRTtcXG4gICAgZmxvYXQgZWRnZUhvcno0ID0gKGFicyhlZGdlSG9yejEpICogMi4wKSArIGFicyhlZGdlSG9yejIpO1xcbiAgICBmbG9hdCBlZGdlVmVydDQgPSAoYWJzKGVkZ2VWZXJ0MSkgKiAyLjApICsgYWJzKGVkZ2VWZXJ0Mik7XFxuICAgIGZsb2F0IGVkZ2VIb3J6MyA9ICgtMi4wICogbHVtYVcpICsgbHVtYU5XU1c7XFxuICAgIGZsb2F0IGVkZ2VWZXJ0MyA9ICgtMi4wICogbHVtYVMpICsgbHVtYVNXU0U7XFxuICAgIGZsb2F0IGVkZ2VIb3J6ID0gYWJzKGVkZ2VIb3J6MykgKyBlZGdlSG9yejQ7XFxuICAgIGZsb2F0IGVkZ2VWZXJ0ID0gYWJzKGVkZ2VWZXJ0MykgKyBlZGdlVmVydDQ7XFxuICAgIGZsb2F0IHN1YnBpeE5XU1dORVNFID0gbHVtYU5XU1cgKyBsdW1hTkVTRTtcXG4gICAgZmxvYXQgbGVuZ3RoU2lnbiA9IGZ4YWFRdWFsaXR5UmNwRnJhbWUueDtcXG4gICAgYm9vbCBob3J6U3BhbiA9IGVkZ2VIb3J6ID49IGVkZ2VWZXJ0O1xcbiAgICBmbG9hdCBzdWJwaXhBID0gc3VicGl4TlNXRSAqIDIuMCArIHN1YnBpeE5XU1dORVNFO1xcbiAgICBpZighaG9yelNwYW4pIGx1bWFOID0gbHVtYVc7XFxuICAgIGlmKCFob3J6U3BhbikgbHVtYVMgPSBsdW1hRTtcXG4gICAgaWYoaG9yelNwYW4pIGxlbmd0aFNpZ24gPSBmeGFhUXVhbGl0eVJjcEZyYW1lLnk7XFxuICAgIGZsb2F0IHN1YnBpeEIgPSAoc3VicGl4QSAqICgxLjAvMTIuMCkpIC0gcmdieU0ueTtcXG4gICAgZmxvYXQgZ3JhZGllbnROID0gbHVtYU4gLSByZ2J5TS55O1xcbiAgICBmbG9hdCBncmFkaWVudFMgPSBsdW1hUyAtIHJnYnlNLnk7XFxuICAgIGZsb2F0IGx1bWFOTiA9IGx1bWFOICsgcmdieU0ueTtcXG4gICAgZmxvYXQgbHVtYVNTID0gbHVtYVMgKyByZ2J5TS55O1xcbiAgICBib29sIHBhaXJOID0gYWJzKGdyYWRpZW50TikgPj0gYWJzKGdyYWRpZW50Uyk7XFxuICAgIGZsb2F0IGdyYWRpZW50ID0gbWF4KGFicyhncmFkaWVudE4pLCBhYnMoZ3JhZGllbnRTKSk7XFxuICAgIGlmKHBhaXJOKSBsZW5ndGhTaWduID0gLWxlbmd0aFNpZ247XFxuICAgIGZsb2F0IHN1YnBpeEMgPSBjbGFtcChhYnMoc3VicGl4QikgKiBzdWJwaXhSY3BSYW5nZSwgMC4wLCAxLjApO1xcbiAgICB2ZWMyIHBvc0I7XFxuICAgIHBvc0IueCA9IHBvc00ueDtcXG4gICAgcG9zQi55ID0gcG9zTS55O1xcbiAgICB2ZWMyIG9mZk5QO1xcbiAgICBvZmZOUC54ID0gKCFob3J6U3BhbikgPyAwLjAgOiBmeGFhUXVhbGl0eVJjcEZyYW1lLng7XFxuICAgIG9mZk5QLnkgPSAoIGhvcnpTcGFuKSA/IDAuMCA6IGZ4YWFRdWFsaXR5UmNwRnJhbWUueTtcXG4gICAgaWYoIWhvcnpTcGFuKSBwb3NCLnggKz0gbGVuZ3RoU2lnbiAqIDAuNTtcXG4gICAgaWYoIGhvcnpTcGFuKSBwb3NCLnkgKz0gbGVuZ3RoU2lnbiAqIDAuNTtcXG4gICAgdmVjMiBwb3NOO1xcbiAgICBwb3NOLnggPSBwb3NCLnggLSBvZmZOUC54ICogMS4wO1xcbiAgICBwb3NOLnkgPSBwb3NCLnkgLSBvZmZOUC55ICogMS4wO1xcbiAgICB2ZWMyIHBvc1A7XFxuICAgIHBvc1AueCA9IHBvc0IueCArIG9mZk5QLnggKiAxLjA7XFxuICAgIHBvc1AueSA9IHBvc0IueSArIG9mZk5QLnkgKiAxLjA7XFxuICAgIGZsb2F0IHN1YnBpeEQgPSAoKC0yLjApKnN1YnBpeEMpICsgMy4wO1xcbiAgICBmbG9hdCBsdW1hRW5kTiA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTiwgMC4wKSkpO1xcbiAgICBmbG9hdCBzdWJwaXhFID0gc3VicGl4QyAqIHN1YnBpeEM7XFxuICAgIGZsb2F0IGx1bWFFbmRQID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NQLCAwLjApKSk7XFxuICAgIGlmKCFwYWlyTikgbHVtYU5OID0gbHVtYVNTO1xcbiAgICBmbG9hdCBncmFkaWVudFNjYWxlZCA9IGdyYWRpZW50ICogMS4wLzQuMDtcXG4gICAgZmxvYXQgbHVtYU1NID0gcmdieU0ueSAtIGx1bWFOTiAqIDAuNTtcXG4gICAgZmxvYXQgc3VicGl4RiA9IHN1YnBpeEQgKiBzdWJwaXhFO1xcbiAgICBib29sIGx1bWFNTFRaZXJvID0gbHVtYU1NIDwgMC4wO1xcbiAgICBsdW1hRW5kTiAtPSBsdW1hTk4gKiAwLjU7XFxuICAgIGx1bWFFbmRQIC09IGx1bWFOTiAqIDAuNTtcXG4gICAgYm9vbCBkb25lTiA9IGFicyhsdW1hRW5kTikgPj0gZ3JhZGllbnRTY2FsZWQ7XFxuICAgIGJvb2wgZG9uZVAgPSBhYnMobHVtYUVuZFApID49IGdyYWRpZW50U2NhbGVkO1xcbiAgICBpZighZG9uZU4pIHBvc04ueCAtPSBvZmZOUC54ICogMS41O1xcbiAgICBpZighZG9uZU4pIHBvc04ueSAtPSBvZmZOUC55ICogMS41O1xcbiAgICBib29sIGRvbmVOUCA9ICghZG9uZU4pIHx8ICghZG9uZVApO1xcbiAgICBpZighZG9uZVApIHBvc1AueCArPSBvZmZOUC54ICogMS41O1xcbiAgICBpZighZG9uZVApIHBvc1AueSArPSBvZmZOUC55ICogMS41O1xcbiAgICBpZihkb25lTlApIHtcXG4gICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc04ueHksIDAuMCkpKTtcXG4gICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc1AueHksIDAuMCkpKTtcXG4gICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBsdW1hRW5kTiAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBsdW1hRW5kUCAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgIGRvbmVOID0gYWJzKGx1bWFFbmROKSA+PSBncmFkaWVudFNjYWxlZDtcXG4gICAgICAgIGRvbmVQID0gYWJzKGx1bWFFbmRQKSA+PSBncmFkaWVudFNjYWxlZDtcXG4gICAgICAgIGlmKCFkb25lTikgcG9zTi54IC09IG9mZk5QLnggKiAyLjA7XFxuICAgICAgICBpZighZG9uZU4pIHBvc04ueSAtPSBvZmZOUC55ICogMi4wO1xcbiAgICAgICAgZG9uZU5QID0gKCFkb25lTikgfHwgKCFkb25lUCk7XFxuICAgICAgICBpZighZG9uZVApIHBvc1AueCArPSBvZmZOUC54ICogMi4wO1xcbiAgICAgICAgaWYoIWRvbmVQKSBwb3NQLnkgKz0gb2ZmTlAueSAqIDIuMDtcXG4gICAgICAgIGlmKGRvbmVOUCkge1xcbiAgICAgICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc04ueHksIDAuMCkpKTtcXG4gICAgICAgICAgICBpZighZG9uZVApIGx1bWFFbmRQID0gRnhhYUx1bWEoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCBwb3NQLnh5LCAwLjApKSk7XFxuICAgICAgICAgICAgaWYoIWRvbmVOKSBsdW1hRW5kTiA9IGx1bWFFbmROIC0gbHVtYU5OICogMC41O1xcbiAgICAgICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBsdW1hRW5kUCAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgICAgICBkb25lTiA9IGFicyhsdW1hRW5kTikgPj0gZ3JhZGllbnRTY2FsZWQ7XFxuICAgICAgICAgICAgZG9uZVAgPSBhYnMobHVtYUVuZFApID49IGdyYWRpZW50U2NhbGVkO1xcbiAgICAgICAgICAgIGlmKCFkb25lTikgcG9zTi54IC09IG9mZk5QLnggKiA0LjA7XFxuICAgICAgICAgICAgaWYoIWRvbmVOKSBwb3NOLnkgLT0gb2ZmTlAueSAqIDQuMDtcXG4gICAgICAgICAgICBkb25lTlAgPSAoIWRvbmVOKSB8fCAoIWRvbmVQKTtcXG4gICAgICAgICAgICBpZighZG9uZVApIHBvc1AueCArPSBvZmZOUC54ICogNC4wO1xcbiAgICAgICAgICAgIGlmKCFkb25lUCkgcG9zUC55ICs9IG9mZk5QLnkgKiA0LjA7XFxuICAgICAgICAgICAgaWYoZG9uZU5QKSB7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lTikgbHVtYUVuZE4gPSBGeGFhTHVtYShkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHBvc04ueHksIDAuMCkpKTtcXG4gICAgICAgICAgICAgICAgaWYoIWRvbmVQKSBsdW1hRW5kUCA9IEZ4YWFMdW1hKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zUC54eSwgMC4wKSkpO1xcbiAgICAgICAgICAgICAgICBpZighZG9uZU4pIGx1bWFFbmROID0gbHVtYUVuZE4gLSBsdW1hTk4gKiAwLjU7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lUCkgbHVtYUVuZFAgPSBsdW1hRW5kUCAtIGx1bWFOTiAqIDAuNTtcXG4gICAgICAgICAgICAgICAgZG9uZU4gPSBhYnMobHVtYUVuZE4pID49IGdyYWRpZW50U2NhbGVkO1xcbiAgICAgICAgICAgICAgICBkb25lUCA9IGFicyhsdW1hRW5kUCkgPj0gZ3JhZGllbnRTY2FsZWQ7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lTikgcG9zTi54IC09IG9mZk5QLnggKiAxMi4wO1xcbiAgICAgICAgICAgICAgICBpZighZG9uZU4pIHBvc04ueSAtPSBvZmZOUC55ICogMTIuMDtcXG4gICAgICAgICAgICAgICAgZG9uZU5QID0gKCFkb25lTikgfHwgKCFkb25lUCk7XFxuICAgICAgICAgICAgICAgIGlmKCFkb25lUCkgcG9zUC54ICs9IG9mZk5QLnggKiAxMi4wO1xcbiAgICAgICAgICAgICAgICBpZighZG9uZVApIHBvc1AueSArPSBvZmZOUC55ICogMTIuMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZmxvYXQgZHN0TiA9IHBvc00ueCAtIHBvc04ueDtcXG4gICAgZmxvYXQgZHN0UCA9IHBvc1AueCAtIHBvc00ueDtcXG4gICAgaWYoIWhvcnpTcGFuKSBkc3ROID0gcG9zTS55IC0gcG9zTi55O1xcbiAgICBpZighaG9yelNwYW4pIGRzdFAgPSBwb3NQLnkgLSBwb3NNLnk7XFxuICAgIGJvb2wgZ29vZFNwYW5OID0gKGx1bWFFbmROIDwgMC4wKSAhPSBsdW1hTUxUWmVybztcXG4gICAgZmxvYXQgc3Bhbkxlbmd0aCA9IChkc3RQICsgZHN0Tik7XFxuICAgIGJvb2wgZ29vZFNwYW5QID0gKGx1bWFFbmRQIDwgMC4wKSAhPSBsdW1hTUxUWmVybztcXG4gICAgZmxvYXQgc3Bhbkxlbmd0aFJjcCA9IDEuMC9zcGFuTGVuZ3RoO1xcbiAgICBib29sIGRpcmVjdGlvbk4gPSBkc3ROIDwgZHN0UDtcXG4gICAgZmxvYXQgZHN0ID0gbWluKGRzdE4sIGRzdFApO1xcbiAgICBib29sIGdvb2RTcGFuID0gZGlyZWN0aW9uTiA/IGdvb2RTcGFuTiA6IGdvb2RTcGFuUDtcXG4gICAgZmxvYXQgc3VicGl4RyA9IHN1YnBpeEYgKiBzdWJwaXhGO1xcbiAgICBmbG9hdCBwaXhlbE9mZnNldCA9IChkc3QgKiAoLXNwYW5MZW5ndGhSY3ApKSArIDAuNTtcXG4gICAgZmxvYXQgc3VicGl4SCA9IHN1YnBpeEcgKiBmeGFhUXVhbGl0eVN1YnBpeDtcXG4gICAgZmxvYXQgcGl4ZWxPZmZzZXRHb29kID0gZ29vZFNwYW4gPyBwaXhlbE9mZnNldCA6IDAuMDtcXG4gICAgZmxvYXQgcGl4ZWxPZmZzZXRTdWJwaXggPSBtYXgocGl4ZWxPZmZzZXRHb29kLCBzdWJwaXhIKTtcXG4gICAgaWYoIWhvcnpTcGFuKSBwb3NNLnggKz0gcGl4ZWxPZmZzZXRTdWJwaXggKiBsZW5ndGhTaWduO1xcbiAgICBpZiggaG9yelNwYW4pIHBvc00ueSArPSBwaXhlbE9mZnNldFN1YnBpeCAqIGxlbmd0aFNpZ247XFxuICAgIHJldHVybiB2ZWM0KGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgcG9zTSwgMC4wKSkueHl6LCByZ2J5TS55KTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZlYzQgY29sb3IgPSBGeGFhUGl4ZWxTaGFkZXIoXFxuICAgICAgICB2X1RleGNvb3JkLFxcbiAgICAgICAgdGV4dHVyZSxcXG4gICAgICAgIHZlYzIoMS4wKSAvIHZpZXdwb3J0Lnp3LFxcbiAgICAgICAgc3VicGl4ZWwsXFxuICAgICAgICBlZGdlVGhyZXNob2xkLFxcbiAgICAgICAgZWRnZVRocmVzaG9sZE1pblxcbiAgICApO1xcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgMS4wKTtcXG59XFxuQGVuZFwiO1xuIiwiaW1wb3J0IGxpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xuaW1wb3J0IHV0aWxFc3NsIGZyb20gJy4vc291cmNlL3V0aWwuZ2xzbC5qcyc7XG5cbmltcG9ydCBiYXNpY0Vzc2wgZnJvbSAnLi9zb3VyY2UvYmFzaWMuZ2xzbC5qcyc7XG5pbXBvcnQgbGFtYmVydEVzc2wgZnJvbSAnLi9zb3VyY2UvbGFtYmVydC5nbHNsLmpzJztcbmltcG9ydCBzdGFuZGFyZEVzc2wgZnJvbSAnLi9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XG5pbXBvcnQgd2lyZWZyYW1lRXNzbCBmcm9tICcuL3NvdXJjZS93aXJlZnJhbWUuZ2xzbC5qcyc7XG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zb3VyY2UvcHJlei5nbHNsLmpzJztcblxuaW1wb3J0IGxpYnJhcnkgZnJvbSAnLi9saWJyYXJ5JztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcblxuXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0RXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKHV0aWxFc3NsKTtcblxuLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXG5TaGFkZXJbJ2ltcG9ydCddKGJhc2ljRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGxhbWJlcnRFc3NsKTtcblNoYWRlclsnaW1wb3J0J10oc3RhbmRhcmRFc3NsKTtcblNoYWRlclsnaW1wb3J0J10od2lyZWZyYW1lRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKHNreWJveEVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShwcmV6RXNzbCk7XG5cbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuYmFzaWMnLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLmZyYWdtZW50JykpO1xubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5sYW1iZXJ0JywgU2hhZGVyLnNvdXJjZSgnY2xheS5sYW1iZXJ0LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQuZnJhZ21lbnQnKSk7XG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LndpcmVmcmFtZScsIFNoYWRlci5zb3VyY2UoJ2NsYXkud2lyZWZyYW1lLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LndpcmVmcmFtZS5mcmFnbWVudCcpKTtcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc2t5Ym94JywgU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JykpO1xubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5wcmV6JywgU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSk7XG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnN0YW5kYXJkJywgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpKTtcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmRNUicsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50JykpO1xuXG5cbmltcG9ydCBjb2xvcmFkanVzdEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzJztcbmltcG9ydCBibHVyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JsdXIuZ2xzbC5qcyc7XG5pbXBvcnQgbHVtRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzJztcbmltcG9ydCBsdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvbHV0Lmdsc2wuanMnO1xuaW1wb3J0IHZpZ2VudHRlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL3ZpZ25ldHRlLmdsc2wuanMnO1xuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9vdXRwdXQuZ2xzbC5qcyc7XG5pbXBvcnQgYnJpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzJztcbmltcG9ydCBkb3duc2FtcGxlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Rvd25zYW1wbGUuZ2xzbC5qcyc7XG5pbXBvcnQgdXBzYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdXBzYW1wbGUuZ2xzbC5qcyc7XG5pbXBvcnQgaGRyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzJztcbmltcG9ydCBkb2ZFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZG9mLmdsc2wuanMnO1xuaW1wb3J0IGxlbnNmbGFyZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyc7XG5pbXBvcnQgYmxlbmRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyc7XG5cbmltcG9ydCBmeGFhRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Z4YWEuZ2xzbC5qcyc7XG5pbXBvcnQgZnhhYTNFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYTMuZ2xzbC5qcyc7XG5cbi8vIFNvbWUgYnVpbGQgaW4gc2hhZGVyc1xuU2hhZGVyWydpbXBvcnQnXShjb2xvcmFkanVzdEVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShibHVyRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGx1bUVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShsdXRFc3NsKTtcblNoYWRlclsnaW1wb3J0J10odmlnZW50dGVFc3NsKTtcblNoYWRlclsnaW1wb3J0J10ob3V0cHV0RXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGJyaWdodEVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShkb3duc2FtcGxlRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKHVwc2FtcGxlRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGhkckVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShkb2ZFc3NsKTtcblNoYWRlclsnaW1wb3J0J10obGVuc2ZsYXJlRXNzbCk7XG5TaGFkZXJbJ2ltcG9ydCddKGJsZW5kRXNzbCk7XG5cblNoYWRlclsnaW1wb3J0J10oZnhhYUVzc2wpO1xuU2hhZGVyWydpbXBvcnQnXShmeGFhM0Vzc2wpO1xuIiwiLyoqXG4gKiBnbFRGIExvYWRlclxuICogU3BlY2lmaWNhdGlvbiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWRcbiAqXG4gKiBUT0RPIE1vcnBoIHRhcmdldHNcbiAqL1xuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2NvcmUvcmVxdWVzdCc7XG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5cbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi4vU3RhbmRhcmRNYXRlcmlhbCc7XG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcbmltcG9ydCBOb2RlIGZyb20gJy4uL05vZGUnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XG5pbXBvcnQgc2hhZGVyTGlicmFyeSBmcm9tICcuLi9zaGFkZXIvbGlicmFyeSc7XG5pbXBvcnQgU2tlbGV0b24gZnJvbSAnLi4vU2tlbGV0b24nO1xuaW1wb3J0IEpvaW50IGZyb20gJy4uL0pvaW50JztcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xuXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5cbmltcG9ydCBUcmFja0NsaXAgZnJvbSAnLi4vYW5pbWF0aW9uL1RyYWNrQ2xpcCc7XG5pbXBvcnQgU2FtcGxlclRyYWNrIGZyb20gJy4uL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xuXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuXG4vLyBJbXBvcnQgYnVpbHRpbiBzaGFkZXJcbmltcG9ydCAnLi4vc2hhZGVyL2J1aWx0aW4nO1xuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xuXG52YXIgc2VtYW50aWNBdHRyaWJ1dGVNYXAgPSB7XG4gICAgJ05PUk1BTCc6ICdub3JtYWwnLFxuICAgICdQT1NJVElPTic6ICdwb3NpdGlvbicsXG4gICAgJ1RFWENPT1JEXzAnOiAndGV4Y29vcmQwJyxcbiAgICAnVEVYQ09PUkRfMSc6ICd0ZXhjb29yZDEnLFxuICAgICdXRUlHSFRTXzAnOiAnd2VpZ2h0JyxcbiAgICAnSk9JTlRTXzAnOiAnam9pbnQnLFxuICAgICdDT0xPUl8wJzogJ2NvbG9yJ1xufTtcblxudmFyIEFSUkFZX0NUT1JfTUFQID0ge1xuICAgIDUxMjA6IHZlbmRvci5JbnQ4QXJyYXksXG4gICAgNTEyMTogdmVuZG9yLlVpbnQ4QXJyYXksXG4gICAgNTEyMjogdmVuZG9yLkludDE2QXJyYXksXG4gICAgNTEyMzogdmVuZG9yLlVpbnQxNkFycmF5LFxuICAgIDUxMjU6IHZlbmRvci5VaW50MzJBcnJheSxcbiAgICA1MTI2OiB2ZW5kb3IuRmxvYXQzMkFycmF5XG59O1xudmFyIFNJWkVfTUFQID0ge1xuICAgIFNDQUxBUjogMSxcbiAgICBWRUMyOiAyLFxuICAgIFZFQzM6IDMsXG4gICAgVkVDNDogNCxcbiAgICBNQVQyOiA0LFxuICAgIE1BVDM6IDksXG4gICAgTUFUNDogMTZcbn07XG5cbmZ1bmN0aW9uIGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4LCBpc0luZGljZXMpIHtcbiAgICB2YXIgYWNjZXNzb3JJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xuXG4gICAgdmFyIGJ1ZmZlciA9IGxpYi5idWZmZXJWaWV3c1thY2Nlc3NvckluZm8uYnVmZmVyVmlld107XG4gICAgdmFyIGJ5dGVPZmZzZXQgPSBhY2Nlc3NvckluZm8uYnl0ZU9mZnNldCB8fCAwO1xuICAgIHZhciBBcnJheUN0b3IgPSBBUlJBWV9DVE9SX01BUFthY2Nlc3NvckluZm8uY29tcG9uZW50VHlwZV0gfHwgdmVuZG9yLkZsb2F0MzJBcnJheTtcblxuICAgIHZhciBzaXplID0gU0laRV9NQVBbYWNjZXNzb3JJbmZvLnR5cGVdO1xuICAgIGlmIChzaXplID09IG51bGwgJiYgaXNJbmRpY2VzKSB7XG4gICAgICAgIHNpemUgPSAxO1xuICAgIH1cbiAgICB2YXIgYXJyID0gbmV3IEFycmF5Q3RvcihidWZmZXIsIGJ5dGVPZmZzZXQsIHNpemUgKiBhY2Nlc3NvckluZm8uY291bnQpO1xuXG4gICAgdmFyIHF1YW50aXplRXh0ZW5zaW9uID0gYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnMgJiYgYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnNbJ1dFQjNEX3F1YW50aXplZF9hdHRyaWJ1dGVzJ107XG4gICAgaWYgKHF1YW50aXplRXh0ZW5zaW9uKSB7XG4gICAgICAgIHZhciBkZWNvZGVkQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XG4gICAgICAgIHZhciBkZWNvZGVNYXRyaXggPSBxdWFudGl6ZUV4dGVuc2lvbi5kZWNvZGVNYXRyaXg7XG4gICAgICAgIHZhciBkZWNvZGVPZmZzZXQsIGRlY29kZVNjYWxlO1xuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0ID0gbmV3IEFycmF5KHNpemUpO1xuICAgICAgICB2YXIgZGVjb2RlU2NhbGUgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XG4gICAgICAgICAgICBkZWNvZGVPZmZzZXRba10gPSBkZWNvZGVNYXRyaXhbc2l6ZSAqIChzaXplICsgMSkgKyBrXTtcbiAgICAgICAgICAgIGRlY29kZVNjYWxlW2tdID0gZGVjb2RlTWF0cml4W2sgKiAoc2l6ZSArIDEpICsga107XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2Nlc3NvckluZm8uY291bnQ7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVkQXJyW2kgKiBzaXplICsga10gPSBhcnJbaSAqIHNpemUgKyBrXSAqIGRlY29kZVNjYWxlW2tdICsgZGVjb2RlT2Zmc2V0W2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXJyID0gZGVjb2RlZEFycjtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmxvYWRlci5HTFRGLklSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBqc29uXG4gKiBAcHJvcGVydHkge2NsYXkuU2NlbmV9IHNjZW5lXG4gKiBAcHJvcGVydHkge2NsYXkuTm9kZX0gcm9vdE5vZGVcbiAqIEBwcm9wZXJ0eSB7Y2xheS5DYW1lcmFbXX0gY2FtZXJhc1xuICogQHByb3BlcnR5IHtjbGF5LlRleHR1cmVbXX0gdGV4dHVyZXNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NYXRlcmlhbFtdfSBtYXRlcmlhbHNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ta2VsZXRvbltdfSBza2VsZXRvbnNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NZXNoW119IG1lc2hlc1xuICogQHByb3BlcnR5IHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXBbXX0gY2xpcHNcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlW119IG5vZGVzXG4gKi9cblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5sb2FkZXIuR0xURlxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEdMVEZMb2FkZXIgPSBCYXNlLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURiMgKi9cbntcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XG4gICAgICovXG4gICAgcm9vdE5vZGU6IG51bGwsXG4gICAgLyoqXG4gICAgICogUm9vdCBwYXRoIGZvciB1cmkgcGFyc2luZy5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHJvb3RQYXRoOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogUm9vdCBwYXRoIGZvciB0ZXh0dXJlIHVyaSBwYXJzaW5nLiBEZWZhdWx0bHkgdXNlIHRoZSByb290UGF0aFxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGV4dHVyZVJvb3RQYXRoOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogUm9vdCBwYXRoIGZvciBidWZmZXIgdXJpIHBhcnNpbmcuIERlZmF1bHRseSB1c2UgdGhlIHJvb3RQYXRoXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBidWZmZXJSb290UGF0aDogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFNoYWRlciB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIG1hdGVyaWFscy5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfGNsYXkuU2hhZGVyfVxuICAgICAqIEBkZWZhdWx0ICdjbGF5LnN0YW5kYXJkJ1xuICAgICAqL1xuICAgIHNoYWRlcjogJ2NsYXkuc3RhbmRhcmQnLFxuXG4gICAgLyoqXG4gICAgICogSWYgdXNlIHtAbGluayBjbGF5LlN0YW5kYXJkTWF0ZXJpYWx9XG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB1c2VTdGFuZGFyZE1hdGVyaWFsOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIElmIGxvYWRpbmcgdGhlIGNhbWVyYXMuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgaW5jbHVkZUNhbWVyYTogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIElmIGxvYWRpbmcgdGhlIGFuaW1hdGlvbnMuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgaW5jbHVkZUFuaW1hdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBtZXNoZXNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpbmNsdWRlTWVzaDogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSB0ZXh0dXJlcy5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpbmNsdWRlVGV4dHVyZTogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgY3Jvc3NPcmlnaW46ICcnLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy82NzRcbiAgICAgKi9cbiAgICB0ZXh0dXJlRmxpcFk6IGZhbHNlLFxuXG4gICAgc2hhZGVyTGlicmFyeTogbnVsbFxufSxcbmZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuc2hhZGVyTGlicmFyeSkge1xuICAgICAgICB0aGlzLnNoYWRlckxpYnJhcnkgPSBzaGFkZXJMaWJyYXJ5LmNyZWF0ZUxpYnJhcnkoKTtcbiAgICB9XG59LFxuLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5HTFRGLnByb3RvdHlwZSAqL1xue1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKi9cbiAgICBsb2FkOiBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGlzQmluYXJ5ID0gdXJsLmVuZHNXaXRoKCcuZ2xiJyk7XG5cbiAgICAgICAgaWYgKHRoaXMucm9vdFBhdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmdldCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uIChwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdwcm9ncmVzcycsIHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsIGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogaXNCaW5hcnkgPyAnYXJyYXlidWZmZXInIDogJ3RleHQnLFxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlQmluYXJ5KGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShKU09OLnBhcnNlKGRhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBnbFRGIGJpbmFyeVxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuSVJlc3VsdH1cbiAgICAgKi9cbiAgICBwYXJzZUJpbmFyeTogZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgICAgICB2YXIgaGVhZGVyID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlciwgMCwgNCk7XG4gICAgICAgIGlmIChoZWFkZXJbMF0gIT09IDB4NDY1NDZDNjcpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IEludmFsaWQgaGVhZGVyJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhlYWRlclswXSA8IDIpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnT25seSBnbFRGMi4wIGlzIHN1cHBvcnRlZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIsIDEyKTtcblxuICAgICAgICB2YXIganNvbjtcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgLy8gUmVhZCBjaHVua3NcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhVmlldy5ieXRlTGVuZ3RoOykge1xuICAgICAgICAgICAgdmFyIGNodW5rTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xuICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgdmFyIGNodW5rVHlwZSA9IGRhdGFWaWV3LmdldFVpbnQzMihpLCB0cnVlKTtcbiAgICAgICAgICAgIGkgKz0gNDtcblxuICAgICAgICAgICAgLy8ganNvblxuICAgICAgICAgICAgaWYgKGNodW5rVHlwZSA9PT0gMHg0RTRGNTM0QSkge1xuICAgICAgICAgICAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWZmZXIsIGkgKyAxMiwgY2h1bmtMZW5ndGgpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE8sIGZvciB0aGUgYnJvd3NlciBub3Qgc3VwcG9ydCBUZXh0RGVjb2Rlci5cbiAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBkZWNvZGVyLmRlY29kZShhcnIpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSlNPTiBQYXJzZSBlcnJvcjonICsgZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNodW5rVHlwZSA9PT0gMHgwMDRFNDk0Mikge1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIuc2xpY2UoaSArIDEyLCBpICsgMTIgKyBjaHVua0xlbmd0aCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpICs9IGNodW5rTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghanNvbikge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdJbnZhbGlkIGdsVEYgYmluYXJ5IGZvcm1hdDogQ2FuXFwndCBmaW5kIEpTT04uJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShqc29uLCBidWZmZXJzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGpzb25cbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyW119IFtidWZmZXJdXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5JUmVzdWx0fVxuICAgICAqL1xuICAgIHBhcnNlOiBmdW5jdGlvbiAoanNvbiwgYnVmZmVycykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGxpYiA9IHtcbiAgICAgICAgICAgIGpzb246IGpzb24sXG4gICAgICAgICAgICBidWZmZXJzOiBbXSxcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdzOiBbXSxcbiAgICAgICAgICAgIG1hdGVyaWFsczogW10sXG4gICAgICAgICAgICB0ZXh0dXJlczogW10sXG4gICAgICAgICAgICBtZXNoZXM6IFtdLFxuICAgICAgICAgICAgam9pbnRzOiBbXSxcbiAgICAgICAgICAgIHNrZWxldG9uczogW10sXG4gICAgICAgICAgICBjYW1lcmFzOiBbXSxcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgICAgIGNsaXBzOiBbXVxuICAgICAgICB9O1xuICAgICAgICAvLyBNb3VudCBvbiB0aGUgcm9vdCBub2RlIGlmIGdpdmVuXG4gICAgICAgIHZhciByb290Tm9kZSA9IHRoaXMucm9vdE5vZGUgfHwgbmV3IFNjZW5lKCk7XG5cbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xuICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWQoKSB7XG4gICAgICAgICAgICBsb2FkaW5nLS07XG4gICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFmdGVyTG9hZEJ1ZmZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGFscmVhZHkgbG9hZCBidWZmZXJzXG4gICAgICAgIGlmIChidWZmZXJzKSB7XG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IGJ1ZmZlcnMuc2xpY2UoKTtcbiAgICAgICAgICAgIGFmdGVyTG9hZEJ1ZmZlcih0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIExvYWQgYnVmZmVyc1xuICAgICAgICAgICAgdXRpbC5lYWNoKGpzb24uYnVmZmVycywgZnVuY3Rpb24gKGJ1ZmZlckluZm8sIGlkeCkge1xuICAgICAgICAgICAgICAgIGxvYWRpbmcrKztcbiAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGJ1ZmZlckluZm8udXJpO1xuXG4gICAgICAgICAgICAgICAgc2VsZi5fbG9hZEJ1ZmZlcihwYXRoLCBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpYi5idWZmZXJzW2lkeF0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sIGNoZWNrTG9hZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAganNvbjoganNvbixcbiAgICAgICAgICAgICAgICBzY2VuZTogc2VsZi5yb290Tm9kZSA/IG51bGwgOiByb290Tm9kZSxcbiAgICAgICAgICAgICAgICByb290Tm9kZTogc2VsZi5yb290Tm9kZSA/IHJvb3ROb2RlIDogbnVsbCxcbiAgICAgICAgICAgICAgICBjYW1lcmFzOiBsaWIuY2FtZXJhcyxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlczogbGliLnRleHR1cmVzLFxuICAgICAgICAgICAgICAgIG1hdGVyaWFsczogbGliLm1hdGVyaWFscyxcbiAgICAgICAgICAgICAgICBza2VsZXRvbnM6IGxpYi5za2VsZXRvbnMsXG4gICAgICAgICAgICAgICAgbWVzaGVzOiBsaWIuaW5zdGFuY2VkTWVzaGVzLFxuICAgICAgICAgICAgICAgIGNsaXBzOiBsaWIuY2xpcHMsXG4gICAgICAgICAgICAgICAgbm9kZXM6IGxpYi5ub2Rlc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZEJ1ZmZlcihpbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgLy8gQnVmZmVyIG5vdCBsb2FkIGNvbXBsZXRlLlxuICAgICAgICAgICAgaWYgKGxpYi5idWZmZXJzLmxlbmd0aCAhPT0ganNvbi5idWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgJ0J1ZmZlciBub3QgbG9hZCBjb21wbGV0ZS4nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGpzb24uYnVmZmVyVmlld3MuZm9yRWFjaChmdW5jdGlvbiAoYnVmZmVyVmlld0luZm8sIGlkeCkge1xuICAgICAgICAgICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcbiAgICAgICAgICAgICAgICBsaWIuYnVmZmVyVmlld3NbaWR4XSA9IGxpYi5idWZmZXJzW2J1ZmZlclZpZXdJbmZvLmJ1ZmZlcl1cbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCwgKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCkgKyAoYnVmZmVyVmlld0luZm8uYnl0ZUxlbmd0aCB8fCAwKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZVRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VUZXh0dXJlcyhqc29uLCBsaWIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZU1hdGVyaWFscyhqc29uLCBsaWIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzaGVzKGpzb24sIGxpYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9wYXJzZU5vZGVzKGpzb24sIGxpYik7XG5cbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBvbmUgc2NlbmUuXG4gICAgICAgICAgICBpZiAoanNvbi5zY2VuZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2NlbmVJbmZvID0ganNvbi5zY2VuZXNbanNvbi5zY2VuZSB8fCAwXTsgLy8gRGVmYXVsdCB1c2UgdGhlIGZpcnN0IHNjZW5lLlxuICAgICAgICAgICAgICAgIGlmIChzY2VuZUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZUluZm8ubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW3NjZW5lSW5mby5ub2Rlc1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5vZGUuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlTWVzaCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlU2tpbnMoanNvbiwgbGliKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZUFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlQW5pbWF0aW9ucyhqc29uLCBsaWIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRSZXN1bHQoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQmluYXJ5IGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgICAqL1xuICAgIHJlc29sdmVCaW5hcnlQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xuICAgICAgICBpZiAocGF0aCAmJiBwYXRoLm1hdGNoKC9eZGF0YTooLio/KWJhc2U2NCwvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLmJ1ZmZlclJvb3RQYXRoO1xuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVGV4dHVyZSBmaWxlIHBhdGggcmVzb2x2ZXIuIFVzZXIgY2FuIG92ZXJyaWRlIGl0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICAgKi9cbiAgICByZXNvbHZlVGV4dHVyZVBhdGg6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByb290UGF0aCA9IHRoaXMudGV4dHVyZVJvb3RQYXRoO1xuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcbiAgICB9LFxuXG4gICAgX2dldFNoYWRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZGVyTGlicmFyeS5nZXQodGhpcy5zaGFkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkZXI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xvYWRCdWZmZXI6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcbiAgICAgICAgcmVxdWVzdC5nZXQoe1xuICAgICAgICAgICAgdXJsOiB0aGlzLnJlc29sdmVCaW5hcnlQYXRoKHBhdGgpLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2VzcyhidWZmZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChidWZmZXIpIHtcbiAgICAgICAgICAgICAgICBvbmVycm9yICYmIG9uZXJyb3IoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvMTAwXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTNcbiAgICBfcGFyc2VTa2luczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuXG4gICAgICAgIC8vIENyZWF0ZSBza2VsZXRvbnMgYW5kIGpvaW50c1xuICAgICAgICB2YXIgaGF2ZUludkJpbmRNYXRyaWNlcyA9IGZhbHNlO1xuICAgICAgICB1dGlsLmVhY2goanNvbi5za2lucywgZnVuY3Rpb24gKHNraW5JbmZvLCBpZHgpIHtcbiAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbih7XG4gICAgICAgICAgICAgICAgbmFtZTogc2tpbkluZm8ubmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNraW5JbmZvLmpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlSWR4ID0gc2tpbkluZm8uam9pbnRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IG5ldyBKb2ludCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHNrZWxldG9uLmpvaW50cy5sZW5ndGhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChqb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBza2VsZXRvbi5yZWxhdGl2ZVJvb3ROb2RlID0gbGliLm5vZGVzW3NraW5JbmZvLnNrZWxldG9uXSB8fCB0aGlzLnJvb3ROb2RlO1xuICAgICAgICAgICAgaWYgKHNraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICBoYXZlSW52QmluZE1hdHJpY2VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgSUJNSW5mbyA9IGpzb24uYWNjZXNzb3JzW3NraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXNdO1xuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbSUJNSW5mby5idWZmZXJWaWV3XTtcblxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBJQk1JbmZvLmJ5dGVPZmZzZXQgfHwgMDtcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IElCTUluZm8uY291bnQgKiAxNjtcblxuICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTtcblxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnNldEpvaW50TWF0cmljZXNBcnJheShhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludE1hdHJpY2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaWIuc2tlbGV0b25zW2lkeF0gPSBza2VsZXRvbjtcbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgZnVuY3Rpb24gZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG1lc2gsIHNrZWxldG9uLCBqb2ludEluZGljZXMpIHtcbiAgICAgICAgICAgIG1lc2guc2tlbGV0b24gPSBza2VsZXRvbjtcbiAgICAgICAgICAgIG1lc2guam9pbnRzID0gam9pbnRJbmRpY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Sm9pbnRJbmRleChqb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIGpvaW50LmluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgbm9kZUlkeCkge1xuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNraW4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBza2luSWR4ID0gbm9kZUluZm8uc2tpbjtcbiAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBsaWIuc2tlbGV0b25zW3NraW5JZHhdO1xuXG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBsaWIubm9kZXNbbm9kZUlkeF07XG4gICAgICAgICAgICAgICAgdmFyIGpvaW50SW5kaWNlcyA9IHNrZWxldG9uLmpvaW50cy5tYXAoZ2V0Sm9pbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBNZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVNraW5uaW5nRm9yTWVzaChub2RlLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE1lc2ggaGF2ZSBtdWx0aXBsZSBwcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlU2tpbm5pbmdGb3JNZXNoKGNoaWxkcmVuW2ldLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9wYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XG4gICAgICAgIHV0aWwuZWFjaChqc29uLnRleHR1cmVzLCBmdW5jdGlvbiAodGV4dHVyZUluZm8sIGlkeCl7XG4gICAgICAgICAgICAvLyBzYW1wbGVycyBpcyBvcHRpb25hbFxuICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gKGpzb24uc2FtcGxlcnMgJiYganNvbi5zYW1wbGVyc1t0ZXh0dXJlSW5mby5zYW1wbGVyXSkgfHwge307XG4gICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xuICAgICAgICAgICAgWyd3cmFwUycsICd3cmFwVCcsICdtYWdGaWx0ZXInLCAnbWluRmlsdGVyJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNhbXBsZXJJbmZvW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHMocGFyYW1ldGVycywge1xuICAgICAgICAgICAgICAgIHdyYXBTOiBUZXh0dXJlLlJFUEVBVCxcbiAgICAgICAgICAgICAgICB3cmFwVDogVGV4dHVyZS5SRVBFQVQsXG4gICAgICAgICAgICAgICAgZmxpcFk6IHRoaXMudGV4dHVyZUZsaXBZXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmVJbmZvLnRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSB0ZXh0dXJlSW5mby5mb3JtYXQ7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gZ2xlbnVtLlRFWFRVUkVfMkQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgdmFyIGltYWdlSW5mbyA9IGpzb24uaW1hZ2VzW3RleHR1cmVJbmZvLnNvdXJjZV07XG4gICAgICAgICAgICAgICAgdmFyIHVyaTtcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmZvLnVyaSkge1xuICAgICAgICAgICAgICAgICAgICB1cmkgPSB0aGlzLnJlc29sdmVUZXh0dXJlUGF0aChpbWFnZUluZm8udXJpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VJbmZvLmJ1ZmZlclZpZXcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB1cmkgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtsaWIuYnVmZmVyVmlld3NbaW1hZ2VJbmZvLmJ1ZmZlclZpZXddXSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW1hZ2VJbmZvLm1pbWVUeXBlXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVyaSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJpLCB0aGlzLmNyb3NzT3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgbGliLnRleHR1cmVzW2lkeF0gPSB0ZXh0dXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9LSFJDb21tb25NYXRlcmlhbFRvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIGxpYikge1xuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcbiAgICAgICAgdmFyIGNvbW1vbk1hdGVyaWFsSW5mbyA9IG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddO1xuICAgICAgICB1bmlmb3JtcyA9IGNvbW1vbk1hdGVyaWFsSW5mby52YWx1ZXMgfHwge307XG5cbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5kaWZmdXNlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdW5pZm9ybXMuZGlmZnVzZSA9IGxpYi50ZXh0dXJlc1t1bmlmb3Jtcy5kaWZmdXNlXSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdW5pZm9ybXMuZW1pc3Npb24gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB1bmlmb3Jtcy5lbWlzc2lvbiA9IGxpYi50ZXh0dXJlc1t1bmlmb3Jtcy5lbWlzc2lvbl0gfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcbiAgICAgICAgaWYgKHVuaWZvcm1zWydkaWZmdXNlJ10gaW5zdGFuY2VvZiBUZXh0dXJlMkQpIHtcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaWZvcm1zWydlbWlzc2lvbiddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWF0ZXJpYWw7XG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XG4gICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxuICAgICAgICAgICAgICAgIGRvdWJsZVNpZGVkOiBtYXRlcmlhbEluZm8uZG91YmxlU2lkZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxuICAgICAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xuXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1bmlmb3Jtcy50cmFuc3BhcmVudCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZmZ1c2VQcm9wID0gdW5pZm9ybXNbJ2RpZmZ1c2UnXTtcbiAgICAgICAgaWYgKGRpZmZ1c2VQcm9wKSB7XG4gICAgICAgICAgICAvLyBDb2xvclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZnVzZVByb3ApKSB7XG4gICAgICAgICAgICAgICAgZGlmZnVzZVByb3AgPSBkaWZmdXNlUHJvcC5zbGljZSgwLCAzKTtcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuY29sb3IgPSBkaWZmdXNlUHJvcClcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2NvbG9yJywgZGlmZnVzZVByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZGlmZnVzZU1hcCA9IGRpZmZ1c2VQcm9wKVxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIGRpZmZ1c2VQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgZW1pc3Npb25Qcm9wID0gdW5pZm9ybXNbJ2VtaXNzaW9uJ107XG4gICAgICAgIGlmIChlbWlzc2lvblByb3AgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQ29sb3JcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVtaXNzaW9uUHJvcCkpIHtcbiAgICAgICAgICAgICAgICBlbWlzc2lvblByb3AgPSBlbWlzc2lvblByb3Auc2xpY2UoMCwgMyk7XG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaW9uID0gZW1pc3Npb25Qcm9wKVxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZW1pc3Npb24nLCBlbWlzc2lvblByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZW1pc3NpdmVNYXAgPSBlbWlzc2lvblByb3ApXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2l2ZU1hcCcsIGVtaXNzaW9uUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcbiAgICAgICAgICAgIHZhciBub3JtYWxUZXh0dXJlSW5kZXggPSBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5pbmRleDtcbiAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdub3JtYWxNYXAnLCBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NoaW5pbmVzcyddICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBnbG9zc2luZXNzID0gTWF0aC5sb2codW5pZm9ybXNbJ3NoaW5pbmVzcyddKSAvIE1hdGgubG9nKDgxOTIpO1xuICAgICAgICAgICAgLy8gVW5pZm9ybSBnbG9zc2luZXNzXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMSAtIGdsb3NzaW5lc3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdnbG9zc2luZXNzJywgMC4zKTtcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMC4zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NwZWN1bGFyJ10gIT0gbnVsbCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzcGVjdWxhckNvbG9yJywgdW5pZm9ybXNbJ3NwZWN1bGFyJ10uc2xpY2UoMCwgMykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmlmb3Jtc1sndHJhbnNwYXJlbmN5J10gIT0gbnVsbCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdhbHBoYScsIHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XG4gICAgfSxcblxuICAgIF9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIG1ldGFsbGljUm91Z2huZXNzTWF0SW5mbywgbGliKSB7XG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XG5cbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xuICAgICAgICB2YXIgZGlmZnVzZU1hcCwgcm91Z2huZXNzTWFwLCBtZXRhbG5lc3NNYXAsIG5vcm1hbE1hcCwgZW1pc3NpdmVNYXA7XG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcbiAgICAgICAgaWYgKG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlKSB7XG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xuICAgICAgICAgICAgZGlmZnVzZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZGlmZnVzZU1hcCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlKSB7XG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgPSBsaWIudGV4dHVyZXNbbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIHJvdWdobmVzc01hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbWV0YWxuZXNzTWFwJywgJ3JvdWdobmVzc01hcCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xuICAgICAgICAgICAgbm9ybWFsTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdub3JtYWxNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZSkge1xuICAgICAgICAgICAgZW1pc3NpdmVNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBiYXNlQ29sb3IgPSBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcblxuICAgICAgICB2YXIgY29tbW9uUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIHJvdWdobmVzc01hcDogcm91Z2huZXNzTWFwIHx8IG51bGwsXG4gICAgICAgICAgICBtZXRhbG5lc3NNYXA6IG1ldGFsbmVzc01hcCB8fCBudWxsLFxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxuICAgICAgICAgICAgY29sb3I6IGJhc2VDb2xvci5zbGljZSgwLCAzKSxcbiAgICAgICAgICAgIGFscGhhOiBiYXNlQ29sb3JbM10sXG4gICAgICAgICAgICBtZXRhbG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5tZXRhbGxpY0ZhY3RvciB8fCAwLFxuICAgICAgICAgICAgcm91Z2huZXNzOiBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ucm91Z2huZXNzRmFjdG9yIHx8IDAsXG4gICAgICAgICAgICBlbWlzc2lvbjogbWF0ZXJpYWxJbmZvLmVtaXNzaXZlRmFjdG9yIHx8IFswLCAwLCAwXSxcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxuICAgICAgICAgICAgYWxwaGFDdXRvZmY6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZiB8fCAwXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzc01hcCkge1xuICAgICAgICAgICAgLy8gSW4gZ2xURiBtZXRhbGxpY0ZhY3RvciB3aWxsIGRvIG11bHRpcGx5LCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBTdGFuZGFyZE1hdGVyaWFsLlxuICAgICAgICAgICAgLy8gU28gc2ltcGx5IGlnbm9yZSBpdFxuICAgICAgICAgICAgY29tbW9uUHJvcGVydGllcy5tZXRhbG5lc3MgPSAwLjU7XG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzcyA9IDAuNTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHV0aWwuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcbiAgICAgICAgICAgICAgICBhbHBoYVRlc3Q6IGFscGhhVGVzdCxcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkLFxuICAgICAgICAgICAgICAgIC8vIEcgY2hhbm5lbFxuICAgICAgICAgICAgICAgIHJvdWdobmVzc0NoYW5uZWw6IDEsXG4gICAgICAgICAgICAgICAgLy8gQiBDaGFubmVsXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMlxuICAgICAgICAgICAgfSwgY29tbW9uUHJvcGVydGllcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9nZXRTaGFkZXIoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfTUVUQUxORVNTJyk7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJywgMSk7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ01FVEFMTkVTU19DSEFOTkVMJywgMik7XG5cbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRElGRlVTRU1BUF9BTFBIQV9BTFBIQScpO1xuXG4gICAgICAgICAgICBpZiAoYWxwaGFUZXN0KSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoTWFzayA9IGZhbHNlO1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcbiAgICB9LFxuXG4gICAgX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8sIGxpYikge1xuICAgICAgICB2YXIgYWxwaGFUZXN0ID0gbWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ01BU0snO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1N0YW5kYXJkTWF0ZXJpYWwgZG9lc25cXCd0IHN1cHBvcnQgc3BlY3VsYXIgZ2xvc3NpbmVzcyB3b3JrZmxvdyB5ZXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtYXRlcmlhbDtcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIGdsb3NzaW5lc3NNYXAsIHNwZWN1bGFyTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwO1xuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XG4gICAgICAgICAgICAvLyBUT0RPIHRleENvb3JkXG4gICAgICAgIGlmIChzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmRpZmZ1c2VUZXh0dXJlKSB7XG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSkge1xuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCA9IHNwZWN1bGFyTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ3NwZWN1bGFyTWFwJywgJ2dsb3NzaW5lc3NNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUpIHtcbiAgICAgICAgICAgIG5vcm1hbE1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUpIHtcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGlmZnVzZUNvbG9yID0gc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcblxuICAgICAgICB2YXIgY29tbW9uUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXA6IGdsb3NzaW5lc3NNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIHNwZWN1bGFyTWFwOiBzcGVjdWxhck1hcCB8fCBudWxsLFxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxuICAgICAgICAgICAgY29sb3I6IGRpZmZ1c2VDb2xvci5zbGljZSgwLCAzKSxcbiAgICAgICAgICAgIGFscGhhOiBkaWZmdXNlQ29sb3JbM10sXG4gICAgICAgICAgICBzcGVjdWxhckNvbG9yOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyRmFjdG9yIHx8IFsxLCAxLCAxXSxcbiAgICAgICAgICAgIGdsb3NzaW5lc3M6IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZ2xvc3NpbmVzc0ZhY3RvciB8fCAwLFxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXG4gICAgICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMSxcbiAgICAgICAgICAgIGFscGhhQ3V0b2ZmOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmYgPT0gbnVsbCA/IDAuOSA6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZlxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5nbG9zc2luZXNzTWFwKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgc3BlY3VsYXJGYWN0b3JcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuZ2xvc3NpbmVzcyA9IDAuNTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5zcGVjdWxhck1hcCkge1xuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyQ29sb3IgPSBbMSwgMSwgMV07XG4gICAgICAgIH1cblxuICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdHTE9TU0lORVNTX0NIQU5ORUwnLCAzKTtcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XG5cbiAgICAgICAgaWYgKGFscGhhVGVzdCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hdGVyaWFsLnNldChjb21tb25Qcm9wZXJ0aWVzKTtcblxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xuICAgIH0sXG5cbiAgICBfcGFyc2VNYXRlcmlhbHM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWF0ZXJpYWxzLCBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBpZHgpIHtcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8uZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19jb21tb24nXSkge1xuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIGxpYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXRlcmlhbEluZm8uZXh0ZW5zaW9ucyAmJiBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSkge1xuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSwgbGliKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3Bick1ldGFsbGljUm91Z2huZXNzVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIG1hdGVyaWFsSW5mby5wYnJNZXRhbGxpY1JvdWdobmVzcyB8fCB7fSwgbGliKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIF9wYXJzZU1lc2hlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWVzaGVzLCBmdW5jdGlvbiAobWVzaEluZm8sIGlkeCkge1xuICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdID0gW107XG4gICAgICAgICAgICAvLyBHZW9tZXRyeVxuICAgICAgICAgICAgZm9yICh2YXIgcHAgPSAwOyBwcCA8IG1lc2hJbmZvLnByaW1pdGl2ZXMubGVuZ3RoOyBwcCsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZUluZm8gPSBtZXNoSW5mby5wcmltaXRpdmVzW3BwXTtcbiAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xuICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElHTlxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtZXNoSW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBib3VuZGluZ0JveDogbmV3IEJvdW5kaW5nQm94KClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljcyA9IE9iamVjdC5rZXlzKHByaW1pdGl2ZUluZm8uYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3MgPSAwOyBzcyA8IHNlbWFudGljcy5sZW5ndGg7IHNzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gc2VtYW50aWNzW3NzXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2Vzc29ySWR4ID0gcHJpbWl0aXZlSW5mby5hdHRyaWJ1dGVzW3NlbWFudGljXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gc2VtYW50aWNBdHRyaWJ1dGVNYXBbc2VtYW50aWNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gU0laRV9NQVBbYXR0cmlidXRlSW5mby50eXBlXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUFycmF5ID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgYWNjZXNzb3JJZHgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZWJHTCBhdHRyaWJ1dGUgYnVmZmVyIG5vdCBzdXBwb3J0IHVpbnQzMi5cbiAgICAgICAgICAgICAgICAgICAgLy8gRGlyZWN0IHVzZSBGbG9hdDMyQXJyYXkgbWF5IGFsc28gaGF2ZSBpc3N1ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0cmlidXRlQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYyA9PT0gJ1dFSUdIVFNfMCcgJiYgc2l6ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VpZ2h0IGRhdGEgaW4gUVRFSyBoYXMgb25seSAzIGNvbXBvbmVudCwgdGhlIGxhc3QgY29tcG9uZW50IGNhbiBiZSBldmFsdWF0ZWQgc2luY2UgaXQgaXMgbm9ybWFsaXplZFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdlaWdodEFycmF5ID0gbmV3IGF0dHJpYnV0ZUFycmF5LmNvbnN0cnVjdG9yKGF0dHJpYnV0ZUluZm8uY291bnQgKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcxID0gYXR0cmlidXRlQXJyYXlbaTRdLCB3MiA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgMV0sIHczID0gYXR0cmlidXRlQXJyYXlbaTQgKyAyXSwgdzQgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3U3VtID0gdzEgKyB3MiArIHczICsgdzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTNdID0gdzEgLyB3U3VtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodEFycmF5W2kzICsgMV0gPSB3MiAvIHdTdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAyXSA9IHczIC8gd1N1bTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSB3ZWlnaHRBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ0NPTE9SXzAnICYmIHNpemUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvckFycmF5ID0gbmV3IGF0dHJpYnV0ZUFycmF5LmNvbnN0cnVjdG9yKGF0dHJpYnV0ZUluZm8uY291bnQgKiA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNF0gPSBhdHRyaWJ1dGVBcnJheVtpM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDFdID0gYXR0cmlidXRlQXJyYXlbaTMgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgMl0gPSBhdHRyaWJ1dGVBcnJheVtpMyArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAzXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gY29sb3JBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBhdHRyaWJ1dGVBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVUeXBlID0gJ2Zsb2F0JztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQxNkFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ3VzaG9ydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuSW50MTZBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdzaG9ydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1Ynl0ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuSW50OEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ2J5dGUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udHlwZSA9IGF0dHJpYnV0ZVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljID09PSAnUE9TSVRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCb3VuZGluZyBCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBhdHRyaWJ1dGVJbmZvLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBhdHRyaWJ1dGVJbmZvLm1heDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4uc2V0KG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5zZXQobWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBpbmRpY2VzXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZUluZm8uaW5kaWNlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBwcmltaXRpdmVJbmZvLmluZGljZXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbWV0cnkudmVydGV4Q291bnQgPD0gMHhmZmZmICYmIGdlb21ldHJ5LmluZGljZXMgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDMyQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKGdlb21ldHJ5LmluZGljZXMgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZ2VvbWV0cnkuaW5kaWNlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBsaWIubWF0ZXJpYWxzW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbEluZm8gPSAoanNvbi5tYXRlcmlhbHMgfHwgW10pW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xuICAgICAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IG1hdGVyaWFsXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHNlbGYuX2dldFNoYWRlcigpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IFtNZXNoLlBPSU5UUywgTWVzaC5MSU5FUywgTWVzaC5MSU5FX0xPT1AsIE1lc2guTElORV9TVFJJUCwgTWVzaC5UUklBTkdMRVMsIE1lc2guVFJJQU5HTEVfU1RSSVAsIE1lc2guVFJJQU5HTEVfRkFOXVtwcmltaXRpdmVJbmZvLm1vZGVdIHx8IE1lc2guVFJJQU5HTEVTLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVHQnVmZmVyOiBtYXRlcmlhbC50cmFuc3BhcmVudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBtZXNoLmN1bGxpbmcgPSAhbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCgobWF0ZXJpYWwgaW5zdGFuY2VvZiBTdGFuZGFyZE1hdGVyaWFsKSAmJiBtYXRlcmlhbC5ub3JtYWxNYXApXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRlcmlhbC5pc1RleHR1cmVFbmFibGVkKCdub3JtYWxNYXAnKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnVkVSVEVYX0NPTE9SJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbWVzaC5uYW1lID0gR0xURkxvYWRlci5nZW5lcmF0ZU1lc2hOYW1lKGpzb24ubWVzaGVzLCBpZHgsIHBwKTtcblxuICAgICAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XS5wdXNoKG1lc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICB9LFxuXG4gICAgX2luc3RhbmNlQ2FtZXJhOiBmdW5jdGlvbiAoanNvbiwgbm9kZUluZm8pIHtcbiAgICAgICAgdmFyIGNhbWVyYUluZm8gPSBqc29uLmNhbWVyYXNbbm9kZUluZm8uY2FtZXJhXTtcblxuICAgICAgICBpZiAoY2FtZXJhSW5mby50eXBlID09PSAncGVyc3BlY3RpdmUnKSB7XG4gICAgICAgICAgICB2YXIgcGVyc3BlY3RpdmVJbmZvID0gY2FtZXJhSW5mby5wZXJzcGVjdGl2ZSB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgYXNwZWN0OiBwZXJzcGVjdGl2ZUluZm8uYXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgZm92OiBwZXJzcGVjdGl2ZUluZm8ueWZvdixcbiAgICAgICAgICAgICAgICBmYXI6IHBlcnNwZWN0aXZlSW5mby56ZmFyLFxuICAgICAgICAgICAgICAgIG5lYXI6IHBlcnNwZWN0aXZlSW5mby56bmVhclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgb3J0aG9ncmFwaGljSW5mbyA9IGNhbWVyYUluZm8ub3J0aG9ncmFwaGljIHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcnRob2dyYXBoaWNDYW1lcmEoe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgdG9wOiBvcnRob2dyYXBoaWNJbmZvLnltYWcsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IG9ydGhvZ3JhcGhpY0luZm8ueG1hZyxcbiAgICAgICAgICAgICAgICBsZWZ0OiAtb3J0aG9ncmFwaGljSW5mby54bWFnLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogLW9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcbiAgICAgICAgICAgICAgICBuZWFyOiBvcnRob2dyYXBoaWNJbmZvLnpuZWFyLFxuICAgICAgICAgICAgICAgIGZhcjogb3J0aG9ncmFwaGljSW5mby56ZmFyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfcGFyc2VOb2RlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuXG4gICAgICAgIGZ1bmN0aW9uIGluc3RhbmNlTWVzaChtZXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1lc2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZSxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbWVzaC5nZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBtYXRlcmlhbDogbWVzaC5tYXRlcmlhbCxcbiAgICAgICAgICAgICAgICBjdWxsaW5nOiBtZXNoLmN1bGxpbmcsXG4gICAgICAgICAgICAgICAgbW9kZTogbWVzaC5tb2RlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMgPSBbXTtcblxuICAgICAgICB1dGlsLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKG5vZGVJbmZvLCBpZHgpIHtcbiAgICAgICAgICAgIHZhciBub2RlO1xuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLmNhbWVyYSAhPSBudWxsICYmIHRoaXMuaW5jbHVkZUNhbWVyYSkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9pbnN0YW5jZUNhbWVyYShqc29uLCBub2RlSW5mbyk7XG4gICAgICAgICAgICAgICAgbGliLmNhbWVyYXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGVJbmZvLm1lc2ggIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVNZXNoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZXMgPSBsaWIubWVzaGVzW25vZGVJbmZvLm1lc2hdO1xuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgbm9kZSB3aXRoIG1lc2ggZGlyZWN0bHlcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaWIuaW5zdGFuY2VkTWVzaGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZXNoID0gaW5zdGFuY2VNZXNoKHByaW1pdGl2ZXNbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKG5ld01lc2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChuZXdNZXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgICAgIC8vIFBFTkRJTkcgRHVscGxpY2F0ZSBuYW1lLlxuICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlSW5mby5tYXRyaXgpIHtcbiAgICAgICAgICAgICAgICBub2RlLmxvY2FsVHJhbnNmb3JtLnNldEFycmF5KG5vZGVJbmZvLm1hdHJpeCk7XG4gICAgICAgICAgICAgICAgbm9kZS5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucG9zaXRpb24uc2V0QXJyYXkobm9kZUluZm8udHJhbnNsYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8ucm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yb3RhdGlvbi5zZXRBcnJheShub2RlSW5mby5yb3RhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5zY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNjYWxlLnNldEFycmF5KG5vZGVJbmZvLnNjYWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpYi5ub2Rlc1tpZHhdID0gbm9kZTtcbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgLy8gQnVpbGQgaGllcmFyY2h5XG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBsaWIubm9kZXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUluZm8uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkSWR4ID0gbm9kZUluZm8uY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpYi5ub2Rlc1tjaGlsZElkeF07XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgX3BhcnNlQW5pbWF0aW9uczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xuICAgICAgICBmdW5jdGlvbiBjaGVja0NoYW5uZWxQYXRoKGNoYW5uZWxJbmZvKSB7XG4gICAgICAgICAgICBpZiAoY2hhbm5lbEluZm8ucGF0aCA9PT0gJ3dlaWdodHMnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG5vdCBzdXBwb3J0IG1vcnBoIHRhcmdldHMgeWV0LicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFubmVsSW5mby50YXJnZXQubm9kZSArICdfJyArIGFuaW1hdGlvbkluZm8uc2FtcGxlcnNbY2hhbm5lbEluZm8uc2FtcGxlcl0uaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGltZUFjY2Vzc29yTXVsdGlwbGllZCA9IHt9O1xuICAgICAgICB1dGlsLmVhY2goanNvbi5hbmltYXRpb25zLCBmdW5jdGlvbiAoYW5pbWF0aW9uSW5mbywgaWR4KSB7XG4gICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBhbmltYXRpb25JbmZvLmNoYW5uZWxzLmZpbHRlcihjaGVja0NoYW5uZWxQYXRoKTtcblxuICAgICAgICAgICAgaWYgKCFjaGFubmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdHJhY2tzID0ge307XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxJbmZvID0gY2hhbm5lbHNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxIYXNoID0gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldE5vZGUgPSBsaWIubm9kZXNbY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGVdO1xuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF07XG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXTtcblxuICAgICAgICAgICAgICAgIGlmICghdHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdID0gbmV3IFNhbXBsZXJUcmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YXJnZXROb2RlID8gdGFyZ2V0Tm9kZS5uYW1lIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldE5vZGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrLnRhcmdldE5vZGVJbmRleCA9IGNoYW5uZWxJbmZvLnRhcmdldC5ub2RlO1xuICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8uaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVMZW4gPSB0cmFjay5jaGFubmVscy50aW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lQWNjZXNzb3JNdWx0aXBsaWVkW3NhbXBsZXJJbmZvLmlucHV0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmcmFtZUxlbjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZVtrXSAqPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBzYW1wbGVySW5mby5pbnRlcnBvbGF0aW9uIHx8ICdMSU5FQVInO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uICE9PSAnTElORUFSJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgb25seSBzdXBwb3J0IExJTkVBUiBpbnRlcnBvbGF0aW9uLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gY2hhbm5lbEluZm8udGFyZ2V0LnBhdGg7XG4gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09ICd0cmFuc2xhdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9ICdwb3NpdGlvbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHNbcGF0aF0gPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBzYW1wbGVySW5mby5vdXRwdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhbmltYXRpb25JbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgbG9vcDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKHZhciBoYXNoIGluIHRyYWNrcykge1xuICAgICAgICAgICAgICAgIGNsaXAuYWRkVHJhY2sodHJhY2tzW2hhc2hdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsaXAuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XG4gICAgICAgICAgICBsaWIuY2xpcHMucHVzaChjbGlwKTtcbiAgICAgICAgfSwgdGhpcyk7XG5cblxuICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgIHZhciBtYXhMaWZlID0gbGliLmNsaXBzLnJlZHVjZShmdW5jdGlvbiAobWF4VGltZSwgY2xpcCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1heFRpbWUsIGNsaXAubGlmZSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBsaWIuY2xpcHMuZm9yRWFjaChmdW5jdGlvbiAoY2xpcCkge1xuICAgICAgICAgICAgY2xpcC5saWZlID0gbWF4TGlmZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGxpYi5jbGlwcztcbiAgICB9XG59KTtcblxuR0xURkxvYWRlci5nZW5lcmF0ZU1lc2hOYW1lID0gZnVuY3Rpb24gKG1lc2hlcywgaWR4LCBwcmltaXRpdmVJZHgpIHtcbiAgICB2YXIgbWVzaEluZm8gPSBtZXNoZXNbaWR4XTtcbiAgICB2YXIgbWVzaE5hbWUgPSBtZXNoSW5mby5uYW1lIHx8ICgnbWVzaF8nICsgaWR4KTtcbiAgICByZXR1cm4gcHJpbWl0aXZlSWR4ID09PSAwID8gbWVzaE5hbWUgOiAobWVzaE5hbWUgKyAnJCcgKyBwcmltaXRpdmVJZHgpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgR0xURkxvYWRlcjtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XG4gKlxuICogQGV4YW1wbGVcbiAqICAgICB2YXIgbGlnaHQgPSBuZXcgY2xheS5saWdodC5EaXJlY3Rpb25hbCh7XG4gKiAgICAgICAgIGludGVuc2l0eTogMC41LFxuICogICAgICAgICBjb2xvcjogWzEuMCwgMC4wLCAwLjBdXG4gKiAgICAgfSk7XG4gKiAgICAgbGlnaHQucG9zaXRpb24uc2V0KDEwLCAxMCwgMTApO1xuICogICAgIGxpZ2h0Lmxvb2tBdChjbGF5Lm1hdGguVmVjdG9yMy5aRVJPKTtcbiAqICAgICBzY2VuZS5hZGQobGlnaHQpO1xuICovXG52YXIgRGlyZWN0aW9uYWxMaWdodCA9IExpZ2h0LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5saWdodC5EaXJlY3Rpb25hbCMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgc2hhZG93U2xvcGVTY2FsZTogMi4wLFxuICAgIC8qKlxuICAgICAqIFNoYWRvdyBjYXNjYWRlLlxuICAgICAqIFVzZSBQU1NNIHRlY2huaXF1ZSB3aGVuIGl0IGlzIGxhcmdlciB0aGFuIDEgYW5kIGhhdmUgYSB1bmlxdWUgZGlyZWN0aW9uYWwgbGlnaHQgaW4gc2NlbmUuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzaGFkb3dDYXNjYWRlOiAxLFxuXG4gICAgLyoqXG4gICAgICogQXZhaWxhYmxlIHdoZW4gc2hhZG93Q2FzY2FkZSBpcyBsYXJnZXIgdGhhbiAxIGFuZCBoYXZlIGEgdW5pcXVlIGRpcmVjdGlvbmFsIGxpZ2h0IGluIHNjZW5lLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgY2FzY2FkZVNwbGl0TG9nRmFjdG9yOiAwLjJcbn0sIHtcblxuICAgIHR5cGU6ICdESVJFQ1RJT05BTF9MSUdIVCcsXG5cbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuX19kaXIgPSBpbnN0YW5jZS5fX2RpciB8fCBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubm9ybWFsaXplKCkubmVnYXRlKCkuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHRDb2xvcjoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuRGlyZWN0aW9uYWx9XG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwucHJvdG90eXBlXG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XG4gICAgICAgIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUgPSB0aGlzLnNoYWRvd1Nsb3BlU2NhbGU7XG4gICAgICAgIHJldHVybiBsaWdodDtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRGlyZWN0aW9uYWxMaWdodDtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuUG9pbnRcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcbiAqL1xudmFyIFBvaW50TGlnaHQgPSBMaWdodC5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkubGlnaHQuUG9pbnQjICovXG57XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICByYW5nZTogMTAwLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBjYXN0U2hhZG93OiBmYWxzZVxufSwge1xuXG4gICAgdHlwZTogJ1BPSU5UX0xJR0hUJyxcblxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcbiAgICAgICAgcG9pbnRMaWdodFBvc2l0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRMaWdodFJhbmdlOiB7XG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwb2ludExpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbIGNvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHkgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5Qb2ludH1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5Qb2ludC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xuICAgICAgICBsaWdodC5yYW5nZSA9IHRoaXMucmFuZ2U7XG4gICAgICAgIHJldHVybiBsaWdodDtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRMaWdodDtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlNwb3RcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcbiAqL1xudmFyIFNwb3RMaWdodCA9IExpZ2h0LmV4dGVuZChcbi8qKkBsZW5kcyBjbGF5LmxpZ2h0LlNwb3QgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhbmdlOiAyMCxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHVtYnJhQW5nbGU6IDMwLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcGVudW1icmFBbmdsZTogNDUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBmYWxsb2ZmRmFjdG9yOiAyLjAsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzaGFkb3dCaWFzOiAwLjAwMDIsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjBcbn0se1xuXG4gICAgdHlwZTogJ1NQT1RfTElHSFQnLFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICBzcG90TGlnaHRQb3NpdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcG90TGlnaHRSYW5nZToge1xuICAgICAgICAgICAgdHlwZTogJzFmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmU6IHtcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY29zKGluc3RhbmNlLnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZToge1xuICAgICAgICAgICAgdHlwZTogJzFmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jb3MoaW5zdGFuY2UucGVudW1icmFBbmdsZSAqIE1hdGguUEkgLyAxODApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcG90TGlnaHRGYWxsb2ZmRmFjdG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5mYWxsb2ZmRmFjdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcG90TGlnaHREaXJlY3Rpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuX19kaXIgPSBpbnN0YW5jZS5fX2RpciB8fCBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubmVnYXRlKCkuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNwb3RMaWdodENvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5TcG90fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LlNwb3QucHJvdG90eXBlXG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcbiAgICAgICAgbGlnaHQudW1icmFBbmdsZSA9IHRoaXMudW1icmFBbmdsZTtcbiAgICAgICAgbGlnaHQucGVudW1icmFBbmdsZSA9IHRoaXMucGVudW1icmFBbmdsZTtcbiAgICAgICAgbGlnaHQuZmFsbG9mZkZhY3RvciA9IHRoaXMuZmFsbG9mZkZhY3RvcjtcbiAgICAgICAgbGlnaHQuc2hhZG93QmlhcyA9IHRoaXMuc2hhZG93QmlhcztcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTcG90TGlnaHQ7XG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcbiAqL1xudmFyIEFtYmllbnRMaWdodCA9IExpZ2h0LmV4dGVuZCh7XG5cbiAgICBjYXN0U2hhZG93OiBmYWxzZVxuXG59LCB7XG5cbiAgICB0eXBlOiAnQU1CSUVOVF9MSUdIVCcsXG5cbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XG4gICAgICAgIGFtYmllbnRMaWdodENvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBuYW1lIGNsb25lXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnQucHJvdG90eXBlXG4gICAgICovXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudExpZ2h0O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuL1RleHR1cmVDdWJlJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcblxudmFyIEtFWV9GUkFNRUJVRkZFUiA9ICdmcmFtZWJ1ZmZlcic7XG52YXIgS0VZX1JFTkRFUkJVRkZFUiA9ICdyZW5kZXJidWZmZXInO1xudmFyIEtFWV9SRU5ERVJCVUZGRVJfV0lEVEggPSBLRVlfUkVOREVSQlVGRkVSICsgJ193aWR0aCc7XG52YXIgS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19oZWlnaHQnO1xudmFyIEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19hdHRhY2hlZCc7XG52YXIgS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCA9ICdkZXB0aHRleHR1cmVfYXR0YWNoZWQnO1xuXG52YXIgR0xfRlJBTUVCVUZGRVIgPSBnbGVudW0uRlJBTUVCVUZGRVI7XG52YXIgR0xfUkVOREVSQlVGRkVSID0gZ2xlbnVtLlJFTkRFUkJVRkZFUjtcbnZhciBHTF9ERVBUSF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX0FUVEFDSE1FTlQ7XG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSBnbGVudW0uQ09MT1JfQVRUQUNITUVOVDA7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkZyYW1lQnVmZmVyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgRnJhbWVCdWZmZXIgPSBCYXNlLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlciMgKi9cbntcbiAgICAvKipcbiAgICAgKiBJZiB1c2UgZGVwdGggYnVmZmVyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgZGVwdGhCdWZmZXI6IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHZpZXdwb3J0OiBudWxsLFxuXG4gICAgX3dpZHRoOiAwLFxuICAgIF9oZWlnaHQ6IDAsXG5cbiAgICBfdGV4dHVyZXM6IG51bGwsXG5cbiAgICBfYm91bmRSZW5kZXJlcjogbnVsbCxcbn0sIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBVc2UgY2FjaGVcbiAgICB0aGlzLl9jYWNoZSA9IG5ldyBDYWNoZSgpO1xuXG4gICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcbn0sXG5cbi8qKkBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyLnByb3RvdHlwZS4gKi9cbntcbiAgICAvKipcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSB3aWR0aFxuICAgICAqIHtudW1iZXJ9XG4gICAgICovXG4gICAgLy8gRklYTUUgQ2FuJ3QgdXNlIGJlZm9yZSAjYmluZFxuICAgIGdldFRleHR1cmVXaWR0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBhdHRhY2hlZCB0ZXh0dXJlIGhlaWdodFxuICAgICAqIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0VGV4dHVyZUhlaWdodDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBCaW5kIHRoZSBmcmFtZWJ1ZmZlciB0byBnaXZlbiByZW5kZXJlciBiZWZvcmUgcmVuZGVyaW5nXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcblxuICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIpIHtcbiAgICAgICAgICAgIC8vIEFscmVhZHkgYm91bmRcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZW5kZXJlciBhbHJlYWR5IGJvdW5kIHdpdGggYW5vdGhlciBmcmFtZWJ1ZmZlci4gVW5iaW5kIGl0IGZpcnN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPSB0aGlzO1xuXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcblxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0aGlzLl9nZXRGcmFtZUJ1ZmZlckdMKHJlbmRlcmVyKSk7XG4gICAgICAgIHRoaXMuX2JvdW5kUmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG5cbiAgICAgICAgY2FjaGUucHV0KCd2aWV3cG9ydCcsIHJlbmRlcmVyLnZpZXdwb3J0KTtcblxuICAgICAgICB2YXIgaGFzVGV4dHVyZUF0dGFjaGVkID0gZmFsc2U7XG4gICAgICAgIHZhciB3aWR0aDtcbiAgICAgICAgdmFyIGhlaWdodDtcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLl90ZXh0dXJlcykge1xuICAgICAgICAgICAgaGFzVGV4dHVyZUF0dGFjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcbiAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIERvIHdpZHRoLCBoZWlnaHQgY2hlY2tpbmcsIG1ha2Ugc3VyZSBzaXplIGFyZSBzYW1lXG4gICAgICAgICAgICAgICAgd2lkdGggPSBvYmoudGV4dHVyZS53aWR0aDtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBvYmoudGV4dHVyZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgLy8gQXR0YWNoIHRleHR1cmVzXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9BdHRhY2gocmVuZGVyZXIsIG9iai50ZXh0dXJlLCBhdHRhY2htZW50LCBvYmoudGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBpZiAoIWhhc1RleHR1cmVBdHRhY2hlZCAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdNdXN0IGF0dGFjaCB0ZXh0dXJlIGJlZm9yZSBiaW5kLCBvciByZW5kZXJidWZmZXIgbWF5IGhhdmUgaW5jb3JyZWN0IHdpZHRoIGFuZCBoZWlnaHQuJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZpZXdwb3J0KSB7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh0aGlzLnZpZXdwb3J0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIGF0dGFjaGVkVGV4dHVyZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb0RldGFjaChfZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQpICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZW5kZXIgYnVmZmVyXG4gICAgICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfUkVOREVSQlVGRkVSKSkge1xuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSLCBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJlbmRlcmJ1ZmZlciA9IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSKTtcblxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSClcbiAgICAgICAgICAgICAgICAgICAgfHwgaGVpZ2h0ICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQpKSB7XG4gICAgICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xuICAgICAgICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgX2dsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSCwgd2lkdGgpO1xuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCkpIHtcbiAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5iaW5kIHRoZSBmcmFtZSBidWZmZXIgYWZ0ZXIgcmVuZGVyaW5nXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICAvLyBSZW1vdmUgc3RhdHVzIHJlY29yZCBvbiByZW5kZXJlclxuICAgICAgICByZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9IG51bGw7XG5cbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIG51bGwpO1xuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMuX2NhY2hlLmdldCgndmlld3BvcnQnKTtcbiAgICAgICAgLy8gUmVzZXQgdmlld3BvcnQ7XG4gICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xuICAgIH0sXG5cbiAgICAvLyBCZWNhdXNlIHRoZSBkYXRhIG9mIHRleHR1cmUgaXMgY2hhbmdlZCBvdmVyIHRpbWUsXG4gICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XG4gICAgdXBkYXRlTWlwbWFwOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XG4gICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBvYmoudGV4dHVyZTtcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBzb21lIHRleHR1cmUgZm9ybWF0IGNhbid0IGdlbmVyYXRlIG1pcG1hcFxuICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS5OUE9UICYmIHRleHR1cmUudXNlTWlwbWFwXG4gICAgICAgICAgICAgICAgICAgICYmIHRleHR1cmUubWluRmlsdGVyID09PSBUZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0ZXh0dXJlLnRleHR1cmVUeXBlID09PSAndGV4dHVyZUN1YmUnID8gZ2xlbnVtLlRFWFRVUkVfQ1VCRV9NQVAgOiBnbGVudW0uVEVYVFVSRV8yRDtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZS5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cblxuICAgIC8vIDB4OENENSwgMzYwNTMsIEZSQU1FQlVGRkVSX0NPTVBMRVRFXG4gICAgLy8gMHg4Q0Q2LCAzNjA1NCwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXG4gICAgLy8gMHg4Q0Q3LCAzNjA1NSwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlRcbiAgICAvLyAweDhDRDksIDM2MDU3LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNcbiAgICAvLyAweDhDREQsIDM2MDYxLCBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFxuICAgIGNoZWNrU3RhdHVzOiBmdW5jdGlvbiAoX2dsKSB7XG4gICAgICAgIHJldHVybiBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUik7XG4gICAgfSxcblxuICAgIF9nZXRGcmFtZUJ1ZmZlckdMOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfRlJBTUVCVUZGRVIpKSB7XG4gICAgICAgICAgICBjYWNoZS5wdXQoS0VZX0ZSQU1FQlVGRkVSLCByZW5kZXJlci5nbC5jcmVhdGVGcmFtZWJ1ZmZlcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoS0VZX0ZSQU1FQlVGRkVSKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQXR0YWNoIGEgdGV4dHVyZShSVFQpIHRvIHRoZSBmcmFtZWJ1ZmZlclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW2F0dGFjaG1lbnQ9Z2wuQ09MT1JfQVRUQUNITUVOVDBdXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdGFyZ2V0PWdsLlRFWFRVUkVfMkRdXG4gICAgICovXG4gICAgYXR0YWNoOiBmdW5jdGlvbiAodGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XG5cbiAgICAgICAgaWYgKCF0ZXh0dXJlLndpZHRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0ZXh0dXJlIGF0dGFjaGVkIHRvIGNvbG9yIGJ1ZmZlciBpcyBub3QgYSB2YWxpZC4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIHdpZHRoIGFuZCBoZWlnaHQgY2hlY2tcblxuICAgICAgICAvLyBJZiB0aGUgZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgZGV2ZWxvcGVyc1xuICAgICAgICAvLyBDYW4gYXR0YWNoIGEgZGVwdGggdGV4dHVyZSB0byB0aGUgZGVwdGggYnVmZmVyXG4gICAgICAgIC8vIGh0dHA6Ly9ibG9nLnRvamljb2RlLmNvbS8yMDEyLzA3L3VzaW5nLXdlYmdsZGVwdGh0ZXh0dXJlLmh0bWxcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgR0xfQ09MT1JfQVRUQUNITUVOVDA7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcblxuICAgICAgICB2YXIgYm91bmRSZW5kZXJlciA9IHRoaXMuX2JvdW5kUmVuZGVyZXI7XG4gICAgICAgIHZhciBfZ2wgPSBib3VuZFJlbmRlcmVyICYmIGJvdW5kUmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzO1xuXG4gICAgICAgIGlmIChfZ2wpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgICAgICAgY2FjaGUudXNlKGJvdW5kUmVuZGVyZXIuX191aWRfXyk7XG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhdHRhY2hlZFxuICAgICAgICB2YXIgcHJldmlvdXMgPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLnRhcmdldCA9PT0gdGFyZ2V0XG4gICAgICAgICAgICAmJiBwcmV2aW91cy50ZXh0dXJlID09PSB0ZXh0dXJlXG4gICAgICAgICAgICAmJiAoYXR0YWNoZWRUZXh0dXJlcyAmJiBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdICE9IG51bGwpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XG4gICAgICAgIGlmIChib3VuZFJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjYW5BdHRhY2ggPSB0aGlzLl9kb0F0dGFjaChib3VuZFJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gU2V0IHZpZXdwb3J0IGFnYWluIGluY2FzZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgc2l6ZSB0ZXh0dXJlcy5cbiAgICAgICAgICAgIGlmICghdGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIGJvdW5kUmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0udGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9kb0F0dGFjaDogZnVuY3Rpb24gKHJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGV4dHVyZSBpcyBhbHdheXMgdXBkYXRlZFxuICAgICAgICAvLyBCZWNhdXNlIHRleHR1cmUgd2lkdGggb3IgaGVpZ2h0IG1heSBiZSBjaGFuZ2VkIGFuZCBpbiB0aGlzIHdlIGNhbid0IGJlIG5vdGlmaWVkXG4gICAgICAgIC8vIEZJWE1FIGF3a3dhcmQ7XG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSB0ZXh0dXJlLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcik7XG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF07XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGFuZCB0YXJnZXQgbm90IGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChvYmoudGV4dHVyZSA9PT0gdGV4dHVyZSAmJiBvYmoudGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xuXG4gICAgICAgIHZhciBjYW5BdHRhY2ggPSB0cnVlO1xuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XG4gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcblxuICAgICAgICAgICAgaWYgKCFleHRlbnNpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXB0aCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcbiAgICAgICAgICAgICAgICBjYW5BdHRhY2ggPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmZvcm1hdCAhPT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVFxuICAgICAgICAgICAgICAgICYmIHRleHR1cmUuZm9ybWF0ICE9PSBnbGVudW0uREVQVEhfU1RFTkNJTFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gZGVwdGggYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHJlbmRlciBidWZmZXIgY3JlYXRlZCBwcmV2aW91c1xuICAgICAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xuICAgICAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSB0aGlzLl9jYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVELCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1pcG1hcCBsZXZlbCBjYW4gb25seSBiZSAwXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCB3ZWJnbFRleHR1cmUsIDApO1xuXG4gICAgICAgIGlmICghYXR0YWNoZWRUZXh0dXJlcykge1xuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KCdhdHRhY2hlZF90ZXh0dXJlcycsIGF0dGFjaGVkVGV4dHVyZXMpO1xuICAgICAgICB9XG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRhcmdldCA9IHRhcmdldDtcblxuICAgICAgICByZXR1cm4gY2FuQXR0YWNoO1xuICAgIH0sXG5cbiAgICBfZG9EZXRhY2g6IGZ1bmN0aW9uIChfZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xuICAgICAgICAvLyBEZXRhY2ggYSB0ZXh0dXJlIGZyb20gZnJhbWVidWZmZXJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9XZWJHTC9ibG9iL21hc3Rlci9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjAvY29uZm9ybWFuY2UvZnJhbWVidWZmZXItdGVzdC5odG1sI0wxNDVcbiAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0YXJnZXQsIG51bGwsIDApO1xuXG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGFjaCBhIHRleHR1cmVcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFthdHRhY2htZW50PWdsLkNPTE9SX0FUVEFDSE1FTlQwXVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxuICAgICAqL1xuICAgIGRldGFjaDogZnVuY3Rpb24gKGF0dGFjaG1lbnQsIHRhcmdldCkge1xuICAgICAgICAvLyBUT0RPIGRlcHRoIGV4dGVuc2lvbiBjaGVjayA/XG4gICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX2JvdW5kUmVuZGVyZXIpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuICAgICAgICAgICAgY2FjaGUudXNlKHRoaXMuX2JvdW5kUmVuZGVyZXIuX191aWRfXyk7XG4gICAgICAgICAgICB0aGlzLl9kb0RldGFjaCh0aGlzLl9ib3VuZFJlbmRlcmVyLmdsLCBhdHRhY2htZW50LCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBEaXNwb3NlXG4gICAgICogQHBhcmFtICB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBfZ2xcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcblxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xuXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcblxuICAgICAgICB2YXIgcmVuZGVyQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xuICAgICAgICBpZiAocmVuZGVyQnVmZmVyKSB7XG4gICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlckJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZyYW1lQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9GUkFNRUJVRkZFUik7XG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xuICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lQnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xuXG4gICAgICAgIC8vIENsZWFyIGNhY2hlIGZvciByZXVzaW5nXG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XG5cbiAgICB9XG59KTtcblxuRnJhbWVCdWZmZXIuREVQVEhfQVRUQUNITUVOVCA9IEdMX0RFUFRIX0FUVEFDSE1FTlQ7XG5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMCA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xuRnJhbWVCdWZmZXIuU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLlNURU5DSUxfQVRUQUNITUVOVDtcbkZyYW1lQnVmZmVyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCA9IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ7XG5cbmV4cG9ydCBkZWZhdWx0IEZyYW1lQnVmZmVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuICAgIHZfVGV4Y29vcmQgPSB0ZXhjb29yZDtcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFwiO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBQbGFuZSBmcm9tICcuLi9nZW9tZXRyeS9QbGFuZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcbmltcG9ydCB2ZXJ0ZXhFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci92ZXJ0ZXguZ2xzbC5qcyc7XG5cblNoYWRlclsnaW1wb3J0J10odmVydGV4RXNzbCk7XG5cbnZhciBwbGFuZUdlbyA9IG5ldyBQbGFuZSgpO1xudmFyIG1lc2ggPSBuZXcgTWVzaCh7XG4gICAgZ2VvbWV0cnk6IHBsYW5lR2VvLFxuICAgIGZydXN0dW1DdWxsaW5nOiBmYWxzZVxufSk7XG52YXIgY2FtZXJhID0gbmV3IE9ydGhvQ2FtZXJhKCk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5QYXNzXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgUGFzcyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuUGFzcyMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogRnJhZ21lbnQgc2hhZGVyIHN0cmluZ1xuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgLy8gUEVORElORyBzaGFkZXIgb3IgZnJhZ21lbnQgP1xuICAgICAgICBmcmFnbWVudCA6ICcnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgb3V0cHV0cyA6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxuICAgICAgICAgKi9cbiAgICAgICAgbWF0ZXJpYWwgOiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBjbGVhckNvbG9yOiBmYWxzZSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICBjbGVhckRlcHRoOiB0cnVlXG4gICAgfTtcbn0sIGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpLCB0aGlzLmZyYWdtZW50KTtcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICBzaGFkZXI6IHNoYWRlclxuICAgIH0pO1xuICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmVzQWxsKCk7XG5cbiAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzLnByb3RvdHlwZSAqL1xue1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXG4gICAgICovXG4gICAgc2V0VW5pZm9ybSA6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcmV0dXJuIHt9XG4gICAgICovXG4gICAgZ2V0VW5pZm9ybSA6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgdmFyIHVuaWZvcm0gPSB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zW25hbWVdO1xuICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm0udmFsdWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYXR0YWNobWVudFxuICAgICAqL1xuICAgIGF0dGFjaE91dHB1dCA6IGZ1bmN0aW9uKHRleHR1cmUsIGF0dGFjaG1lbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcbiAgICAgICAgdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdID0gdGV4dHVyZTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxuICAgICAqL1xuICAgIGRldGFjaE91dHB1dCA6IGZ1bmN0aW9uKHRleHR1cmUpIHtcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPT09IHRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJpbmQgOiBmdW5jdGlvbihyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcblxuICAgICAgICBpZiAodGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHVuYmluZCA6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xuICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkZyYW1lQnVmZmVyfSBbZnJhbWVCdWZmZXJdXG4gICAgICovXG4gICAgcmVuZGVyIDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XG5cbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5iaW5kKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XG4gICAgICAgICAgICBpZiAoZXh0ICYmIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWZzLnB1c2goYXR0YWNobWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXh0LmRyYXdCdWZmZXJzRVhUKGJ1ZnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XG5cbiAgICAgICAgLy8gRklYTUUgRG9uJ3QgY2xlYXIgaW4gZWFjaCBwYXNzIGluIGRlZmF1bHQsIGxldCB0aGUgY29sb3Igb3ZlcndyaXRlIHRoZSBidWZmZXJcbiAgICAgICAgLy8gRklYTUUgcGl4ZWxzIG1heSBiZSBkaXNjYXJkXG4gICAgICAgIHZhciBjbGVhckJpdCA9IHRoaXMuY2xlYXJEZXB0aCA/IF9nbC5ERVBUSF9CVUZGRVJfQklUIDogMDtcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDb2xvcikge1xuICAgICAgICAgICAgY2xlYXJCaXQgPSBjbGVhckJpdCB8IF9nbC5DT0xPUl9CVUZGRVJfQklUO1xuICAgICAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHZhciBjYyA9IHRoaXMuY2xlYXJDb2xvcjtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNjKSkge1xuICAgICAgICAgICAgICAgIF9nbC5jbGVhckNvbG9yKGNjWzBdLCBjY1sxXSwgY2NbMl0sIGNjWzNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfZ2wuY2xlYXIoY2xlYXJCaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmJsZW5kV2l0aFByZXZpb3VzKSB7XG4gICAgICAgICAgICAvLyBCbGVuZCB3aXRoIHByZXZpb3VzIHJlbmRlcmVkIHNjZW5lIGluIHRoZSBmaW5hbCBvdXRwdXRcbiAgICAgICAgICAgIC8vIEZJWE1FIENvbmZpZ3VyZSBibGVuZC5cbiAgICAgICAgICAgIC8vIEZJWE1FIEl0IHdpbGwgY2F1c2Ugc2NyZWVuIGJsaW5r77yfXG4gICAgICAgICAgICBfZ2wuZW5hYmxlKF9nbC5CTEVORCk7XG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XG5cbiAgICAgICAgaWYgKGZyYW1lQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNpbXBseSBkbyBxdWFkIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlclF1YWQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICBtZXNoLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbbWVzaF0sIGNhbWVyYSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7fVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFBhc3M7XG4iLCIvLyBUT0RPIFNob3VsZCBub3QgZGVyaXZlZCBmcm9tIG1lc2g/XG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcbmltcG9ydCBDdWJlR2VvbWV0cnkgZnJvbSAnLi4vZ2VvbWV0cnkvQ3ViZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuXG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL3NreWJveC5nbHNsLmpzJztcblNoYWRlci5pbXBvcnQoc2t5Ym94RXNzbCk7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5Ta3lib3hcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgIHZhciBza3lUZXggPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSgpO1xuICogICAgIHNreVRleC5sb2FkKHtcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcbiAqICAgICAgICAgJ254JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnguanBnJ1xuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcbiAqICAgICAgICAgJ3B6JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHouanBnJ1xuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXG4gKiAgICAgfSk7XG4gKiAgICAgdmFyIHNreWJveCA9IG5ldyBjbGF5LnBsdWdpbi5Ta3lib3goe1xuICogICAgICAgICBzY2VuZTogc2NlbmVcbiAqICAgICB9KTtcbiAqICAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIHNreVRleCk7XG4gKi9cbnZhciBTa3lib3ggPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgc2t5Ym94U2hhZGVyID0gbmV3IFNoYWRlcih7XG4gICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC5mcmFnbWVudCcpXG4gICAgfSk7XG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgc2hhZGVyOiBza3lib3hTaGFkZXIsXG4gICAgICAgIGRlcHRoTWFzazogZmFsc2VcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWJveC5wcm90b3R5cGVcbiAgICAgICAgICovXG4gICAgICAgIHNjZW5lOiBudWxsLFxuXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ3ViZUdlb21ldHJ5KCksXG5cbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxuXG4gICAgICAgIGVudmlyb25tZW50TWFwOiBudWxsLFxuXG4gICAgICAgIGN1bGxpbmc6IGZhbHNlXG4gICAgfTtcbn0sIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xuICAgIGlmIChzY2VuZSkge1xuICAgICAgICB0aGlzLmF0dGFjaFNjZW5lKHNjZW5lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnRNYXApIHtcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcbiAgICB9XG59LCAvKiogQGxlbmRzIGNsYXkucGx1Z2luLlNreWJveCMgKi8ge1xuICAgIC8qKlxuICAgICAqIEF0dGFjaCB0aGUgc2t5Ym94IHRvIHRoZSBzY2VuZVxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXG4gICAgICovXG4gICAgYXR0YWNoU2NlbmU6IGZ1bmN0aW9uIChzY2VuZSkge1xuICAgICAgICBpZiAodGhpcy5zY2VuZSkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xuICAgICAgICB9XG4gICAgICAgIHNjZW5lLnNreWJveCA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICBzY2VuZS5vbignYmVmb3JlcmVuZGVyJywgdGhpcy5fYmVmb3JlUmVuZGVyU2NlbmUsIHRoaXMpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGV0YWNoIGZyb20gc2NlbmVcbiAgICAgKi9cbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zY2VuZSkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5Ym94ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBza3lib3hcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLmRldGFjaFNjZW5lKCk7XG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTZXQgZW52aXJvbm1lbnQgbWFwXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmVDdWJlfSBlbnZNYXBcbiAgICAgKi9cbiAgICBzZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKGVudk1hcCkge1xuICAgICAgICB0aGlzLm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0IGVudmlyb25tZW50IG1hcFxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XG4gICAgICovXG4gICAgZ2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdlbnZpcm9ubWVudE1hcCcpO1xuICAgIH0sXG5cbiAgICBfYmVmb3JlUmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XG4gICAgICAgIHRoaXMucmVuZGVyU2t5Ym94KHJlbmRlcmVyLCBjYW1lcmEpO1xuICAgIH0sXG5cbiAgICByZW5kZXJTa3lib3g6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24uY29weShjYW1lcmEuZ2V0V29ybGRQb3NpdGlvbigpKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgLy8gRG9uJ3QgcmVtZW1iZXIgdG8gZGlzYWJsZSBibGVuZFxuICAgICAgICByZW5kZXJlci5nbC5kaXNhYmxlKHJlbmRlcmVyLmdsLkJMRU5EKTtcbiAgICAgICAgaWYgKHRoaXMubWF0ZXJpYWwuZ2V0KCdsb2QnKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0xPRCcpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3RoaXNdLCBjYW1lcmEpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTa3lib3g7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcblxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XG5cbi8qKlxuICogUGFzcyByZW5kZXJpbmcgc2NlbmUgdG8gYSBlbnZpcm9ubWVudCBjdWJlIG1hcFxuICpcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXBcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKiBAZXhhbXBsZVxuICogICAgIC8vIEV4YW1wbGUgb2YgY2FyIHJlZmxlY3Rpb25cbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoe1xuICogICAgICAgICB3aWR0aDogMjU2LFxuICogICAgICAgICBoZWlnaHQ6IDI1NlxuICogICAgIH0pO1xuICogICAgIHZhciBlbnZQYXNzID0gbmV3IGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCh7XG4gKiAgICAgICAgIHBvc2l0aW9uOiBjYXIucG9zaXRpb24sXG4gKiAgICAgICAgIHRleHR1cmU6IGVudk1hcFxuICogICAgIH0pO1xuICogICAgIHZhciBjYXJCb2R5ID0gY2FyLmdldENoaWxkQnlOYW1lKCdib2R5Jyk7XG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKCdlbnZpcm9ubWVudE1hcCcpO1xuICogICAgIGNhckJvZHkubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XG4gKiAgICAgLi4uXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xuICogICAgICAgICBlbnZQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUpO1xuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgfSk7XG4gKi9cbnZhciBFbnZpcm9ubWVudE1hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcbiAgICB2YXIgcmV0ID0gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBwb3NpdGlvblxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXG4gICAgICAgICAqL1xuICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBmYXIgcGxhbmVcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcbiAgICAgICAgICovXG4gICAgICAgIGZhcjogMTAwMCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENhbWVyYSBuZWFyIHBsYW5lXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXG4gICAgICAgICAqL1xuICAgICAgICBuZWFyOiAwLjEsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbnZpcm9ubWVudCBjdWJlIG1hcFxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcbiAgICAgICAgICovXG4gICAgICAgIHRleHR1cmU6IG51bGwsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZWQgaWYgeW91IHdhbid0IGhhdmUgc2hhZG93IGluIGVudmlyb25tZW50IG1hcFxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cbiAgICAgICAgICovXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXG4gICAgfTtcbiAgICB2YXIgY2FtZXJhcyA9IHJldC5fY2FtZXJhcyA9IHtcbiAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXG4gICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxuICAgICAgICBweTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHsgZm92OiA5MCB9KSxcbiAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXG4gICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxuICAgICAgICBuejogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHsgZm92OiA5MCB9KVxuICAgIH07XG4gICAgY2FtZXJhcy5weC5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xuICAgIGNhbWVyYXMubngubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcbiAgICBjYW1lcmFzLnB5Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XG4gICAgY2FtZXJhcy5ueS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xuICAgIGNhbWVyYXMucHoubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcbiAgICBjYW1lcmFzLm56Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG5cbiAgICAvLyBGSVhNRSBJbiB3aW5kb3dzLCB1c2Ugb25lIGZyYW1lYnVmZmVyIG9ubHkgcmVuZGVycyBvbmUgc2lkZSBvZiBjdWJlbWFwXG4gICAgcmV0Ll9mcmFtZUJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xuXG4gICAgcmV0dXJuIHJldDtcbn0sICAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdGFyZ2V0XG4gICAgICogQHJldHVybiAge2NsYXkuQ2FtZXJhfVxuICAgICAqL1xuICAgIGdldENhbWVyYTogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhc1t0YXJnZXRdO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cbiAgICAgKi9cbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgbm90VXBkYXRlU2NlbmUpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUd2VhayBmb3ZcbiAgICAgICAgLy8gaHR0cDovL3RoZS13aXRuZXNzLm5ldC9uZXdzLzIwMTIvMDIvc2VhbWxlc3MtY3ViZS1tYXAtZmlsdGVyaW5nL1xuICAgICAgICB2YXIgbiA9IHRoaXMudGV4dHVyZS53aWR0aDtcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9jYW1lcmFzW3RhcmdldF07XG4gICAgICAgICAgICBWZWN0b3IzLmNvcHkoY2FtZXJhLnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcblxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xuICAgICAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XG4gICAgICAgICAgICBjYW1lcmEuZm92ID0gZm92O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFkb3dNYXBQYXNzKSB7XG4gICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGJvdW5kaW5nQm94TGFzdEZyYW1lXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgICAgIGJib3guYXBwbHlUcmFuc2Zvcm0oY2FtZXJhLnZpZXdNYXRyaXgpO1xuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5jb3B5KGJib3gpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2goXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsXG4gICAgICAgICAgICAgICAgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEVudmlyb25tZW50TWFwUGFzcztcbiIsImltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xuaW1wb3J0IFNwaGVyZUdlb21ldHJ5IGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuXG5pbXBvcnQgYmFzaWNFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvYmFzaWMuZ2xzbC5qcyc7XG5TaGFkZXIuaW1wb3J0KGJhc2ljRXNzbCk7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5Ta3lkb21lXG4gKlxuICogQGV4YW1wbGVcbiAqICAgICB2YXIgc2t5VGV4ID0gbmV3IGNsYXkuVGV4dHVyZTJEKCk7XG4gKiAgICAgc2t5VGV4LmxvYWQoJ2Fzc2V0cy90ZXh0dXJlcy9za3kuanBnJyk7XG4gKiAgICAgdmFyIHNreWRvbWUgPSBuZXcgY2xheS5wbHVnaW4uU2t5ZG9tZSh7XG4gKiAgICAgICAgIHNjZW5lOiBzY2VuZVxuICogICAgIH0pO1xuICogICAgIHNreWRvbWUubWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgc2t5VGV4KTtcbiAqL1xudmFyIFNreWRvbWUgPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XG5cbiAgICB2YXIgc2t5ZG9tZVNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy5mcmFnbWVudCcpKTtcblxuICAgIHZhciBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgIHNoYWRlcjogc2t5ZG9tZVNoYWRlcixcbiAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxuICAgIH0pO1xuICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ2RpZmZ1c2VNYXAnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWRvbWUjXG4gICAgICAgICAqL1xuICAgICAgICBzY2VuZTogbnVsbCxcblxuICAgICAgICBnZW9tZXRyeTogbmV3IFNwaGVyZUdlb21ldHJ5KHtcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDMwLFxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IDMwLFxuICAgICAgICAgICAgLy8gdGhldGFMZW5ndGg6IE1hdGguUEkgLyAyXG4gICAgICAgIH0pLFxuXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcblxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcblxuICAgICAgICBjdWxsaW5nOiBmYWxzZVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcbiAgICBpZiAoc2NlbmUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hTY2VuZShzY2VuZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnRNYXApIHtcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcbiAgICB9XG59LCB7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIHRoZSBza3lib3ggdG8gdGhlIHNjZW5lXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wbHVnaW4uU2t5ZG9tZS5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBhdHRhY2hTY2VuZTogZnVuY3Rpb24gKHNjZW5lKSB7XG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaFNjZW5lKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2NlbmUuc2t5ZG9tZSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICBzY2VuZS5vbignYmVmb3JlcmVuZGVyJywgdGhpcy5fYmVmb3JlUmVuZGVyU2NlbmUsIHRoaXMpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogRGV0YWNoIGZyb20gc2NlbmVcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wbHVnaW4uU2t5ZG9tZS5wcm90b3R5cGVcbiAgICAgKi9cbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zY2VuZSkge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5ZG9tZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XG4gICAgfSxcblxuICAgIF9iZWZvcmVSZW5kZXJTY2VuZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XG4gICAgICAgIHRoaXMucG9zaXRpb24uY29weShjYW1lcmEuZ2V0V29ybGRQb3NpdGlvbigpKTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpc10sIGNhbWVyYSk7XG4gICAgfSxcblxuICAgIHNldEVudmlyb25tZW50TWFwOiBmdW5jdGlvbiAoZW52TWFwKSB7XG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgZW52TWFwKTtcbiAgICB9LFxuXG4gICAgZ2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XG4gICAgfSxcblxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLmRldGFjaFNjZW5lKCk7XG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNreWRvbWU7XG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5cbi8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYmI5NDM5OTEodj12cy44NSkuYXNweFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rvamkvd2ViZ2wtdGV4dHVyZS11dGlscy9ibG9iL21hc3Rlci90ZXh0dXJlLXV0aWwvZGRzLmpzXG52YXIgRERTX01BR0lDID0gMHgyMDUzNDQ0NDtcblxudmFyIEREU0RfQ0FQUyA9IDB4MTtcbnZhciBERFNEX0hFSUdIVCA9IDB4MjtcbnZhciBERFNEX1dJRFRIID0gMHg0O1xudmFyIEREU0RfUElUQ0ggPSAweDg7XG52YXIgRERTRF9QSVhFTEZPUk1BVCA9IDB4MTAwMDtcbnZhciBERFNEX01JUE1BUENPVU5UID0gMHgyMDAwMDtcbnZhciBERFNEX0xJTkVBUlNJWkUgPSAweDgwMDAwO1xudmFyIEREU0RfREVQVEggPSAweDgwMDAwMDtcblxudmFyIEREU0NBUFNfQ09NUExFWCA9IDB4ODtcbnZhciBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwO1xudmFyIEREU0NBUFNfVEVYVFVSRSA9IDB4MTAwMDtcblxudmFyIEREU0NBUFMyX0NVQkVNQVAgPSAweDIwMDtcbnZhciBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWCA9IDB4NDAwO1xudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVYID0gMHg4MDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVkgPSAweDEwMDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVkgPSAweDIwMDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVogPSAweDQwMDA7XG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVogPSAweDgwMDA7XG52YXIgRERTQ0FQUzJfVk9MVU1FID0gMHgyMDAwMDA7XG5cbnZhciBERFBGX0FMUEhBUElYRUxTID0gMHgxO1xudmFyIEREUEZfQUxQSEEgPSAweDI7XG52YXIgRERQRl9GT1VSQ0MgPSAweDQ7XG52YXIgRERQRl9SR0IgPSAweDQwO1xudmFyIEREUEZfWVVWID0gMHgyMDA7XG52YXIgRERQRl9MVU1JTkFOQ0UgPSAweDIwMDAwO1xuXG5mdW5jdGlvbiBmb3VyQ0NUb0ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoMCkgK1xuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgxKSA8PCA4KSArXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDIpIDw8IDE2KSArXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDMpIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gaW50MzJUb0ZvdXJDQyh2YWx1ZSkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICB2YWx1ZSAmIDB4ZmYsXG4gICAgICAgICh2YWx1ZSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICh2YWx1ZSA+PiAxNikgJiAweGZmLFxuICAgICAgICAodmFsdWUgPj4gMjQpICYgMHhmZlxuICAgICk7XG59XG5cbnZhciBoZWFkZXJMZW5ndGhJbnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHNcblxudmFyIEZPVVJDQ19EWFQxID0gZm91ckNDVG9JbnQzMignRFhUMScpO1xudmFyIEZPVVJDQ19EWFQzID0gZm91ckNDVG9JbnQzMignRFhUMycpO1xudmFyIEZPVVJDQ19EWFQ1ID0gZm91ckNDVG9JbnQzMignRFhUNScpO1xuICAgIC8vIE9mZnNldHMgaW50byB0aGUgaGVhZGVyIGFycmF5XG52YXIgb2ZmX21hZ2ljID0gMDtcblxudmFyIG9mZl9zaXplID0gMTtcbnZhciBvZmZfZmxhZ3MgPSAyO1xudmFyIG9mZl9oZWlnaHQgPSAzO1xudmFyIG9mZl93aWR0aCA9IDQ7XG5cbnZhciBvZmZfbWlwbWFwQ291bnQgPSA3O1xuXG52YXIgb2ZmX3BmRmxhZ3MgPSAyMDtcbnZhciBvZmZfcGZGb3VyQ0MgPSAyMTtcblxudmFyIG9mZl9jYXBzID0gMjc7XG52YXIgb2ZmX2NhcHMyID0gMjg7XG52YXIgb2ZmX2NhcHMzID0gMjk7XG52YXIgb2ZmX2NhcHM0ID0gMzA7XG5cbnZhciByZXQgPSB7XG4gICAgcGFyc2U6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCBvdXQpIHtcbiAgICAgICAgdmFyIGhlYWRlciA9IG5ldyBJbnQzMkFycmF5KGFycmF5QnVmZmVyLCAwLCBoZWFkZXJMZW5ndGhJbnQpO1xuICAgICAgICBpZiAoaGVhZGVyW29mZl9tYWdpY10gIT09IEREU19NQUdJQykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoZWFkZXIob2ZmX3BmRmxhZ3MpICYgRERQRl9GT1VSQ0MpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvdXJDQyA9IGhlYWRlcihvZmZfcGZGb3VyQ0MpO1xuICAgICAgICB2YXIgd2lkdGggPSBoZWFkZXJbb2ZmX3dpZHRoXTtcbiAgICAgICAgdmFyIGhlaWdodCA9IGhlYWRlcltvZmZfaGVpZ2h0XTtcbiAgICAgICAgdmFyIGlzQ3ViZU1hcCA9IGhlYWRlcltvZmZfY2FwczJdICYgRERTQ0FQUzJfQ1VCRU1BUDtcbiAgICAgICAgdmFyIGhhc01pcG1hcCA9IGhlYWRlcltvZmZfZmxhZ3NdICYgRERTRF9NSVBNQVBDT1VOVDtcbiAgICAgICAgdmFyIGJsb2NrQnl0ZXMsIGludGVybmFsRm9ybWF0O1xuICAgICAgICBzd2l0Y2goZm91ckNDKSB7XG4gICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQxOlxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4O1xuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMzpcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUNTpcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YU9mZnNldCA9IGhlYWRlcltvZmZfc2l6ZV0gKyA0O1xuICAgICAgICAvLyBUT0RPOiBTdXBwb3NlIGFsbCBmYWNlIGFyZSBleGlzdGVkXG4gICAgICAgIHZhciBmYWNlTnVtYmVyID0gaXNDdWJlTWFwID8gNiA6IDE7XG4gICAgICAgIHZhciBtaXBtYXBDb3VudCA9IDE7XG4gICAgICAgIGlmIChoYXNNaXBtYXApIHtcbiAgICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3VudF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHR1cmVzID0gW107XG4gICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgZmFjZU51bWJlcjsgZisrKSB7XG4gICAgICAgICAgICB2YXIgX3dpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB2YXIgX2hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgIHRleHR1cmVzW2ZdID0gbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICAgICAgd2lkdGggOiBfd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0IDogX2hlaWdodCxcbiAgICAgICAgICAgICAgICBmb3JtYXQgOiBpbnRlcm5hbEZvcm1hdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbWlwbWFwcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBtYXBDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBNYXRoLm1heCg0LCBfd2lkdGgpIC8gNCAqIE1hdGgubWF4KDQsIF9oZWlnaHQpIC8gNCAqIGJsb2NrQnl0ZXM7XG4gICAgICAgICAgICAgICAgdmFyIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICBfd2lkdGggKj0gMC41O1xuICAgICAgICAgICAgICAgIF9oZWlnaHQgKj0gMC41O1xuICAgICAgICAgICAgICAgIG1pcG1hcHNbaV0gPSBieXRlQXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0dXJlc1tmXS5waXhlbHMgPSBtaXBtYXBzWzBdO1xuICAgICAgICAgICAgaWYgKGhhc01pcG1hcCkge1xuICAgICAgICAgICAgICAgIHRleHR1cmVzW2ZdLm1pcG1hcHMgPSBtaXBtYXBzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gcmV0dXJuIGlzQ3ViZU1hcCA/IHRleHR1cmVzIDogdGV4dHVyZXNbMF07XG4gICAgICAgIGlmIChvdXQpIHtcbiAgICAgICAgICAgIG91dC53aWR0aCA9IHRleHR1cmVzWzBdLndpZHRoO1xuICAgICAgICAgICAgb3V0LmhlaWdodCA9IHRleHR1cmVzWzBdLmhlaWdodDtcbiAgICAgICAgICAgIG91dC5mb3JtYXQgPSB0ZXh0dXJlc1swXS5mb3JtYXQ7XG4gICAgICAgICAgICBvdXQucGl4ZWxzID0gdGV4dHVyZXNbMF0ucGl4ZWxzO1xuICAgICAgICAgICAgb3V0Lm1pcG1hcHMgPSB0ZXh0dXJlc1swXS5taXBtYXBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVzWzBdO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmV0O1xuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XG52YXIgdG9DaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxudmFyIE1JTkVMRU4gPSA4O1xudmFyIE1BWEVMRU4gPSAweDdmZmY7XG5mdW5jdGlvbiByZ2JlMmZsb2F0KHJnYmUsIGJ1ZmZlciwgb2Zmc2V0LCBleHBvc3VyZSkge1xuICAgIGlmIChyZ2JlWzNdID4gMCkge1xuICAgICAgICB2YXIgZiA9IE1hdGgucG93KDIuMCwgcmdiZVszXSAtIDEyOCAtIDggKyBleHBvc3VyZSk7XG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAwXSA9IHJnYmVbMF0gKiBmO1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSByZ2JlWzFdICogZjtcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gcmdiZVsyXSAqIGY7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSAwO1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSAwO1xuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSAwO1xuICAgIH1cbiAgICBidWZmZXJbb2Zmc2V0ICsgM10gPSAxLjA7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gdWludDgyc3RyaW5nKGFycmF5LCBvZmZzZXQsIHNpemUpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICBzdHIgKz0gdG9DaGFyKGFycmF5W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gY29weXJnYmUocywgdCkge1xuICAgIHRbMF0gPSBzWzBdO1xuICAgIHRbMV0gPSBzWzFdO1xuICAgIHRbMl0gPSBzWzJdO1xuICAgIHRbM10gPSBzWzNdO1xufVxuXG4vLyBUT0RPIDogY2hlY2tcbmZ1bmN0aW9uIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcbiAgICB2YXIgcnNoaWZ0ID0gMCwgeCA9IDAsIGxlbiA9IHhtYXg7XG4gICAgd2hpbGUgKGxlbiA+IDApIHtcbiAgICAgICAgc2Nhblt4XVswXSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgIHNjYW5beF1bMV0gPSBidWZmZXJbb2Zmc2V0KytdO1xuICAgICAgICBzY2FuW3hdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcbiAgICAgICAgc2Nhblt4XVszXSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgIGlmIChzY2FuW3hdWzBdID09PSAxICYmIHNjYW5beF1bMV0gPT09IDEgJiYgc2Nhblt4XVsyXSA9PT0gMSkge1xuICAgICAgICAgICAgLy8gZXhwIGlzIGNvdW50IG9mIHJlcGVhdGVkIHBpeGVsc1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IChzY2FuW3hdWzNdIDw8IHJzaGlmdCkgPj4+IDA7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb3B5cmdiZShzY2FuW3gtMV0sIHNjYW5beF0pO1xuICAgICAgICAgICAgICAgIHgrKztcbiAgICAgICAgICAgICAgICBsZW4tLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJzaGlmdCArPSA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeCsrO1xuICAgICAgICAgICAgbGVuLS07XG4gICAgICAgICAgICByc2hpZnQgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcbiAgICBpZiAoKHhtYXggPCBNSU5FTEVOKSB8ICh4bWF4ID4gTUFYRUxFTikpIHtcbiAgICAgICAgcmV0dXJuIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpO1xuICAgIH1cbiAgICB2YXIgaSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgaWYgKGkgIT0gMikge1xuICAgICAgICByZXR1cm4gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCAtIDEsIHhtYXgpO1xuICAgIH1cbiAgICBzY2FuWzBdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcbiAgICBzY2FuWzBdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcblxuICAgIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xuICAgIGlmICgoKChzY2FuWzBdWzJdIDw8IDgpID4+PiAwKSB8IGkpID4+PiAwICE9PSB4bWF4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHhtYXg7KSB7XG4gICAgICAgICAgICB2YXIgY29kZSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgICAgICBpZiAoY29kZSA+IDEyOCkge1xuICAgICAgICAgICAgICAgIGNvZGUgPSAoY29kZSAmIDEyNykgPj4+IDA7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xuICAgICAgICAgICAgICAgICAgICBzY2FuW3grK11baV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29kZS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG59XG5cblxudmFyIHJldCA9IHtcbiAgICAvLyBodHRwOi8vd3d3LmdyYXBoaWNzLmNvcm5lbGwuZWR1L35iancvcmdiZS5odG1sXG4gICAgLy8gQmxlbmRlciBzb3VyY2VcbiAgICAvLyBodHRwOi8vcmFkc2l0ZS5sYmwuZ292L3JhZGlhbmNlL3JlZmVyL05vdGVzL3BpY3R1cmVfZm9ybWF0Lmh0bWxcbiAgICBwYXJzZVJHQkU6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCB0ZXh0dXJlLCBleHBvc3VyZSkge1xuICAgICAgICBpZiAoZXhwb3N1cmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgZXhwb3N1cmUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgICB2YXIgc2l6ZSA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBpZiAodWludDgyc3RyaW5nKGRhdGEsIDAsIDIpICE9PSAnIz8nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluZCBlbXB0eSBsaW5lLCBuZXh0IGxpbmUgaXMgcmVzb2x1dGlvbiBpbmZvXG4gICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodG9DaGFyKGRhdGFbaV0pID09PSAnXFxuJyAmJiB0b0NoYXIoZGF0YVtpKzFdKSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA+PSBzaXplKSB7IC8vIG5vdCBmb3VuZFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmQgcmVzb2x1dGlvbiBpbmZvIGxpbmVcbiAgICAgICAgaSArPSAyO1xuICAgICAgICB2YXIgc3RyID0gJyc7XG4gICAgICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgX2NoYXIgPSB0b0NoYXIoZGF0YVtpXSk7XG4gICAgICAgICAgICBpZiAoX2NoYXIgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gX2NoYXI7XG4gICAgICAgIH1cbiAgICAgICAgLy8gLVkgTSArWCBOXG4gICAgICAgIHZhciB0bXAgPSBzdHIuc3BsaXQoJyAnKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KHRtcFsxXSk7XG4gICAgICAgIHZhciB3aWR0aCA9IHBhcnNlSW50KHRtcFszXSk7XG4gICAgICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVhZCBhbmQgZGVjb2RlIGFjdHVhbCBkYXRhXG4gICAgICAgIHZhciBvZmZzZXQgPSBpKzE7XG4gICAgICAgIHZhciBzY2FubGluZSA9IFtdO1xuICAgICAgICAvLyBtZW16ZXJvXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgc2NhbmxpbmVbeF0gPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XG4gICAgICAgICAgICAgICAgc2NhbmxpbmVbeF1bal0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBwaXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7XG4gICAgICAgIHZhciBvZmZzZXQyID0gMDtcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRDb2xvcnMoc2NhbmxpbmUsIGRhdGEsIG9mZnNldCwgd2lkdGgpO1xuICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgIHJnYmUyZmxvYXQoc2NhbmxpbmVbeF0sIHBpeGVscywgb2Zmc2V0MiwgZXhwb3N1cmUpO1xuICAgICAgICAgICAgICAgIG9mZnNldDIgKz0gNDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0ZXh0dXJlLnBpeGVscyA9IHBpeGVscztcbiAgICAgICAgLy8gSEFMRl9GTE9BVCBjYW4ndCB1c2UgRmxvYXQzMkFycmF5XG4gICAgICAgIHRleHR1cmUudHlwZSA9IFRleHR1cmUuRkxPQVQ7XG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgIH0sXG5cbiAgICBwYXJzZVJHQkVGcm9tUE5HOiBmdW5jdGlvbihwbmcpIHtcblxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJldDtcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9jb3JlL3JlcXVlc3QnO1xuaW1wb3J0IEVudmlyb25tZW50TWFwUGFzcyBmcm9tICcuLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcbmltcG9ydCBTa3lkb21lIGZyb20gJy4uL3BsdWdpbi9Ta3lkb21lJztcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XG5cbmltcG9ydCBkZHMgZnJvbSAnLi9kZHMnO1xuaW1wb3J0IGhkciBmcm9tICcuL2hkcic7XG5cbi8qKlxuICogQGFsaWFzIGNsYXkudXRpbC50ZXh0dXJlXG4gKi9cbnZhciB0ZXh0dXJlVXRpbCA9IHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8b2JqZWN0fSBwYXRoXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25lcnJvcl1cbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmV9XG4gICAgICovXG4gICAgbG9hZFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xuICAgICAgICB2YXIgdGV4dHVyZTtcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XG4gICAgICAgICAgICBvbmVycm9yID0gb25zdWNjZXNzO1xuICAgICAgICAgICAgb3B0aW9uID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZihwYXRoKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChwYXRoLm1hdGNoKC8uaGRyJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2hkcicpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHNSR0I6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhkci5wYXJzZVJHQkUoZGF0YSwgdGV4dHVyZSwgb3B0aW9uLmV4cG9zdXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocGF0aC5tYXRjaCgvLmRkcyQvKSB8fCBvcHRpb24uZmlsZVR5cGUgPT09ICdkZHMnKSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkcy5wYXJzZShkYXRhLCB0ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKG9uc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YocGF0aCkgPT0gJ29iamVjdCcgJiYgdHlwZW9mKHBhdGgucHgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUoKTtcbiAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTG9hZCBhIHBhbm9yYW1hIHRleHR1cmUgYW5kIHJlbmRlciBpdCB0byBhIGN1YmUgbWFwXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGhcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb24uZW5jb2RlUkdCTV1cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtvcHRpb24uZXhwb3N1cmVdXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbnN1Y2Nlc3NdXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxuICAgICAqL1xuICAgIGxvYWRQYW5vcmFtYTogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYXRoLCBjdWJlTWFwLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XG4gICAgICAgICAgICBvbmVycm9yID0gb25zdWNjZXNzO1xuICAgICAgICAgICAgb3B0aW9uID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZShwYXRoLCBvcHRpb24sIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XG4gICAgICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgICAgICB0ZXh0dXJlLmZsaXBZID0gb3B0aW9uLmZsaXBZIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2VsZi5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgdGV4dHVyZSwgY3ViZU1hcCwgb3B0aW9uKTtcbiAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKGN1YmVNYXApO1xuICAgICAgICB9LCBvbmVycm9yKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVuZGVyIGEgcGFub3JhbWEgdGV4dHVyZSB0byBhIGN1YmUgbWFwXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gcGFub3JhbWFNYXBcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25cbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9uLmVuY29kZVJHQk1dXG4gICAgICovXG4gICAgcGFub3JhbWFUb0N1YmVNYXA6IGZ1bmN0aW9uIChyZW5kZXJlciwgcGFub3JhbWFNYXAsIGN1YmVNYXAsIG9wdGlvbikge1xuICAgICAgICB2YXIgZW52aXJvbm1lbnRNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcygpO1xuICAgICAgICB2YXIgc2t5ZG9tZSA9IG5ldyBTa3lkb21lKHtcbiAgICAgICAgICAgIHNjZW5lOiBuZXcgU2NlbmUoKVxuICAgICAgICB9KTtcbiAgICAgICAgc2t5ZG9tZS5tYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCBwYW5vcmFtYU1hcCk7XG5cbiAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xuICAgICAgICBpZiAob3B0aW9uLmVuY29kZVJHQk0pIHtcbiAgICAgICAgICAgIHNreWRvbWUubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0VOQ09ERScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2hhcmUgc1JHQlxuICAgICAgICBjdWJlTWFwLnNSR0IgPSBwYW5vcmFtYU1hcC5zUkdCO1xuXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gY3ViZU1hcDtcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2t5ZG9tZS5zY2VuZSk7XG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gbnVsbDtcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICByZXR1cm4gY3ViZU1hcDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcbiAgICAgKiBAcGFyYW0ge0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1lbnR9IGltYWdlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fVxuICAgICAqL1xuICAgIGhlaWdodFRvTm9ybWFsOiBmdW5jdGlvbiAoaW1hZ2UsIGNoZWNrQnVtcCkge1xuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIHZhciB3aWR0aCA9IGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY2hlY2tCdW1wID0gY2hlY2tCdW1wIHx8IGZhbHNlO1xuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHZhciBkc3REYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgIGlmIChjaGVja0J1bXApIHtcbiAgICAgICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcbiAgICAgICAgICAgICAgICB2YXIgZyA9IHNyY0RhdGEuZGF0YVtpICsgMV07XG4gICAgICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xuICAgICAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmID4gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHaXZlbiBpbWFnZSBpcyBub3QgYSBoZWlnaHQgbWFwJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNb2RpZmllZCBmcm9tIGh0dHA6Ly9tcmRvb2IuY29tL2xhYi9qYXZhc2NyaXB0L2hlaWdodDJub3JtYWwvXG4gICAgICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTI7XG4gICAgICAgICAgICBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gbGVmdCBlZGdlXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaV07XG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAod2lkdGggLSAxKSAqIDQpIHtcbiAgICAgICAgICAgICAgICAvLyByaWdodCBlZGdlXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2kgKyA0XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPCB3aWR0aCAqIDQpIHtcbiAgICAgICAgICAgICAgICAvLyB0b3AgZWRnZVxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2ldO1xuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaSA+IHdpZHRoICogKGhlaWdodCAtIDEpICogNCkge1xuICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBlZGdlXG4gICAgICAgICAgICAgICAgeTEgPSBzcmNEYXRhLmRhdGFbaSAtIHdpZHRoICogNF07XG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcbiAgICAgICAgICAgICAgICB5MiA9IHNyY0RhdGEuZGF0YVtpICsgd2lkdGggKiA0XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2ldID0gKHgxIC0geDIpICsgMTI3O1xuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2kgKyAxXSA9ICh5MSAtIHkyKSArIDEyNztcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMl0gPSAyNTU7XG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDNdID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoZHN0RGF0YSwgMCwgMCk7XG4gICAgICAgIHJldHVybiBjYW52YXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgaGVpZ2h0IG1hcCB0byBub3JtYWwgbWFwXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3RocmVzaG9sZD0yMF1cbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH1cbiAgICAgKi9cbiAgICBpc0hlaWdodEltYWdlOiBmdW5jdGlvbiAoaW1nLCBkb3duU2NhbGVTaXplLCB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpbWcgfHwgIWltZy53aWR0aCB8fCAhaW1nLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIHZhciBzaXplID0gZG93blNjYWxlU2l6ZSB8fCAzMjtcbiAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIHx8IDIwO1xuICAgICAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHNpemUsIHNpemUpO1xuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgc2l6ZSwgc2l6ZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjRGF0YS5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcbiAgICAgICAgICAgIHZhciBnID0gc3JjRGF0YS5kYXRhW2kgKyAxXTtcbiAgICAgICAgICAgIHZhciBiID0gc3JjRGF0YS5kYXRhW2kgKyAyXTtcbiAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xuICAgICAgICAgICAgaWYgKGRpZmYgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcblxuICAgIF9mZXRjaFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcbiAgICAgICAgcmVxdWVzdC5nZXQoe1xuICAgICAgICAgICAgdXJsOiBwYXRoLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxuICAgICAgICAgICAgb25sb2FkOiBvbnN1Y2Nlc3MsXG4gICAgICAgICAgICBvbmVycm9yOiBvbmVycm9yXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjaGVzc2JvYXJkIHRleHR1cmVcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtzaXplXVxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3VuaXRTaXplXVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gW2NvbG9yMV1cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjJdXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XG4gICAgICovXG4gICAgY3JlYXRlQ2hlc3Nib2FyZDogZnVuY3Rpb24gKHNpemUsIHVuaXRTaXplLCBjb2xvcjEsIGNvbG9yMikge1xuICAgICAgICBzaXplID0gc2l6ZSB8fCA1MTI7XG4gICAgICAgIHVuaXRTaXplID0gdW5pdFNpemUgfHwgNjQ7XG4gICAgICAgIGNvbG9yMSA9IGNvbG9yMSB8fCAnYmxhY2snO1xuICAgICAgICBjb2xvcjIgPSBjb2xvcjIgfHwgJ3doaXRlJztcblxuICAgICAgICB2YXIgcmVwZWF0ID0gTWF0aC5jZWlsKHNpemUgLyB1bml0U2l6ZSk7XG5cbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSBzaXplO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3IyO1xuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSk7XG5cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByZXBlYXQ7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBpc0ZpbGwgPSBqICUgMiA/IChpICUgMikgOiAoaSAlIDIgLSAxKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChpICogdW5pdFNpemUsIGogKiB1bml0U2l6ZSwgdW5pdFNpemUsIHVuaXRTaXplKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgaW1hZ2U6IGNhbnZhcyxcbiAgICAgICAgICAgIGFuaXNvdHJvcGljOiA4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBibGFuayBwdXJlIGNvbG9yIDF4MSB0ZXh0dXJlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBjb2xvclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxuICAgICAqL1xuICAgIGNyZWF0ZUJsYW5rOiBmdW5jdGlvbiAoY29sb3IpIHtcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXMud2lkdGggPSAxO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCAxLCAxKTtcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgaW1hZ2U6IGNhbnZhc1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0ZXh0dXJlVXRpbDtcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxEaXN0cmlidXRpb247XFxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZSA6IFs1MTIsIDI1Nl07XFxuY29uc3QgdmVjMyBOID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcXG5jb25zdCBmbG9hdCBmU2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxudmVjMyBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0IGksIGZsb2F0IHJvdWdobmVzcywgdmVjMyBOKSB7XFxuICAgIHZlYzMgSCA9IHRleHR1cmUyRChub3JtYWxEaXN0cmlidXRpb24sIHZlYzIocm91Z2huZXNzLCBpKSkucmdiO1xcbiAgICB2ZWMzIHVwVmVjdG9yID0gYWJzKE4ueikgPCAwLjk5OSA/IHZlYzMoMC4wLCAwLjAsIDEuMCkgOiB2ZWMzKDEuMCwgMC4wLCAwLjApO1xcbiAgICB2ZWMzIHRhbmdlbnRYID0gbm9ybWFsaXplKGNyb3NzKHVwVmVjdG9yLCBOKSk7XFxuICAgIHZlYzMgdGFuZ2VudFkgPSBjcm9zcyhOLCB0YW5nZW50WCk7XFxuICAgIHJldHVybiB0YW5nZW50WCAqIEgueCArIHRhbmdlbnRZICogSC55ICsgTiAqIEguejtcXG59XFxuZmxvYXQgR19TbWl0aChmbG9hdCByb3VnaG5lc3MsIGZsb2F0IE5vViwgZmxvYXQgTm9MKSB7XFxuICAgIGZsb2F0IGsgPSByb3VnaG5lc3MgKiByb3VnaG5lc3MgLyAyLjA7XFxuICAgIGZsb2F0IEcxViA9IE5vViAvIChOb1YgKiAoMS4wIC0gaykgKyBrKTtcXG4gICAgZmxvYXQgRzFMID0gTm9MIC8gKE5vTCAqICgxLjAgLSBrKSArIGspO1xcbiAgICByZXR1cm4gRzFMICogRzFWO1xcbn1cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB2aWV3cG9ydFNpemU7XFxuICAgIGZsb2F0IE5vViA9IHV2Lng7XFxuICAgIGZsb2F0IHJvdWdobmVzcyA9IHV2Lnk7XFxuICAgIHZlYzMgVjtcXG4gICAgVi54ID0gc3FydCgxLjAgLSBOb1YgKiBOb1YpO1xcbiAgICBWLnkgPSAwLjA7XFxuICAgIFYueiA9IE5vVjtcXG4gICAgZmxvYXQgQSA9IDAuMDtcXG4gICAgZmxvYXQgQiA9IDAuMDtcXG4gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gICAgICAgIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiAgICAgICAgdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuICAgICAgICBmbG9hdCBOb0wgPSBjbGFtcChMLnosIDAuMCwgMS4wKTtcXG4gICAgICAgIGZsb2F0IE5vSCA9IGNsYW1wKEgueiwgMC4wLCAxLjApO1xcbiAgICAgICAgZmxvYXQgVm9IID0gY2xhbXAoZG90KFYsIEgpLCAwLjAsIDEuMCk7XFxuICAgICAgICBpZiAoTm9MID4gMC4wKSB7XFxuICAgICAgICAgICAgZmxvYXQgRyA9IEdfU21pdGgocm91Z2huZXNzLCBOb1YsIE5vTCk7XFxuICAgICAgICAgICAgZmxvYXQgR19WaXMgPSBHICogVm9IIC8gKE5vSCAqIE5vVik7XFxuICAgICAgICAgICAgZmxvYXQgRmMgPSBwb3coMS4wIC0gVm9ILCA1LjApO1xcbiAgICAgICAgICAgIEEgKz0gKDEuMCAtIEZjKSAqIEdfVmlzO1xcbiAgICAgICAgICAgIEIgKz0gRmMgKiBHX1ZpcztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzIoQSwgQikgLyBmU2FtcGxlTnVtYmVyLCAwLjAsIDEuMCk7XFxufVxcblwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCIjZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsRGlzdHJpYnV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzIDogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuY29uc3QgZmxvYXQgZlNhbXBsZU51bWJlciA9IGZsb2F0KFNBTVBMRV9OVU1CRVIpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gICAgdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuICAgIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi56KSA8IDAuOTk5ID8gdmVjMygwLjAsIDAuMCwgMS4wKSA6IHZlYzMoMS4wLCAwLjAsIDAuMCk7XFxuICAgIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3ModXBWZWN0b3IsIE4pKTtcXG4gICAgdmVjMyB0YW5nZW50WSA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gICAgcmV0dXJuIHRhbmdlbnRYICogSC54ICsgdGFuZ2VudFkgKiBILnkgKyBOICogSC56O1xcbn1cXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUodl9Xb3JsZFBvc2l0aW9uIC0gZXllUG9zKTtcXG4gICAgdmVjMyBOID0gVjtcXG4gICAgdmVjMyBSID0gVjtcXG4gICAgdmVjMyBwcmVmaWx0ZXJlZENvbG9yID0gdmVjMygwLjApO1xcbiAgICBmbG9hdCB0b3RhbFdlaWdodCA9IDAuMDtcXG4gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gICAgICAgIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiAgICAgICAgdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuICAgICAgICBmbG9hdCBOb0wgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gICAgICAgIGlmIChOb0wgPiAwLjApIHtcXG4gICAgICAgICAgICBwcmVmaWx0ZXJlZENvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYiAqIE5vTDtcXG4gICAgICAgICAgICB0b3RhbFdlaWdodCArPSBOb0w7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQocHJlZmlsdGVyZWRDb2xvciAvIHRvdGFsV2VpZ2h0LCAxLjApKTtcXG59XFxuXCI7XG4iLCIvLyBDdWJlbWFwIHByZWZpbHRlciB1dGlsaXR5XG4vLyBodHRwOi8vd3d3LnVucmVhbGVuZ2luZS5jb20vZmlsZXMvZG93bmxvYWRzLzIwMTNTaWdncmFwaFByZXNlbnRhdGlvbnNOb3Rlcy5wZGZcbi8vIGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMzL2dwdWdlbXMzX2NoMjAuaHRtbFxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4uL1RleHR1cmVDdWJlJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5pbXBvcnQgdGV4dHVyZVV0aWwgZnJvbSAnLi90ZXh0dXJlJztcblxuaW1wb3J0IGludGVncmF0ZUJSREZTaGFkZXJDb2RlIGZyb20gJy4vc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyc7XG5pbXBvcnQgcHJlZmlsdGVyRnJhZ0NvZGUgZnJvbSAnLi9zaGFkZXIvcHJlZmlsdGVyLmdsc2wuanMnO1xuXG52YXIgY3ViZW1hcFV0aWwgPSB7fTtcblxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XG5cbi8qKlxuICogQG5hbWUgY2xheS51dGlsLmN1YmVtYXAucHJlZmlsdGVyRW52aXJvbm1lbnRNYXBcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IGVudk1hcFxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy53aWR0aD02NF1cbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLmhlaWdodD02NF1cbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLnR5cGVdXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZW5jb2RlUkdCTT1mYWxzZV1cbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNPWZhbHNlXVxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IFtub3JtYWxEaXN0cmlidXRpb25dXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gW2JyZGZMb29rdXBdXG4gKi9cbmN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKFxuICAgIHJlbmRlcmVyLCBlbnZNYXAsIHRleHR1cmVPcHRzLCBub3JtYWxEaXN0cmlidXRpb24sIGJyZGZMb29rdXBcbikge1xuICAgIC8vIE5vdCBjcmVhdGUgb3RoZXIgcmVuZGVyZXIsIGl0IGlzIGVhc3kgaGF2aW5nIGlzc3VlIG9mIGNyb3NzIHJlZmVyZW5jZSBvZiByZXNvdXJjZXMgbGlrZSBmcmFtZWJ1ZmZlclxuICAgIC8vIFBFTkRJTkcgcHJlc2VydmVEcmF3aW5nQnVmZmVyP1xuICAgIGlmICghYnJkZkxvb2t1cCB8fCAhbm9ybWFsRGlzdHJpYnV0aW9uKSB7XG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IGN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uKCk7XG4gICAgICAgIGJyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pO1xuICAgIH1cbiAgICB0ZXh0dXJlT3B0cyA9IHRleHR1cmVPcHRzIHx8IHt9O1xuXG4gICAgdmFyIHdpZHRoID0gdGV4dHVyZU9wdHMud2lkdGggfHwgNjQ7XG4gICAgdmFyIGhlaWdodCA9IHRleHR1cmVPcHRzLmhlaWdodCB8fCA2NDtcblxuICAgIHZhciB0ZXh0dXJlVHlwZSA9IHRleHR1cmVPcHRzLnR5cGUgfHwgZW52TWFwLnR5cGU7XG5cbiAgICAvLyBVc2Ugc2FtZSB0eXBlIHdpdGggZ2l2ZW4gZW52TWFwXG4gICAgdmFyIHByZWZpbHRlcmVkQ3ViZU1hcCA9IG5ldyBUZXh0dXJlQ3ViZSh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHR5cGU6IHRleHR1cmVUeXBlLFxuICAgICAgICBmbGlwWTogZmFsc2UsXG4gICAgICAgIG1pcG1hcHM6IFtdXG4gICAgfSk7XG5cbiAgICBpZiAoIXByZWZpbHRlcmVkQ3ViZU1hcC5pc1Bvd2VyT2ZUd28oKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1dpZHRoIGFuZCBoZWlnaHQgbXVzdCBiZSBwb3dlciBvZiB0d28gdG8gZW5hYmxlIG1pcG1hcC4nKTtcbiAgICB9XG5cbiAgICB2YXIgc2l6ZSA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhciBtaXBtYXBOdW0gPSBNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDIpICsgMTtcblxuICAgIHZhciBwcmVmaWx0ZXJNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XG4gICAgICAgICAgICB2ZXJ0ZXg6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLFxuICAgICAgICAgICAgZnJhZ21lbnQ6IHByZWZpbHRlckZyYWdDb2RlXG4gICAgICAgIH0pXG4gICAgfSk7XG4gICAgcHJlZmlsdGVyTWF0ZXJpYWwuc2V0KCdub3JtYWxEaXN0cmlidXRpb24nLCBub3JtYWxEaXN0cmlidXRpb24pO1xuXG4gICAgdGV4dHVyZU9wdHMuZW5jb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XG4gICAgdGV4dHVyZU9wdHMuZGVjb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fREVDT0RFJyk7XG5cbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xuICAgIHZhciBza3lFbnY7XG5cbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xuICAgICAgICAvLyBDb252ZXJ0IHBhbm9yYW1hIHRvIGN1YmVtYXBcbiAgICAgICAgdmFyIGVudkN1YmVtYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICAvLyBGSVhNRSBGTE9BVCB0eXBlIHdpbGwgY2F1c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIGVycm9yIG9uIGlPU1xuICAgICAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUgPT09IFRleHR1cmUuRkxPQVQgP1xuICAgICAgICAgICAgICAgICAgICBUZXh0dXJlLkhBTEZfRkxPQVQgOiB0ZXh0dXJlVHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgdGV4dHVyZVV0aWwucGFub3JhbWFUb0N1YmVNYXAocmVuZGVyZXIsIGVudk1hcCwgZW52Q3ViZW1hcCwge1xuICAgICAgICAgICAgLy8gUEVORElORyBlbmNvZGVSR0JNIHNvIGl0IGNhbiBiZSBkZWNvZGVkIGFzIFJHQk1cbiAgICAgICAgICAgIGVuY29kZVJHQk06IHRleHR1cmVPcHRzLmRlY29kZVJHQk1cbiAgICAgICAgfSk7XG4gICAgICAgIGVudk1hcCA9IGVudkN1YmVtYXA7XG4gICAgfVxuICAgIHNreUVudiA9IG5ldyBTa3lib3goe1xuICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcbiAgICAgICAgbWF0ZXJpYWw6IHByZWZpbHRlck1hdGVyaWFsXG4gICAgfSk7XG4gICAgc2t5RW52Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuXG4gICAgdmFyIGVudk1hcFBhc3MgPSBuZXcgRW52aXJvbm1lbnRNYXBQYXNzKHtcbiAgICAgICAgdGV4dHVyZTogcHJlZmlsdGVyZWRDdWJlTWFwXG4gICAgfSk7XG5cbiAgICAvLyBGb3JjZSB0byBiZSBVTlNJR05FRF9CWVRFXG4gICAgaWYgKHRleHR1cmVPcHRzLmVuY29kZVJHQk0pIHtcbiAgICAgICAgdGV4dHVyZVR5cGUgPSBwcmVmaWx0ZXJlZEN1YmVNYXAudHlwZSA9IFRleHR1cmUuVU5TSUdORURfQllURTtcbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyVGFyZ2V0VG1wID0gbmV3IFRleHR1cmUyRCh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgIHR5cGU6IHRleHR1cmVUeXBlXG4gICAgfSk7XG4gICAgdmFyIGZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcbiAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXG4gICAgfSk7XG4gICAgdmFyIEFycmF5Q3RvciA9IHZlbmRvclt0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5VTlNJR05FRF9CWVRFID8gJ1VpbnQ4QXJyYXknIDogJ0Zsb2F0MzJBcnJheSddO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlwbWFwTnVtOyBpKyspIHtcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0gPSB7XG4gICAgICAgICAgICBwaXhlbHM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIGkgLyAodGFyZ2V0cy5sZW5ndGggLSAxKSk7XG5cbiAgICAgICAgLy8gVHdlYWsgZm92XG4gICAgICAgIC8vIGh0dHA6Ly90aGUtd2l0bmVzcy5uZXQvbmV3cy8yMDEyLzAyL3NlYW1sZXNzLWN1YmUtbWFwLWZpbHRlcmluZy9cbiAgICAgICAgdmFyIG4gPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XG4gICAgICAgIHZhciBmb3YgPSAyICogTWF0aC5hdGFuKG4gLyAobiAtIDAuNSkpIC8gTWF0aC5QSSAqIDE4MDtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRhcmdldHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBwaXhlbHMgPSBuZXcgQXJyYXlDdG9yKHJlbmRlclRhcmdldFRtcC53aWR0aCAqIHJlbmRlclRhcmdldFRtcC5oZWlnaHQgKiA0KTtcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChyZW5kZXJUYXJnZXRUbXApO1xuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG5cbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2pdKTtcbiAgICAgICAgICAgIGNhbWVyYS5mb3YgPSBmb3Y7XG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXG4gICAgICAgICAgICAgICAgMCwgMCwgcmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIFRleHR1cmUuUkdCQSwgdGV4dHVyZVR5cGUsIHBpeGVsc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgLy8gdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgLy8gY2FudmFzLndpZHRoID0gcmVuZGVyVGFyZ2V0VG1wLndpZHRoO1xuICAgICAgICAgICAgLy8gY2FudmFzLmhlaWdodCA9IHJlbmRlclRhcmdldFRtcC5oZWlnaHQ7XG4gICAgICAgICAgICAvLyB2YXIgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShyZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQpO1xuICAgICAgICAgICAgLy8gZm9yICh2YXIgayA9IDA7IGsgPCBwaXhlbHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIC8vICAgICBpbWFnZURhdGEuZGF0YVtrXSA9IHBpeGVsc1trXTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgIC8vIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzKTtcblxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIHByZWZpbHRlcmVkQ3ViZU1hcC5taXBtYXBzW2ldLnBpeGVsc1t0YXJnZXRzW2pdXSA9IHBpeGVscztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclRhcmdldFRtcC53aWR0aCAvPSAyO1xuICAgICAgICByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0IC89IDI7XG4gICAgICAgIHJlbmRlclRhcmdldFRtcC5kaXJ0eSgpO1xuICAgIH1cblxuICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgIHJlbmRlclRhcmdldFRtcC5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICBza3lFbnYuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgLy8gUmVtb3ZlIGdwdSByZXNvdXJjZSBhbGx1Y2F0ZWQgaW4gcmVuZGVyZXJcbiAgICBub3JtYWxEaXN0cmlidXRpb24uZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICAvLyByZW5kZXJlci5kaXNwb3NlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBlbnZpcm9ubWVudE1hcDogcHJlZmlsdGVyZWRDdWJlTWFwLFxuICAgICAgICBicmRmTG9va3VwOiBicmRmTG9va3VwLFxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb246IG5vcm1hbERpc3RyaWJ1dGlvbixcbiAgICAgICAgbWF4TWlwbWFwTGV2ZWw6IG1pcG1hcE51bVxuICAgIH07XG59O1xuXG5jdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pIHtcbiAgICBub3JtYWxEaXN0cmlidXRpb24gPSBub3JtYWxEaXN0cmlidXRpb24gfHwgY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoe1xuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcbiAgICB9KTtcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcbiAgICAgICAgZnJhZ21lbnQ6IGludGVncmF0ZUJSREZTaGFkZXJDb2RlXG4gICAgfSk7XG5cbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICB3aWR0aDogNTEyLFxuICAgICAgICBoZWlnaHQ6IDI1NixcbiAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXG4gICAgICAgIHVzZU1pcG1hcDogZmFsc2VcbiAgICB9KTtcbiAgICBwYXNzLnNldFVuaWZvcm0oJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XG4gICAgcGFzcy5zZXRVbmlmb3JtKCd2aWV3cG9ydFNpemUnLCBbNTEyLCAyNTZdKTtcbiAgICBwYXNzLmF0dGFjaE91dHB1dCh0ZXh0dXJlKTtcbiAgICBwYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVidWZmZXIpO1xuXG4gICAgLy8gRklYTUUgT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggY2FuIHJlYWRQaXhlbHMgd2l0aCBmbG9hdCB0eXBlLlxuICAgIC8vIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgIC8vIHZhciBwaXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KDUxMiAqIDI1NiAqIDQpO1xuICAgIC8vIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXG4gICAgLy8gICAgIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LFxuICAgIC8vICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuRkxPQVQsIHBpeGVsc1xuICAgIC8vICk7XG4gICAgLy8gdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XG4gICAgLy8gdGV4dHVyZS5mbGlwWSA9IGZhbHNlO1xuICAgIC8vIHRleHR1cmUuZGlydHkoKTtcbiAgICAvLyBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICByZXR1cm4gdGV4dHVyZTtcbn07XG5cbmN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uID0gZnVuY3Rpb24gKHJvdWdobmVzc0xldmVscywgc2FtcGxlU2l6ZSkge1xuXG4gICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXG4gICAgLy8gR0xTTCBub3Qgc3VwcG9ydCBiaXQgb3BlcmF0aW9uLCB1c2UgbG9va3VwIGluc3RlYWRcbiAgICAvLyBWIC0+IGkgLyBOLCBVIC0+IHJvdWdobmVzc1xuICAgIHZhciByb3VnaG5lc3NMZXZlbHMgPSByb3VnaG5lc3NMZXZlbHMgfHwgMjU2O1xuICAgIHZhciBzYW1wbGVTaXplID0gc2FtcGxlU2l6ZSB8fCAxMDI0O1xuXG4gICAgdmFyIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICB3aWR0aDogcm91Z2huZXNzTGV2ZWxzLFxuICAgICAgICBoZWlnaHQ6IHNhbXBsZVNpemUsXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXG4gICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxuICAgIH0pO1xuICAgIHZhciBwaXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNhbXBsZVNpemUgKiByb3VnaG5lc3NMZXZlbHMgKiA0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xuICAgICAgICB2YXIgeCA9IGkgLyBzYW1wbGVTaXplO1xuICAgICAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL0JpdHdpc2VfT3BlcmF0b3JzXG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTkwODQ5Mi91bnNpZ25lZC1pbnRlZ2VyLWluLWphdmFzY3JpcHRcbiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODIyMzUwL3doYXQtaXMtdGhlLWphdmFzY3JpcHQtb3BlcmF0b3ItYW5kLWhvdy1kby15b3UtdXNlLWl0XG4gICAgICAgIHZhciB5ID0gKGkgPDwgMTYgfCBpID4+PiAxNikgPj4+IDA7XG4gICAgICAgIHkgPSAoKHkgJiAxNDMxNjU1NzY1KSA8PCAxIHwgKHkgJiAyODYzMzExNTMwKSA+Pj4gMSkgPj4+IDA7XG4gICAgICAgIHkgPSAoKHkgJiA4NTg5OTM0NTkpIDw8IDIgfCAoeSAmIDM0MzU5NzM4MzYpID4+PiAyKSA+Pj4gMDtcbiAgICAgICAgeSA9ICgoeSAmIDI1MjY0NTEzNSkgPDwgNCB8ICh5ICYgNDA0MjMyMjE2MCkgPj4+IDQpID4+PiAwO1xuICAgICAgICB5ID0gKCgoeSAmIDE2NzExOTM1KSA8PCA4IHwgKHkgJiA0Mjc4MjU1MzYwKSA+Pj4gOCkgPj4+IDApIC8gNDI5NDk2NzI5NjtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvdWdobmVzc0xldmVsczsgaisrKSB7XG4gICAgICAgICAgICB2YXIgcm91Z2huZXNzID0gaiAvIHJvdWdobmVzc0xldmVscztcbiAgICAgICAgICAgIHZhciBhID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICAgICAgICAgICAgdmFyIHBoaSA9IDIuMCAqIE1hdGguUEkgKiB4O1xuICAgICAgICAgICAgLy8gQ0RGXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSBNYXRoLnNxcnQoKDEgLSB5KSAvICgxICsgKGEgKiBhIC0gMS4wKSAqIHkpKTtcbiAgICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NUaGV0YSAqIGNvc1RoZXRhKTtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoaSAqIHJvdWdobmVzc0xldmVscyArIGopICogNDtcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXRdID0gc2luVGhldGEgKiBNYXRoLmNvcyhwaGkpO1xuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDFdID0gc2luVGhldGEgKiBNYXRoLnNpbihwaGkpO1xuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDJdID0gY29zVGhldGE7XG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgM10gPSAxLjA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLnBpeGVscyA9IHBpeGVscztcblxuICAgIHJldHVybiBub3JtYWxEaXN0cmlidXRpb247XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjdWJlbWFwVXRpbDtcbiIsIi8vIGh0dHBzOi8vZG9jcy51bnJlYWxlbmdpbmUuY29tL2xhdGVzdC9JTlQvRW5naW5lL1JlbmRlcmluZy9MaWdodGluZ0FuZFNoYWRvd3MvQW1iaWVudEN1YmVtYXAvXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IGN1YmVtYXBVdGlsIGZyb20gJy4uL3V0aWwvY3ViZW1hcCc7XG5cbi8qKlxuICogQW1iaWVudCBjdWJlbWFwIGxpZ2h0IHByb3ZpZGVzIHNwZWN1bGFyIHBhcnRzIG9mIEltYWdlIEJhc2VkIExpZ2h0aW5nLlxuICogV2hpY2ggaXMgYSBiYXNpYyByZXF1aXJlbWVudCBmb3IgUGh5c2ljYWxseSBCYXNlZCBSZW5kZXJpbmdcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XG4gKi9cbnZhciBBbWJpZW50Q3ViZW1hcExpZ2h0ID0gTGlnaHQuZXh0ZW5kKHtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwI1xuICAgICAqL1xuICAgIGN1YmVtYXA6IG51bGwsXG5cbiAgICAvLyBUT0RPXG4gICAgLy8gcmFuZ2U6IDEwMCxcblxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxuXG4gICAgX25vcm1hbERpc3RyaWJ1dGlvbjogbnVsbCxcbiAgICBfYnJkZkxvb2t1cDogbnVsbFxuXG59LCAvKiogQGxlbmRzIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXAjICovIHtcblxuICAgIHR5cGU6ICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnLFxuXG4gICAgLyoqXG4gICAgICogRG8gcHJlZml0ZXJpbmcgdGhlIGN1YmVtYXBcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTMyXVxuICAgICAqL1xuICAgIHByZWZpbHRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XG4gICAgICAgIGlmICghdGhpcy5fYnJkZkxvb2t1cCkge1xuICAgICAgICAgICAgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uID0gY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX2JyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdWJlbWFwID0gdGhpcy5jdWJlbWFwO1xuICAgICAgICBpZiAoY3ViZW1hcC5fX3ByZWZpbHRlcmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0ID0gY3ViZW1hcFV0aWwucHJlZmlsdGVyRW52aXJvbm1lbnRNYXAoXG4gICAgICAgICAgICByZW5kZXJlciwgY3ViZW1hcCwge1xuICAgICAgICAgICAgICAgIGVuY29kZVJHQk06IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplXG4gICAgICAgICAgICB9LCB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24sIHRoaXMuX2JyZGZMb29rdXBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jdWJlbWFwID0gcmVzdWx0LmVudmlyb25tZW50TWFwO1xuICAgICAgICB0aGlzLmN1YmVtYXAuX19wcmVmaWx0ZXJlZCA9IHRydWU7XG5cbiAgICAgICAgY3ViZW1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICB9LFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwOiB7XG4gICAgICAgICAgICB0eXBlOiAndCcsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmN1YmVtYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXA6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0JyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX2JyZGZMb29rdXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQG5hbWUgY2xvbmVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwLnByb3RvdHlwZVxuICAgICAqL1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRDdWJlbWFwTGlnaHQ7XG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XG5cbi8qKlxuICogU3BoZXJpY2FsIEhhcm1vbmljIEFtYmllbnQgTGlnaHRcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRTSFxuICogQGV4dGVuZHMgY2xheS5MaWdodFxuICovXG52YXIgQW1iaWVudFNITGlnaHQgPSBMaWdodC5leHRlbmQoe1xuXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBTcGhlcmljYWwgSGFybW9uaWMgQ29lZmZpY2llbnRzXG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRTSCNcbiAgICAgKi9cbiAgICBjb2VmZmljaWVudHM6IFtdLFxuXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fY29lZmZpY2llbnRzVG1wQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xufSwge1xuXG4gICAgdHlwZTogJ0FNQklFTlRfU0hfTElHSFQnLFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICBhbWJpZW50U0hMaWdodENvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50czoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzVG1wQXJyID0gaW5zdGFuY2UuX2NvZWZmaWNpZW50c1RtcEFycjtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluc3RhbmNlLmNvZWZmaWNpZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNUbXBBcnJbaV0gPSBpbnN0YW5jZS5jb2VmZmljaWVudHNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2VmZmljaWVudHNUbXBBcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQG5hbWUgY2xvbmVcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnR9XG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcbiAgICAgKi9cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBBbWJpZW50U0hMaWdodDtcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcblxudmFyIFRleHR1cmVQb29sID0gZnVuY3Rpb24gKCkge1xuXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xuXG4gICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcbn07XG5cblRleHR1cmVQb29sLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBUZXh0dXJlUG9vbCxcblxuICAgIGdldDogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpO1xuICAgICAgICBpZiAoIXRoaXMuX3Bvb2wuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9wb29sW2tleV07XG4gICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzLnB1c2godGV4dHVyZSk7XG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdC5wb3AoKTtcbiAgICB9LFxuXG4gICAgcHV0OiBmdW5jdGlvbiAodGV4dHVyZSkge1xuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkodGV4dHVyZSk7XG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9wb29sW2tleV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcbiAgICAgICAgbGlzdC5wdXNoKHRleHR1cmUpO1xuICAgIH0sXG5cbiAgICBjbGVhcjogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzW2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Bvb2wgPSB7fTtcbiAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcbiAgICB9XG59O1xuXG52YXIgZGVmYXVsdFBhcmFtcyA9IHtcbiAgICB3aWR0aDogNTEyLFxuICAgIGhlaWdodDogNTEyLFxuICAgIHR5cGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXG4gICAgd3JhcFM6IGdsZW51bS5DTEFNUF9UT19FREdFLFxuICAgIHdyYXBUOiBnbGVudW0uQ0xBTVBfVE9fRURHRSxcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxuICAgIGFuaXNvdHJvcGljOiAxLFxuICAgIGZsaXBZOiB0cnVlLFxuICAgIHVucGFja0FsaWdubWVudDogNCxcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZVxufTtcblxudmFyIGRlZmF1bHRQYXJhbVByb3BMaXN0ID0gT2JqZWN0LmtleXMoZGVmYXVsdFBhcmFtcyk7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpIHtcbiAgICB1dGlsLmRlZmF1bHRzV2l0aFByb3BMaXN0KHBhcmFtZXRlcnMsIGRlZmF1bHRQYXJhbXMsIGRlZmF1bHRQYXJhbVByb3BMaXN0KTtcbiAgICBmYWxsQmFjayhwYXJhbWV0ZXJzKTtcblxuICAgIHZhciBrZXkgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRQYXJhbVByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gZGVmYXVsdFBhcmFtUHJvcExpc3RbaV07XG4gICAgICAgIHZhciBjaHVuayA9IHBhcmFtZXRlcnNbbmFtZV0udG9TdHJpbmcoKTtcbiAgICAgICAga2V5ICs9IGNodW5rO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xufVxuXG5mdW5jdGlvbiBmYWxsQmFjayh0YXJnZXQpIHtcblxuICAgIHZhciBJUE9UID0gaXNQb3dlck9mVHdvKHRhcmdldC53aWR0aCwgdGFyZ2V0LmhlaWdodCk7XG5cbiAgICBpZiAodGFyZ2V0LmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xuICAgICAgICB0YXJnZXQudXNlTWlwbWFwID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFJUE9UIHx8ICF0YXJnZXQudXNlTWlwbWFwKSB7XG4gICAgICAgIGlmICh0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVIpIHtcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1RcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLkxJTkVBUjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIUlQT1QpIHtcbiAgICAgICAgdGFyZ2V0LndyYXBTID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XG4gICAgICAgIHRhcmdldC53cmFwVCA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNQb3dlck9mVHdvKHdpZHRoLCBoZWlnaHQpIHtcbiAgICByZXR1cm4gKHdpZHRoICYgKHdpZHRoLTEpKSA9PT0gMCAmJlxuICAgICAgICAgICAgKGhlaWdodCAmIChoZWlnaHQtMSkpID09PSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlUG9vbDtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNtLmRlcHRoLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbiNpZmRlZiBTSEFET1dfVFJBTlNQQVJFTlRcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XX1RSQU5TUEFSRU5UXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxudm9pZCBtYWluKCl7XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuICAgIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiAgICB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gICAgZ2xfUG9zaXRpb24gPSB2X1ZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XX1RSQU5TUEFSRU5UXFxuICAgIHZfVGV4Y29vcmQgPSB0ZXhjb29yZDtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZXB0aC5mcmFnbWVudFxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XX1RSQU5TUEFSRU5UXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBiaWFzIDogMC4wMDE7XFxudW5pZm9ybSBmbG9hdCBzbG9wZVNjYWxlIDogMS4wO1xcbiNpZmRlZiBTSEFET1dfVFJBTlNQQVJFTlRcXG51bmlmb3JtIHNhbXBsZXIyRCB0cmFuc3BhcmVudE1hcDtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gICAgZmxvYXQgZGVwdGggPSB2X1ZpZXdQb3NpdGlvbi56IC8gdl9WaWV3UG9zaXRpb24udztcXG4jaWZkZWYgVVNFX1ZTTVxcbiAgICBkZXB0aCA9IGRlcHRoICogMC41ICsgMC41O1xcbiAgICBmbG9hdCBtb21lbnQxID0gZGVwdGg7XFxuICAgIGZsb2F0IG1vbWVudDIgPSBkZXB0aCAqIGRlcHRoO1xcbiAgICBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiAgICBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiAgICBtb21lbnQyICs9IDAuMjUqKGR4KmR4K2R5KmR5KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChtb21lbnQxLCBtb21lbnQyLCAwLjAsIDEuMCk7XFxuI2Vsc2VcXG4gICAgZmxvYXQgZHggPSBkRmR4KGRlcHRoKTtcXG4gICAgZmxvYXQgZHkgPSBkRmR5KGRlcHRoKTtcXG4gICAgZGVwdGggKz0gc3FydChkeCpkeCArIGR5KmR5KSAqIHNsb3BlU2NhbGUgKyBiaWFzO1xcbiNpZmRlZiBTSEFET1dfVFJBTlNQQVJFTlRcXG4gICAgaWYgKHRleHR1cmUyRCh0cmFuc3BhcmVudE1hcCwgdl9UZXhjb29yZCkuYSA8PSAwLjEpIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KDAuOTk5OSk7XFxuICAgICAgICByZXR1cm47XFxuICAgIH1cXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZGVwdGggKiAwLjUgKyAwLjUpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRlYnVnX2RlcHRoXFxudW5pZm9ybSBzYW1wbGVyMkQgZGVwdGhNYXA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxudm9pZCBtYWluKCkge1xcbiAgICB2ZWM0IHRleCA9IHRleHR1cmUyRChkZXB0aE1hcCwgdl9UZXhjb29yZCk7XFxuI2lmZGVmIFVTRV9WU01cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXgucmdiLCAxLjApO1xcbiNlbHNlXFxuICAgIGZsb2F0IGRlcHRoID0gZGVjb2RlRmxvYXQodGV4KTtcXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChkZXB0aCwgZGVwdGgsIGRlcHRoLCAxLjApO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRpc3RhbmNlLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbiAoKXtcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uICwgMS4wKTtcXG4gICAgdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kaXN0YW5jZS5mcmFnbWVudFxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcmFuZ2UgOiAxMDA7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gICAgZmxvYXQgZGlzdCA9IGRpc3RhbmNlKGxpZ2h0UG9zaXRpb24sIHZfV29ybGRQb3NpdGlvbik7XFxuI2lmZGVmIFVTRV9WU01cXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChkaXN0LCBkaXN0ICogZGlzdCwgMC4wLCAwLjApO1xcbiNlbHNlXFxuICAgIGRpc3QgPSBkaXN0IC8gcmFuZ2U7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGRpc3QpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IHRhcFNoYWRvd01hcChzYW1wbGVyMkQgbWFwLCB2ZWMyIHV2LCBmbG9hdCB6KXtcXG4gICAgdmVjNCB0ZXggPSB0ZXh0dXJlMkQobWFwLCB1dik7XFxuICAgIHJldHVybiBzdGVwKHosIGRlY29kZUZsb2F0KHRleCkgKiAyLjAgLSAxLjApO1xcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUsIHZlYzIgc2NhbGUpIHtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYiA9IHRhcFNoYWRvd01hcChtYXAsIHV2LCB6KTtcXG4gICAgdmVjMiBvZmZzZXQgPSB2ZWMyKDEuMCAvIHRleHR1cmVTaXplKSAqIHNjYWxlO1xcbiNpZmRlZiBQQ0ZfS0VSTkVMX1NJWkVcXG4gICAgZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFBDRl9LRVJORUxfU0laRTsgX2lkeF8rKykge3tcXG4gICAgICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYgKyBvZmZzZXQgKiBwY2ZLZXJuZWxbX2lkeF9dLCB6KTtcXG4gICAgfX1cXG4gICAgcmV0dXJuIHNoYWRvd0NvbnRyaWIgLyBmbG9hdChQQ0ZfS0VSTkVMX1NJWkUgKyAxKTtcXG4jZWxzZVxcbiAgICBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIDAuMCksIHopO1xcbiAgICBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIG9mZnNldC55KSwgeik7XFxuICAgIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIDAuMCksIHopO1xcbiAgICBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gICAgc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gICAgc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKDAuMCwgLW9mZnNldC55KSwgeik7XFxuICAgIHJldHVybiBzaGFkb3dDb250cmliIC8gOS4wO1xcbiNlbmRpZlxcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gICAgcmV0dXJuIHBjZihtYXAsIHV2LCB6LCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTtcXG59XFxuZmxvYXQgY2hlYnlzaGV2VXBwZXJCb3VuZCh2ZWMyIG1vbWVudHMsIGZsb2F0IHope1xcbiAgICBmbG9hdCBwID0gMC4wO1xcbiAgICB6ID0geiAqIDAuNSArIDAuNTtcXG4gICAgaWYgKHogPD0gbW9tZW50cy54KSB7XFxuICAgICAgICBwID0gMS4wO1xcbiAgICB9XFxuICAgIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiAgICB2YXJpYW5jZSA9IG1heCh2YXJpYW5jZSwgMC4wMDAwMDAxKTtcXG4gICAgZmxvYXQgbUQgPSBtb21lbnRzLnggLSB6O1xcbiAgICBmbG9hdCBwTWF4ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBtRCAqIG1EKTtcXG4gICAgcE1heCA9IGNsYW1wKChwTWF4LTAuNCkvKDEuMC0wLjQpLCAwLjAsIDEuMCk7XFxuICAgIHJldHVybiBtYXgocCwgcE1heCk7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiAgICBzYW1wbGVyMkQgbWFwLCBtYXQ0IGxpZ2h0VlBNLCB2ZWMzIHBvc2l0aW9uLCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSwgdmVjMiBvZmZzZXRcXG4pIHtcXG4gICAgdmVjNCBwb3NJbkxpZ2h0U3BhY2UgPSBsaWdodFZQTSAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICAgIHBvc0luTGlnaHRTcGFjZS54eXogLz0gcG9zSW5MaWdodFNwYWNlLnc7XFxuICAgIGZsb2F0IHogPSBwb3NJbkxpZ2h0U3BhY2UuejtcXG4gICAgaWYoYWxsKGdyZWF0ZXJUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoLTAuOTksIC0wLjk5LCAtMS4wKSkpICYmXFxuICAgICAgICBhbGwobGVzc1RoYW4ocG9zSW5MaWdodFNwYWNlLnh5eiwgdmVjMygwLjk5LCAwLjk5LCAxLjApKSkpe1xcbiAgICAgICAgdmVjMiB1diA9IChwb3NJbkxpZ2h0U3BhY2UueHkrMS4wKSAvIDIuMDtcXG4gICAgICAgICNpZmRlZiBVU0VfVlNNXFxuICAgICAgICAgICAgdmVjMiBtb21lbnRzID0gdGV4dHVyZTJEKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCkueHk7XFxuICAgICAgICAgICAgcmV0dXJuIGNoZWJ5c2hldlVwcGVyQm91bmQobW9tZW50cywgeik7XFxuICAgICAgICAjZWxzZVxcbiAgICAgICAgICAgIHJldHVybiBwY2YobWFwLCB1diAqIHNjYWxlICsgb2Zmc2V0LCB6LCB0ZXh0dXJlU2l6ZSwgc2NhbGUpO1xcbiAgICAgICAgI2VuZGlmXFxuICAgIH1cXG4gICAgcmV0dXJuIDEuMDtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoc2FtcGxlcjJEIG1hcCwgbWF0NCBsaWdodFZQTSwgdmVjMyBwb3NpdGlvbiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gICAgcmV0dXJuIGNvbXB1dGVTaGFkb3dDb250cmliKG1hcCwgbGlnaHRWUE0sIHBvc2l0aW9uLCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApLCB2ZWMyKDAuMCkpO1xcbn1cXG5mbG9hdCBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoc2FtcGxlckN1YmUgbWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgcmFuZ2UpXFxue1xcbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKGRpcmVjdGlvbik7XFxuICAgIHZlYzQgc2hhZG93VGV4ID0gdGV4dHVyZUN1YmUobWFwLCBkaXJlY3Rpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuICAgIHZlYzIgbW9tZW50cyA9IHNoYWRvd1RleC54eTtcXG4gICAgZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuICAgIGZsb2F0IG1EID0gbW9tZW50cy54IC0gZGlzdDtcXG4gICAgZmxvYXQgcCA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgbUQgKiBtRCk7XFxuICAgIGlmKG1vbWVudHMueCArIDAuMDAxIDwgZGlzdCl7XFxuICAgICAgICByZXR1cm4gY2xhbXAocCwgMC4wLCAxLjApO1xcbiAgICB9ZWxzZXtcXG4gICAgICAgIHJldHVybiAxLjA7XFxuICAgIH1cXG4jZWxzZVxcbiAgICByZXR1cm4gc3RlcChkaXN0LCAoZGVjb2RlRmxvYXQoc2hhZG93VGV4KSArIDAuMDAwMikgKiByYW5nZSk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKSB8fCBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVCkgfHwgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuI2lmZGVmIFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxudW5pZm9ybSBzYW1wbGVyMkQgc3BvdExpZ2h0U2hhZG93TWFwc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IHNwb3RMaWdodE1hdHJpY2VzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNwb3RMaWdodFNoYWRvd01hcFNpemVzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxuI2lmIGRlZmluZWQoU0hBRE9XX0NBU0NBREUpXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxuI2Vsc2VcXG51bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG51bmlmb3JtIHNhbXBsZXJDdWJlIHBvaW50TGlnaHRTaGFkb3dNYXBzW1BPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxudW5pZm9ybSBib29sIHNoYWRvd0VuYWJsZWQgOiB0cnVlO1xcbiNpZmRlZiBQQ0ZfS0VSTkVMX1NJWkVcXG51bmlmb3JtIHZlYzIgcGNmS2VybmVsW1BDRl9LRVJORUxfU0laRV07XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mU3BvdExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tTUE9UX0xJR0hUX0NPVU5UXSApIHtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIHNwb3RMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbX2lkeF9dXFxuICAgICAgICApO1xcbiAgICAgICAgc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gICAgfX1cXG4gICAgZm9yKGludCBfaWR4XyA9IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFNQT1RfTElHSFRfQ09VTlQ7IF9pZHhfKyspe3tcXG4gICAgICAgIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gICAgfX1cXG59XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTSEFET1dfQ0FTQ0FERVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gICAgZmxvYXQgZGVwdGggPSAoMi4wICogZ2xfRnJhZ0Nvb3JkLnogLSBnbF9EZXB0aFJhbmdlLm5lYXIgLSBnbF9EZXB0aFJhbmdlLmZhcilcXG4gICAgICAgICAgICAgICAgICAgIC8gKGdsX0RlcHRoUmFuZ2UuZmFyIC0gZ2xfRGVwdGhSYW5nZS5uZWFyKTtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gICAgc2hhZG93Q29udHJpYnNbMF0gPSAxLjA7XFxuICAgIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTSEFET1dfQ0FTQ0FERTsgX2lkeF8rKykge3tcXG4gICAgICAgIGlmIChcXG4gICAgICAgICAgICBkZXB0aCA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiAgICAgICAgICAgIGRlcHRoIDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gICAgICAgICkge1xcbiAgICAgICAgICAgIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMF0sIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMF0sXFxuICAgICAgICAgICAgICAgIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiAgICAgICAgICAgICAgICB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgc2hhZG93Q29udHJpYnNbMF0gPSBzaGFkb3dDb250cmliO1xcbiAgICAgICAgfVxcbiAgICB9fVxcbiAgICBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiAgICAgICAgc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiAgICB9fVxcbn1cXG4jZWxzZVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gICAgZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gICAgZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiAgICAgICAgc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW19pZHhfXVxcbiAgICAgICAgKTtcXG4gICAgICAgIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IHNoYWRvd0NvbnRyaWI7XFxuICAgIH19XFxuICAgIGZvcihpbnQgX2lkeF8gPSBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuICAgIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1BPSU5UX0xJR0hUX0NPVU5UXSApe1xcbiAgICB2ZWMzIGxpZ2h0UG9zaXRpb247XFxuICAgIHZlYzMgZGlyZWN0aW9uO1xcbiAgICBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gICAgICAgIGRpcmVjdGlvbiA9IHBvc2l0aW9uIC0gbGlnaHRQb3NpdGlvbjtcXG4gICAgICAgIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IGNvbXB1dGVTaGFkb3dDb250cmliT21uaShwb2ludExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIGRpcmVjdGlvbiwgcG9pbnRMaWdodFJhbmdlW19pZHhfXSk7XFxuICAgIH19XFxuICAgIGZvcihpbnQgX2lkeF8gPSBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuICAgICAgICBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuICAgIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcIjtcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuLi9tYXRoL0ZydXN0dW0nO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBSZW5kZXJlciBmcm9tICcuLi9SZW5kZXJlcic7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4uL2xpZ2h0L1Nwb3QnO1xuaW1wb3J0IERpcmVjdGlvbmFsTGlnaHQgZnJvbSAnLi4vbGlnaHQvRGlyZWN0aW9uYWwnO1xuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi4vbGlnaHQvUG9pbnQnO1xuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi4vc2hhZGVyL2xpYnJhcnknO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcblxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcbmltcG9ydCBUZXh0dXJlUG9vbCBmcm9tICcuLi9jb21wb3NpdG9yL1RleHR1cmVQb29sJztcblxuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG5cbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xuXG5pbXBvcnQgc2hhZG93bWFwRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL3NoYWRvd21hcC5nbHNsLmpzJztcblNoYWRlclsnaW1wb3J0J10oc2hhZG93bWFwRXNzbCk7XG5cbi8qKlxuICogUGFzcyByZW5kZXJpbmcgc2hhZG93IG1hcC5cbiAqXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLlNoYWRvd01hcFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqIEBleGFtcGxlXG4gKiAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLlNoYWRvd01hcCh7XG4gKiAgICAgICAgIHNvZnRTaGFkb3c6IGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNXG4gKiAgICAgfSk7XG4gKiAgICAgLi4uXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcbiAqICAgICAgICAgc2hhZG93TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgfSk7XG4gKi9cbnZhciBTaGFkb3dNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNvZnQgc2hhZG93IHRlY2huaXF1ZS5cbiAgICAgICAgICogQ2FuIGJlIHtAbGluayBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRn0gb3Ige0BsaW5rIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNfVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc29mdFNoYWRvdzogU2hhZG93TWFwUGFzcy5QQ0YsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNvZnQgc2hhZG93IGJsdXIgc2l6ZVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc2hhZG93Qmx1cjogMS4wLFxuXG4gICAgICAgIGxpZ2h0RnJ1c3R1bUJpYXM6ICdhdXRvJyxcblxuICAgICAgICBrZXJuZWxQQ0Y6IG5ldyBGbG9hdDMyQXJyYXkoW1xuICAgICAgICAgICAgMSwgMCxcbiAgICAgICAgICAgIDEsIDEsXG4gICAgICAgICAgICAtMSwgMSxcbiAgICAgICAgICAgIDAsIDEsXG4gICAgICAgICAgICAtMSwgMCxcbiAgICAgICAgICAgIC0xLCAtMSxcbiAgICAgICAgICAgIDEsIC0xLFxuICAgICAgICAgICAgMCwgLTFcbiAgICAgICAgXSksXG5cbiAgICAgICAgcHJlY2lzaW9uOiAnbWVkaXVtcCcsXG5cbiAgICAgICAgX2xhc3RSZW5kZXJOb3RDYXN0U2hhZG93OiBmYWxzZSxcblxuICAgICAgICBfZnJhbWVCdWZmZXI6IG5ldyBGcmFtZUJ1ZmZlcigpLFxuXG4gICAgICAgIF90ZXh0dXJlczoge30sXG4gICAgICAgIF9zaGFkb3dNYXBOdW1iZXI6IHtcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXG4gICAgICAgICAgICAnRElSRUNUSU9OQUxfTElHSFQnOiAwLFxuICAgICAgICAgICAgJ1NQT1RfTElHSFQnOiAwXG4gICAgICAgIH0sXG5cbiAgICAgICAgX2RlcHRoTWF0ZXJpYWxzOiB7fSxcbiAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxzOiB7fSxcblxuICAgICAgICBfb3BhcXVlQ2FzdGVyczogW10sXG4gICAgICAgIF9yZWNlaXZlcnM6IFtdLFxuICAgICAgICBfbGlnaHRzQ2FzdFNoYWRvdzogW10sXG5cbiAgICAgICAgX2xpZ2h0Q2FtZXJhczoge30sXG4gICAgICAgIF9saWdodE1hdGVyaWFsczoge30sXG5cbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gR2F1c3NpYW4gZmlsdGVyIHBhc3MgZm9yIFZTTVxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc0ggPSBuZXcgUGFzcyh7XG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXG4gICAgfSk7XG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzViA9IG5ldyBQYXNzKHtcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyJylcbiAgICB9KTtcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJTaXplJywgdGhpcy5zaGFkb3dCbHVyKTtcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJEaXInLCAwLjApO1xuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1ckRpcicsIDEuMCk7XG5cbiAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MgPSBuZXcgUGFzcyh7XG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LnNtLmRlYnVnX2RlcHRoJylcbiAgICB9KTtcbn0sIHtcbiAgICAvKipcbiAgICAgKiBSZW5kZXIgc2NlbmUgdG8gc2hhZG93IHRleHR1cmVzXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSBzY2VuZUNhbWVyYVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xuICAgICAgICBpZiAoIXNjZW5lQ2FtZXJhKSB7XG4gICAgICAgICAgICBzY2VuZUNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xuICAgICAgICB0aGlzLl9yZW5kZXJTaGFkb3dQYXNzKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZWJ1ZyByZW5kZXJpbmcgb2Ygc2hhZG93IHRleHR1cmVzXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNpemVcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcbiAgICAgKi9cbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XG4gICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xuICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcbiAgICAgICAgdmFyIHggPSAwLCB5ID0gMDtcbiAgICAgICAgdmFyIHdpZHRoID0gc2l6ZSB8fCB2aWV3cG9ydC53aWR0aCAvIDQ7XG4gICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDtcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fdGV4dHVyZXNbbmFtZV07XG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5zZXRVbmlmb3JtKCdkZXB0aE1hcCcsIHRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLnJlbmRlcihyZW5kZXJlcik7XG4gICAgICAgICAgICB4ICs9IHdpZHRoICogdGV4dHVyZS53aWR0aCAvIHRleHR1cmUuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XG4gICAgfSxcblxuICAgIF91cGRhdGVDYXN0ZXJBbmRSZWNlaXZlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBtZXNoKSB7XG4gICAgICAgIGlmIChtZXNoLmNhc3RTaGFkb3cpIHtcbiAgICAgICAgICAgIHRoaXMuX29wYXF1ZUNhc3RlcnMucHVzaChtZXNoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzaC5yZWNlaXZlU2hhZG93KSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNlaXZlcnMucHVzaChtZXNoKTtcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMSk7XG5cbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdwY2ZLZXJuZWwnLCB0aGlzLmtlcm5lbFBDRik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtZXNoLm1hdGVyaWFsLnNoYWRlciAmJiBtZXNoLm1hdGVyaWFsLnVwZGF0ZVNoYWRlcikge1xuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51cGRhdGVTaGFkZXIocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUENGX0tFUk5FTF9TSVpFJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XG4gICAgICAgICAgICB2YXIga2VybmVsUENGID0gdGhpcy5rZXJuZWxQQ0Y7XG4gICAgICAgICAgICBpZiAoa2VybmVsUENGICYmIGtlcm5lbFBDRi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUENGX0tFUk5FTF9TSVpFJywga2VybmVsUENGLmxlbmd0aCAvIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUENGX0tFUk5FTF9TSVpFJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLm9wYXF1ZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNhc3RlckFuZFJlY2VpdmVyKHJlbmRlcmVyLCBzY2VuZS5vcGFxdWVMaXN0W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLnRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgLy8gVE9ETyBUcmFuc3BhcmVudCBvYmplY3QgcmVjZWl2ZSBzaGFkb3cgd2lsbCBiZSB2ZXJ5IHNsb3dcbiAgICAgICAgICAgIC8vIGluIHN0ZWFsdGggZGVtbywgc3RpbGwgbm90IGZpbmQgdGhlIHJlYXNvblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ2FzdGVyQW5kUmVjZWl2ZXIocmVuZGVyZXIsIHNjZW5lLnRyYW5zcGFyZW50TGlzdFtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcbiAgICAgICAgICAgIGlmIChsaWdodC5jYXN0U2hhZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5wdXNoKGxpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfcmVuZGVyU2hhZG93UGFzczogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKSB7XG4gICAgICAgIC8vIHJlc2V0XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbmFtZV0gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5fb3BhcXVlQ2FzdGVycy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoID0gMDtcblxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xuICAgICAgICAgICAgc2NlbmUudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjZW5lQ2FtZXJhKSB7XG4gICAgICAgICAgICBzY2VuZUNhbWVyYS51cGRhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZShyZW5kZXJlciwgc2NlbmUpO1xuXG4gICAgICAgIC8vIE5lZWRzIHRvIHVwZGF0ZSB0aGUgcmVjZWl2ZXJzIGFnYWluIGlmIHNoYWRvd3MgY29tZSBmcm9tIDEgdG8gMC5cbiAgICAgICAgaWYgKCF0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aCAmJiB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93ID09PSAwO1xuXG4gICAgICAgIF9nbC5lbmFibGUoX2dsLkRFUFRIX1RFU1QpO1xuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xuICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuQkxFTkQpO1xuXG4gICAgICAgIC8vIENsZWFyIHdpdGggaGlnaC16LCBzbyB0aGUgcGFydCBub3QgcmVuZGVyZWQgd2lsbCBub3QgYmVlbiBzaGFkb3dlZFxuICAgICAgICAvLyBUT0RPXG4gICAgICAgIC8vIFRPRE8gcmVzdG9yZVxuICAgICAgICBfZ2wuY2xlYXJDb2xvcigxLjAsIDEuMCwgMS4wLCAxLjApO1xuXG4gICAgICAgIC8vIFNoYWRvdyB1bmlmb3Jtc1xuICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwcyA9IFtdO1xuICAgICAgICB2YXIgc3BvdExpZ2h0TWF0cmljZXMgPSBbXTtcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0gW107XG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMgPSBbXTtcbiAgICAgICAgdmFyIHNoYWRvd0Nhc2NhZGVDbGlwcyA9IFtdO1xuICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvd01hcHMgPSBbXTtcblxuICAgICAgICB2YXIgZGlyTGlnaHRIYXNDYXNjYWRlO1xuICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIHNoYWRvdyBtYXBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbGlnaHQgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93W2ldO1xuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdESVJFQ1RJT05BTF9MSUdIVCcpIHtcblxuICAgICAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdPbmx5IG9uZSBkaXJlZWN0aW9uYWwgbGlnaHQgc3VwcG9ydGVkIHdpdGggc2hhZG93IGNhc2NhZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gNCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N1cHBvcnQgYXQgbW9zdCA0IGNhc2NhZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJMaWdodEhhc0Nhc2NhZGUgPSBsaWdodC5zaGFkb3dDYXNjYWRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYSxcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wYXF1ZUNhc3RlcnMsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcyxcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLFxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChsaWdodC50eXBlID09PSAnU1BPVF9MSUdIVCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BhcXVlQ2FzdGVycyxcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMsXG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BhcXVlQ2FzdGVycyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHQudHlwZV0rKztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGxpZ2h0VHlwZSBpbiB0aGlzLl9zaGFkb3dNYXBOdW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHRUeXBlXTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBsaWdodFR5cGUgKyAnX1NIQURPV01BUF9DT1VOVCc7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlY2VpdmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lc1trZXldICE9PSBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBrZXksIG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgZGlyTGlnaHRIYXNDYXNjYWRlLnNoYWRvd0Nhc2NhZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hhZG93VW5pZm9ybXMgPSBzY2VuZS5zaGFkb3dVbmlmb3JtcztcblxuICAgICAgICBmdW5jdGlvbiBnZXRTaXplKHRleHR1cmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplcyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzLm1hcChnZXRTaXplKTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplcywgdHlwZTogJzFmdicgfTtcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSBzaGFkb3dDYXNjYWRlQ2xpcHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzRmFyLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNOZWFyID0geyB2YWx1ZTogc2hhZG93Q2FzY2FkZUNsaXBzTmVhciwgdHlwZTogJzFmdicgfTtcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIsIHR5cGU6ICcxZnYnIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3BvdExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXMgPSBzcG90TGlnaHRTaGFkb3dNYXBzLm1hcChnZXRTaXplKTtcbiAgICAgICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnNwb3RMaWdodE1hdHJpY2VzID0geyB2YWx1ZTogc3BvdExpZ2h0TWF0cmljZXMsIHR5cGU6ICdtNHYnIH07XG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvaW50TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogcG9pbnRMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93OiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBzcGxpdEZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xuICAgICAgICB2YXIgc3BsaXRQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGNyb3BCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciBjcm9wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGxpZ2h0Vmlld01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIHZhciBsaWdodFZpZXdQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgdmFyIGxpZ2h0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBsaWdodCwgY2FzdGVycywgc2hhZG93Q2FzY2FkZUNsaXBzLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzKSB7XG5cbiAgICAgICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gRmlyc3QgZnJhbWVcbiAgICAgICAgICAgIGlmICghc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLmlzRmluaXRlKCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZVxuICAgICAgICAgICAgICAgICAgICAuY29weShib3VuZGluZ0JveCkuYXBwbHlUcmFuc2Zvcm0oc2NlbmVDYW1lcmEudmlld01hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb25zaWRlcmluZyBtb3Zpbmcgc3BlZWQgc2luY2UgdGhlIGJvdW5kaW5nIGJveCBpcyBmcm9tIGxhc3QgZnJhbWVcbiAgICAgICAgICAgIC8vIFRPRE86IGFkZCBhIGJpYXNcbiAgICAgICAgICAgIHZhciBjbGlwcGVkRmFyID0gTWF0aC5taW4oLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4ueiwgc2NlbmVDYW1lcmEuZmFyKTtcbiAgICAgICAgICAgIHZhciBjbGlwcGVkTmVhciA9IE1hdGgubWF4KC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnosIHNjZW5lQ2FtZXJhLm5lYXIpO1xuXG4gICAgICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xuXG4gICAgICAgICAgICB2YXIgbHZwTWF0NEFyciA9IGxpZ2h0Vmlld1Byb2pNYXRyaXguYXJyYXk7XG4gICAgICAgICAgICBsaWdodFByb2pNYXRyaXguY29weShsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsdnBNYXQ0QXJyLCBsaWdodFByb2pNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSk7XG5cbiAgICAgICAgICAgIHZhciBjbGlwUGxhbmVzID0gW107XG4gICAgICAgICAgICB2YXIgaXNQZXJzcGVjdGl2ZSA9IHNjZW5lQ2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmE7XG5cbiAgICAgICAgICAgIHZhciBzY2FsZVogPSAoc2NlbmVDYW1lcmEubmVhciArIHNjZW5lQ2FtZXJhLmZhcikgLyAoc2NlbmVDYW1lcmEubmVhciAtIHNjZW5lQ2FtZXJhLmZhcik7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0WiA9IDIgKiBzY2VuZUNhbWVyYS5uZWFyICogc2NlbmVDYW1lcmEuZmFyIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsb2cgPSBjbGlwcGVkTmVhciAqIE1hdGgucG93KGNsaXBwZWRGYXIgLyBjbGlwcGVkTmVhciwgaSAvIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xuICAgICAgICAgICAgICAgIHZhciBjdW5pID0gY2xpcHBlZE5lYXIgKyAoY2xpcHBlZEZhciAtIGNsaXBwZWROZWFyKSAqIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlO1xuICAgICAgICAgICAgICAgIHZhciBjID0gY2xvZyAqIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3RvciArIGN1bmkgKiAoMSAtIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3Rvcik7XG4gICAgICAgICAgICAgICAgY2xpcFBsYW5lcy5wdXNoKGMpO1xuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcy5wdXNoKC0oLWMgKiBzY2FsZVogKyBvZmZzZXRaKSAvIC1jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCwgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XG4gICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xuXG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcblxuICAgICAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGxpdHRlZCBmcnVzdHVtXG4gICAgICAgICAgICAgICAgdmFyIG5lYXJQbGFuZSA9IGNsaXBQbGFuZXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGZhclBsYW5lID0gY2xpcFBsYW5lc1tpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKGlzUGVyc3BlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZShzcGxpdFByb2pNYXRyaXguYXJyYXksIHNjZW5lQ2FtZXJhLmZvdiAvIDE4MCAqIE1hdGguUEksIHNjZW5lQ2FtZXJhLmFzcGVjdCwgbmVhclBsYW5lLCBmYXJQbGFuZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtYXQ0Lm9ydGhvKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9qTWF0cml4LmFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDYW1lcmEubGVmdCwgc2NlbmVDYW1lcmEucmlnaHQsIHNjZW5lQ2FtZXJhLmJvdHRvbSwgc2NlbmVDYW1lcmEudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVhclBsYW5lLCBmYXJQbGFuZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uc2V0RnJvbVByb2plY3Rpb24oc3BsaXRQcm9qTWF0cml4KTtcbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveChjcm9wQkJveCwgbGlnaHRWaWV3TWF0cml4KTtcbiAgICAgICAgICAgICAgICBjcm9wQkJveC5hcHBseVByb2plY3Rpb24obGlnaHRQcm9qTWF0cml4KTtcbiAgICAgICAgICAgICAgICB2YXIgX21pbiA9IGNyb3BCQm94Lm1pbi5hcnJheTtcbiAgICAgICAgICAgICAgICB2YXIgX21heCA9IGNyb3BCQm94Lm1heC5hcnJheTtcbiAgICAgICAgICAgICAgICBfbWluWzBdID0gTWF0aC5tYXgoX21pblswXSwgLTEpO1xuICAgICAgICAgICAgICAgIF9taW5bMV0gPSBNYXRoLm1heChfbWluWzFdLCAtMSk7XG4gICAgICAgICAgICAgICAgX21heFswXSA9IE1hdGgubWluKF9tYXhbMF0sIDEpO1xuICAgICAgICAgICAgICAgIF9tYXhbMV0gPSBNYXRoLm1pbihfbWF4WzFdLCAxKTtcbiAgICAgICAgICAgICAgICBjcm9wTWF0cml4Lm9ydGhvKF9taW5bMF0sIF9tYXhbMF0sIF9taW5bMV0sIF9tYXhbMV0sIDEsIC0xKTtcbiAgICAgICAgICAgICAgICBsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TGVmdChjcm9wTWF0cml4KTtcblxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dTaXplID0gbGlnaHQuc2hhZG93UmVzb2x1dGlvbiB8fCA1MTI7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlZCwgbGVmdCB0byByaWdodCA9PiBmYXIgdG8gbmVhclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KChsaWdodC5zaGFkb3dDYXNjYWRlIC0gaSAtIDEpICogc2hhZG93U2l6ZSwgMCwgc2hhZG93U2l6ZSwgc2hhZG93U2l6ZSwgMSk7XG5cbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGNhc3RlcnMsIGxpZ2h0Q2FtZXJhLCBwYXNzQ29uZmlnKTtcblxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciBmb3IgVlNNXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICAgICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpXG4gICAgICAgICAgICAgICAgICAgIC5tdWx0aXBseUxlZnQobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGxpZ2h0UHJvak1hdHJpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgcmVuZGVyU3BvdExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgY2FzdGVycywgc3BvdExpZ2h0TWF0cmljZXMsIHNwb3RMaWdodFNoYWRvd01hcHMpIHtcblxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dldFRleHR1cmUobGlnaHQpO1xuICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXRTcG90TGlnaHRDYW1lcmEobGlnaHQpO1xuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyZXIuY3VsbFJlbmRlckxpc3QoY2FzdGVycywgbnVsbCwgbGlnaHRDYW1lcmEpLCBsaWdodENhbWVyYSwgcGFzc0NvbmZpZyk7XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICAvLyBGaWx0ZXIgZm9yIFZTTVxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xuICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtKVxuICAgICAgICAgICAgLmludmVydCgpXG4gICAgICAgICAgICAubXVsdGlwbHlMZWZ0KGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcbiAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xuICAgIH0sXG5cbiAgICByZW5kZXJQb2ludExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgY2FzdGVycywgcG9pbnRMaWdodFNoYWRvd01hcHMpIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBwb2ludExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xuXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcbiAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fZ2V0UG9pbnRMaWdodENhbWVyYShsaWdodCwgdGFyZ2V0KTtcblxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGkpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyZXIuY3VsbFJlbmRlckxpc3QoY2FzdGVycywgbnVsbCwgY2FtZXJhKSwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XG4gICAgfSxcblxuICAgIF9nZXREZXB0aE1hdGVyaWFsOiBmdW5jdGlvbiAobGlnaHQpIHtcbiAgICAgICAgdmFyIHNoYWRvd01hdGVyaWFsID0gdGhpcy5fbGlnaHRNYXRlcmlhbHNbbGlnaHQuX191aWRfX107XG4gICAgICAgIHZhciBpc1BvaW50TGlnaHQgPSBsaWdodCBpbnN0YW5jZW9mIFBvaW50TGlnaHQ7XG4gICAgICAgIGlmICghc2hhZG93TWF0ZXJpYWwpIHtcbiAgICAgICAgICAgIHZhciBzaGFkZXJQcmVmaXggPSBpc1BvaW50TGlnaHQgPyAnY2xheS5zbS5kaXN0YW5jZS4nIDogJ2NsYXkuc20uZGVwdGguJztcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHRoaXMucHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICd2ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZShzaGFkZXJQcmVmaXggKyAnZnJhZ21lbnQnKSlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXSA9IHNoYWRvd01hdGVyaWFsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWdodC5zaGFkb3dTbG9wZVNjYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ3Nsb3BlU2NhbGUnLCBsaWdodC5zaGFkb3dTbG9wZVNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGlnaHQuc2hhZG93QmlhcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dCaWFzJywgbGlnaHQuc2hhZG93Qmlhcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldCgnbGlnaHRQb3NpdGlvbicsIGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oKS5hcnJheSk7XG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ3JhbmdlJywgbGlnaHQucmFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNoYWRvd01hdGVyaWFsO1xuICAgIH0sXG5cbiAgICBfZ2F1c3NpYW5GaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2l6ZSkge1xuICAgICAgICB2YXIgcGFyYW1ldGVyID0ge1xuICAgICAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemUsXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXG4gICAgICAgIH07XG4gICAgICAgIHZhciB0bXBUZXh0dXJlID0gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcik7XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRtcFRleHR1cmUpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0guc2V0VW5pZm9ybSgndGV4dHVyZVdpZHRoJywgc2l6ZSk7XG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0gucmVuZGVyKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSk7XG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZScsIHRtcFRleHR1cmUpO1xuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmVIZWlnaHQnLCBzaXplKTtcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5yZW5kZXIocmVuZGVyZXIpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgIHRoaXMuX3RleHR1cmVQb29sLnB1dCh0bXBUZXh0dXJlKTtcbiAgICB9LFxuXG4gICAgX2dldFRleHR1cmU6IGZ1bmN0aW9uIChsaWdodCwgY2FzY2FkZSkge1xuICAgICAgICB2YXIga2V5ID0gbGlnaHQuX191aWRfXztcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1trZXldO1xuICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gfHwgNTEyO1xuICAgICAgICBjYXNjYWRlID0gY2FzY2FkZSB8fCAxO1xuICAgICAgICBpZiAoIXRleHR1cmUpIHtcbiAgICAgICAgICAgIGlmIChsaWdodCBpbnN0YW5jZW9mIFBvaW50TGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXQgbW9zdCA0IGNhc2NhZGVcbiAgICAgICAgICAgIC8vIFRPRE8gc2hhcmUgd2l0aCBoZWlnaHQgP1xuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHJlc29sdXRpb24gKiBjYXNjYWRlO1xuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBUZXh0dXJlLkZMT0FUO1xuICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9waWMgPSA0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLm1hZ0ZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xuICAgICAgICAgICAgICAgIHRleHR1cmUudXNlTWlwbWFwID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1trZXldID0gdGV4dHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgIH0sXG5cbiAgICBfZ2V0UG9pbnRMaWdodENhbWVyYTogZnVuY3Rpb24gKGxpZ2h0LCB0YXJnZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMucG9pbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5wb2ludCA9IHtcbiAgICAgICAgICAgICAgICBweDogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCksXG4gICAgICAgICAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxuICAgICAgICAgICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcbiAgICAgICAgICAgICAgICBueTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCksXG4gICAgICAgICAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxuICAgICAgICAgICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50W3RhcmdldF07XG5cbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgICAgICAgICBjYXNlICdweCc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdueCc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdweSc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdueSc6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1ksIFZlY3RvcjMuTkVHQVRJVkVfWik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdweic6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdueic6XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGlnaHQuZ2V0V29ybGRQb3NpdGlvbihjYW1lcmEucG9zaXRpb24pO1xuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcbiAgICB9LFxuXG4gICAgX2dldERpcmVjdGlvbmFsTGlnaHRDYW1lcmE6IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICB2YXIgc2NlbmVWaWV3Qm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgdmFyIGxpZ2h0Vmlld0JCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcbiAgICAgICAgLy8gQ2FtZXJhIG9mIGRpcmVjdGlvbmFsIGxpZ2h0IHdpbGwgYmUgYWRqdXN0ZWRcbiAgICAgICAgLy8gdG8gY29udGFpbiB0aGUgdmlldyBmcnVzdHVtIGFuZCBzY2VuZSBib3VuZGluZyBib3ggYXMgdGlnaHRseSBhcyBwb3NzaWJsZVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsID0gbmV3IE9ydGhvQ2FtZXJhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsO1xuXG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5jb3B5KHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZSk7XG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5pbnRlcnNlY3Rpb24oc2NlbmVDYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCk7XG4gICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZnJ1c3R1bShpbiB3b3JsZCBzcGFjZSlcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvblxuICAgICAgICAgICAgICAgIC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94Lm1pbilcbiAgICAgICAgICAgICAgICAuYWRkKHNjZW5lVmlld0JvdW5kaW5nQm94Lm1heClcbiAgICAgICAgICAgICAgICAuc2NhbGUoMC41KVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5jb3B5KGxpZ2h0LnJvdGF0aW9uKTtcbiAgICAgICAgICAgIGNhbWVyYS5zY2FsZS5jb3B5KGxpZ2h0LnNjYWxlKTtcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xuXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdG8gbGlnaHQgdmlldyBzcGFjZVxuICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXgsIGxpZ2h0Vmlld01hdHJpeCwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICBsaWdodFZpZXdCQm94LmNvcHkoc2NlbmVWaWV3Qm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKGxpZ2h0Vmlld01hdHJpeCk7XG5cbiAgICAgICAgICAgIHZhciBtaW4gPSBsaWdodFZpZXdCQm94Lm1pbi5hcnJheTtcbiAgICAgICAgICAgIHZhciBtYXggPSBsaWdodFZpZXdCQm94Lm1heC5hcnJheTtcblxuICAgICAgICAgICAgLy8gTW92ZSBjYW1lcmEgdG8gYWRqdXN0IHRoZSBuZWFyIHRvIDBcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoKG1pblswXSArIG1heFswXSkgLyAyLCAobWluWzFdICsgbWF4WzFdKSAvIDIsIG1heFsyXSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgY2FtZXJhLm5lYXIgPSAwO1xuICAgICAgICAgICAgY2FtZXJhLmZhciA9IC1taW5bMl0gKyBtYXhbMl07XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcmVjZWl2ZXJzIG5vdCBpbiB0aGUgZnJ1c3R1bSB3aWxsIHN0aWwgcmVjZWl2ZSB0aGUgc2hhZG93LlxuICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMubGlnaHRGcnVzdHVtQmlhcykpIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICo9IDQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICs9IHRoaXMubGlnaHRGcnVzdHVtQmlhcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbWVyYS5sZWZ0ID0gbWluWzBdO1xuICAgICAgICAgICAgY2FtZXJhLnJpZ2h0ID0gbWF4WzBdO1xuICAgICAgICAgICAgY2FtZXJhLnRvcCA9IG1heFsxXTtcbiAgICAgICAgICAgIGNhbWVyYS5ib3R0b20gPSBtaW5bMV07XG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2FtZXJhO1xuICAgICAgICB9O1xuICAgIH0pKCksXG5cbiAgICBfZ2V0U3BvdExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMuc3BvdCkge1xuICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3QgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3Q7XG4gICAgICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgICAgIGNhbWVyYS5mb3YgPSBsaWdodC5wZW51bWJyYUFuZ2xlICogMjtcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xuICAgICAgICBjYW1lcmEud29ybGRUcmFuc2Zvcm0uY29weShsaWdodC53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG4gICAgICAgIG1hdDQuaW52ZXJ0KGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuXG4gICAgICAgIHJldHVybiBjYW1lcmE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ8V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBbcmVuZGVyZXJdXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXG4gICAgICovXG4gICAgLy8gUEVORElORyBSZW5kZXJlciBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsIHx8IHJlbmRlcmVyO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShfZ2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZShfZ2wpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIuZ2wpO1xuXG4gICAgICAgIHRoaXMuX2RlcHRoTWF0ZXJpYWxzID0ge307XG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlTWF0ZXJpYWxzID0ge307XG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XG4gICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcyA9IHt9O1xuICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXIgPSB7XG4gICAgICAgICAgICAnUE9JTlRfTElHSFQnOiAwLFxuICAgICAgICAgICAgJ0RJUkVDVElPTkFMX0xJR0hUJzogMCxcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzID0ge307XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xuICAgICAgICAgICAgLy8gTWVzaCBtYXkgYmUgZGlzcG9zZWRcbiAgICAgICAgICAgIGlmIChtZXNoLm1hdGVyaWFsICYmIG1lc2gubWF0ZXJpYWwuc2hhZGVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcbiAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xuICAgICAgICAgICAgICAgIHNoYWRlci51bmRlZmluZSgnZnJhZ21lbnQnLCAnUE9JTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XG4gICAgICAgICAgICAgICAgc2hhZGVyLnVuZGVmaW5lKCdmcmFnbWVudCcsICdESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcbiAgICAgICAgICAgICAgICBzaGFkZXIudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FNQklFTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcGFxdWVDYXN0ZXJzID0gW107XG4gICAgICAgIHRoaXMuX3JlY2VpdmVycyA9IFtdO1xuICAgICAgICB0aGlzLl9saWdodHNDYXN0U2hhZG93ID0gW107XG4gICAgfVxufSk7XG5cbi8qKlxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblNoYWRvd01hcFBhc3MuVlNNID0gMTtcblxuLyoqXG4gKiBAbmFtZSBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuU2hhZG93TWFwUGFzcy5QQ0YgPSAyO1xuXG5leHBvcnQgZGVmYXVsdCBTaGFkb3dNYXBQYXNzO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi4vUmVuZGVyYWJsZSc7XG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcbmltcG9ydCBnbG1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xuXG52YXIgdmVjMyA9IGdsbWF0cml4LnZlYzM7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgUmF5UGlja2luZyA9IEJhc2UuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5LnBpY2tpbmcuUmF5UGlja2luZyMgKi9cbntcbiAgICAvKipcbiAgICAgKiBUYXJnZXQgc2NlbmVcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgKi9cbiAgICBzY2VuZTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBUYXJnZXQgY2FtZXJhXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxuICAgICAqL1xuICAgIGNhbWVyYTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBUYXJnZXQgcmVuZGVyZXJcbiAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cbiAgICAgKi9cbiAgICByZW5kZXJlcjogbnVsbFxufSwgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3JheSA9IG5ldyBSYXkoKTtcbiAgICB0aGlzLl9uZGMgPSBuZXcgVmVjdG9yMigpO1xufSxcbi8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcucHJvdG90eXBlICovXG57XG5cbiAgICAvKipcbiAgICAgKiBQaWNrIHRoZSBuZWFyZXN0IGludGVyc2VjdGlvbiBvYmplY3QgaW4gdGhlIHNjZW5lXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB4IE1vdXNlIHBvc2l0aW9uIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXG4gICAgICogQHJldHVybiB7Y2xheS5waWNraW5nLlJheVBpY2tpbmd+SW50ZXJzZWN0aW9ufVxuICAgICAqL1xuICAgIHBpY2s6IGZ1bmN0aW9uICh4LCB5LCBmb3JjZVBpY2tBbGwpIHtcbiAgICAgICAgdmFyIG91dCA9IHRoaXMucGlja0FsbCh4LCB5LCBbXSwgZm9yY2VQaWNrQWxsKTtcbiAgICAgICAgcmV0dXJuIG91dFswXSB8fCBudWxsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQaWNrIGFsbCBpbnRlcnNlY3Rpb24gb2JqZWN0cywgd2ljaCB3aWxsIGJlIHNvcnRlZCBmcm9tIG5lYXIgdG8gZmFyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB4IE1vdXNlIHBvc2l0aW9uIHhcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxuICAgICAqIEBwYXJhbSAge0FycmF5fSBbb3V0cHV0XVxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXG4gICAgICogQHJldHVybiB7QXJyYXkuPGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbj59XG4gICAgICovXG4gICAgcGlja0FsbDogZnVuY3Rpb24gKHgsIHksIG91dHB1dCwgZm9yY2VQaWNrQWxsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9OREMoeCwgeSwgdGhpcy5fbmRjKTtcbiAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheSh0aGlzLl9uZGMsIHRoaXMuX3JheSk7XG5cbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xuXG4gICAgICAgIHRoaXMuX2ludGVyc2VjdE5vZGUodGhpcy5zY2VuZSwgb3V0cHV0LCBmb3JjZVBpY2tBbGwgfHwgZmFsc2UpO1xuXG4gICAgICAgIG91dHB1dC5zb3J0KHRoaXMuX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jKTtcblxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH0sXG5cbiAgICBfaW50ZXJzZWN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIG91dCwgZm9yY2VQaWNrQWxsKSB7XG4gICAgICAgIGlmICgobm9kZSBpbnN0YW5jZW9mIFJlbmRlcmFibGUpICYmIG5vZGUuaXNSZW5kZXJhYmxlKCkpIHtcbiAgICAgICAgICAgIGlmICgoIW5vZGUuaWdub3JlUGlja2luZyB8fCBmb3JjZVBpY2tBbGwpXG4gICAgICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHRyaWFuZ2xlIG1lc2ggc3VwcG9ydCByYXkgcGlja2luZ1xuICAgICAgICAgICAgICAgICAgICAobm9kZS5tb2RlID09PSBnbGVudW0uVFJJQU5HTEVTICYmIG5vZGUuZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCkpXG4gICAgICAgICAgICAgICAgICAgIC8vIE9yIGlmIGdlb21ldHJ5IGhhcyBpdCdzIG93biBwaWNrQnlSYXksIHBpY2ssIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja0J5UmF5XG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ludGVyc2VjdFJlbmRlcmFibGUobm9kZSwgb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKG5vZGUuX2NoaWxkcmVuW2ldLCBvdXQsIGZvcmNlUGlja0FsbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX2ludGVyc2VjdFJlbmRlcmFibGU6IChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHYzID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcbiAgICAgICAgdmFyIHdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBvdXQpIHtcblxuICAgICAgICAgICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcbiAgICAgICAgICAgIHJheS5jb3B5KHRoaXMuX3JheSk7XG4gICAgICAgICAgICBNYXRyaXg0LmludmVydCh3b3JsZEludmVyc2UsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCBpZ25vcmUgdGhlIHdvcmxkIHRyYW5zZm9ybS5cbiAgICAgICAgICAgIGlmICghaXNTa2lubmVkTWVzaCkge1xuICAgICAgICAgICAgICAgIHJheS5hcHBseVRyYW5zZm9ybSh3b3JsZEludmVyc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuICAgICAgICAgICAgLy8gSWdub3JlIGJvdW5kaW5nIGJveCBvZiBza2lubmVkIG1lc2g/XG4gICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyYXkuaW50ZXJzZWN0Qm91bmRpbmdCb3goZ2VvbWV0cnkuYm91bmRpbmdCb3gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHBpY2tpbmcgYWxnb3JpdGhtXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkucGljaykge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2soXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25kYy54LCB0aGlzLl9uZGMueSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG91dFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG1cbiAgICAgICAgICAgIGVsc2UgaWYgKGdlb21ldHJ5LnBpY2tCeVJheSkge1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2tCeVJheShyYXksIHJlbmRlcmFibGUsIG91dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VsbEJhY2sgPSAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkJBQ0sgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DQ1cpXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkZST05UICYmIHJlbmRlcmFibGUuZnJvbnRGYWNlID09PSBnbGVudW0uQ1cpO1xuXG4gICAgICAgICAgICB2YXIgcG9pbnQ7XG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGljZXM7XG4gICAgICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcbiAgICAgICAgICAgIHZhciB3ZWlnaHRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy53ZWlnaHQ7XG4gICAgICAgICAgICB2YXIgam9pbnRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludDtcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheTtcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXMgPSBbXTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHZhbGlkLlxuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbkF0dHIgfHwgIXBvc2l0aW9uQXR0ci52YWx1ZSB8fCAhaW5kaWNlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XG4gICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzQXJyYXkgPSByZW5kZXJhYmxlLnNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIHJlbmRlcmFibGUuam9pbnRzKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXSA9IHNraW5NYXRyaWNlc1tpXSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAxNjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2luTWF0cmljZXNbaV1ba10gPSBza2luTWF0cmljZXNBcnJheVtpICogMTYgKyBrXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHdlaWdodCA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XG4gICAgICAgICAgICAgICAgaWYgKCFza2lubmVkUG9zaXRpb25BdHRyIHx8ICFza2lubmVkUG9zaXRpb25BdHRyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNyZWF0ZUF0dHJpYnV0ZSgnc2tpbm5lZFBvc2l0aW9uJywgJ2YnLCAzKTtcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLmluaXQoZ2VvbWV0cnkudmVydGV4Q291bnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLmdldChpLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBdHRyLmdldChpLCB3ZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBqb2ludEF0dHIuZ2V0KGksIGpvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0WzNdID0gMSAtIHdlaWdodFswXSAtIHdlaWdodFsxXSAtIHdlaWdodFsyXTtcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zZXQoc2tpbm5lZFBvcywgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoam9pbnRba10gPj0gMCAmJiB3ZWlnaHRba10gPiAxZS00KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRtcCwgcG9zLCBza2luTWF0cmljZXNbam9pbnRba11dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNraW5uZWRQb3MsIHNraW5uZWRQb3MsIHRtcCwgd2VpZ2h0W2tdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLnNldChpLCBza2lubmVkUG9zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMV07XG4gICAgICAgICAgICAgICAgdmFyIGkzID0gaW5kaWNlc1tpICsgMl07XG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsUG9zQXR0ciA9IGlzU2tpbm5lZE1lc2hcbiAgICAgICAgICAgICAgICAgICAgPyBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICA6IHBvc2l0aW9uQXR0cjtcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkxLCB2MS5hcnJheSk7XG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMiwgdjIuYXJyYXkpO1xuICAgICAgICAgICAgICAgIGZpbmFsUG9zQXR0ci5nZXQoaTMsIHYzLmFycmF5KTtcblxuICAgICAgICAgICAgICAgIGlmIChjdWxsQmFjaykge1xuICAgICAgICAgICAgICAgICAgICBwb2ludCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSh2MSwgdjIsIHYzLCByZW5kZXJhYmxlLmN1bGxpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUodjEsIHYzLCB2MiwgcmVuZGVyYWJsZS5jdWxsaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwb2ludFcgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NChwb2ludFcsIHBvaW50LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gcG9pbnQgbWF5YmUgbm90IHJpZ2h0LlxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy5jb3B5KHBvaW50VywgcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBSYXlQaWNraW5nLkludGVyc2VjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LCBwb2ludFcsIHJlbmRlcmFibGUsIFtpMSwgaTIsIGkzXSwgaSAvIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmRpc3QocG9pbnRXLCB0aGlzLl9yYXkub3JpZ2luKVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSkoKSxcblxuICAgIF9pbnRlcnNlY3Rpb25Db21wYXJlRnVuYzogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb25cbiAqIEBwYXJhbSB7Y2xheS5tYXRoLlZlY3RvcjN9IHBvaW50XG4gKiBAcGFyYW0ge2NsYXkubWF0aC5WZWN0b3IzfSBwb2ludFdvcmxkXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gdGFyZ2V0XG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB0cmlhbmdsZVxuICogQHBhcmFtIHtudW1iZXJ9IHRyaWFuZ2xlSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICovXG5SYXlQaWNraW5nLkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChwb2ludCwgcG9pbnRXb3JsZCwgdGFyZ2V0LCB0cmlhbmdsZSwgdHJpYW5nbGVJbmRleCwgZGlzdGFuY2UpIHtcbiAgICAvKipcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gbG9jYWwgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnQgPSBwb2ludDtcbiAgICAvKipcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gd29ybGQgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXG4gICAgICogQHR5cGUge2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHRoaXMucG9pbnRXb3JsZCA9IHBvaW50V29ybGQ7XG4gICAgLyoqXG4gICAgICogSW50ZXJzZWN0aW9uIHNjZW5lIG5vZGVcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIC8qKlxuICAgICAqIEludGVyc2VjdGlvbiB0cmlhbmdsZSwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgdmVydGV4IGluZGV4XG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxuICAgICAqL1xuICAgIHRoaXMudHJpYW5nbGUgPSB0cmlhbmdsZTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiBpbnRlcnNlY3Rpb24gdHJpYW5nbGUuXG4gICAgICovXG4gICAgdGhpcy50cmlhbmdsZUluZGV4ID0gdHJpYW5nbGVJbmRleDtcbiAgICAvKipcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGludGVyc2VjdGlvbiBwb2ludCB0byByYXkgb3JpZ2luXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSYXlQaWNraW5nO1xuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xudmFyIHZlYzIgPSBnbE1hdHJpeC52ZWMyO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkNvbmVcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQudG9wUmFkaXVzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuYm90dG9tUmFkaXVzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuY2FwU2VnbWVudHNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cbiAqL1xudmFyIENvbmUgPSBHZW9tZXRyeS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZSMgKi9cbntcbiAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRvcFJhZGl1czogMCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgYm90dG9tUmFkaXVzOiAxLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBoZWlnaHQ6IDIsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGNhcFNlZ21lbnRzOiAyMCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuYnVpbGQoKTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZS5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBCdWlsZCBjb25lIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcbiAgICAgICAgdmFyIGZhY2VzID0gW107XG4gICAgICAgIHBvc2l0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICB0ZXhjb29yZHMubGVuZ3RoID0gMDtcbiAgICAgICAgZmFjZXMubGVuZ3RoID0gMDtcbiAgICAgICAgLy8gVG9wIGNhcFxuICAgICAgICB2YXIgY2FwU2VnUmFkaWFsID0gTWF0aC5QSSAqIDIgLyB0aGlzLmNhcFNlZ21lbnRzO1xuXG4gICAgICAgIHZhciB0b3BDYXAgPSBbXTtcbiAgICAgICAgdmFyIGJvdHRvbUNhcCA9IFtdO1xuXG4gICAgICAgIHZhciByMSA9IHRoaXMudG9wUmFkaXVzO1xuICAgICAgICB2YXIgcjIgPSB0aGlzLmJvdHRvbVJhZGl1cztcbiAgICAgICAgdmFyIHkgPSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICAgICAgdmFyIGMxID0gdmVjMy5mcm9tVmFsdWVzKDAsIHksIDApO1xuICAgICAgICB2YXIgYzIgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgLXksIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FwU2VnbWVudHM7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRoZXRhID0gaSAqIGNhcFNlZ1JhZGlhbDtcbiAgICAgICAgICAgIHZhciB4ID0gcjEgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgICAgICAgICB2YXIgeiA9IHIxICogTWF0aC5jb3ModGhldGEpO1xuICAgICAgICAgICAgdG9wQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIHksIHopKTtcblxuICAgICAgICAgICAgeCA9IHIyICogTWF0aC5zaW4odGhldGEpO1xuICAgICAgICAgICAgeiA9IHIyICogTWF0aC5jb3ModGhldGEpO1xuICAgICAgICAgICAgYm90dG9tQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIC15LCB6KSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCdWlsZCB0b3AgY2FwXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMxKTtcbiAgICAgICAgLy8gRklYTUVcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNhcFNlZ21lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godG9wQ2FwW2ldKTtcbiAgICAgICAgICAgIC8vIEZJWE1FXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcbiAgICAgICAgICAgIGZhY2VzLnB1c2goWzAsIGkrMSwgKGkrMSkgJSBuICsgMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnVpbGQgYm90dG9tIGNhcFxuICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYzIpO1xuICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoMCwgMSkpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goYm90dG9tQ2FwW2ldKTtcbiAgICAgICAgICAgIC8vIEZJWE1FXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcbiAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCwgb2Zmc2V0KygoaSsxKSAlIG4gKyAxKSwgb2Zmc2V0K2krMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnVpbGQgc2lkZVxuICAgICAgICBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xuICAgICAgICB2YXIgbjIgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMisxOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyBuMjtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh2ZWMzLmxlcnAodmVjMy5jcmVhdGUoKSwgdG9wQ2FwW2ldLCBib3R0b21DYXBbaV0sIHYpKTtcbiAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIHYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGkxID0gaSAqIChuMiArIDEpICsgajtcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKGkgKyAxKSAlIG4pICogKG4yICsgMSkgKyBqO1xuICAgICAgICAgICAgICAgIHZhciBpMyA9ICgoaSArIDEpICUgbikgKiAobjIgKyAxKSArIGogKyAxO1xuICAgICAgICAgICAgICAgIHZhciBpNCA9IGkgKiAobjIgKyAxKSArIGogKyAxO1xuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpMiwgb2Zmc2V0K2kxLCBvZmZzZXQraTRdKTtcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTQsIG9mZnNldCtpMywgb2Zmc2V0K2kyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uZnJvbUFycmF5KHBvc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XG5cbiAgICAgICAgdGhpcy5pbml0SW5kaWNlc0Zyb21BcnJheShmYWNlcyk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcblxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gICAgICAgIHZhciByID0gTWF0aC5tYXgodGhpcy50b3BSYWRpdXMsIHRoaXMuYm90dG9tUmFkaXVzKTtcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC1yLCAtdGhpcy5oZWlnaHQvMiwgLXIpO1xuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQociwgdGhpcy5oZWlnaHQvMiwgcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmU7XG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IENvbmVHZW9tZXRyeSBmcm9tICcuL0NvbmUnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnJhZGl1c11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmNhcFNlZ21lbnRzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXG4gKi9cbnZhciBDeWxpbmRlciA9IEdlb21ldHJ5LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DeWxpbmRlciMgKi9cbntcbiAgICBkeW5hbWljOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhZGl1czogMSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgaGVpZ2h0OiAyLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBjYXBTZWdtZW50czogNTAsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGhlaWdodFNlZ21lbnRzOiAxXG59LCBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmJ1aWxkKCk7XG59LFxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyLnByb3RvdHlwZSAqL1xue1xuICAgIC8qKlxuICAgICAqIEJ1aWxkIGN5bGluZGVyIGdlb21ldHJ5XG4gICAgICovXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY29uZSA9IG5ldyBDb25lR2VvbWV0cnkoe1xuICAgICAgICAgICAgdG9wUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgICAgIGJvdHRvbVJhZGl1czogdGhpcy5yYWRpdXMsXG4gICAgICAgICAgICBjYXBTZWdtZW50czogdGhpcy5jYXBTZWdtZW50cyxcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiB0aGlzLmhlaWdodFNlZ21lbnRzLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gY29uZS5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZTtcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gY29uZS5pbmRpY2VzO1xuXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBjb25lLmJvdW5kaW5nQm94O1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDeWxpbmRlcjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0O1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxudmFyeWluZyB2ZWMzIHZfVGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9CaXRhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiAgICB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuICAgIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4gICAgYm9vbCBoYXNUYW5nZW50ID0gZG90KHRhbmdlbnQsIHRhbmdlbnQpID4gMC4wO1xcbiNlbmRpZlxcbiNpZmRlZiBTS0lOTklOR1xcbiAgICBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gICAgc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gICAgI2lmZGVmIEZJUlNUX1BBU1NcXG4gICAgc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiAgICBpZiAoaGFzVGFuZ2VudCkge1xcbiAgICAgICAgc2tpbm5lZFRhbmdlbnQgPSAoc2tpbk1hdHJpeFdTICogdmVjNCh0YW5nZW50Lnh5eiwgMC4wKSkueHl6O1xcbiAgICB9XFxuICAgICNlbmRpZlxcbiNlbmRpZlxcbiAgICBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gICAgdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiAgICB2X05vcm1hbCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApKS54eXopO1xcbiAgICBpZiAoaGFzVGFuZ2VudCkge1xcbiAgICAgICAgdl9UYW5nZW50ID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWRUYW5nZW50LCAwLjApKS54eXopO1xcbiAgICAgICAgdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiAgICB9XFxuICAgIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnRcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdobmVzcztcXG51bmlmb3JtIGJvb2wgZG91YmxlU2lkZWQ7XFxudW5pZm9ybSBpbnQgcm91Z2hHbG9zc0NoYW5uZWw6IDA7XFxuZmxvYXQgaW5kZXhpbmdUZXhlbChpbiB2ZWM0IHRleGVsLCBpbiBpbnQgaWR4KSB7XFxuICAgIGlmIChpZHggPT0gMykgcmV0dXJuIHRleGVsLmE7XFxuICAgIGVsc2UgaWYgKGlkeCA9PSAxKSByZXR1cm4gdGV4ZWwuZztcXG4gICAgZWxzZSBpZiAoaWR4ID09IDIpIHJldHVybiB0ZXhlbC5iO1xcbiAgICBlbHNlIHJldHVybiB0ZXhlbC5yO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMyBOID0gdl9Ob3JtYWw7XFxuICAgIGlmIChkb3VibGVTaWRlZCkge1xcbiAgICAgICAgdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuICAgICAgICB2ZWMzIFYgPSBleWVQb3MgLSB2X1dvcmxkUG9zaXRpb247XFxuICAgICAgICBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuICAgICAgICAgICAgTiA9IC1OO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmIChkb3Qodl9UYW5nZW50LCB2X1RhbmdlbnQpID4gMC4wKSB7XFxuICAgICAgICB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdl9UZXhjb29yZCkueHl6O1xcbiAgICAgICAgaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7ICAgICAgICAgICAgTiA9IG5vcm1hbFRleGVsICogMi4wIC0gMS4wO1xcbiAgICAgICAgICAgIG1hdDMgdGJuID0gbWF0Myh2X1RhbmdlbnQsIHZfQml0YW5nZW50LCB2X05vcm1hbCk7XFxuICAgICAgICAgICAgTiA9IG5vcm1hbGl6ZSh0Ym4gKiBOKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gKE4gKyAxLjApICogMC41O1xcbiAgICBmbG9hdCBnID0gZ2xvc3NpbmVzcztcXG4gICAgaWYgKHVzZVJvdWdoR2xvc3NNYXApIHtcXG4gICAgICAgIGZsb2F0IGcyID0gaW5kZXhpbmdUZXhlbCh0ZXh0dXJlMkQocm91Z2hHbG9zc01hcCwgdl9UZXhjb29yZCksIHJvdWdoR2xvc3NDaGFubmVsKTtcXG4gICAgICAgIGlmICh1c2VSb3VnaG5lc3MpIHtcXG4gICAgICAgICAgICBnMiA9IDEuMCAtIGcyO1xcbiAgICAgICAgfVxcbiAgICAgICAgZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICAgIH1cXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSBnICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG51bmlmb3JtIHZlYzMgY29sb3I7XFxudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XFxudW5pZm9ybSBib29sIHVzZU1ldGFsbmVzc01hcDtcXG51bmlmb3JtIGJvb2wgbGluZWFyO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52b2lkIG1haW4gKClcXG57XFxuICAgIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICAgIGlmICh1c2VNZXRhbG5lc3NNYXApIHtcXG4gICAgICAgIHZlYzQgbWV0YWxuZXNzVGV4ZWwgPSB0ZXh0dXJlMkQobWV0YWxuZXNzTWFwLCB2X1RleGNvb3JkKTtcXG4gICAgICAgIG0gPSBjbGFtcChtZXRhbG5lc3NUZXhlbC5yICsgKG0gKiAyLjAgLSAxLjApLCAwLjAsIDEuMCk7XFxuICAgIH1cXG4gICAgdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKTtcXG4gICAgaWYgKGxpbmVhcikge1xcbiAgICAgICAgdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiAgICB9XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2IgKiBjb2xvcjtcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSBtICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1Z1xcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSBpbnQgZGVidWc6IDA7XFxudm9pZCBtYWluICgpXFxue1xcbiAgICBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuICAgIGlmIChkZWJ1ZyA9PSAwKSB7XFxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KE4sIDEuMCk7XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoZGVidWcgPT0gMSkge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKHopLCAxLjApO1xcbiAgICB9XFxuICAgIGVsc2UgaWYgKGRlYnVnID09IDIpIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoZGVidWcgPT0gMykge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGdsb3NzaW5lc3MpLCAxLjApO1xcbiAgICB9XFxuICAgIGVsc2UgaWYgKGRlYnVnID09IDQpIHtcXG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhtZXRhbG5lc3MpLCAxLjApO1xcbiAgICB9XFxuICAgIGVsc2Uge1xcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChhbGJlZG8sIDEuMCk7XFxuICAgIH1cXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTI7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ6IFZJRVdQT1JUO1xcbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbkludjtcXG4jaWZkZWYgREVQVEhfRU5DT0RFRFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuICAgIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiAgICB2ZWMyIHV2MiA9IChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dztcXG4gICAgdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuICAgIHZlYzQgdGV4ZWwzID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpO1xcbiAgICBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuICAgICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIGZsb2F0IGdsb3NzaW5lc3MgPSB0ZXhlbDEuYTtcXG4gICAgZmxvYXQgbWV0YWxuZXNzID0gdGV4ZWwzLmE7XFxuICAgIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuICAgIGZsb2F0IHogPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUyLCB1dikuciAqIDIuMCAtIDEuMDtcXG4gICAgdmVjMiB4eSA9IHV2MiAqIDIuMCAtIDEuMDtcXG4gICAgdmVjNCBwcm9qZWN0ZWRQb3MgPSB2ZWM0KHh5LCB6LCAxLjApO1xcbiAgICB2ZWM0IHA0ID0gdmlld1Byb2plY3Rpb25JbnYgKiBwcm9qZWN0ZWRQb3M7XFxuICAgIHZlYzMgcG9zaXRpb24gPSBwNC54eXogLyBwNC53O1xcbiAgICB2ZWMzIGFsYmVkbyA9IHRleGVsMy5yZ2I7XFxuICAgIHZlYzMgZGlmZnVzZUNvbG9yID0gYWxiZWRvICogKDEuMCAtIG1ldGFsbmVzcyk7XFxuICAgIHZlYzMgc3BlY3VsYXJDb2xvciA9IG1peCh2ZWMzKDAuMDQpLCBhbGJlZG8sIG1ldGFsbmVzcyk7XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbmZsb2F0IERfUGhvbmcoaW4gZmxvYXQgZywgaW4gZmxvYXQgbmRoKSB7XFxuICAgIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gICAgcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gICAgZmxvYXQgciA9IDEuMCAtIGc7XFxuICAgIGZsb2F0IGEgPSByICogcjtcXG4gICAgZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiAgICByZXR1cm4gYSAvICgzLjE0MTU5MjYgKiB0bXAgKiB0bXApO1xcbn1cXG52ZWMzIEZfU2NobGljayhpbiBmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiAgICByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbnZlYzMgbGlnaHRFcXVhdGlvbihcXG4gICAgaW4gdmVjMyBsaWdodENvbG9yLCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwgaW4gdmVjMyBzcGVjdWxhckNvbG9yLFxcbiAgICBpbiBmbG9hdCBuZGwsIGluIGZsb2F0IG5kaCwgaW4gZmxvYXQgbmR2LCBpbiBmbG9hdCBnXFxuKVxcbntcXG4gICAgcmV0dXJuIG5kbCAqIGxpZ2h0Q29sb3JcXG4gICAgICAgICogKGRpZmZ1c2VDb2xvciArIERfUGhvbmcoZywgbmRoKSAqIEZfU2NobGljayhuZHYsIHNwZWN1bGFyQ29sb3IpKTtcXG59XFxuQGVuZFwiO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgRm9yd2FyZFJlbmRlcmVyIGZyb20gJy4uL1JlbmRlcmVyJztcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuXG5pbXBvcnQgZ2J1ZmZlckVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9nYnVmZmVyLmdsc2wuanMnO1xuaW1wb3J0IGNodW5rRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2NodW5rLmdsc2wuanMnO1xuXG5TaGFkZXIuaW1wb3J0KGdidWZmZXJFc3NsKTtcblNoYWRlci5pbXBvcnQoY2h1bmtFc3NsKTtcblxuZnVuY3Rpb24gY3JlYXRlRmlsbENhbnZhcyhjb2xvcikge1xuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMTtcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yIHx8ICcjMDAwJztcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XG5cbiAgICByZXR1cm4gY2FudmFzO1xufVxuXG5mdW5jdGlvbiBhdHRhY2hUZXh0dXJlVG9TbG90KHJlbmRlcmVyLCBwcm9ncmFtLCBzeW1ib2wsIHRleHR1cmUsIHNsb3QpIHtcbiAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcbiAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxaScsIHN5bWJvbCwgc2xvdCk7XG5cbiAgICBnbC5hY3RpdmVUZXh0dXJlKGdsLlRFWFRVUkUwICsgc2xvdCk7XG4gICAgLy8gTWF5YmUgdGV4dHVyZSBpcyBub3QgbG9hZGVkIHlldDtcbiAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcbiAgICAgICAgdGV4dHVyZS51bmJpbmQocmVuZGVyZXIpO1xuICAgIH1cbn1cblxuLy8gVE9ETyBVc2UgZ2xvYmFsU2hhZGVyIGluc3RlYWRvZiBnbG9iYWxNYXRlcmlhbD9cbmZ1bmN0aW9uIGdldEJlZm9yZVJlbmRlckhvb2sxIChnbCwgZGVmYXVsdE5vcm1hbE1hcCwgZGVmYXVsdFJvdWdobmVzc01hcCkge1xuXG4gICAgdmFyIHByZXZpb3VzTm9ybWFsTWFwO1xuICAgIHZhciBwcmV2aW91c1JvdWdHbG9zc01hcDtcbiAgICB2YXIgcHJldmlvdXNSZW5kZXJhYmxlO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBwcmV2TWF0ZXJpYWwpIHtcbiAgICAgICAgLy8gTWF0ZXJpYWwgbm90IGNoYW5nZVxuICAgICAgICBpZiAocHJldmlvdXNSZW5kZXJhYmxlICYmIHByZXZpb3VzUmVuZGVyYWJsZS5tYXRlcmlhbCA9PT0gcmVuZGVyYWJsZS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xuICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmFibGUuX19wcm9ncmFtO1xuXG4gICAgICAgIHZhciBnbG9zc2luZXNzO1xuICAgICAgICB2YXIgcm91Z2hHbG9zc01hcDtcbiAgICAgICAgdmFyIHVzZVJvdWdobmVzc1dvcmtmbG93ID0gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcbiAgICAgICAgdmFyIGRvdWJsZVNpZGVkID0gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xuICAgICAgICB2YXIgcm91Z2hHbG9zc0NoYW5uZWw7XG4gICAgICAgIGlmICh1c2VSb3VnaG5lc3NXb3JrZmxvdykge1xuICAgICAgICAgICAgZ2xvc3NpbmVzcyA9IDEuMCAtIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdyb3VnaG5lc3MnKTtcbiAgICAgICAgICAgIHJvdWdoR2xvc3NNYXAgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzTWFwJyk7XG4gICAgICAgICAgICByb3VnaEdsb3NzQ2hhbm5lbCA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0RGVmaW5lKCdmcmFnbWVudCcsICdST1VHSE5FU1NfQ0hBTk5FTCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2xvc3NpbmVzcyA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdnbG9zc2luZXNzJyk7XG4gICAgICAgICAgICByb3VnaEdsb3NzTWFwID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3NNYXAnKTtcbiAgICAgICAgICAgIHJvdWdoR2xvc3NDaGFubmVsID0gc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ0dMT1NTSU5FU1NfQ0hBTk5FTCcpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1c2VSb3VnaEdsb3NzTWFwID0gISFyb3VnaEdsb3NzTWFwO1xuXG4gICAgICAgIHZhciBub3JtYWxNYXAgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgnbm9ybWFsTWFwJykgfHwgZGVmYXVsdE5vcm1hbE1hcDtcbiAgICAgICAgdmFyIHV2UmVwZWF0ID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XG4gICAgICAgIHZhciB1dk9mZnNldCA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCd1dk9mZnNldCcpO1xuXG4gICAgICAgIHJvdWdoR2xvc3NNYXAgPSByb3VnaEdsb3NzTWFwIHx8IGRlZmF1bHRSb3VnaG5lc3NNYXA7XG5cbiAgICAgICAgaWYgKHByZXZNYXRlcmlhbCAhPT0gZ0J1ZmZlck1hdCkge1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCdub3JtYWxNYXAnLCBub3JtYWxNYXApO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3JvdWdoR2xvc3NNYXAnLCByb3VnaEdsb3NzTWFwKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1c2VSb3VnaEdsb3NzTWFwJywgK3VzZVJvdWdoR2xvc3NNYXApO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3VzZVJvdWdobmVzcycsICt1c2VSb3VnaG5lc3NXb3JrZmxvdyk7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnZG91YmxlU2lkZWQnLCArZG91YmxlU2lkZWQpO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3JvdWdoR2xvc3NDaGFubmVsJywgK3JvdWdoR2xvc3NDaGFubmVsIHx8IDApO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3V2UmVwZWF0JywgdXZSZXBlYXQpO1xuICAgICAgICAgICAgZ0J1ZmZlck1hdC5zZXQoJ3V2T2Zmc2V0JywgdXZPZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKFxuICAgICAgICAgICAgICAgIGdsLCAnMWYnLCAnZ2xvc3NpbmVzcycsIGdsb3NzaW5lc3NcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c05vcm1hbE1hcCAhPT0gbm9ybWFsTWFwKSB7XG4gICAgICAgICAgICAgICAgYXR0YWNoVGV4dHVyZVRvU2xvdCh0aGlzLCBwcm9ncmFtLCAnbm9ybWFsTWFwJywgbm9ybWFsTWFwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1JvdWdHbG9zc01hcCAhPT0gcm91Z2hHbG9zc01hcCkge1xuICAgICAgICAgICAgICAgIGF0dGFjaFRleHR1cmVUb1Nsb3QodGhpcywgcHJvZ3JhbSwgJ3JvdWdoR2xvc3NNYXAnLCByb3VnaEdsb3NzTWFwLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzFpJywgJ3VzZVJvdWdoR2xvc3NNYXAnLCArdXNlUm91Z2hHbG9zc01hcCk7XG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxaScsICd1c2VSb3VnaG5lc3MnLCArdXNlUm91Z2huZXNzV29ya2Zsb3cpO1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKGdsLCAnMWknLCAnZG91YmxlU2lkZWQnLCArZG91YmxlU2lkZWQpO1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKGdsLCAnMWknLCAncm91Z2hHbG9zc0NoYW5uZWwnLCArcm91Z2hHbG9zc0NoYW5uZWwgfHwgMCk7XG4gICAgICAgICAgICBpZiAodXZSZXBlYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzJmJywgJ3V2UmVwZWF0JywgdXZSZXBlYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHV2T2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcyZicsICd1dk9mZnNldCcsIHV2T2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTm9ybWFsTWFwID0gbm9ybWFsTWFwO1xuICAgICAgICBwcmV2aW91c1JvdWdHbG9zc01hcCA9IHJvdWdoR2xvc3NNYXA7XG5cbiAgICAgICAgcHJldmlvdXNSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCZWZvcmVSZW5kZXJIb29rMihnbCwgZGVmYXVsdERpZmZ1c2VNYXAsIGRlZmF1bHRNZXRhbG5lc3NNYXApIHtcbiAgICB2YXIgcHJldmlvdXNEaWZmdXNlTWFwO1xuICAgIHZhciBwcmV2aW91c1JlbmRlcmFibGU7XG4gICAgdmFyIHByZXZpb3VzTWV0YWxuZXNzTWFwO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBwcmV2TWF0ZXJpYWwpIHtcbiAgICAgICAgLy8gTWF0ZXJpYWwgbm90IGNoYW5nZVxuICAgICAgICBpZiAocHJldmlvdXNSZW5kZXJhYmxlICYmIHByZXZpb3VzUmVuZGVyYWJsZS5tYXRlcmlhbCA9PT0gcmVuZGVyYWJsZS5tYXRlcmlhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJhYmxlLl9fcHJvZ3JhbTtcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xuXG4gICAgICAgIHZhciBjb2xvciA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdjb2xvcicpO1xuICAgICAgICB2YXIgbWV0YWxuZXNzID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ21ldGFsbmVzcycpO1xuXG4gICAgICAgIHZhciBkaWZmdXNlTWFwID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcbiAgICAgICAgdmFyIG1ldGFsbmVzc01hcCA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3NNYXAnKTtcblxuICAgICAgICB2YXIgdXZSZXBlYXQgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcbiAgICAgICAgdmFyIHV2T2Zmc2V0ID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XG5cbiAgICAgICAgdmFyIHVzZU1ldGFsbmVzc01hcCA9ICEhbWV0YWxuZXNzTWFwO1xuXG4gICAgICAgIGRpZmZ1c2VNYXAgPSBkaWZmdXNlTWFwIHx8IGRlZmF1bHREaWZmdXNlTWFwO1xuICAgICAgICBtZXRhbG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgfHwgZGVmYXVsdE1ldGFsbmVzc01hcDtcblxuICAgICAgICBpZiAocHJldk1hdGVyaWFsICE9PSBnQnVmZmVyTWF0KSB7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnY29sb3InLCBjb2xvcik7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnbWV0YWxuZXNzJywgbWV0YWxuZXNzKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCk7XG4gICAgICAgICAgICBnQnVmZmVyTWF0LnNldCgnbWV0YWxuZXNzTWFwJywgbWV0YWxuZXNzTWFwKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1c2VNZXRhbG5lc3NNYXAnLCArdXNlTWV0YWxuZXNzTWFwKTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1dlJlcGVhdCcsIHV2UmVwZWF0KTtcbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCd1dk9mZnNldCcsIHV2T2Zmc2V0KTtcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIGdCdWZmZXJNYXQuc2V0KCdsaW5lYXInLCArc3RhbmRhcmRNYXRlcmlhbC5saW5lYXIgfHwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxZicsICdtZXRhbG5lc3MnLCBtZXRhbG5lc3MpO1xuXG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICczZicsICdjb2xvcicsIGNvbG9yKTtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0RpZmZ1c2VNYXAgIT09IGRpZmZ1c2VNYXApIHtcbiAgICAgICAgICAgICAgICBhdHRhY2hUZXh0dXJlVG9TbG90KHRoaXMsIHByb2dyYW0sICdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlvdXNNZXRhbG5lc3NNYXAgIT09IG1ldGFsbmVzc01hcCkge1xuICAgICAgICAgICAgICAgIGF0dGFjaFRleHR1cmVUb1Nsb3QodGhpcywgcHJvZ3JhbSwgJ21ldGFsbmVzc01hcCcsIG1ldGFsbmVzc01hcCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oZ2wsICcxaScsICd1c2VNZXRhbG5lc3NNYXAnLCArdXNlTWV0YWxuZXNzTWFwKTtcbiAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzJmJywgJ3V2UmVwZWF0JywgdXZSZXBlYXQpO1xuICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKGdsLCAnMmYnLCAndXZPZmZzZXQnLCB1dk9mZnNldCk7XG5cbiAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgJzFpJywgJ2xpbmVhcicsICtzdGFuZGFyZE1hdGVyaWFsLmxpbmVhciB8fCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzRGlmZnVzZU1hcCA9IGRpZmZ1c2VNYXA7XG4gICAgICAgIHByZXZpb3VzTWV0YWxuZXNzTWFwID0gbWV0YWxuZXNzTWFwO1xuXG4gICAgICAgIHByZXZpb3VzUmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBHQnVmZmVyIGlzIHByb3ZpZGVkIGZvciBkZWZlcnJlZCByZW5kZXJpbmcgYW5kIFNTQU8sIFNTUiBwYXNzLlxuICogSXQgd2lsbCBkbyB0d28gcGFzc2VzIHJlbmRlcmluZyB0byB0aHJlZSB0YXJnZXQgdGV4dHVyZXMuIFNlZVxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUxfVxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUyfVxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUzfVxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5HQnVmZmVyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgR0J1ZmZlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcblxuICAgIHJldHVybiB7XG5cbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTE6IHRydWUsXG5cbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTI6IHRydWUsXG5cbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTM6IHRydWUsXG5cbiAgICAgICAgcmVuZGVyVHJhbnNwYXJlbnQ6IGZhbHNlLFxuXG4gICAgICAgIF9yZW5kZXJMaXN0OiBbXSxcbiAgICAgICAgLy8gLSBSOiBub3JtYWwueFxuICAgICAgICAvLyAtIEc6IG5vcm1hbC55XG4gICAgICAgIC8vIC0gQjogbm9ybWFsLnpcbiAgICAgICAgLy8gLSBBOiBnbG9zc2luZXNzXG4gICAgICAgIF9nQnVmZmVyVGV4MTogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxuICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FUXG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIC0gUjogZGVwdGhcbiAgICAgICAgX2dCdWZmZXJUZXgyOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXG4gICAgICAgICAgICAvLyBmb3JtYXQ6IFRleHR1cmUuREVQVEhfQ09NUE9ORU5ULFxuICAgICAgICAgICAgLy8gdHlwZTogVGV4dHVyZS5VTlNJR05FRF9JTlRcblxuICAgICAgICAgICAgZm9ybWF0OiBUZXh0dXJlLkRFUFRIX1NURU5DSUwsXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMXG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIC0gUjogYWxiZWRvLnJcbiAgICAgICAgLy8gLSBHOiBhbGJlZG8uZ1xuICAgICAgICAvLyAtIEI6IGFsYmVkby5iXG4gICAgICAgIC8vIC0gQTogbWV0YWxuZXNzXG4gICAgICAgIF9nQnVmZmVyVGV4MzogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNUXG4gICAgICAgIH0pLFxuXG4gICAgICAgIF9kZWZhdWx0Tm9ybWFsTWFwOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjMDAwJylcbiAgICAgICAgfSksXG4gICAgICAgIF9kZWZhdWx0Um91Z2huZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcbiAgICAgICAgfSksXG4gICAgICAgIF9kZWZhdWx0TWV0YWxuZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcbiAgICAgICAgfSksXG4gICAgICAgIF9kZWZhdWx0RGlmZnVzZU1hcDogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICBpbWFnZTogY3JlYXRlRmlsbENhbnZhcygnI2ZmZicpXG4gICAgICAgIH0pLFxuXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXG5cbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDE6IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnQnKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHZlcnRleERlZmluZXM6IHtcbiAgICAgICAgICAgICAgICBGSVJTVF9QQVNTOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDI6IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnQnKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KSxcblxuICAgICAgICBfZGVidWdQYXNzOiBuZXcgUGFzcyh7XG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLmRlYnVnJylcbiAgICAgICAgfSlcbiAgICB9O1xufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICove1xuXG4gICAgLyoqXG4gICAgICogU2V0IEcgQnVmZmVyIHNpemUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgICAqL1xuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2dCdWZmZXJUZXgxLndpZHRoID09PSB3aWR0aFxuICAgICAgICAgICAgJiYgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID09PSBoZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfSxcblxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xuICAgICAgICB2YXIgdmlld3BvcnQ7XG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZpZXdwb3J0ID0geDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZpZXdwb3J0ID0ge1xuICAgICAgICAgICAgICAgIHg6IHgsIHk6IHksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiBkcHIgfHwgMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgIH0sXG5cbiAgICBnZXRWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogMCwgeTogMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fZ0J1ZmZlclRleDEud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgRyBCdWZmZXJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICogQHBhcmFtIHtjbGF5LlNjZW5lfSBzY2VuZVxuICAgICAqIEBwYXJhbSB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9IGNhbWVyYVxuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XG5cbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgdmFyIGZyYW1lQnVmZmVyID0gdGhpcy5fZnJhbWVCdWZmZXI7XG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGZyYW1lQnVmZmVyLnZpZXdwb3J0O1xuICAgICAgICB2YXIgb3BhcXVlTGlzdCA9IHNjZW5lLm9wYXF1ZUxpc3Q7XG4gICAgICAgIHZhciB0cmFuc3BhcmVudExpc3QgPSBzY2VuZS50cmFuc3BhcmVudExpc3Q7XG5cbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gdGhpcy5fcmVuZGVyTGlzdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGFxdWVMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIW9wYXF1ZUxpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xuICAgICAgICAgICAgICAgIHJlbmRlckxpc3Rbb2Zmc2V0KytdID0gb3BhcXVlTGlzdFtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUcmFuc3BhcmVudCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc3BhcmVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcGFyZW50TGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3Rbb2Zmc2V0KytdID0gdHJhbnNwYXJlbnRMaXN0W2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZW5kZXJMaXN0Lmxlbmd0aCA9IG9mZnNldDtcblxuICAgICAgICBnbC5jbGVhckNvbG9yKDAsIDAsIDAsIDApO1xuICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZ2wuZGlzYWJsZShnbC5CTEVORCk7XG5cbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMTtcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUyID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMjtcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUzID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMztcbiAgICAgICAgaWYgKCFlbmFibGVUYXJnZXRUZXh0dXJlMSAmJiAhZW5hYmxlVGFyZ2V0VGV4dHVyZTMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2FuXFwndCBkaXNhYmxlIHRhcmdldFRleHR1cmUxIHRhcmdldFRleHR1cmUzIGJvdGgnKTtcbiAgICAgICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMikge1xuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX2dCdWZmZXJUZXgyLCByZW5kZXJlci5nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUEVORElORywgc2NlbmUuYm91bmRpbmdCb3hMYXN0RnJhbWUgbmVlZHMgYmUgdXBkYXRlZCBpZiBoYXZlIHNoYWRvd1xuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcoc2NlbmUpO1xuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTEpIHtcbiAgICAgICAgICAgIC8vIFBhc3MgMVxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX2dCdWZmZXJUZXgxKTtcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcbiAgICAgICAgICAgICAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICAgICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpO1xuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGdCdWZmZXJNYXRlcmlhbDEgPSB0aGlzLl9nQnVmZmVyTWF0ZXJpYWwxO1xuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCdWZmZXJNYXRlcmlhbDE7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiZWZvcmVSZW5kZXI6IGdldEJlZm9yZVJlbmRlckhvb2sxKGdsLCB0aGlzLl9kZWZhdWx0Tm9ybWFsTWFwLCB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwKSxcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBGSVhNRSBVc2UgTVJUIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XG5cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTMpIHtcblxuICAgICAgICAgICAgLy8gUGFzcyAyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGhpcy5fZ0J1ZmZlclRleDMpO1xuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XG5cbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgIHZhciBkcHIgPSB2aWV3cG9ydC5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xuICAgICAgICAgICAgICAgIGdsLnNjaXNzb3Iodmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwciwgdmlld3BvcnQud2lkdGggKiBkcHIsIHZpZXdwb3J0LmhlaWdodCAqIGRwcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG4gICAgICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwyID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMjtcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwyO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVuZGVyOiBnZXRCZWZvcmVSZW5kZXJIb29rMihnbCwgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAsIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXApLFxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiByZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlcmVyLmJpbmRTY2VuZVJlbmRlcmluZyhudWxsKTtcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGVidWc6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB0eXBlLCB2aWV3cG9ydCkge1xuICAgICAgICB2YXIgZGVidWdUeXBlcyA9IHtcbiAgICAgICAgICAgIG5vcm1hbDogMCxcbiAgICAgICAgICAgIGRlcHRoOiAxLFxuICAgICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgICAgICBnbG9zc2luZXNzOiAzLFxuICAgICAgICAgICAgbWV0YWxuZXNzOiA0LFxuICAgICAgICAgICAgYWxiZWRvOiA1XG4gICAgICAgIH07XG4gICAgICAgIGlmIChkZWJ1Z1R5cGVzW3R5cGVdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xuICAgICAgICAgICAgLy8gRGVmYXVsdCB1c2Ugbm9ybWFsXG4gICAgICAgICAgICB0eXBlID0gJ25vcm1hbCc7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XG4gICAgICAgIHJlbmRlcmVyLmNsZWFyQml0ID0gcmVuZGVyZXIuZ2wuREVQVEhfQlVGRkVSX0JJVDtcblxuICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcblxuICAgICAgICB2YXIgZGVidWdQYXNzID0gdGhpcy5fZGVidWdQYXNzO1xuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgW3JlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpXSk7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTEnLCB0aGlzLl9nQnVmZmVyVGV4MSk7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyVGV4Mik7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyVGV4Myk7XG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdkZWJ1ZycsIGRlYnVnVHlwZXNbdHlwZV0pO1xuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XG4gICAgICAgIGRlYnVnUGFzcy5yZW5kZXIocmVuZGVyZXIpO1xuXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVWaWV3cG9ydCgpO1xuICAgICAgICByZW5kZXJlci5yZXN0b3JlQ2xlYXIoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGZpcnN0IHRhcmdldCB0ZXh0dXJlLlxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcbiAgICAgKiArIFI6IG5vcm1hbC54ICogMC41ICsgMC41XG4gICAgICogKyBHOiBub3JtYWwueSAqIDAuNSArIDAuNVxuICAgICAqICsgQjogbm9ybWFsLnogKiAwLjUgKyAwLjVcbiAgICAgKiArIEE6IGdsb3NzaW5lc3NcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgKi9cbiAgICBnZXRUYXJnZXRUZXh0dXJlMTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDE7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBzZWNvbmQgdGFyZ2V0IHRleHR1cmUuXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxuICAgICAqICsgUjogZGVwdGhcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgKi9cbiAgICBnZXRUYXJnZXRUZXh0dXJlMjogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDI7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGlyZCB0YXJnZXQgdGV4dHVyZS5cbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XG4gICAgICogKyBSOiBhbGJlZG8uclxuICAgICAqICsgRzogYWxiZWRvLmdcbiAgICAgKiArIEI6IGFsYmVkby5iXG4gICAgICogKyBBOiBtZXRhbG5lc3NcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cbiAgICAgKi9cbiAgICBnZXRUYXJnZXRUZXh0dXJlMzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDM7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgR0J1ZmZlcjsiLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5saWdodF92b2x1bWUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuICAgIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuICAgIHZfUG9zaXRpb24gPSBwb3NpdGlvbjtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BvdF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0RGlyZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgdW1icmFBbmdsZUNvc2luZTtcXG51bmlmb3JtIGZsb2F0IHBlbnVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgZmFsbG9mZkZhY3RvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gICAgQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiAgICB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuICAgIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gICAgTCAvPSBkaXN0O1xcbiAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuICAgIGZsb2F0IGMgPSBkb3QoLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiksIEwpO1xcbiAgICBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoKGMgLSB1bWJyYUFuZ2xlQ29zaW5lKSAvIChwZW51bWJyYUFuZ2xlQ29zaW5lIC0gdW1icmFBbmdsZUNvc2luZSksIDAuMCwgMS4wKTtcXG4gICAgZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gICAgdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9ICgxLjAgLSBmYWxsb2ZmKSAqIGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gICAgICAgIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiAgICApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiAgICBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuICAgICAgICBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaXgsIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemVcXG4gICAgKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiAqPSBzaGFkb3dDb250cmliO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFxcblwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV07XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gICAgQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiAgICB2ZWMzIEwgPSAtbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG4gICAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRFcXVhdGlvbihcXG4gICAgICAgIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiAgICApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiAgICBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiAgICBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuICAgICAgICBpZiAoXFxuICAgICAgICAgICAgeiA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiAgICAgICAgICAgIHogPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiAgICAgICAgKSB7XFxuICAgICAgICAgICAgc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiAgICAgICAgICAgICAgICBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemUsXFxuICAgICAgICAgICAgICAgIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiAgICAgICAgICAgICAgICB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiAgICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgIH19XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuICAgIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiAgICBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuICAgICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG87XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUxO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2VmZmljaWVudHNbOV07XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KHZlYzMgTikge1xcbiAgICByZXR1cm4gbGlnaHRDb2VmZmljaWVudHNbMF1cXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbMl0gKiBOLnlcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbM10gKiBOLnpcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbNV0gKiBOLnogKiBOLnlcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbNl0gKiBOLnkgKiBOLnhcXG4gICAgICAgICsgbGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiAgICAgICAgKyBsaWdodENvZWZmaWNpZW50c1s4XSAqIChOLnggKiBOLnggLSBOLnkgKiBOLnkpO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuICAgIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiAgICBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuICAgICAgICBkaXNjYXJkO1xcbiAgICB9XFxuICAgIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuICAgIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gICAgZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG8gKiBjYWxjQW1iaWVudFNITGlnaHQoTik7XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRDdWJlbWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gICAgQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuICAgIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAgICBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnbG9zc2luZXNzLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IGJpYXMgPSByb3VnaCAqIDUuMDtcXG4gICAgdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuICAgIHZlYzMgZW52V2VpZ2h0ID0gc3BlY3VsYXJDb2xvciAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuICAgIHZlYzMgZW52VGV4ZWwgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlTG9kRVhUKGxpZ2h0Q3ViZW1hcCwgTCwgYmlhcyksIDUxLjUpO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGVudlRleGVsICogZW52V2VpZ2h0O1xcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQucG9pbnRfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBsaWdodFNoYWRvd01hcDtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0U2hhZG93TWFwU2l6ZTtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuICAgIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gICAgdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuICAgIEwgLz0gZGlzdDtcXG4gICAgdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gICAgZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gYXR0ZW51YXRpb24gKiBsaWdodEVxdWF0aW9uKFxcbiAgICAgICAgbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICAgICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuICAgIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoXFxuICAgICAgICBsaWdodFNoYWRvd01hcCwgLUwgKiBkaXN0LCBsaWdodFJhbmdlXFxuICAgICk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgKj0gY2xhbXAoc2hhZG93Q29udHJpYiwgMC4wLCAxLjApO1xcbiNlbmRpZlxcbiAgICBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BoZXJlX2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFuZ2U7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhZGl1cztcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuICAgIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gICAgdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiAgICB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuICAgIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuICAgIHZlYzMgUiA9IHJlZmxlY3QoViwgTik7XFxuICAgIGZsb2F0IHRtcCA9IGRvdChMLCBSKTtcXG4gICAgdmVjMyBjVG9SID0gdG1wICogUiAtIEw7XFxuICAgIGZsb2F0IGQgPSBsZW5ndGgoY1RvUik7XFxuICAgIEwgPSBMICsgY1RvUiAqIGNsYW1wKGxpZ2h0UmFkaXVzIC8gZCwgMC4wLCAxLjApO1xcbiAgICBMID0gbm9ybWFsaXplKEwpO1xcbiAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiAgICBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogbmRsICogYXR0ZW51YXRpb247XFxuICAgIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gbGlnaHRSYWRpdXMgLyAyLjAgLyBkaXN0LCAwLjAsIDEuMCk7XFxuICAgIGdsX0ZyYWdDb2xvci5yZ2IgPSBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuICAgICAgICBsaWdodENvbG9yLCBkaWZmdXNlQ29sb3IsIHNwZWN1bGFyQ29sb3IsIG5kbCwgbmRoLCBuZHYsIGdsb3NzaW5lc3NcXG4gICAgKTtcXG4gICAgZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnR1YmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgbGlnaHRFeHRlbmQ7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuICAgIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gICAgdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiAgICB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiAgICB2ZWMzIEwwID0gbGlnaHRQb3NpdGlvbiAtIGxpZ2h0RXh0ZW5kIC0gcG9zaXRpb247XFxuICAgIHZlYzMgTDEgPSBsaWdodFBvc2l0aW9uICsgbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gICAgdmVjMyBMRCA9IEwxIC0gTDA7XFxuICAgIGZsb2F0IGxlbjAgPSBsZW5ndGgoTDApO1xcbiAgICBmbG9hdCBsZW4xID0gbGVuZ3RoKEwxKTtcXG4gICAgZmxvYXQgaXJyYSA9IDIuMCAqIGNsYW1wKGRvdChOLCBMMCkgLyAoMi4wICogbGVuMCkgKyBkb3QoTiwgTDEpIC8gKDIuMCAqIGxlbjEpLCAwLjAsIDEuMCk7XFxuICAgIGZsb2F0IExERG90UiA9IGRvdChSLCBMRCk7XFxuICAgIGZsb2F0IHQgPSAoTEREb3RSICogZG90KFIsIEwwKSAtIGRvdChMMCwgTEQpKSAvIChkb3QoTEQsIExEKSAtIExERG90UiAqIExERG90Uik7XFxuICAgIHQgPSBjbGFtcCh0LCAwLjAsIDEuMCk7XFxuICAgIEwgPSBMMCArIHQgKiBMRDtcXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gICAgTCAvPSBkaXN0O1xcbiAgICB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiAgICBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gICAgZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuICAgIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gMC4wIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiAgICBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGlycmEgKiBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpXFxuICAgICAgICAqIChkaWZmdXNlQ29sb3IgKyBEX1Bob25nKGdsb3NzaW5lc3MsIG5kaCkgKiBGX1NjaGxpY2sobmR2LCBzcGVjdWxhckNvbG9yKSk7XFxuICAgIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XG4iLCIvLyBMaWdodC1wcmUgcGFzcyBkZWZlcnJlZCByZW5kZXJpbmdcbi8vIGh0dHA6Ly93d3cucmVhbHRpbWVyZW5kZXJpbmcuY29tL2Jsb2cvZGVmZXJyZWQtbGlnaHRpbmctYXBwcm9hY2hlcy9cbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcbmltcG9ydCBGdWxsUXVhZFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XG5pbXBvcnQgQ29uZUdlbyBmcm9tICcuLi9nZW9tZXRyeS9Db25lJztcbmltcG9ydCBDeWxpbmRlckdlbyBmcm9tICcuLi9nZW9tZXRyeS9DeWxpbmRlcic7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcbmltcG9ydCBHQnVmZmVyIGZyb20gJy4vR0J1ZmZlcic7XG5cbmltcG9ydCBwcmV6R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL3ByZXouZ2xzbC5qcyc7XG5pbXBvcnQgdXRpbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMnO1xuXG5pbXBvcnQgbGlnaHR2b2x1bWVHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvbGlnaHR2b2x1bWUuZ2xzbC5qcyc7XG4vLyBMaWdodCBzaGFkZXJzXG5pbXBvcnQgc3BvdEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcG90Lmdsc2wuanMnO1xuaW1wb3J0IGRpcmVjdGlvbmFsR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2RpcmVjdGlvbmFsLmdsc2wuanMnO1xuaW1wb3J0IGFtYmllbnRHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudC5nbHNsLmpzJztcbmltcG9ydCBhbWJpZW50c2hHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudHNoLmdsc2wuanMnO1xuaW1wb3J0IGFtYmllbnRjdWJlbWFwR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRjdWJlbWFwLmdsc2wuanMnO1xuaW1wb3J0IHBvaW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMnO1xuaW1wb3J0IHNwaGVyZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyc7XG5pbXBvcnQgdHViZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC90dWJlLmdsc2wuanMnO1xuXG5TaGFkZXIuaW1wb3J0KHByZXpHbHNsKTtcblNoYWRlci5pbXBvcnQodXRpbEdsc2wpO1xuU2hhZGVyLmltcG9ydChsaWdodHZvbHVtZUdsc2wpO1xuXG4vLyBMaWdodCBzaGFkZXJzXG5TaGFkZXIuaW1wb3J0KHNwb3RHbHNsKTtcblNoYWRlci5pbXBvcnQoZGlyZWN0aW9uYWxHbHNsKTtcblNoYWRlci5pbXBvcnQoYW1iaWVudEdsc2wpO1xuU2hhZGVyLmltcG9ydChhbWJpZW50c2hHbHNsKTtcblNoYWRlci5pbXBvcnQoYW1iaWVudGN1YmVtYXBHbHNsKTtcblNoYWRlci5pbXBvcnQocG9pbnRHbHNsKTtcblNoYWRlci5pbXBvcnQoc3BoZXJlR2xzbCk7XG5TaGFkZXIuaW1wb3J0KHR1YmVHbHNsKTtcblxuU2hhZGVyLmltcG9ydChwcmV6R2xzbCk7XG5cbi8qKlxuICogRGVmZXJyZWQgcmVuZGVyZXJcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuZGVmZXJyZWQuUmVuZGVyZXJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBEZWZlcnJlZFJlbmRlcmVyID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGZ1bGxRdWFkVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpO1xuICAgIHZhciBsaWdodFZvbHVtZVZlcnRleCA9IFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQubGlnaHRfdm9sdW1lLnZlcnRleCcpO1xuXG4gICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIgPSBuZXcgU2hhZGVyKGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0JykpO1xuXG4gICAgdmFyIGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyA9IGZ1bmN0aW9uIChnbCkge1xuICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKGdsLkZVTkNfQUREKTtcbiAgICAgICAgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FKTtcbiAgICB9O1xuXG4gICAgdmFyIGNyZWF0ZUxpZ2h0UGFzc01hdCA9IGZ1bmN0aW9uIChzaGFkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IHNoYWRlcixcbiAgICAgICAgICAgIGJsZW5kOiBsaWdodEFjY3VtdWxhdGVCbGVuZEZ1bmMsXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHZhciBjcmVhdGVWb2x1bWVTaGFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNoYWRlcihsaWdodFZvbHVtZVZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC4nICsgbmFtZSkpO1xuICAgIH07XG5cbiAgICAvLyBSb3RhdGUgYW5kIHBvc2l0aW9uaW5nIHRvIGZpdCB0aGUgc3BvdCBsaWdodFxuICAgIC8vIFdoaWNoIHRoZSBjdXNwIG9mIGNvbmUgcG9pbnRpbmcgdG8gdGhlIHBvc2l0aXZlIHpcbiAgICAvLyBhbmQgcG9zaXRpb25lZCBvbiB0aGUgb3JpZ2luXG4gICAgdmFyIGNvbmVHZW8gPSBuZXcgQ29uZUdlbyh7XG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxuICAgIH0pO1xuICAgIHZhciBtYXQgPSBuZXcgTWF0cml4NCgpO1xuICAgIG1hdC5yb3RhdGVYKE1hdGguUEkgLyAyKVxuICAgICAgICAudHJhbnNsYXRlKG5ldyBWZWN0b3IzKDAsIC0xLCAwKSk7XG5cbiAgICBjb25lR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XG5cbiAgICB2YXIgY3lsaW5kZXJHZW8gPSBuZXcgQ3lsaW5kZXJHZW8oe1xuICAgICAgICBjYXBTZWdtZW50czogMTBcbiAgICB9KTtcbiAgICAvLyBBbGlnbiB3aXRoIHggYXhpc1xuICAgIG1hdC5pZGVudGl0eSgpLnJvdGF0ZVooTWF0aC5QSSAvIDIpO1xuICAgIGN5bGluZGVyR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XG5cbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFByb3ZpZGUgU2hhZG93TWFwUGFzcyBmb3Igc2hhZG93IHJlbmRlcmluZy5cbiAgICAgICAgICogQHR5cGUge2NsYXkucHJlUGFzcy5TaGFkb3dNYXB9XG4gICAgICAgICAqL1xuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgZW5hYmxlIGF1dG8gcmVzaXppbmcgZnJvbSBnaXZlbiBkZWZ1YWx0IHJlbmRlcmVyIHNpemUuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcblxuICAgICAgICBfY3JlYXRlTGlnaHRQYXNzTWF0OiBjcmVhdGVMaWdodFBhc3NNYXQsXG5cbiAgICAgICAgX2dCdWZmZXI6IG5ldyBHQnVmZmVyKCksXG5cbiAgICAgICAgX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKHtcbiAgICAgICAgICAgIGRlcHRoQnVmZmVyOiBmYWxzZVxuICAgICAgICB9KSxcblxuICAgICAgICBfbGlnaHRBY2N1bVRleDogbmV3IFRleHR1cmUyRCh7XG4gICAgICAgICAgICAvLyBGSVhNRSBEZXZpY2Ugbm90IHN1cHBvcnQgZmxvYXQgdGV4dHVyZVxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxuICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVFxuICAgICAgICB9KSxcblxuICAgICAgICBfZnVsbFF1YWRQYXNzOiBuZXcgRnVsbFF1YWRQYXNzKHtcbiAgICAgICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiB0cnVlXG4gICAgICAgIH0pLFxuXG4gICAgICAgIF9kaXJlY3Rpb25hbExpZ2h0TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQoZGlyZWN0aW9uYWxMaWdodFNoYWRlciksXG5cbiAgICAgICAgX2FtYmllbnRNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxuICAgICAgICAgICAgZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodCcpXG4gICAgICAgICkpLFxuICAgICAgICBfYW1iaWVudFNITWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfc2hfbGlnaHQnKVxuICAgICAgICApKSxcbiAgICAgICAgX2FtYmllbnRDdWJlbWFwTWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodCcpXG4gICAgICAgICkpLFxuXG4gICAgICAgIF9zcG90TGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BvdF9saWdodCcpLFxuICAgICAgICBfcG9pbnRMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdwb2ludF9saWdodCcpLFxuXG4gICAgICAgIF9zcGhlcmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdzcGhlcmVfbGlnaHQnKSxcbiAgICAgICAgX3R1YmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCd0dWJlX2xpZ2h0JyksXG5cbiAgICAgICAgX2xpZ2h0U3BoZXJlR2VvOiBuZXcgU3BoZXJlR2VvKHtcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDEwLFxuICAgICAgICAgICAgaGVpZ2h0U2VnZW1lbnRzOiAxMFxuICAgICAgICB9KSxcblxuICAgICAgICBfbGlnaHRDb25lR2VvOiBjb25lR2VvLFxuXG4gICAgICAgIF9saWdodEN5bGluZGVyR2VvOiBjeWxpbmRlckdlbyxcblxuICAgICAgICBfb3V0cHV0UGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLm91dHB1dCcpXG4gICAgICAgIH0pXG4gICAgfTtcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5SZW5kZXJlciMgKi8ge1xuICAgIC8qKlxuICAgICAqIERvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVuZGVyVG9UYXJnZXQgPSBmYWxzZV0gSWYgbm90IG91cHV0IGFuZCByZW5kZXIgdG8gdGhlIHRhcmdldCB0ZXh0dXJlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTaGFkb3cgPSB0cnVlXSBJZiBub3QgdXBkYXRlIHRoZSBzaGFkb3cuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTY2VuZSA9IHRydWVdIElmIG5vdCB1cGRhdGUgdGhlIHNjZW5lLlxuICAgICAqL1xuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XG5cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIG9wdHMucmVuZGVyVG9UYXJnZXQgPSBvcHRzLnJlbmRlclRvVGFyZ2V0IHx8IGZhbHNlO1xuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNoYWRvdyA9IG9wdHMubm90VXBkYXRlU2hhZG93IHx8IGZhbHNlO1xuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNjZW5lID0gb3B0cy5ub3RVcGRhdGVTY2VuZSB8fCBmYWxzZTtcblxuICAgICAgICBpZiAoIW9wdHMubm90VXBkYXRlU2NlbmUpIHtcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xuXG4gICAgICAgIC8vIFBFTkRJTkcgRm9yIHN0ZXJlbyByZW5kZXJpbmdcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcbiAgICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVxuICAgICAgICAgICAgJiYgKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGhcbiAgICAgICAgICAgIHx8IHJlbmRlcmVyLmdldEhlaWdodCgpICogZHByICE9PSB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci5nZXRXaWR0aCgpICogZHByLCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nQnVmZmVyLnVwZGF0ZShyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICAgICAgLy8gQWNjdW11bGF0ZSBsaWdodCBidWZmZXJcbiAgICAgICAgdGhpcy5fYWNjdW11bGF0ZUxpZ2h0QnVmZmVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCAhb3B0cy5ub3RVcGRhdGVTaGFkb3cpO1xuXG4gICAgICAgIGlmICghb3B0cy5yZW5kZXJUb1RhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGhpcy5fbGlnaHRBY2N1bVRleCk7XG5cbiAgICAgICAgICAgIHRoaXMuX291dHB1dFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIC8vIHRoaXMuX2dCdWZmZXIucmVuZGVyRGVidWcocmVuZGVyZXIsIGNhbWVyYSwgJ25vcm1hbCcpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxuICAgICAqL1xuICAgIGdldFRhcmdldFRleHR1cmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1UZXg7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2NsYXkuRnJhbWVCdWZmZXJ9XG4gICAgICovXG4gICAgZ2V0VGFyZ2V0RnJhbWVCdWZmZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Y2xheS5kZWZlcnJlZC5HQnVmZmVyfVxuICAgICAqL1xuICAgIGdldEdCdWZmZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXI7XG4gICAgfSxcblxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xuICAgICAgICB0aGlzLl9nQnVmZmVyLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcik7XG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydCA9IHRoaXMuX2dCdWZmZXIuZ2V0Vmlld3BvcnQoKTtcbiAgICB9LFxuXG4gICAgLy8gZ2V0RnVsbFF1YWRMaWdodFBhc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Z1bGxRdWFkUGFzcztcbiAgICAvLyB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHJlbmRlcmVyIHNpemUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICAgICAqL1xuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICAvLyBQRU5ESU5HIHZpZXdwb3J0ID9cbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgfSxcblxuICAgIF9hY2N1bXVsYXRlTGlnaHRCdWZmZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KSB7XG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICB2YXIgbGlnaHRBY2N1bVRleCA9IHRoaXMuX2xpZ2h0QWNjdW1UZXg7XG4gICAgICAgIHZhciBsaWdodEFjY3VtRnJhbWVCdWZmZXIgPSB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXI7XG5cbiAgICAgICAgdmFyIGV5ZVBvc2l0aW9uID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcblxuICAgICAgICAvLyBVcGRhdGUgdm9sdW1lIG1lc2hlc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTGlnaHRQcm94eShzY2VuZS5saWdodHNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSB0aGlzLnNoYWRvd01hcFBhc3M7XG4gICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIHVwZGF0ZVNoYWRvdykge1xuICAgICAgICAgICAgZ2wuY2xlYXJDb2xvcigxLCAxLCAxLCAxKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVMaWdodFNoYWRvdyhyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZWxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpO1xuXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5hdHRhY2gobGlnaHRBY2N1bVRleCk7XG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSByZW5kZXJlci5jbGVhckNvbG9yO1xuXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydDtcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XG4gICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XG4gICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xuICAgICAgICB9XG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XG4gICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgICAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xuICAgICAgICBpZiAodmlld3BvcnQpIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlcignc3RhcnRsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcbiAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2aWV3UHJvamVjdGlvbkludiwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLCBjYW1lcmEuaW52UHJvamVjdGlvbk1hdHJpeCk7XG5cbiAgICAgICAgdmFyIHZvbHVtZU1lc2hMaXN0ID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcbiAgICAgICAgICAgIHZhciB1VHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlcztcblxuICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcblxuICAgICAgICAgICAgaWYgKHZvbHVtZU1lc2gpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB2b2x1bWVNZXNoLm1hdGVyaWFsO1xuICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIHdpbGwgYWZmZWN0IHRoZSBzY2VuZSBib3VuZGluZyBib3ggd2hlbiByZW5kZXJpbmdcbiAgICAgICAgICAgICAgICAvLyBpZiBjYXN0U2hhZG93IGlzIHRydWVcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHZhciB1bmtub3duTGlnaHRUeXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnBvaW50TGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwucG9pbnRMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5wb2ludExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwb3RMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5zcG90TGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BvdExpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RGlyZWN0aW9uJywgdVRwbC5zcG90TGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3VtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3BlbnVtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2ZhbGxvZmZGYWN0b3InLCB1VHBsLnNwb3RMaWdodEZhbGxvZmZGYWN0b3IudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BoZXJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BoZXJlTGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYWRpdXMnLCB1VHBsLnNwaGVyZUxpZ2h0UmFkaXVzLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5zcGhlcmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC50dWJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwudHViZUxpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RXh0ZW5kJywgdVRwbC50dWJlTGlnaHRFeHRlbmQudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnR1YmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25MaWdodFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2V5ZVBvc2l0aW9uJywgZXllUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMigpKTtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xuXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaExpc3QucHVzaCh2b2x1bWVNZXNoKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSB0aGlzLl9mdWxsUXVhZFBhc3M7XG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBGdWxsIHF1YWQgbGlnaHRcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudE1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX1NIX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50U0hNYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2VmZmljaWVudHMnLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9DVUJFTUFQX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50Q3ViZW1hcE1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q3ViZW1hcCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXAudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnYnJkZkxvb2t1cCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXAudmFsdWUobGlnaHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU2hhZG93ID0gc2hhZG93TWFwUGFzcyAmJiBsaWdodC5jYXN0U2hhZG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2hhZG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmRpcmVjdGlvbmFsTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodERpcmVjdGlvbicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtvbncgbGlnaHQgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBwYXNzTWF0ZXJpYWwgPSBwYXNzLm1hdGVyaWFsO1xuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdleWVQb3NpdGlvbicsIGV5ZVBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMicsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTIoKSk7XG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTMoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdykge1xuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBsaWdodC5fX3NoYWRvd01hcCk7XG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodE1hdHJpY2VzJywgbGlnaHQuX19saWdodE1hdHJpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3NoYWRvd0Nhc2NhZGVDbGlwc05lYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIpO1xuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2hhZG93Q2FzY2FkZUNsaXBzRmFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXNzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyVm9sdW1lTWVzaExpc3QocmVuZGVyZXIsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignbGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xuXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XG5cbiAgICB9LFxuXG4gICAgX3ByZXBhcmVMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdvcmxkVmlldyA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpIHtcbiAgICAgICAgICAgIHZhciBzaGFkb3dDYXN0ZXJzO1xuXG4gICAgICAgICAgICBzaGFkb3dDYXN0ZXJzID0gdGhpcy5fc2hhZG93Q2FzdGVycyB8fCAodGhpcy5fc2hhZG93Q2FzdGVycyA9IFtdKTtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICB2YXIgbGlzdCA9IHNjZW5lLm9wYXF1ZUxpc3Q7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobGlzdFtpXS5jYXN0U2hhZG93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc3RlcnNbY291bnQrK10gPSBsaXN0W2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNoYWRvd0Nhc3RlcnMubGVuZ3RoID0gY291bnQ7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gbGlnaHQudm9sdW1lTWVzaCB8fCBsaWdodC5fX3ZvbHVtZU1lc2g7XG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodC5jYXN0U2hhZG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLmlzRnJ1c3R1bUN1bGxlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLCBudWxsLCBjYW1lcmEsIHdvcmxkVmlldy5hcnJheSwgY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgc2hhZG93Q2FzdGVycywgdm9sdW1lTWVzaC5tYXRlcmlhbFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmVwYXJlU2luZ2xlTGlnaHRTaGFkb3coXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBzaGFkb3dDYXN0ZXJzLCBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgY2FzdGVycywgbWF0ZXJpYWwpIHtcbiAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgY2FzdGVycywgc2hhZG93TWFwc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBzaGFkb3dNYXBzWzBdKTtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dNYXBzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyU3BvdExpZ2h0U2hhZG93KFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBjYXN0ZXJzLCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIHNoYWRvd01hcHNbMF0pO1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cml4JywgbGlnaHRNYXRyaWNlc1swXSk7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRNYXRyaWNlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBjYXN0ZXJzLCBjYXNjYWRlQ2xpcHMsIGxpZ2h0TWF0cmljZXMsIHNoYWRvd01hcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgdmFyIGNhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwcy5zbGljZSgpO1xuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucG9wKCk7XG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIGZyb20gZmFyIHRvIG5lYXJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNGYXIucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGxpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xuXG4gICAgICAgICAgICAgICAgbGlnaHQuX19jYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzTmVhcjtcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwc0ZhcjtcbiAgICAgICAgICAgICAgICBsaWdodC5fX3NoYWRvd01hcCA9IHNoYWRvd01hcHNbMF07XG4gICAgICAgICAgICAgICAgbGlnaHQuX19saWdodE1hdHJpY2VzID0gbGlnaHRNYXRyaWNlcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBVcGRhdGUgbGlnaHQgdm9sdW1lIG1lc2hcbiAgICAvLyBMaWdodCB2b2x1bWUgbWVzaCBpcyByZW5kZXJlZCBpbiBsaWdodCBhY2N1bXVsYXRlIHBhc3MgaW5zdGVhZCBvZiBmdWxsIHF1YWQuXG4gICAgLy8gSXQgd2lsbCByZWR1Y2UgcGl4ZWxzIHNpZ25pZmljYW50bHkgd2hlbiBsb2NhbCBsaWdodCBpcyByZWxhdGl2ZWx5IHNtYWxsLlxuICAgIC8vIEFuZCB3ZSBjYW4gdXNlIGN1c3RvbSB2b2x1bWUgbWVzaCB0byBzaGFwZSB0aGUgbGlnaHQuXG4gICAgLy9cbiAgICAvLyBTZWUgXCJEZWZlcnJlZCBTaGFkaW5nIE9wdGltaXphdGlvbnNcIiBpbiBHREMyMDExXG4gICAgX3VwZGF0ZUxpZ2h0UHJveHk6IGZ1bmN0aW9uIChsaWdodCkge1xuICAgICAgICB2YXIgdm9sdW1lTWVzaDtcbiAgICAgICAgaWYgKGxpZ2h0LnZvbHVtZU1lc2gpIHtcbiAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBsb2NhbCBsaWdodCAocG9pbnQgYW5kIHNwb3QpIG5lZWRzIHZvbHVtZSBtZXNoLlxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbmFsIGFuZCBhbWJpZW50IGxpZ2h0IHJlbmRlcnMgaW4gZnVsbCBxdWFkXG4gICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1NQSEVSRV9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGFkZXIgPSBsaWdodC50eXBlID09PSAnU1BIRVJFX0xJR0hUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zcGhlcmVMaWdodFNoYWRlciA6IHRoaXMuX3BvaW50TGlnaHRTaGFkZXI7XG4gICAgICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIGNyZWF0ZWQgYXV0b21hdGljYWxseVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0Ll9fdm9sdW1lTWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbmV3IE1lc2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQoc2hhZGVyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRTcGhlcmVHZW8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbGlnaHQgdm9sdW1lIG1lc2ggaW50ZXJzZWN0IGNhbWVyYSBuZWFyIHBsYW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBtZXNoIGluc2lkZSBjYW4gc3RpbGwgYmUgcmVuZGVyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBsaWdodC5yYW5nZSArIChsaWdodC5yYWRpdXMgfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KHIsIHIsIHIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQodGhpcy5fc3BvdExpZ2h0U2hhZGVyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLl9saWdodENvbmVHZW8sXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IE1hdGgudGFuKGxpZ2h0LnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KGFzcGVjdCAqIHJhbmdlLCBhc3BlY3QgKiByYW5nZSwgcmFuZ2UgLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0Ll9fdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaCB8fCBuZXcgTWVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHRoaXMuX3R1YmVMaWdodFNoYWRlciksXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDeWxpbmRlckdlbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQobGlnaHQubGVuZ3RoIC8gMiArIHJhbmdlLCByYW5nZSwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xuICAgICAgICAgICAgdm9sdW1lTWVzaC51cGRhdGUoKTtcbiAgICAgICAgICAgIC8vIEFwcGx5IGxpZ2h0IHRyYW5zZm9ybVxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtLCBsaWdodC53b3JsZFRyYW5zZm9ybSwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgICAgICB2YXIgaGFzU2hhZG93ID0gdGhpcy5zaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3c7XG4gICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgX3JlbmRlclZvbHVtZU1lc2hMaXN0OiAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd29ybGRWaWV3UHJvamVjdGlvbiA9IG5ldyBNYXRyaXg0KCk7XG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xuICAgICAgICB2YXIgcHJlWk1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB2b2x1bWVNZXNoTGlzdCkge1xuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQ1VMTF9GQUNFKTtcbiAgICAgICAgICAgIGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xuICAgICAgICAgICAgZ2wuYmxlbmRGdW5jU2VwYXJhdGUoZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSwgZ2wuT05FKTtcbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVFVQUwpO1xuXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5ERVBUSF9CVUZGRVJfQklUKTtcblxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XG4gICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydFVuaWZvcm0gPSBbXG4gICAgICAgICAgICAgICAgdmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwcixcbiAgICAgICAgICAgICAgICB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCxcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodFxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2b2x1bWVNZXNoTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gdm9sdW1lTWVzaExpc3RbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBGcnVzdHVtIGN1bGxpbmdcbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlci5pc0ZydXN0dW1DdWxsZWQoXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2gsIG51bGwsIGNhbWVyYSwgd29ybGRWaWV3LmFycmF5LCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheVxuICAgICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gVXNlIHByZXogdG8gYXZvaWQgb25lIHBpeGVsIHJlbmRlcmVkIHR3aWNlXG4gICAgICAgICAgICAgICAgZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2xlYXIgREVQVEhfQlVGRkVSXG4gICAgICAgICAgICAgICAgZ2wuY2xlYXIoZ2wuREVQVEhfQlVGRkVSX0JJVCk7XG5cbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlld1Byb2plY3Rpb24sIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCB3b3JsZFZpZXcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHByZVpQcm9ncmFtID0gcmVuZGVyZXIuZ2V0UHJvZ3JhbSh2b2x1bWVNZXNoLCBwcmVaTWF0ZXJpYWwpO1xuICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guX19wcm9ncmFtID0gcHJlWlByb2dyYW07XG4gICAgICAgICAgICAgICAgcmVuZGVyZXIudmFsaWRhdGVQcm9ncmFtKHByZVpQcm9ncmFtKTtcbiAgICAgICAgICAgICAgICBwcmVaUHJvZ3JhbS5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBwcmVaTWF0ZXJpYWwuc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OO1xuICAgICAgICAgICAgICAgIHByZVpQcm9ncmFtLnNldFVuaWZvcm0oZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB3b3JsZFZpZXdQcm9qZWN0aW9uLmFycmF5KTtcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnJlbmRlcihyZW5kZXJlciwgcHJlWk1hdGVyaWFsLCBwcmVaUHJvZ3JhbSk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgbGlnaHRcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmVyLmdldFByb2dyYW0odm9sdW1lTWVzaCwgdm9sdW1lTWVzaC5tYXRlcmlhbCk7XG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5fX3Byb2dyYW0gPSBwcm9ncmFtO1xuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHZvbHVtZU1lc2gubWF0ZXJpYWwuc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OO1xuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShnbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIHdvcmxkVmlld1Byb2plY3Rpb24uYXJyYXkpO1xuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoZ2wsICdXSU5ET1dfU0laRScsIHdpbmRvd1NpemVVbmlmb3JtKTtcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKGdsLCAnVklFV1BPUlQnLCB2aWV3cG9ydFVuaWZvcm0pO1xuXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbC5iaW5kKHJlbmRlcmVyLCBwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnJlbmRlcihyZW5kZXJlciwgdm9sdW1lTWVzaC5tYXRlcmlhbCwgcHJvZ3JhbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVNTKTtcbiAgICAgICAgfTtcbiAgICB9KSgpLFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICAgICAgdGhpcy5fbGlnaHRDb25lR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB0aGlzLl9saWdodEN5bGluZGVyR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB0aGlzLl9saWdodFNwaGVyZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLl9mdWxsUXVhZFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgICAgIHRoaXMuX291dHB1dFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XG5cbiAgICAgICAgdGhpcy5fZGlyZWN0aW9uYWxMaWdodE1hdC5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IERlZmVycmVkUmVuZGVyZXI7XG4iLCIvLyBTcGhlcmljYWwgSGFybW9uaWMgSGVscGVyc1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcbmltcG9ydCBTa3lkb21lIGZyb20gJy4uL3BsdWdpbi9Ta3lkb21lJztcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xuaW1wb3J0IGdsbWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9IGdsbWF0cml4LnZlYzM7XG52YXIgc2ggPSB7fTtcblxuaW1wb3J0IHByb2plY3RFbnZNYXBTaGFkZXJDb2RlIGZyb20gJy4vc2hhZGVyL3Byb2plY3RFbnZNYXAuZ2xzbC5qcyc7XG5cbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xuXG4vLyBQcm9qZWN0IG9uIGdwdSwgYnV0IG5lZWRzIGJyb3dzZXIgdG8gc3VwcG9ydCByZWFkUGl4ZWxzIGFzIEZsb2F0MzJBcnJheS5cbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcEdQVShyZW5kZXJlciwgZW52TWFwKSB7XG4gICAgdmFyIHNoVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICB3aWR0aDogOSxcbiAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXG4gICAgfSk7XG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XG4gICAgICAgIGZyYWdtZW50OiBwcm9qZWN0RW52TWFwU2hhZGVyQ29kZVxuICAgIH0pO1xuICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdURVhUVVJFX1NJWkUnLCBlbnZNYXAud2lkdGgpO1xuICAgIHBhc3Muc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xuXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XG4gICAgZnJhbWVidWZmZXIuYXR0YWNoKHNoVGV4dHVyZSk7XG4gICAgcGFzcy5yZW5kZXIocmVuZGVyZXIsIGZyYW1lYnVmZmVyKTtcblxuICAgIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgIC8vIFRPRE8gT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggc3VwcG9ydCBGbG9hdDMyQXJyYXlcbiAgICB2YXIgcGl4ZWxzID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDQpO1xuICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoMCwgMCwgOSwgMSwgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLkZMT0FULCBwaXhlbHMpO1xuXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgOTsgaSsrKSB7XG4gICAgICAgIGNvZWZmW2kgKiAzXSA9IHBpeGVsc1tpICogNF07XG4gICAgICAgIGNvZWZmW2kgKiAzICsgMV0gPSBwaXhlbHNbaSAqIDQgKyAxXTtcbiAgICAgICAgY29lZmZbaSAqIDMgKyAyXSA9IHBpeGVsc1tpICogNCArIDJdO1xuICAgIH1cbiAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XG4gICAgcGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICByZXR1cm4gY29lZmY7XG59XG5cbmZ1bmN0aW9uIGhhcm1vbmljcyhub3JtYWwsIGluZGV4KXtcbiAgICB2YXIgeCA9IG5vcm1hbFswXTtcbiAgICB2YXIgeSA9IG5vcm1hbFsxXTtcbiAgICB2YXIgeiA9IG5vcm1hbFsyXTtcblxuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMS4wO1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAzKSB7XG4gICAgICAgIHJldHVybiB6O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNCkge1xuICAgICAgICByZXR1cm4geCAqIHo7XG4gICAgfVxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA1KSB7XG4gICAgICAgIHJldHVybiB5ICogejtcbiAgICB9XG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDYpIHtcbiAgICAgICAgcmV0dXJuIHggKiB5O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNykge1xuICAgICAgICByZXR1cm4gMy4wICogeiAqIHogLSAxLjA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geCAqIHggLSB5ICogeTtcbiAgICB9XG59XG5cbnZhciBub3JtYWxUcmFuc2Zvcm0gPSB7XG4gICAgcHg6IFsyLCAxLCAwLCAtMSwgLTEsIDFdLFxuICAgIG54OiBbMiwgMSwgMCwgMSwgLTEsIC0xXSxcbiAgICBweTogWzAsIDIsIDEsIDEsIC0xLCAtMV0sXG4gICAgbnk6IFswLCAyLCAxLCAxLCAxLCAxXSxcbiAgICBwejogWzAsIDEsIDIsIC0xLCAtMSwgLTFdLFxuICAgIG56OiBbMCwgMSwgMiwgMSwgLTEsIDFdXG59O1xuXG4vLyBQcm9qZWN0IG9uIGNwdS5cbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcENQVShyZW5kZXJlciwgY3ViZVBpeGVscywgd2lkdGgsIGhlaWdodCkge1xuICAgIHZhciBjb2VmZiA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KDkgKiAzKTtcbiAgICB2YXIgbm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcbiAgICB2YXIgdGV4ZWwgPSB2ZWMzLmNyZWF0ZSgpO1xuICAgIHZhciBmZXRjaE5vcm1hbCA9IHZlYzMuY3JlYXRlKCk7XG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCA5OyBtKyspIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGFyZ2V0cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIHBpeGVscyA9IGN1YmVQaXhlbHNbdGFyZ2V0c1trXV07XG5cbiAgICAgICAgICAgIHZhciBzaWRlUmVzdWx0ID0gdmVjMy5jcmVhdGUoKTtcbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gMDtcbiAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSBub3JtYWxUcmFuc2Zvcm1bdGFyZ2V0c1trXV07XG4gICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzBdID0geCAvICh3aWR0aCAtIDEuMCkgKiAyLjAgLSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gRmxpcCB5P1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxbMV0gPSB5IC8gKGhlaWdodCAtIDEuMCkgKiAyLjAgLSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsyXSA9IC0xLjA7XG4gICAgICAgICAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG5vcm1hbCwgbm9ybWFsKTtcblxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFswXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMF1dICogdHJhbnNmb3JtWzNdO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsxXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMV1dICogdHJhbnNmb3JtWzRdO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsyXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMl1dICogdHJhbnNmb3JtWzVdO1xuXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdID0gcGl4ZWxzW2krK10gLyAyNTU7XG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdID0gcGl4ZWxzW2krK10gLyAyNTU7XG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdID0gcGl4ZWxzW2krK10gLyAyNTU7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJHQk0gRGVjb2RlXG4gICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHBpeGVsc1tpKytdIC8gMjU1ICogNTEuNTtcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gKj0gc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdICo9IHNjYWxlO1xuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsyXSAqPSBzY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNpZGVSZXN1bHQsIHNpZGVSZXN1bHQsIHRleGVsLCBoYXJtb25pY3MoZmV0Y2hOb3JtYWwsIG0pICogLW5vcm1hbFsyXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIC1ub3JtYWwueiBlcXVhbHMgY29zKHRoZXRhKSBvZiBMYW1iZXJ0aWFuXG4gICAgICAgICAgICAgICAgICAgIGRpdmlkZXIgKz0gLW5vcm1hbFsyXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHJlc3VsdCwgcmVzdWx0LCBzaWRlUmVzdWx0LCAxIC8gZGl2aWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb2VmZlttICogM10gPSByZXN1bHRbMF0gLyA2LjA7XG4gICAgICAgIGNvZWZmW20gKiAzICsgMV0gPSByZXN1bHRbMV0gLyA2LjA7XG4gICAgICAgIGNvZWZmW20gKiAzICsgMl0gPSByZXN1bHRbMl0gLyA2LjA7XG4gICAgfVxuICAgIHJldHVybiBjb2VmZjtcbn1cblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHMubG9kXVxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk1dXG4gKi9cbnNoLnByb2plY3RFbnZpcm9ubWVudE1hcCA9IGZ1bmN0aW9uIChyZW5kZXJlciwgZW52TWFwLCBvcHRzKSB7XG5cbiAgICAvLyBUT0RPIHNSR0JcblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIG9wdHMubG9kID0gb3B0cy5sb2QgfHwgMDtcblxuICAgIHZhciBza3lib3g7XG4gICAgdmFyIGR1bW15U2NlbmUgPSBuZXcgU2NlbmUoKTtcbiAgICB2YXIgc2l6ZSA9IDY0O1xuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lkb21lKHtcbiAgICAgICAgICAgIHNjZW5lOiBkdW1teVNjZW5lLFxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudk1hcFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNpemUgPSAoZW52TWFwLmltYWdlICYmIGVudk1hcC5pbWFnZS5weCkgPyBlbnZNYXAuaW1hZ2UucHgud2lkdGggOiBlbnZNYXAud2lkdGg7XG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lib3goe1xuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52TWFwXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IHRvIHJnYm1cbiAgICB2YXIgd2lkdGggPSBNYXRoLmNlaWwoc2l6ZSAvIE1hdGgucG93KDIsIG9wdHMubG9kKSk7XG4gICAgdmFyIGhlaWdodCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcbiAgICB2YXIgcmdibVRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH0pO1xuICAgIHZhciBmcmFtZWJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xuICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XG4gICAgaWYgKG9wdHMuZGVjb2RlUkdCTSkge1xuICAgICAgICBza3lib3gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0RFQ09ERScpO1xuICAgIH1cbiAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdsb2QnLCBvcHRzLmxvZCk7XG4gICAgdmFyIGVudk1hcFBhc3MgPSBuZXcgRW52aXJvbm1lbnRNYXBQYXNzKHtcbiAgICAgICAgdGV4dHVyZTogcmdibVRleHR1cmVcbiAgICB9KTtcbiAgICB2YXIgY3ViZVBpeGVscyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjdWJlUGl4ZWxzW3RhcmdldHNbaV1dID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcbiAgICAgICAgdmFyIGNhbWVyYSA9IGVudk1hcFBhc3MuZ2V0Q2FtZXJhKHRhcmdldHNbaV0pO1xuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XG4gICAgICAgIGZyYW1lYnVmZmVyLmF0dGFjaChyZ2JtVGV4dHVyZSk7XG4gICAgICAgIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcbiAgICAgICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscyhcbiAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQsXG4gICAgICAgICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuVU5TSUdORURfQllURSwgY3ViZVBpeGVsc1t0YXJnZXRzW2ldXVxuICAgICAgICApO1xuICAgICAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuICAgIH1cblxuICAgIHNreWJveC5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICBmcmFtZWJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICByZ2JtVGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcblxuICAgIHJldHVybiBwcm9qZWN0RW52aXJvbm1lbnRNYXBDUFUocmVuZGVyZXIsIGN1YmVQaXhlbHMsIHdpZHRoLCBoZWlnaHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgc2g7XG4iLCJcbi8qKlxuICogSGVscGVycyBmb3IgY3JlYXRpbmcgYSBjb21tb24gM2QgYXBwbGljYXRpb24uXG4gKiBAbmFtZXNwYWNlIGNsYXkuYXBwbGljYXRpb25cbiAqL1xuXG4gLy8gVE9ETyBjcmVhdGVDb21wb3NpdG9yXG4gLy8gVE9ETyBEaXNwb3NlIHRlc3QuIGdlb0NhY2hlIHRlc3QuXG4gLy8gVE9ETyBUb25lbWFwcGluZyBleHBvc3VyZVxuIC8vIFRPRE8gZml0TW9kZWwuXG4gLy8gVE9ETyBQYXJ0aWNsZSA/XG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi9SZW5kZXJlcic7XG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9TY2VuZSc7XG5pbXBvcnQgVGltZWxpbmUgZnJvbSAnLi9hbmltYXRpb24vVGltZWxpbmUnO1xuaW1wb3J0IEN1YmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9DdWJlJztcbmltcG9ydCBTcGhlcmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9TcGhlcmUnO1xuaW1wb3J0IFBsYW5lR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4vR2VvbWV0cnknO1xuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi9zaGFkZXIvbGlicmFyeSc7XG5pbXBvcnQgTWVzaCBmcm9tICcuL01lc2gnO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcbmltcG9ydCBHTFRGTG9hZGVyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcbmltcG9ydCBEaXJlY3Rpb25hbExpZ2h0IGZyb20gJy4vbGlnaHQvRGlyZWN0aW9uYWwnO1xuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi9saWdodC9Qb2ludCc7XG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4vbGlnaHQvU3BvdCc7XG5pbXBvcnQgQW1iaWVudExpZ2h0IGZyb20gJy4vbGlnaHQvQW1iaWVudCc7XG5pbXBvcnQgQW1iaWVudEN1YmVtYXBMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcbmltcG9ydCBBbWJpZW50U0hMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XG5pbXBvcnQgU2hhZG93TWFwUGFzcyBmcm9tICcuL3ByZVBhc3MvU2hhZG93TWFwJztcbmltcG9ydCBSYXlQaWNraW5nIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcbmltcG9ydCBEZWZlcnJlZFJlbmRlcmVyIGZyb20gJy4vZGVmZXJyZWQvUmVuZGVyZXInO1xuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHNoVXRpbCBmcm9tICcuL3V0aWwvc2gnO1xuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcblxuaW1wb3J0IGNvbG9yVXRpbCBmcm9tICcuL2NvcmUvY29sb3InO1xudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xuXG5pbXBvcnQgJy4vc2hhZGVyL2J1aWx0aW4nO1xuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XG5cbnZhciBFVkVfTkFNRVMgPSBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLFxuICAgICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZScsXG4gICAgJ21vdXNld2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnXG5dO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR8SFRNTEltYWdlRWxlbWVudHxIVE1MVmlkZW9FbGVtZW50fSBJbWFnZUxpa2VcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEFycmF5LjxudW1iZXI+fSBDb2xvclxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtIVE1MRG9tRWxlbWVudHxzdHJpbmd9IERvbVF1ZXJ5XG4gKi9cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEXG4gKiBAcGFyYW0ge0RvbVF1ZXJ5fSBkb20gQ29udGFpbmVyIGRvbSBlbGVtZW50IG9yIGEgc2VsZWN0b3Igc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gYHF1ZXJ5U2VsZWN0b3JgXG4gKiBAcGFyYW0ge09iamVjdH0gYXBwTlNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFwcE5TLmluaXQgSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGluaXRpbmcgYXBwLlxuICogICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZXR1cm4gYSBwcm9taXNlIGluIGluaXQgdG8gc3RhcnQgdGhlIGxvb3AgYXN5bmNocm9ub3VzbHkgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFwcE5TLmxvb3AgTG9vcCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGVhY2ggZnJhbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhcHBOUy5iZWZvcmVSZW5kZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFwcE5TLmFmdGVyUmVuZGVyXG4gKiBAcGFyYW0ge251bWJlcn0gW2FwcE5TLndpZHRoXSBDb250YWluZXIgd2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gW2FwcE5TLmhlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXBwTlMuZGV2aWNlUGl4ZWxSYXRpb11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXBwTlMuZ3JhcGhpY10gR3JhcGhpYyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBzaGFkb3csIHBvc3RFZmZlY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FwcE5TLmdyYXBoaWMuc2hhZG93PWZhbHNlXSBJZiBlbmFibGUgc2hhZG93XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcHBOUy5ncmFwaGljLmxpbmVhcj1mYWxzZV0gSWYgdXNlIGxpbmVhciBzcGFjZVxuICogQHBhcmFtIHtib29sZWFufSBbYXBwTlMuZ3JhcGhpYy50b25lbWFwcGluZz1mYWxzZV0gSWYgZW5hYmxlIEFDRVMgdG9uZSBtYXBwaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBbYXBwTlMuZXZlbnQ9ZmFsc2VdIElmIGVuYWJsZSBtb3VzZS90b3VjaCBldmVudC4gSXQgd2lsbCBzbG93IGRvd24gdGhlIHN5c3RlbSBpZiBnZW9tZXRyaWVzIGFyZSBjb21wbGV4LlxuICovXG5mdW5jdGlvbiBBcHAzRChkb20sIGFwcE5TKSB7XG5cbiAgICBhcHBOUyA9IGFwcE5TIHx8IHt9O1xuICAgIGFwcE5TLmdyYXBoaWMgPSBhcHBOUy5ncmFwaGljIHx8IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBkb20gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvbSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZG9tJyk7IH1cblxuICAgIHZhciBpc0RvbUNhbnZhcyA9IGRvbS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FOVkFTJztcbiAgICB2YXIgcmVuZGVyZXJPcHRzID0ge307XG4gICAgaXNEb21DYW52YXMgJiYgKHJlbmRlcmVyT3B0cy5jYW52YXMgPSBkb20pO1xuICAgIGFwcE5TLmRldmljZVBpeGVsUmF0aW8gJiYgKHJlbmRlcmVyT3B0cy5kZXZpY2VQaXhlbFJhdGlvID0gYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyk7XG5cbiAgICB2YXIgZ1JlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHJlbmRlcmVyT3B0cyk7XG4gICAgdmFyIGdXaWR0aCA9IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcbiAgICB2YXIgZ0hlaWdodCA9IGFwcE5TLmhlaWdodCB8fCBkb20uY2xpZW50SGVpZ2h0O1xuXG4gICAgdmFyIGdTY2VuZSA9IG5ldyBTY2VuZSgpO1xuICAgIHZhciBnVGltZWxpbmUgPSBuZXcgVGltZWxpbmUoKTtcbiAgICB2YXIgZ1NoYWRvd1Bhc3MgPSBhcHBOUy5ncmFwaGljLnNoYWRvdyAmJiBuZXcgU2hhZG93TWFwUGFzcygpO1xuICAgIHZhciBnUmF5UGlja2luZyA9IGFwcE5TLmV2ZW50ICYmIG5ldyBSYXlQaWNraW5nKHtcbiAgICAgICAgc2NlbmU6IGdTY2VuZSxcbiAgICAgICAgcmVuZGVyZXI6IGdSZW5kZXJlclxuICAgIH0pO1xuXG4gICAgIWlzRG9tQ2FudmFzICYmIGRvbS5hcHBlbmRDaGlsZChnUmVuZGVyZXIuY2FudmFzKTtcblxuICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcblxuICAgIHZhciBnRnJhbWVUaW1lID0gMDtcbiAgICB2YXIgZ0VsYXBzZWRUaW1lID0gMDtcblxuICAgIGdUaW1lbGluZS5zdGFydCgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29udGFpbmVyIGRvbSBlbGVtZW50XG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjY29udGFpbmVyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRG9tRWxlbWVudH1cbiAgICAgICAgICovXG4gICAgICAgIGNvbnRhaW5lcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbTsgfSB9LFxuICAgICAgICAvKipcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNyZW5kZXJlclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcmVyOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyOyB9fSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjc2NlbmVcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBzY2VuZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTY2VuZTsgfX0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3RpbWVsaW5lXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgdGltZWxpbmU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnVGltZWxpbmU7IH19LFxuICAgICAgICAvKipcbiAgICAgICAgICogVGltZSBlbGFwc2VkIHNpbmNlIGxhc3QgZnJhbWUuIENhbiBiZSB1c2VkIGluIGxvb3AgdG8gY2FsY3VsYXRlIHRoZSBtb3ZlbWVudC5cbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNmcmFtZVRpbWVcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGZyYW1lVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdGcmFtZVRpbWU7IH19LFxuICAgICAgICAvKipcbiAgICAgICAgICogVGltZSBlbGFwc2VkIHNpbmNlIGFwcGxpY2F0aW9uIGNyZWF0ZWQuXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZWxhcHNlZFRpbWVcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGVsYXBzZWRUaW1lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ0VsYXBzZWRUaW1lOyB9fVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBhcHBsaWNhdGlvbi4gV2lsbCB1c2UgdGhlIGNvbnRhaW5lciBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgaWYgd2lkdGgvaGVpZ2h0IGluIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbi5cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAbWVtYmVyT2Yge2NsYXkuYXBwbGljYXRpb24uQXBwM0R9XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cbiAgICAgKi9cbiAgICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIGdXaWR0aCA9IHdpZHRoIHx8IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcbiAgICAgICAgZ0hlaWdodCA9IGhlaWdodCB8fCBkb20uaGVpZ2h0IHx8IGRvbS5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSB0aGUgYXBwbGljYXRpb25cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKi9cbiAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoYXBwTlMuZGlzcG9zZSkge1xuICAgICAgICAgICAgYXBwTlMuZGlzcG9zZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnVGltZWxpbmUuc3RvcCgpO1xuICAgICAgICBnUmVuZGVyZXIuZGlzcG9zZVNjZW5lKGdTY2VuZSk7XG4gICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLmRpc3Bvc2UoZ1JlbmRlcmVyKTtcblxuICAgICAgICBkb20uaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVUeXBlKSB7XG4gICAgICAgICAgICB0aGlzW21ha2VIYW5kbGVyTmFtZShldmVUeXBlKV0gJiYgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIobWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdSYXlQaWNraW5nICYmIHRoaXMuX2luaXRNb3VzZUV2ZW50cyhnUmF5UGlja2luZyk7XG5cbiAgICB0aGlzLl9nZW9DYWNoZSA9IG5ldyBMUlVDYWNoZSgyMCk7XG4gICAgdGhpcy5fdGV4Q2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xuXG4gICAgLy8gRG8gaW5pdCB0aGUgYXBwbGljYXRpb24uXG4gICAgdmFyIGluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGFwcE5TLmluaXQgJiYgYXBwTlMuaW5pdCh0aGlzKSk7XG4gICAgLy8gVXNlIHRoZSBpbml0ZWQgY2FtZXJhLlxuICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpKTtcblxuICAgIHZhciBnVGV4dHVyZXNMaXN0ID0ge307XG4gICAgdmFyIGdHZW9tZXRyaWVzTGlzdCA9IHt9O1xuXG4gICAgaWYgKCFhcHBOUy5sb29wKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTWlzcyBsb29wIG1ldGhvZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFwcE5TLmxvb3AgJiYgZ1RpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcbiAgICAgICAgICAgIGdGcmFtZVRpbWUgPSBmcmFtZVRpbWU7XG4gICAgICAgICAgICBnRWxhcHNlZFRpbWUgKz0gZnJhbWVUaW1lO1xuICAgICAgICAgICAgYXBwTlMubG9vcChzZWxmKTtcblxuICAgICAgICAgICAgZ1NjZW5lLnVwZGF0ZSgpO1xuXG4gICAgICAgICAgICBzZWxmLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCBnU2NlbmUub3BhcXVlTGlzdCwgZmFsc2UpO1xuICAgICAgICAgICAgc2VsZi5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgZ1NjZW5lLnRyYW5zcGFyZW50TGlzdCwgZmFsc2UpO1xuICAgICAgICAgICAgdmFyIHNreWJveExpc3QgPSBbXTtcbiAgICAgICAgICAgIGdTY2VuZS5za3lib3ggJiYgc2t5Ym94TGlzdC5wdXNoKGdTY2VuZS5za3lib3gpO1xuICAgICAgICAgICAgZ1NjZW5lLnNreWRvbWUgJiYgc2t5Ym94TGlzdC5wdXNoKGdTY2VuZS5za3lkb21lKTtcbiAgICAgICAgICAgIHNlbGYuX3VwZGF0ZUdyYXBoaWNPcHRpb25zKGFwcE5TLmdyYXBoaWMsIHNreWJveExpc3QsIHRydWUpO1xuXG4gICAgICAgICAgICBnUmF5UGlja2luZyAmJiAoZ1JheVBpY2tpbmcuY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKSk7XG4gICAgICAgICAgICAvLyBSZW5kZXIgc2hhZG93IHBhc3NcbiAgICAgICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLnJlbmRlcihnUmVuZGVyZXIsIGdTY2VuZSwgbnVsbCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIGFwcE5TLmJlZm9yZVJlbmRlciAmJiBhcHBOUy5iZWZvcmVSZW5kZXIoc2VsZik7XG4gICAgICAgICAgICBzZWxmLl9kb1JlbmRlcihnUmVuZGVyZXIsIGdTY2VuZSwgdHJ1ZSk7XG4gICAgICAgICAgICBhcHBOUy5hZnRlclJlbmRlciAmJiBhcHBOUy5hZnRlclJlbmRlcihzZWxmKTtcblxuICAgICAgICAgICAgLy8gTWFyayBhbGwgcmVzb3VyY2VzIHVudXNlZDtcbiAgICAgICAgICAgIG1hcmtVbnVzZWQoZ1RleHR1cmVzTGlzdCk7XG4gICAgICAgICAgICBtYXJrVW51c2VkKGdHZW9tZXRyaWVzTGlzdCk7XG5cbiAgICAgICAgICAgIC8vIENvbGxlY3QgcmVzb3VyY2VzIHVzZWQgaW4gdGhpcyBmcmFtZS5cbiAgICAgICAgICAgIHZhciBuZXdUZXh0dXJlc0xpc3QgPSBbXTtcbiAgICAgICAgICAgIHZhciBuZXdHZW9tZXRyaWVzTGlzdCA9IFtdO1xuICAgICAgICAgICAgY29sbGVjdFJlc291cmNlcyhnU2NlbmUsIG5ld1RleHR1cmVzTGlzdCwgbmV3R2VvbWV0cmllc0xpc3QpO1xuXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHRob3NlIHVuc2VkIHJlc291cmNlcy5cbiAgICAgICAgICAgIGNoZWNrQW5kRGlzcG9zZShnUmVuZGVyZXIsIGdUZXh0dXJlc0xpc3QpO1xuICAgICAgICAgICAgY2hlY2tBbmREaXNwb3NlKGdSZW5kZXJlciwgZ0dlb21ldHJpZXNMaXN0KTtcblxuICAgICAgICAgICAgZ1RleHR1cmVzTGlzdCA9IG5ld1RleHR1cmVzTGlzdDtcbiAgICAgICAgICAgIGdHZW9tZXRyaWVzTGlzdCA9IG5ld0dlb21ldHJpZXNMaXN0O1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNJbWFnZUxpa2VFbGVtZW50KHZhbCkge1xuICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBJbWFnZVxuICAgICAgICB8fCB2YWwgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudFxuICAgICAgICB8fCB2YWwgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRLZXlGcm9tSW1hZ2VMaWtlKHZhbCkge1xuICAgIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXG4gICAgICAgID8gdmFsIDogKHZhbC5fX2tleV9fIHx8ICh2YWwuX19rZXlfXyA9IHV0aWwuZ2VuR1VJRCgpKSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSB7XG4gICAgcmV0dXJuICdfJyArIGV2ZVR5cGUgKyAnSGFuZGxlcic7XG59XG5cbmZ1bmN0aW9uIHBhY2thZ2VFdmVudChldmVudFR5cGUsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFksIHdoZWVsRGVsdGEpIHtcbiAgICB2YXIgZXZlbnQgPSB1dGlsLmNsb25lKHBpY2tSZXN1bHQpO1xuICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XG4gICAgZXZlbnQub2Zmc2V0WCA9IG9mZnNldFg7XG4gICAgZXZlbnQub2Zmc2V0WSA9IG9mZnNldFk7XG4gICAgaWYgKHdoZWVsRGVsdGEgIT09IG51bGwpIHtcbiAgICAgICAgZXZlbnQud2hlZWxEZWx0YSA9IHdoZWVsRGVsdGE7XG4gICAgfVxuICAgIHJldHVybiBldmVudDtcbn1cblxuZnVuY3Rpb24gYnViYmxpbmdFdmVudCh0YXJnZXQsIGV2ZW50KSB7XG4gICAgd2hpbGUgKHRhcmdldCAmJiAhZXZlbnQuY2FuY2VsQnViYmxlKSB7XG4gICAgICAgIHRhcmdldC50cmlnZ2VyKGV2ZW50LnR5cGUsIGV2ZW50KTtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmdldFBhcmVudCgpO1xuICAgIH1cbn1cblxuQXBwM0QucHJvdG90eXBlLl9pbml0TW91c2VFdmVudHMgPSBmdW5jdGlvbiAocmF5UGlja2luZykge1xuICAgIHZhciBkb20gPSB0aGlzLmNvbnRhaW5lcjtcblxuICAgIHZhciBvbGRUYXJnZXQgPSBudWxsO1xuICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChfZXZlVHlwZSkge1xuICAgICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcihfZXZlVHlwZSwgdGhpc1ttYWtlSGFuZGxlck5hbWUoX2V2ZVR5cGUpXSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoIXJheVBpY2tpbmcuY2FtZXJhKSB7IC8vIE5vdCBoYXZlIGNhbWVyYSB5ZXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB2YXIgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdmFyIG9mZnNldFgsIG9mZnNldFk7XG4gICAgICAgICAgICB2YXIgZXZlVHlwZSA9IF9ldmVUeXBlO1xuXG4gICAgICAgICAgICBpZiAoZXZlVHlwZS5pbmRleE9mKCd0b3VjaCcpID49IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgdG91Y2ggPSBldmVUeXBlICE9ICd0b3VjaGVuZCdcbiAgICAgICAgICAgICAgICA/IGUudGFyZ2V0VG91Y2hlc1swXVxuICAgICAgICAgICAgICAgIDogZS5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZVR5cGUgPSAnbW91c2Vkb3duJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNldXAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVUeXBlID09PSAndG91Y2htb3ZlJykge1xuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlbW92ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9mZnNldFggPSB0b3VjaC5jbGllbnRYIC0gYm94LmxlZnQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHRvdWNoLmNsaWVudFkgLSBib3gudG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IGUuY2xpZW50WCAtIGJveC5sZWZ0O1xuICAgICAgICAgICAgICAgIG9mZnNldFkgPSBlLmNsaWVudFkgLSBib3gudG9wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHJheVBpY2tpbmcucGljayhvZmZzZXRYLCBvZmZzZXRZKTtcblxuICAgICAgICAgICAgdmFyIGRlbHRhO1xuICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdET01Nb3VzZVNjcm9sbCcgfHwgZXZlVHlwZSA9PT0gJ21vdXNld2hlZWwnKSB7XG4gICAgICAgICAgICAgICAgZGVsdGEgPSAoZS53aGVlbERlbHRhKSA/IGUud2hlZWxEZWx0YSAvIDEyMCA6IC0oZS5kZXRhaWwgfHwgMCkgLyAzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGlja1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIHNpbGVudCBlbGVtZW50LlxuICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0LnRhcmdldC5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChldmVUeXBlID09PSAnbW91c2Vtb3ZlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIHRvdWNoZG93biBzaG91bGQgdHJpZ2dlciBtb3VzZW92ZXIgZXZlbnQgP1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9IHBpY2tSZXN1bHQudGFyZ2V0ICE9PSBvbGRUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRUYXJnZXQgJiYgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9mZnNldFgsIG9mZnNldFkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlbW92ZScsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdmVyJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoZXZlVHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgZGVsdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gcGlja1Jlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvbGRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KG9sZFRhcmdldCwgcGFja2FnZUV2ZW50KCdtb3VzZW91dCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcbiAgICAgICAgICAgICAgICB9LCBvZmZzZXRYLCBvZmZzZXRZKSk7XG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgdGhpcyk7XG59O1xuXG5BcHAzRC5wcm90b3R5cGUuX3VwZGF0ZUdyYXBoaWNPcHRpb25zID0gZnVuY3Rpb24gKGdyYXBoaWNPcHRzLCBsaXN0LCBpc1NreWJveCkge1xuICAgIHZhciBlbmFibGVUb25lbWFwcGluZyA9ICEhZ3JhcGhpY09wdHMudG9uZW1hcHBpbmc7XG4gICAgdmFyIGlzTGluZWFyU3BhY2UgPSAhIWdyYXBoaWNPcHRzLmxpbmVhcjtcblxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG1hdCA9IGxpc3RbaV0ubWF0ZXJpYWw7XG4gICAgICAgIGlmIChtYXQgPT09IHByZXZNYXRlcmlhbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlbmFibGVUb25lbWFwcGluZyA/IG1hdC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJykgOiBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJyk7XG4gICAgICAgIGlmIChpc0xpbmVhclNwYWNlKSB7XG4gICAgICAgICAgICB2YXIgZGVjb2RlU1JHQiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoaXNTa3lib3ggJiYgbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKSAmJiAhbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKS5zUkdCKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlU1JHQiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVjb2RlU1JHQiAmJiBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xuICAgICAgICAgICAgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdDtcbiAgICB9XG59O1xuXG5BcHAzRC5wcm90b3R5cGUuX2RvUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xuICAgIHZhciBjYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XG4gICAgY2FtZXJhLmFzcGVjdCA9IHJlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XG4gICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lKTtcbn07XG5cblxuZnVuY3Rpb24gbWFya1VudXNlZChyZXNvdXJjZUxpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXNvdXJjZUxpc3RbaV0uX191c2VkX18gPSAwO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tBbmREaXNwb3NlKHJlbmRlcmVyLCByZXNvdXJjZUxpc3QpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXJlc291cmNlTGlzdFtpXS5fX3VzZWRfXykge1xuICAgICAgICAgICAgcmVzb3VyY2VMaXN0W2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVVc2VkKHJlc291cmNlLCBsaXN0KSB7XG4gICAgcmVzb3VyY2UuX191c2VkX18gPSByZXNvdXJjZS5fX3VzZWRfXyB8fCAwO1xuICAgIHJlc291cmNlLl9fdXNlZF9fKys7XG4gICAgaWYgKHJlc291cmNlLl9fdXNlZF9fID09PSAxKSB7XG4gICAgICAgIC8vIERvbid0IHB1c2ggdG8gdGhlIGxpc3QgdHdpY2UuXG4gICAgICAgIGxpc3QucHVzaChyZXNvdXJjZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29sbGVjdFJlc291cmNlcyhzY2VuZSwgdGV4dHVyZVJlc291cmNlTGlzdCwgZ2VvbWV0cnlSZXNvdXJjZUxpc3QpIHtcbiAgICBmdW5jdGlvbiB0cmFja1F1ZXVlKHF1ZXVlKSB7XG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XG4gICAgICAgIHZhciBwcmV2R2VvbWV0cnk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gcXVldWVbaV07XG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcblxuICAgICAgICAgICAgLy8gVE9ETyBvcHRpbWl6ZSEhXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwgIT09IHByZXZNYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybU5hbWUgPSB0ZXh0dXJlVW5pZm9ybXNbdV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcgJiYgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbFtrXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbFtrXSwgdGV4dHVyZVJlc291cmNlTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ICE9PSBwcmV2R2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKGdlb21ldHJ5LCBnZW9tZXRyeVJlc291cmNlTGlzdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgICAgICAgICAgcHJldkdlb21ldHJ5ID0gZ2VvbWV0cnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja1F1ZXVlKHNjZW5lLm9wYXF1ZUxpc3QpO1xuICAgIHRyYWNrUXVldWUoc2NlbmUudHJhbnNwYXJlbnRMaXN0KTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIC8vIFRyYWNrIEFtYmllbnRDdWJlbWFwXG4gICAgICAgIGlmIChzY2VuZS5saWdodHNba10uY3ViZW1hcCkge1xuICAgICAgICAgICAgdXBkYXRlVXNlZChzY2VuZS5saWdodHNba10uY3ViZW1hcCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIExvYWQgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nLlxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxuICogQHBhcmFtIHtib29sZWFufSBbdXNlQ2FjaGVdIElmIHVzZSBjYWNoZS5cbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKiBAZXhhbXBsZVxuICogIGFwcC5sb2FkVGV4dHVyZSgnZGlmZnVzZU1hcC5qcGcnKVxuICogICAgICAudGhlbihmdW5jdGlvbiAodGV4dHVyZSkge1xuICogICAgICAgICAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XG4gKiAgICAgIH0pO1xuICovXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMsIHVzZUNhY2hlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSW1hZ2VMaWtlKHVybE9ySW1nKTtcbiAgICBpZiAodXNlQ2FjaGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RleENhY2hlLmdldChrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGV4Q2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETyBQcm9taXNlID9cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHRleHR1cmUgPSBzZWxmLmxvYWRUZXh0dXJlU3luYyh1cmxPckltZywgb3B0cyk7XG4gICAgICAgIGlmICghdGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh1c2VDYWNoZSkge1xuICAgICAgICB0aGlzLl90ZXhDYWNoZS5wdXQoa2V5LCBwcm9taXNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5mdW5jdGlvbiBuZWFyZXN0UG93ZXJPZlR3byh2YWwpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5yb3VuZChNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUZXh0dXJlVG9Qb3dlck9mVHdvKHRleHR1cmUpIHtcbiAgICBpZiAoKHRleHR1cmUud3JhcFMgPT09IFRleHR1cmUuUkVQRUFUIHx8IHRleHR1cmUud3JhcFQgPT09IFRleHR1cmUuUkVQRUFUKVxuICAgICAmJiB0ZXh0dXJlLmltYWdlXG4gICAgICkge1xuICAgICAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIHZhciB3aWR0aCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUud2lkdGgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gbmVhcmVzdFBvd2VyT2ZUd28odGV4dHVyZS5oZWlnaHQpO1xuICAgICAgICBpZiAod2lkdGggIT09IHRleHR1cmUud2lkdGggfHwgaGVpZ2h0ICE9PSB0ZXh0dXJlLmhlaWdodCkge1xuICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZSh0ZXh0dXJlLmltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNhbnZhcy5zcmNJbWFnZSA9IHRleHR1cmUuaW1hZ2U7XG4gICAgICAgICAgICB0ZXh0dXJlLmltYWdlID0gY2FudmFzO1xuICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XG4gKiBAZXhhbXBsZVxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycsIHtcbiAqICAgICAgYW5pc290cm9waWM6IDgsXG4gKiAgICAgIGZsaXBZOiBmYWxzZVxuICogIH0pO1xuICogIG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIHRleHR1cmUpO1xuICovXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVTeW5jID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzKSB7XG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKG9wdHMpO1xuICAgIGlmICh0eXBlb2YgdXJsT3JJbWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh1cmxPckltZy5tYXRjaCgvLmhkciR8XmRhdGE6YXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vKSkge1xuICAgICAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVVdGlsLmxvYWRUZXh0dXJlKHVybE9ySW1nLCB7XG4gICAgICAgICAgICAgICAgZXhwb3N1cmU6IG9wdHMgJiYgb3B0cy5leHBvc3VyZSxcbiAgICAgICAgICAgICAgICBmaWxlVHlwZTogJ2hkcidcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS50cmlnZ2VyKCdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZVtrZXldID0gb3B0c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGV4dHVyZS5sb2FkKHVybE9ySW1nKTtcbiAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY29udmVydFRvUE9UKSB7XG4gICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNJbWFnZUxpa2VFbGVtZW50KHVybE9ySW1nKSkge1xuICAgICAgICB0ZXh0dXJlLmltYWdlID0gdXJsT3JJbWc7XG4gICAgICAgIHRleHR1cmUuZHluYW1pYyA9IHVybE9ySW1nIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHRleHR1cmU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPWZhbHNlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQGV4YW1wbGVcbiAqICBhcHAubG9hZFRleHR1cmVDdWJlKHtcbiAqICAgICAgcHg6ICdza3lib3gvcHguanBnJywgcHk6ICdza3lib3gvcHkuanBnJywgcHo6ICdza3lib3gvcHouanBnJyxcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xuICogIH0pLnRoZW4oZnVuY3Rpb24gKHRleHR1cmUpIHtcbiAqICAgICAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xuICogIH0pXG4gKi9cbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IHRoaXMubG9hZFRleHR1cmVDdWJlU3luYyhpbWdMaXN0LCBvcHRzKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAodGV4dHVyZUN1YmUuaXNSZW5kZXJhYmxlKCkpIHtcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGV4dHVyZUN1YmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlQ3ViZSk7XG4gICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT1mYWxzZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlQ3ViZX1cbiAqIEBleGFtcGxlXG4gKiAgdmFyIHRleHR1cmUgPSBhcHAubG9hZFRleHR1cmVDdWJlU3luYyh7XG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXG4gKiAgICAgIG54OiAnc2t5Ym94L254LmpwZycsIG55OiAnc2t5Ym94L255LmpwZycsIG56OiAnc2t5Ym94L256LmpwZydcbiAqICB9KTtcbiAqICBza3lib3guc2V0RW52aXJvbm1lbnRNYXAodGV4dHVyZSk7XG4gKi9cbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmVTeW5jID0gZnVuY3Rpb24gKGltZ0xpc3QsIG9wdHMpIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBvcHRzLmZsaXBZID0gb3B0cy5mbGlwWSB8fCBmYWxzZTtcbiAgICB2YXIgdGV4dHVyZUN1YmUgPSBuZXcgVGV4dHVyZUN1YmUob3B0cyk7XG4gICAgaWYgKCFpbWdMaXN0IHx8ICFpbWdMaXN0LnB4IHx8ICFpbWdMaXN0Lm54IHx8ICFpbWdMaXN0LnB5IHx8ICFpbWdMaXN0Lm55IHx8ICFpbWdMaXN0LnB6IHx8ICFpbWdMaXN0Lm56KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjdWJlbWFwIGZvcm1hdC4gU2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgcHgsbngscHksbnkscHosbnonKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbWdMaXN0LnB4ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0ZXh0dXJlQ3ViZS5sb2FkKGltZ0xpc3QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGV4dHVyZUN1YmUuaW1hZ2UgPSB1dGlsLmNsb25lKGltZ0xpc3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dHVyZUN1YmU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIG1hdGVyaWFsLlxuICogQHBhcmFtIHtPYmplY3R9IG1hdGVyaWFsQ29uZmlnLiBtYXRlcmlhbENvbmZpZyBjb250YWlucyBgc2hhZGVyYCwgYHRyYW5zcGFyZW50YCBhbmQgdW5pZm9ybXMgdGhhdCB1c2VkIGluIGNvcnJlc3BvbmRpbmcgdW5pZm9ybXMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWZvcm1zIGNhbiBiZSBgY29sb3JgLCBgYWxwaGFgIGBkaWZmdXNlTWFwYCBldGMuXG4gKiBAcGFyYW0ge3N0cmluZ3xjbGF5LlNoYWRlcn0gW3NoYWRlcj0nY2xheS5zdGFuZGFyZE1SJ10gRGVmYXVsdCB0byBiZSBzdGFuZGFyZCBzaGFkZXIgd2l0aCBtZXRhbG5lc3MgYW5kIHJvdWdobmVzcyB3b3JrZmxvdy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50PWZhbHNlXSBJZiBtYXRlcmlhbCBpcyB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbnZlcnRUZXh0dXJlVG9QT1Q9ZmFsc2VdIEZvcmNlIGNvbnZlcnQgTm9uZSBQb3dlciBvZiBUd28gdGV4dHVyZSB0byBQb3dlciBvZiB0d28gc28gaXQgY2FuIGJlIHRpbGVkLlxuICogQHJldHVybiB7Y2xheS5NYXRlcmlhbH1cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1hdGVyaWFsID0gZnVuY3Rpb24gKG1hdENvbmZpZykge1xuICAgIG1hdENvbmZpZyA9IG1hdENvbmZpZyB8fCB7fTtcbiAgICBtYXRDb25maWcuc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZE1SJztcbiAgICB2YXIgc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciBpbnN0YW5jZW9mIFNoYWRlciA/IG1hdENvbmZpZy5zaGFkZXIgOiBzaGFkZXJMaWJyYXJ5LmdldChtYXRDb25maWcuc2hhZGVyKTtcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICBzaGFkZXI6IHNoYWRlclxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIG1ha2VUZXh0dXJlU2V0dGVyKGtleSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRleHR1cmUpIHtcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB0ZXh0dXJlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIG1hdENvbmZpZykge1xuICAgICAgICBpZiAobWF0ZXJpYWwudW5pZm9ybXNba2V5XSkge1xuICAgICAgICAgICAgdmFyIHZhbCA9IG1hdENvbmZpZ1trZXldO1xuICAgICAgICAgICAgaWYgKChtYXRlcmlhbC51bmlmb3Jtc1trZXldLnR5cGUgPT09ICd0JyB8fCBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSlcbiAgICAgICAgICAgICAgICAmJiAhKHZhbCBpbnN0YW5jZW9mIFRleHR1cmUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBhIHRleHR1cmUuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGV4dHVyZSh2YWwsIHtcbiAgICAgICAgICAgICAgICAgICAgY29udmVydFRvUE9UOiBtYXRDb25maWcuY29udmVydFRleHR1cmVUb1BPVFxuICAgICAgICAgICAgICAgIH0pLnRoZW4obWFrZVRleHR1cmVTZXR0ZXIoa2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKGtleSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXRDb25maWcudHJhbnNwYXJlbnQpIHtcbiAgICAgICAgbWF0Q29uZmlnLmRlcHRoTWFzayA9IGZhbHNlO1xuICAgICAgICBtYXRDb25maWcudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gbWF0ZXJpYWw7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqIEBleGFtcGxlXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZS5cbiAqICBhcHAuY3JlYXRlQ3ViZSgpXG4gKi9cbkFwcDNELnByb3RvdHlwZS5jcmVhdGVDdWJlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBzdWJkaXYpIHtcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcbiAgICAgICAgc3ViZGl2ID0gMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcbiAgICB9XG5cbiAgICB2YXIgZ2VvS2V5ID0gJ2N1YmUtJyArIHN1YmRpdi5qb2luKCctJyk7XG4gICAgdmFyIGN1YmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcbiAgICBpZiAoIWN1YmUpIHtcbiAgICAgICAgY3ViZSA9IG5ldyBDdWJlR2VvKHtcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV0sXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cbiAgICAgICAgfSk7XG4gICAgICAgIGN1YmUuZ2VuZXJhdGVUYW5nZW50cygpO1xuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCB0aGF0IGNhbWVyYSBpcyBpbnNpZGUgdGhlIGN1YmUuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqIEBleGFtcGxlXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZSBpbnNpZGUuXG4gKiAgYXBwLmNyZWF0ZUN1YmVJbnNpZGUoKVxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZUluc2lkZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XG4gICAgICAgIHN1YmRpdiA9IDE7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xuICAgICAgICBzdWJkaXYgPSBbc3ViZGl2LCBzdWJkaXYsIHN1YmRpdl07XG4gICAgfVxuICAgIHZhciBnZW9LZXkgPSAnY3ViZUluc2lkZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcbiAgICB2YXIgY3ViZSA9IHRoaXMuX2dlb0NhY2hlLmdldChnZW9LZXkpO1xuICAgIGlmICghY3ViZSkge1xuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xuICAgICAgICAgICAgaW5zaWRlOiB0cnVlLFxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXSxcbiAgICAgICAgICAgIGRlcHRoU2VnbWVudHM6IHN1YmRpdlsyXVxuICAgICAgICB9KTtcbiAgICAgICAgY3ViZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIGN1YmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goY3ViZSwgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBzcGhlcmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdWJkaXZpc2lvbj0yMF0gU3ViZGl2aXNpb24gb2Ygc3BoZXJlLlxuICogQHJldHVybiB7Y2xheS5NZXNofVxuICogQGV4YW1wbGVcbiAqICAvLyBDcmVhdGUgYSBzZW1pLXRyYW5zcGFyZW50IHNwaGVyZS5cbiAqICBhcHAuY3JlYXRlU3BoZXJlKHtcbiAqICAgICAgY29sb3I6IFswLCAwLCAxXSxcbiAqICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gKiAgICAgIGFscGhhOiAwLjVcbiAqICB9KVxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlU3BoZXJlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBzdWJkaXZpc2lvbikge1xuICAgIGlmIChzdWJkaXZpc2lvbiA9PSBudWxsKSB7XG4gICAgICAgIHN1YmRpdmlzaW9uID0gMjA7XG4gICAgfVxuICAgIHZhciBnZW9LZXkgPSAnc3BoZXJlLScgKyBzdWJkaXZpc2lvbjtcbiAgICB2YXIgc3BoZXJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XG4gICAgaWYgKCFzcGhlcmUpIHtcbiAgICAgICAgc3BoZXJlID0gbmV3IFNwaGVyZUdlbyh7XG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZpc2lvbiAqIDIsXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2aXNpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHNwaGVyZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIHNwaGVyZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goc3BoZXJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHBsYW5lIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58bnVtYmVyfSBbc3ViZGl2aXNpb249MV0gU3ViZGl2aXNpb24gb2YgcGxhbmUuXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XG4gKiBAZXhhbXBsZVxuICogIC8vIENyZWF0ZSBhIHJlZCBjb2xvciBwbGFuZS5cbiAqICBhcHAuY3JlYXRlUGxhbmUoe1xuICogICAgICBjb2xvcjogWzEsIDAsIDBdXG4gKiAgfSlcbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBsYW5lID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBzdWJkaXYpIHtcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcbiAgICAgICAgc3ViZGl2ID0gMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdl07XG4gICAgfVxuICAgIHZhciBnZW9LZXkgPSAncGxhbmUtJyArIHN1YmRpdi5qb2luKCctJyk7XG4gICAgdmFyIHBsYW5lR2VvID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XG4gICAgaWYgKCFwbGFuZUdlbykge1xuICAgICAgICBwbGFuZUdlbyA9IG5ldyBQbGFuZUdlbyh7XG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdXG4gICAgICAgIH0pO1xuICAgICAgICBwbGFuZUdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIHBsYW5lR2VvKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChwbGFuZUdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgbWVzaCB3aXRoIHBhcmFtZXRyaWMgc3VyZmFjZSBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXG4gKiBAcGFyYW0ge09iamVjdH0gZ2VuZXJhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBhcmFtZXRyaWNTdXJmYWNlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBnZW5lcmF0b3IpIHtcbiAgICB2YXIgZ2VvID0gbmV3IFBhcmFtZXRyaWNTdXJmYWNlR2VvKHtcbiAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3JcbiAgICB9KTtcbiAgICBnZW8uZ2VuZXJhdGVUYW5nZW50cygpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goZ2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XG59O1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgZ2VuZXJhbCBtZXNoIHdpdGggZ2l2ZW4gZ2VvbWV0cnkgaW5zdGFuY2UgYW5kIG1hdGVyaWFsIGNvbmZpZy5cbiAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1lc2ggPSBmdW5jdGlvbiAoZ2VvbWV0cnksIG1hdCwgcGFyZW50Tm9kZSkge1xuICAgIHZhciBtZXNoID0gbmV3IE1lc2goe1xuICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXG4gICAgICAgIG1hdGVyaWFsOiBtYXQgaW5zdGFuY2VvZiBNYXRlcmlhbCA/IG1hdCA6IHRoaXMuY3JlYXRlTWF0ZXJpYWwobWF0KVxuICAgIH0pO1xuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XG4gICAgcGFyZW50Tm9kZS5hZGQobWVzaCk7XG4gICAgcmV0dXJuIG1lc2g7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhbiBlbXB0eSBub2RlXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gcGFyZW50Tm9kZVxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XG4gICAgcGFyZW50Tm9kZS5hZGQobm9kZSk7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHBlcnNwZWN0aXZlIG9yIG9ydGhvZ3JhcGhpYyBjYW1lcmEgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkubWF0aC5WZWN0b3IzfSBwb3NpdGlvblxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5Lm1hdGguVmVjdG9yM30gdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9XCJwZXJzcGVjdGl2ZVwiXSBDYW4gYmUgJ3BlcnNwZWN0aXZlJyBvciAnb3J0aG9ncmFwaGljJyhpbiBzaG9ydCAnb3J0aG8nKVxuICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XG4gKi9cbkFwcDNELnByb3RvdHlwZS5jcmVhdGVDYW1lcmEgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRhcmdldCwgdHlwZSkge1xuICAgIHZhciBDYW1lcmFDdG9yO1xuICAgIGlmICh0eXBlID09PSAnb3J0aG8nIHx8IHR5cGUgPT09ICdvcnRob2dyYXBoaWMnKSB7XG4gICAgICAgIENhbWVyYUN0b3IgPSBPcnRob2dyYXBoaWNDYW1lcmE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAodHlwZSAmJiB0eXBlICE9PSAncGVyc3BlY3RpdmUnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtvd24gY2FtZXJhIHR5cGUgJyArIHR5cGUgKyAnLiBVc2UgZGVmYXVsdCBwZXJzcGVjdGl2ZSBjYW1lcmEnKTtcbiAgICAgICAgfVxuICAgICAgICBDYW1lcmFDdG9yID0gUGVyc3BlY3RpdmVDYW1lcmE7XG4gICAgfVxuXG4gICAgdmFyIGNhbWVyYSA9IG5ldyBDYW1lcmFDdG9yKCk7XG4gICAgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMykge1xuICAgICAgICBjYW1lcmEucG9zaXRpb24uY29weShwb3NpdGlvbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjModGFyZ2V0WzBdLCB0YXJnZXRbMV0sIHRhcmdldFsyXSk7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XG4gICAgICAgIGNhbWVyYS5sb29rQXQodGFyZ2V0KTtcbiAgICB9XG5cbiAgICB0aGlzLnNjZW5lLmFkZChjYW1lcmEpO1xuXG4gICAgcmV0dXJuIGNhbWVyYTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkubWF0aC5WZWN0b3IzfSBkaXIgQSBWZWN0b3IzIG9yIGFycmF5IHRvIHJlcHJlc2VudCB0aGUgZGlyZWN0aW9uLlxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ludGVuc2l0eV0gSW50ZW5zaXR5IG9mIGRpcmVjdGlvbmFsIGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXG4gKlxuICogQGV4YW1wbGVcbiAqICBhcHAuY3JlYXRlRGlyZWN0aW9uYWxMaWdodChbLTEsIC0xLCAtMV0sICcjZmZmJywgMik7XG4gKi9cbkFwcDNELnByb3RvdHlwZS5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0ID0gZnVuY3Rpb24gKGRpciwgY29sb3IsIGludGVuc2l0eSkge1xuICAgIHZhciBsaWdodCA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0KCk7XG4gICAgaWYgKGRpciBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcbiAgICAgICAgZGlyID0gZGlyLmFycmF5O1xuICAgIH1cbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShkaXIpLm5lZ2F0ZSgpO1xuICAgIGxpZ2h0Lmxvb2tBdChWZWN0b3IzLlpFUk8pO1xuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XG4gICAgfVxuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQobGlnaHQpO1xuICAgIHJldHVybiBsaWdodDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgc3BvdCBsaWdodCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5tYXRoLlZlY3RvcjN9IHBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBzcG90IGxpZ2h0LlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5Lm1hdGguVmVjdG9yM30gW3RhcmdldF0gVGFyZ2V0IHBvc2l0aW9uIHdoZXJlIHNwb3QgbGlnaHQgcG9pbnRzIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtyYW5nZT0yMF0gRmFsbG9mZiByYW5nZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDIwLlxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2Ygc3BvdCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBzcG90IGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXG4gKiBAcGFyYW0ge251bWJlcn0gW3VtYnJhQW5nbGU9MzBdIFVtYnJhIGFuZ2xlIG9mIHNwb3QgbGlnaHQuIERlZmF1bHQgdG8gYmUgMzAgZGVncmVlIGZyb20gdGhlIG1pZGRsZSBsaW5lLlxuICogQHBhcmFtIHtudW1iZXJ9IFtwZW51bWJyYUFuZ2xlPTQ1XSBQZW51bWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDQ1IGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogIGFwcC5jcmVhdGVTcG90TGlnaHQoWzUsIDUsIDVdLCBbMCwgMCwgMF0sIDIwLCAjOTAwKTtcbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVNwb3RMaWdodCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgdGFyZ2V0LCByYW5nZSwgY29sb3IsIGludGVuc2l0eSwgdW1icmFBbmdsZSwgcGVudW1icmFBbmdsZSkge1xuICAgIHZhciBsaWdodCA9IG5ldyBTcG90TGlnaHQoKTtcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcblxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcbiAgICAgICAgbGlnaHQubG9va0F0KHRhcmdldCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yKGNvbG9yKTtcbiAgICB9XG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XG4gICAgaW50ZW5zaXR5ICE9IG51bGwgJiYgKGxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eSk7XG4gICAgdW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC51bWJyYUFuZ2xlID0gdW1icmFBbmdsZSk7XG4gICAgcGVudW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC5wZW51bWJyYUFuZ2xlID0gcGVudW1icmFBbmdsZSk7XG5cbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XG5cbiAgICByZXR1cm4gbGlnaHQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIHBvaW50IGxpZ2h0LlxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5Lm1hdGguVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgcG9pbnQgbGlnaHQuLlxuICogQHBhcmFtIHtudW1iZXJ9IFtyYW5nZT0xMDBdIEZhbGxvZmYgcmFuZ2Ugb2YgcG9pbnQgbGlnaHQuXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBwb2ludCBsaWdodC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBwb2ludCBsaWdodC5cbiAqL1xuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBvaW50TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5KSB7XG4gICAgdmFyIGxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcblxuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XG4gICAgfVxuICAgIHJhbmdlICE9IG51bGwgJiYgKGxpZ2h0LnJhbmdlID0gcmFuZ2UpO1xuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQobGlnaHQpO1xuXG4gICAgcmV0dXJuIGxpZ2h0O1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBhbWJpZW50IGxpZ2h0LlxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgYW1iaWVudCBsaWdodC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBhbWJpZW50IGxpZ2h0LlxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudExpZ2h0ID0gZnVuY3Rpb24gKGNvbG9yLCBpbnRlbnNpdHkpIHtcbiAgICB2YXIgbGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KCk7XG5cbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xuICAgIH1cbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcblxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcblxuICAgIHJldHVybiBsaWdodDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIGN1YmVtYXAgYW1iaWVudCBsaWdodCBhbmQgYW4gc3BoZXJpY2FsIGhhcm1vbmljIGFtYmllbnQgbGlnaHRcbiAqIGZvciBzcGVjdWxhciBhbmQgZGlmZnVzZSBsaWdodGluZyBpbiBQQlIgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge0ltYWdlTGlrZXxUZXh0dXJlQ3ViZX0gW2VudkltYWdlXSBQYW5vcmFtYSBlbnZpcm9ubWVudCBpbWFnZSwgSERSIGZvcm1hdCBpcyBiZXR0ZXIuIE9yIGEgcHJlIGxvYWRlZCB0ZXh0dXJlIGN1YmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlY3VsYXJJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIHNwZWN1bGFyIGxpZ2h0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtkaWZmdXNlSW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBkaWZmdXNlIGxpZ2h0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtleHBvc3VyZT0xXSBFeHBvc3VyZSBvZiBIRFIgaW1hZ2UuIE9ubHkgaWYgaW1hZ2UgaW4gZmlyc3QgcGFyYW10ZXIgaXMgSERSLlxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVmaWx0ZXJlZEN1YmVtYXBTaXplPTMyXSBUaGUgc2l6ZSBvZiBwcmVmaWxlcnRlZCBjdWJlbWFwLiBMYXJnZXIgdmFsdWUgd2lsbCB0YWtlIG1vcmUgdGltZSB0byBkbyBleHBlbnNpdmUgcHJlZmlsdGVyaW5nLlxuICovXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudEN1YmVtYXBMaWdodCA9IGZ1bmN0aW9uIChlbnZJbWFnZSwgc3BlY0ludGVuc2l0eSwgZGlmZkludGVuc2l0eSwgZXhwb3N1cmUsIHByZWZpbHRlcmVkQ3ViZW1hcFNpemUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcbiAgICAgICAgZXhwb3N1cmUgPSAxO1xuICAgIH1cbiAgICBpZiAocHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9PSBudWxsKSB7XG4gICAgICAgIHByZWZpbHRlcmVkQ3ViZW1hcFNpemUgPSAzMjtcbiAgICB9XG5cbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xuXG4gICAgdmFyIGxvYWRQcm9taXNlO1xuICAgIGlmIChlbnZJbWFnZS50ZXh0dXJlVHlwZSA9PT0gJ3RleHR1cmVDdWJlJykge1xuICAgICAgICBsb2FkUHJvbWlzZSA9IGVudkltYWdlLmlzUmVuZGVyYWJsZSgpXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShlbnZJbWFnZSlcbiAgICAgICAgICAgIDogbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIGVudkltYWdlLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVudkltYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRUZXh0dXJlKGVudkltYWdlLCB7XG4gICAgICAgICAgICBleHBvc3VyZTogZXhwb3N1cmVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvYWRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGVudlRleHR1cmUpIHtcbiAgICAgICAgdmFyIHNwZWNMaWdodCA9IG5ldyBBbWJpZW50Q3ViZW1hcExpZ2h0KHtcbiAgICAgICAgICAgIGludGVuc2l0eTogc3BlY0ludGVuc2l0eSAhPSBudWxsID8gc3BlY0ludGVuc2l0eSA6IDAuN1xuICAgICAgICB9KTtcbiAgICAgICAgc3BlY0xpZ2h0LmN1YmVtYXAgPSBlbnZUZXh0dXJlO1xuICAgICAgICBlbnZUZXh0dXJlLmZsaXBZID0gZmFsc2U7XG4gICAgICAgIC8vIFRPRE8gQ2FjaGUgcHJlZmlsdGVyID9cbiAgICAgICAgc3BlY0xpZ2h0LnByZWZpbHRlcihzZWxmLnJlbmRlcmVyLCAzMik7XG5cbiAgICAgICAgdmFyIGRpZmZMaWdodCA9IG5ldyBBbWJpZW50U0hMaWdodCh7XG4gICAgICAgICAgICBpbnRlbnNpdHk6IGRpZmZJbnRlbnNpdHkgIT0gbnVsbCA/IGRpZmZJbnRlbnNpdHkgOiAwLjcsXG4gICAgICAgICAgICBjb2VmZmljaWVudHM6IHNoVXRpbC5wcm9qZWN0RW52aXJvbm1lbnRNYXAoXG4gICAgICAgICAgICAgICAgc2VsZi5yZW5kZXJlciwgc3BlY0xpZ2h0LmN1YmVtYXAsIHtcbiAgICAgICAgICAgICAgICAgICAgbG9kOiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICAgICAgc2NlbmUuYWRkKHNwZWNMaWdodCk7XG4gICAgICAgIHNjZW5lLmFkZChkaWZmTGlnaHQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGVjdWxhcjogc3BlY0xpZ2h0LFxuICAgICAgICAgICAgZGlmZnVzZTogZGlmZkxpZ2h0LFxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgZW52aXJvbm1lbnQgbWFwXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52VGV4dHVyZVxuICAgICAgICB9O1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBMb2FkIGEgW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgZm9ybWF0IG1vZGVsLlxuICogWW91IGNhbiBjb252ZXJ0IEZCWC9EQUUvT0JKIGZvcm1hdCBtb2RlbHMgdG8gW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgd2l0aCBbZmJ4MmdsdGZdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXlnbCNmYngtdG8tZ2x0ZjIwLWNvbnZlcnRlcikgcHl0aG9uIHNjcmlwdCxcbiAqIG9yIHNpbXBseSB1c2luZyB0aGUgW0NsYXkgVmlld2VyXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5LXZpZXdlcikgY2xpZW50IGFwcGxpY2F0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7c3RyaW5nfGNsYXkuU2hhZGVyfSBbb3B0cy5zaGFkZXI9J2NsYXkuc3RhbmRhcmQnXSAnYmFzaWMnfCdsYW1iZXJ0J3wnc3RhbmRhcmQnLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy53YWl0VGV4dHVyZUxvYWRlZD1mYWxzZV0gSWYgYWRkIHRvIHNjZW5lIHV0aWwgdGV4dHVyZXMgYXJlIGFsbCBsb2FkZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmF1dG9QbGF5QW5pbWF0aW9uPXRydWVdIElmIGF1dG9wbGF5IHRoZSBhbmltYXRpb24gb2YgbW9kZWwuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVwQXhpcz0neSddIENoYW5nZSBtb2RlbCB0byB5IHVwIGlmIHVwQXhpcyBpcyAneidcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudGV4dHVyZUZsaXBZPWZhbHNlXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnRleHR1cmVSb290UGF0aF0gUm9vdCBwYXRoIG9mIHRleHR1cmUuIERlZmF1bHQgdG8gYmUgcmVsYXRpdmUgd2l0aCBnbFRGIGZpbGUuXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5BcHAzRC5wcm90b3R5cGUubG9hZE1vZGVsID0gZnVuY3Rpb24gKHVybCwgb3B0cykge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgVVJMLicpO1xuICAgIH1cblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID09IG51bGwpIHtcbiAgICAgICAgb3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIHZhciBzaGFkZXIgPSBvcHRzLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZCc7XG5cbiAgICB2YXIgbG9hZGVyT3B0cyA9IHtcbiAgICAgICAgcm9vdE5vZGU6IG5ldyBOb2RlKCksXG4gICAgICAgIHNoYWRlcjogc2hhZGVyLFxuICAgICAgICB0ZXh0dXJlUm9vdFBhdGg6IG9wdHMudGV4dHVyZVJvb3RQYXRoLFxuICAgICAgICBjcm9zc09yaWdpbjogJ0Fub255bW91cycsXG4gICAgICAgIHRleHR1cmVGbGlwWTogb3B0cy50ZXh0dXJlRmxpcFlcbiAgICB9O1xuICAgIGlmIChvcHRzLnVwQXhpcyAmJiBvcHRzLnVwQXhpcy50b0xvd2VyQ2FzZSgpID09PSAneicpIHtcbiAgICAgICAgbG9hZGVyT3B0cy5yb290Tm9kZS5yb3RhdGlvbi5pZGVudGl0eSgpLnJvdGF0ZVgoLU1hdGguUEkgLyAyKTtcbiAgICB9XG5cbiAgICB2YXIgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIobG9hZGVyT3B0cyk7XG5cbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xuICAgIHZhciB0aW1lbGluZSA9IHRoaXMudGltZWxpbmU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuX2Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY2VuZS5hZGQocmVzdWx0LnJvb3ROb2RlKTtcbiAgICAgICAgICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuYWRkQ2xpcChjbGlwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBsb2FkZXIuc3VjY2VzcyhmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghb3B0cy53YWl0VGV4dHVyZUxvYWRlZCkge1xuICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocmVzdWx0LnRleHR1cmVzLm1hcChmdW5jdGlvbiAodGV4dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3IocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhZnRlckxvYWQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvYWRlci5lcnJvcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxvYWRlci5sb2FkKHVybCk7XG4gICAgfSk7XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBBcHAzRDogQXBwM0QsXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgM0QgYXBwbGljYXRpb24gdGhhdCB3aWxsIG1hbmFnZSB0aGUgYXBwIGluaXRpYWxpemF0aW9uIGFuZCBsb29wLlxuICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlXG4gICAgICogQHBhcmFtIHtIVE1MRG9tRWxlbWVudHxzdHJpbmd9IGRvbSBDb250YWluZXIgZG9tIGVsZW1lbnQgb3IgYSBzZWxlY3RvciBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBgcXVlcnlTZWxlY3RvcmBcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYXBwTlNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbml0IEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBpbml0aW5nIGFwcC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsb29wIExvb3AgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBlYWNoIGZyYW1lLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdIENvbnRhaW5lciB3aWR0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RldmljZVBpeGVsUmF0aW9dXG4gICAgICogQHJldHVybiB7Y2xheS5hcHBsaWNhdGlvbi5BcHAzRH1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlKCcjYXBwJywge1xuICAgICAqICAgICAgaW5pdDogZnVuY3Rpb24gKGFwcCkge1xuICAgICAqICAgICAgICAgIGFwcC5jcmVhdGVDdWJlKCk7XG4gICAgICogICAgICAgICAgdmFyIGNhbWVyYSA9IGFwcC5jcmVhdGVDYW1lcmEoKTtcbiAgICAgKiAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDIpO1xuICAgICAqICAgICAgfSxcbiAgICAgKiAgICAgIGxvb3A6IGZ1bmN0aW9uICgpIHsgLy8gbm9vcCB9XG4gICAgICogIH0pXG4gICAgICovXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoZG9tLCBhcHBOUykge1xuICAgICAgICByZXR1cm4gbmV3IEFwcDNEKGRvbSwgYXBwTlMpO1xuICAgIH1cbn07IiwiaW1wb3J0IG5vdGlmaWVyIGZyb20gJy4uL2NvcmUvbWl4aW4vbm90aWZpZXInO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vY29yZS9yZXF1ZXN0JztcbmltcG9ydCB1dGlsICBmcm9tICcuLi9jb3JlL3V0aWwnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza1xuICogQG1peGVzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxuICovXG52YXIgVGFzayA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2Z1bGxmaWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xufTtcbi8qKlxuICogVGFzayBzdWNjZXNzZWRcbiAqIEBwYXJhbSB7fSBkYXRhXG4gKi9cblRhc2sucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IHRydWU7XG4gICAgdGhpcy5fcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcbn07XG4vKipcbiAqIFRhc2sgZmFpbGVkXG4gKiBAcGFyYW0ge30gZXJyXG4gKi9cblRhc2sucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKGVycikge1xuICAgIHRoaXMuX3JlamVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gZmFsc2U7XG4gICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycik7XG59O1xuLyoqXG4gKiBJZiB0YXNrIHN1Y2Nlc3NlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuVGFzay5wcm90b3R5cGUuaXNGdWxsZmlsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQ7XG59O1xuLyoqXG4gKiBJZiB0YXNrIGZhaWxlZFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuVGFzay5wcm90b3R5cGUuaXNSZWplY3RlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWplY3RlZDtcbn07XG4vKipcbiAqIElmIHRhc2sgZmluaXNoZWQsIGVpdGhlciBzdWNjZXNzZWQgb3IgZmFpbGVkXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5UYXNrLnByb3RvdHlwZS5pc1NldHRsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZCB8fCB0aGlzLl9yZWplY3RlZDtcbn07XG5cbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XG5cbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0VGFzayh1cmwsIHJlc3BvbnNlVHlwZSkge1xuICAgIHZhciB0YXNrID0gbmV3IFRhc2soKTtcbiAgICByZXF1ZXN0LmdldCh7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICByZXNwb25zZVR5cGU6IHJlc3BvbnNlVHlwZSxcbiAgICAgICAgb25sb2FkOiBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgdGFzay5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhc2s7XG59XG4vKipcbiAqIE1ha2UgYSByZXF1ZXN0IHRhc2tcbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R8b2JqZWN0W118c3RyaW5nW119IHVybFxuICogQHBhcmFtICB7c3RyaW5nfSBbcmVzcG9uc2VUeXBlXVxuICogQGV4YW1wbGVcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKCcuL2EuanNvbicpO1xuICogICAgIHZhciB0YXNrID0gVGFzay5tYWtlUmVxdWVzdFRhc2soe1xuICogICAgICAgICB1cmw6ICdiLmJpbicsXG4gKiAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xuICogICAgIH0pO1xuICogICAgIHZhciB0YXNrcyA9IFRhc2subWFrZVJlcXVlc3RUYXNrKFsnLi9hLmpzb24nLCAnLi9iLmpzb24nXSk7XG4gKiAgICAgdmFyIHRhc2tzID0gVGFzay5tYWtlUmVxdWVzdFRhc2soW1xuICogICAgICAgICB7dXJsOiAnYS5qc29uJ30sXG4gKiAgICAgICAgIHt1cmw6ICdiLmJpbicsIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ31cbiAqICAgICBdKTtcbiAqIEByZXR1cm4ge2NsYXkuYXN5bmMuVGFza3xjbGF5LmFzeW5jLlRhc2tbXX1cbiAqL1xuVGFzay5tYWtlUmVxdWVzdFRhc2sgPSBmdW5jdGlvbih1cmwsIHJlc3BvbnNlVHlwZSkge1xuICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKTtcbiAgICB9IGVsc2UgaWYgKHVybC51cmwpIHsgICAvLyAgQ29uZmlndXJlIG9iamVjdFxuICAgICAgICB2YXIgb2JqID0gdXJsO1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKG9iai51cmwsIG9iai5yZXNwb25zZVR5cGUpO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7ICAvLyBVcmwgbGlzdFxuICAgICAgICB2YXIgdXJsTGlzdCA9IHVybDtcbiAgICAgICAgdmFyIHRhc2tzID0gW107XG4gICAgICAgIHVybExpc3QuZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHZhciB1cmwsIHJlc3BvbnNlVHlwZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHVybCA9IG9iajtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KG9iaikgPT09IG9iaikge1xuICAgICAgICAgICAgICAgIHVybCA9IG9iai51cmw7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlID0gb2JqLnJlc3BvbnNlVHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzLnB1c2gobWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFza3M7XG4gICAgfVxufTtcbi8qKlxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfVxuICovXG5UYXNrLm1ha2VUYXNrID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBUYXNrKCk7XG59O1xuXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xuXG5leHBvcnQgZGVmYXVsdCBUYXNrO1xuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcbmltcG9ydCBUYXNrIGZyb20gJy4vVGFzayc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrR3JvdXBcbiAqIEBleHRlbmRzIGNsYXkuYXN5bmMuVGFza1xuICovXG52YXIgVGFza0dyb3VwID0gZnVuY3Rpb24gKCkge1xuXG4gICAgVGFzay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5fdGFza3MgPSBbXTtcblxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XG5cbiAgICB0aGlzLl9yZWplY3RlZE51bWJlciA9IDA7XG59O1xuXG52YXIgQ3RvciA9IGZ1bmN0aW9uICgpe307XG5DdG9yLnByb3RvdHlwZSA9IFRhc2sucHJvdG90eXBlO1xuVGFza0dyb3VwLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XG5cblRhc2tHcm91cC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUYXNrR3JvdXA7XG5cbi8qKlxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIHN1Y2Nlc3NlZCwgdGFzayBjYW4gYWxzbyBiZSBhbnkgbm90aWZpZXIgb2JqZWN0IHdoaWNoIHdpbGwgdHJpZ2dlciBzdWNjZXNzIGFuZCBlcnJvciBldmVudHMuIExpa2Uge0BsaW5rIGNsYXkuVGV4dHVyZTJEfSwge0BsaW5rIGNsYXkuVGV4dHVyZUN1YmV9LCB7QGxpbmsgY2xheS5sb2FkZXIuR0xURn0uXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcbiAqIEBjaGFpbmFibGVcbiAqIEBleGFtcGxlXG4gKiAgICAgLy8gTG9hZCB0ZXh0dXJlIGxpc3RcbiAqICAgICB2YXIgbGlzdCA9IFsnYS5qcGcnLCAnYi5qcGcnLCAnYy5qcGcnXVxuICogICAgIHZhciB0ZXh0dXJlcyA9IGxpc3QubWFwKGZ1bmN0aW9uIChzcmMpIHtcbiAqICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcbiAqICAgICAgICAgdGV4dHVyZS5sb2FkKHNyYyk7XG4gKiAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICogICAgIH0pO1xuICogICAgIHZhciB0YXNrR3JvdXAgPSBuZXcgY2xheS5hc3luYy5UYXNrR3JvdXAoKTtcbiAqICAgICB0YXNrR3JvdXAuYWxsKHRleHR1cmVzKS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcbiAqICAgICAgICAgLy8gRG8gc29tZSB0aGluZyBhZnRlciBhbGwgdGV4dHVyZXMgbG9hZGVkXG4gKiAgICAgfSk7XG4gKi9cblRhc2tHcm91cC5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBbXTtcbiAgICB0aGlzLl90YXNrcyA9IHRhc2tzO1xuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xuXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY291bnQrKztcbiAgICAgICAgdGFzay5vbmNlKCdzdWNjZXNzJywgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgY291bnQtLTtcblxuICAgICAgICAgICAgc2VsZi5fZnVsZmlsbGVkTnVtYmVyKys7XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyBTb21lIHRhc2tzIGxpa2UgdGV4dHVyZSwgbG9hZGVyIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGFza1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHN0YXRlcyBoZXJlXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIgKys7XG5cbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBzZWxmLnJlamVjdCh0YXNrKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcbi8qKlxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxuICogQHBhcmFtICB7QXJyYXkuPGNsYXkuYXN5bmMuVGFzaz59IHRhc2tzXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2tHcm91cH1cbiAqL1xuVGFza0dyb3VwLnByb3RvdHlwZS5hbGxTZXR0bGVkID0gZnVuY3Rpb24gKHRhc2tzKSB7XG4gICAgdmFyIGNvdW50ID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGRhdGEgPSBbXTtcbiAgICBpZiAodGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fdGFza3MgPSB0YXNrcztcblxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xuICAgICAgICBpZiAoIXRhc2sgfHwgIXRhc2sub25jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIGNvdW50LS07XG5cbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xuXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGNvdW50LS07XG5cbiAgICAgICAgICAgIHNlbGYuX3JlamVjdGVkTnVtYmVyKys7XG5cbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbn07XG4vKipcbiAqIEdldCBzdWNjZXNzZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldEZ1bGZpbGxlZE51bWJlciA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcbiAgICBpZiAocmVjdXJzaXZlKSB7XG4gICAgICAgIHZhciBuRnVsZmlsbGVkID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgbkZ1bGZpbGxlZCArPSB0YXNrLmdldEZ1bGZpbGxlZE51bWJlcihyZWN1cnNpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX2Z1bGZpbGxlZCkge1xuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbkZ1bGZpbGxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyO1xuICAgIH1cbn07XG5cbi8qKlxuICogR2V0IGZhaWxlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0UmVqZWN0ZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgICAgICB2YXIgblJlamVjdGVkID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IHRhc2suZ2V0UmVqZWN0ZWROdW1iZXIocmVjdXJzaXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCkge1xuICAgICAgICAgICAgICAgIG5SZWplY3RlZCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuUmVqZWN0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xuICAgIH1cbn07XG5cbi8qKlxuICogR2V0IGZpbmlzaGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRTZXR0bGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xuXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgICAgICB2YXIgblNldHRsZWQgPSAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rhc2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSB0YXNrLmdldFNldHRsZWROdW1iZXIocmVjdXJzaXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCB8fCB0YXNrLl9mdWxmaWxsZWQpIHtcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuU2V0dGxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyICsgdGhpcy5fcmVqZWN0ZWROdW1iZXI7XG4gICAgfVxufTtcblxuLyoqXG4gKiBHZXQgYWxsIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRUYXNrTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xuICAgIGlmIChyZWN1cnNpdmUpIHtcbiAgICAgICAgdmFyIG5UYXNrID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgblRhc2sgKz0gdGFzay5nZXRUYXNrTnVtYmVyKHJlY3Vyc2l2ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5UYXNrICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5UYXNrO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrcy5sZW5ndGg7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFza0dyb3VwO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcblxudmFyIENhbnZhc01hdGVyaWFsID0gQmFzZS5leHRlbmQoe1xuXG4gICAgY29sb3I6IFsxLCAxLCAxLCAxXSxcblxuICAgIG9wYWNpdHk6IDEsXG5cbiAgICBwb2ludFNpemU6IDAsXG5cbiAgICBwb2ludFNoYXBlOiAncmVjdGFuZ2xlJ1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbnZhc01hdGVyaWFsO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XG52YXIgbWF0NCA9IGdsTWF0cml4Lm1hdDQ7XG52YXIgdmVjMyA9IGdsTWF0cml4LnZlYzM7XG52YXIgdmVjNCA9IGdsTWF0cml4LnZlYzQ7XG5cbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XG52YXIgdmVjM0NyZWF0ZSA9IHZlYzMuY3JlYXRlO1xuXG52YXIgdmVjNENyZWF0ZSA9IHZlYzQuY3JlYXRlO1xuXG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuXG52YXIgUFJJTUlUSVZFX1RSSUFOR0xFID0gMTtcbnZhciBQUklNSVRJVkVfTElORSA9IDI7XG52YXIgUFJJTUlUSVZFX1BPSU5UID0gMztcblxuZnVuY3Rpb24gUHJpbWl0aXZlUG9vbChjb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuY3RvciA9IGNvbnN0cnVjdG9yO1xuXG4gICAgdGhpcy5fZGF0YSA9IFtdO1xuXG4gICAgdGhpcy5fc2l6ZSA9IDA7XG59XG5cblByaW1pdGl2ZVBvb2wucHJvdG90eXBlID0ge1xuICAgIHBpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3NpemU7XG4gICAgICAgIHZhciBvYmogPSBkYXRhW3NpemVdO1xuICAgICAgICBpZiAoISBvYmopIHtcbiAgICAgICAgICAgIC8vIENvbnN0cnVjdG9yIG11c3QgaGF2ZSBubyBwYXJhbWV0ZXJzXG4gICAgICAgICAgICBvYmogPSBuZXcgdGhpcy5jdG9yKCk7XG4gICAgICAgICAgICBkYXRhW3NpemVdID0gb2JqO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NpemUrKztcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgfSxcblxuICAgIHNocmluazogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9kYXRhLmxlbmd0aCA9IHRoaXMuX3NpemU7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBUcmlhbmdsZSgpIHtcbiAgICB0aGlzLnZlcnRpY2VzID0gW3ZlYzRDcmVhdGUoKSwgdmVjNENyZWF0ZSgpLCB2ZWM0Q3JlYXRlKCldO1xuICAgIHRoaXMuY29sb3IgPSB2ZWM0Q3JlYXRlKCk7XG5cbiAgICB0aGlzLmRlcHRoID0gMDtcbn1cblxuVHJpYW5nbGUucHJvdG90eXBlLnR5cGUgPSBQUklNSVRJVkVfVFJJQU5HTEU7XG5cbmZ1bmN0aW9uIFBvaW50KCkge1xuICAgIC8vIEhlcmUgdXNlIGFuIGFycmF5IHRvIG1ha2UgaXQgbW9yZSBjb252aW5pZW50IHRvIHByb2NjZXNzaW5nIGluIF9zZXRQcmltaXRpdmUgbWV0aG9kXG4gICAgdGhpcy52ZXJ0aWNlcyA9IFt2ZWM0Q3JlYXRlKCldO1xuXG4gICAgdGhpcy5jb2xvciA9IHZlYzRDcmVhdGUoKTtcblxuICAgIHRoaXMuZGVwdGggPSAwO1xufVxuXG5Qb2ludC5wcm90b3R5cGUudHlwZSA9IFBSSU1JVElWRV9QT0lOVDtcblxuZnVuY3Rpb24gTGluZSgpIHtcbiAgICB0aGlzLnZlcnRpY2VzID0gW3ZlYzRDcmVhdGUoKSwgdmVjNENyZWF0ZSgpXTtcbiAgICB0aGlzLmNvbG9yID0gdmVjNENyZWF0ZSgpO1xuXG4gICAgdGhpcy5kZXB0aCA9IDA7XG5cbiAgICB0aGlzLmxpbmVXaWR0aCA9IDE7XG59XG5cbkxpbmUucHJvdG90eXBlLnR5cGUgPSBQUklNSVRJVkVfTElORTtcblxuZnVuY3Rpb24gZGVwdGhTb3J0RnVuYyh4LCB5KSB7XG4gICAgLy8gU29ydCBmcm9tIGZhciB0byBuZWFyLCB3aGljaCBpbiBkZXB0aCBvZiBwcm9qZWN0aW9uIHNwYWNlIGlzIGZyb20gbGFyZ2VyIHRvIHNtYWxsZXJcbiAgICByZXR1cm4geS5kZXB0aCAtIHguZGVwdGg7XG59XG5cbmZ1bmN0aW9uIHZlYzNUb0NvbG9yU3RyKHYzKSB7XG4gICAgcmV0dXJuICdyZ2IoJyArIHJvdW5kKHYzWzBdICogMjU1KSArICcsJyArIHJvdW5kKHYzWzFdICogMjU1KSArICcsJyArIHJvdW5kKHYzWzJdICogMjU1KSArICcpJztcbn1cblxuZnVuY3Rpb24gdmVjNFRvQ29sb3JTdHIodjQpIHtcbiAgICByZXR1cm4gJ3JnYmEoJyArIHJvdW5kKHY0WzBdICogMjU1KSArICcsJyArIHJvdW5kKHY0WzFdICogMjU1KSArICcsJyArIHJvdW5kKHY0WzJdICogMjU1KSArICcsJyArIHY0WzNdICsgJyknO1xufVxuXG52YXIgQ2FudmFzUmVuZGVyZXIgPSBCYXNlLmV4dGVuZCh7XG5cbiAgICBjYW52YXM6IG51bGwsXG5cbiAgICBfd2lkdGg6IDEwMCxcblxuICAgIF9oZWlnaHQ6IDEwMCxcblxuICAgIGRldmljZVBpeGVsUmF0aW86IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEuMCxcblxuICAgIGNvbG9yOiBbMC4wLCAwLjAsIDAuMCwgMC4wXSxcblxuICAgIGNsZWFyOiB0cnVlLFxuXG4gICAgY3R4OiBudWxsLFxuXG4gICAgLy8gQ2FjaGVkIHByaW1pdGl2ZSBsaXN0LCBpbmNsdWRpbmcgdHJpYW5nbGUsIGxpbmUsIHBvaW50XG4gICAgX3ByaW1pdGl2ZXM6IFtdLFxuXG4gICAgLy8gVHJpYW5nbGUgcG9vbFxuICAgIF90cmlhbmdsZXM6IG5ldyBQcmltaXRpdmVQb29sKFRyaWFuZ2xlKSxcblxuICAgIC8vIExpbmUgcG9vbFxuICAgIF9saW5lczogbmV3IFByaW1pdGl2ZVBvb2woTGluZSksXG5cbiAgICAvLyBQb2ludCBwb29sXG4gICAgX3BvaW50czogbmV3IFByaW1pdGl2ZVBvb2woUG9pbnQpXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCEgdGhpcy5jYW52YXMpIHtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB9XG4gICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgJ0Vycm9yIGNyZWF0aW5nIFdlYkdMIENvbnRleHQgJyArIGU7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemUoKTtcbn0sIHtcblxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIGRwcjtcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XG5cbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0V2lkdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH0sXG5cbiAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICB9LFxuXG4gICAgZ2V0Vmlld3BvcnRBc3BlY3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoIC8gdGhpcy5faGVpZ2h0O1xuICAgIH0sXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uIChzY2VuZSwgY2FtZXJhKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuY2xlYXIpIHtcbiAgICAgICAgICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICB2YXIgZHByID0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICAgICAgdmFyIHcgPSB0aGlzLl93aWR0aCAqIGRwcjtcbiAgICAgICAgICAgIHZhciBoID0gdGhpcy5faGVpZ2h0ICogZHByO1xuICAgICAgICAgICAgaWYgKGNvbG9yICYmIGNvbG9yWzNdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhhcyB0cmFuc3BhcmVuY3lcbiAgICAgICAgICAgICAgICBpZiAoY29sb3JbM10gPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvci5sZW5ndGggPT09IDQgPyB2ZWM0VG9Db2xvclN0cihjb2xvcikgOiB2ZWMzVG9Db2xvclN0cihjb2xvcik7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIHcsIGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2NlbmUudXBkYXRlKCk7XG4gICAgICAgIGNhbWVyYS51cGRhdGUoKTtcblxuICAgICAgICB2YXIgb3BhcXVlTGlzdCA9IHNjZW5lLm9wYXF1ZUxpc3Q7XG4gICAgICAgIHZhciB0cmFuc3BhcmVudExpc3QgPSBzY2VuZS50cmFuc3BhcmVudExpc3Q7XG4gICAgICAgIHZhciBzY2VuZU1hdGVyaWFsID0gc2NlbmUubWF0ZXJpYWw7XG5cbiAgICAgICAgdmFyIGxpc3QgPSBvcGFxdWVMaXN0LmNvbmNhdCh0cmFuc3BhcmVudExpc3QpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhsaXN0LCBjYW1lcmEpO1xuICAgIH0sXG5cbiAgICByZW5kZXJQYXNzOiBmdW5jdGlvbiAobGlzdCwgY2FtZXJhKSB7XG4gICAgICAgIHZhciB2aWV3UHJvaiA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQubXVsdGlwbHkodmlld1Byb2osIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XG4gICAgICAgIHZhciB3b3JsZFZpZXdQcm9qTWF0ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgdmFyIHBvc1ZpZXdTcGFjZSA9IHZlYzMuY3JlYXRlKCk7XG5cbiAgICAgICAgdmFyIHByaW1pdGl2ZXMgPSB0aGlzLl9wcmltaXRpdmVzO1xuICAgICAgICB2YXIgdHJpYW5nbGVzUG9vbCA9IHRoaXMuX3RyaWFuZ2xlcztcbiAgICAgICAgdmFyIGxpbmVzUG9vbCA9IHRoaXMuX2xpbmVzO1xuICAgICAgICB2YXIgcG9pbnRzUG9vbCA9IHRoaXMuX3BvaW50cztcblxuICAgICAgICB0cmlhbmdsZXNQb29sLnJlc2V0KCk7XG4gICAgICAgIGxpbmVzUG9vbC5yZXNldCgpO1xuICAgICAgICBwb2ludHNQb29sLnJlc2V0KCk7XG5cbiAgICAgICAgdmFyIG5QcmltaXRpdmUgPSAwO1xuXG4gICAgICAgIHZhciBpbmRpY2VzID0gWzAsIDAsIDBdO1xuICAgICAgICB2YXIgbWF0Q29sb3IgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XG5cbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkod29ybGRWaWV3UHJvak1hdCwgdmlld1Byb2osIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xuXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuICAgICAgICAgICAgLy8gYWxwaGEgaXMgZGVmYXVsdCAxXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWwuY29sb3IubGVuZ3RoID09IDMpIHtcbiAgICAgICAgICAgICAgICB2ZWMzLmNvcHkobWF0Q29sb3IsIG1hdGVyaWFsLmNvbG9yKTtcbiAgICAgICAgICAgICAgICBtYXRDb2xvclszXSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2ZWM0LmNvcHkobWF0Q29sb3IsIG1hdGVyaWFsLmNvbG9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBnZW9tZXRyeS52ZXJ0ZXhDb3VudDtcbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBUUklBTkdMRVMsIExJTkVTLCBQT0lOVFMgZHJhdyBtb2Rlc1xuICAgICAgICAgICAgc3dpdGNoIChyZW5kZXJhYmxlLm1vZGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIGdsZW51bS5UUklBTkdMRVM6XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tZXRyeS5pc1VzZUluZGljZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5GYWNlID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbkZhY2U7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmdldEZhY2UoaiwgaW5kaWNlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSB0cmlhbmdsZXNQb29sLnBpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZS5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXBwZWQgPSB0aGlzLl9zZXRQcmltaXRpdmUodHJpYW5nbGUsIGluZGljZXMsIDMsIGF0dHJpYnV0ZXMsIHdvcmxkVmlld1Byb2pNYXQsIG1hdENvbG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIGNsaXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlc1tuUHJpbWl0aXZlKytdID0gdHJpYW5nbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuVmVydGV4Oykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbMF0gPSBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1sxXSA9IGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzWzJdID0gaisrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyaWFuZ2xlID0gdHJpYW5nbGVzUG9vbC5waWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGUubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwcGVkID0gdGhpcy5fc2V0UHJpbWl0aXZlKHRyaWFuZ2xlLCBpbmRpY2VzLCAzLCBhdHRyaWJ1dGVzLCB3b3JsZFZpZXdQcm9qTWF0LCBtYXRDb2xvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISBjbGlwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZXNbblByaW1pdGl2ZSsrXSA9IHRyaWFuZ2xlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIGdsZW51bS5MSU5FUzpcbiAgICAgICAgICAgICAgICAgICAgLy8gTElORVMgbW9kZSBjYW4ndCB1c2UgZmFjZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5WZXJ0ZXg7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzWzBdID0gaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1sxXSA9IGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNQb29sLnBpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUubWF0ZXJpYWwgPSBtYXRlcmlhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUubGluZVdpZHRoID0gcmVuZGVyYWJsZS5saW5lV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwcGVkID0gdGhpcy5fc2V0UHJpbWl0aXZlKGxpbmUsIGluZGljZXMsIDIsIGF0dHJpYnV0ZXMsIHdvcmxkVmlld1Byb2pNYXQsIG1hdENvbG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgY2xpcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZXNbblByaW1pdGl2ZSsrXSA9IGxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBnbGVudW0uUE9JTlRTOlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5WZXJ0ZXg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1swXSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwb2ludHNQb29sLnBpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGlwcGVkID0gdGhpcy5fc2V0UHJpbWl0aXZlKHBvaW50LCBpbmRpY2VzLCAxLCBhdHRyaWJ1dGVzLCB3b3JsZFZpZXdQcm9qTWF0LCBtYXRDb2xvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIGNsaXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVzW25QcmltaXRpdmUrK10gPSBwb2ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBQT0lOVFMgbW9kZSBjYW4ndCB1c2UgZmFjZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyaWFuZ2xlc1Bvb2wuc2hyaW5rKCk7XG4gICAgICAgIGxpbmVzUG9vbC5zaHJpbmsoKTtcbiAgICAgICAgcG9pbnRzUG9vbC5zaHJpbmsoKTtcblxuICAgICAgICBwcmltaXRpdmVzLmxlbmd0aCA9IG5QcmltaXRpdmU7XG5cbiAgICAgICAgcHJpbWl0aXZlcy5zb3J0KGRlcHRoU29ydEZ1bmMpO1xuICAgICAgICB0aGlzLl9kcmF3UHJpbWl0aXZlcyhwcmltaXRpdmVzKTtcbiAgICB9LFxuXG4gICAgX3NldFByaW1pdGl2ZTogKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZlcnRleENvbG9yID0gdmVjNENyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHByaW1pdGl2ZSwgaW5kaWNlcywgc2l6ZSwgYXR0cmlidXRlcywgd29ybGRWaWV3UHJvak1hdCwgbWF0Q29sb3IpIHtcbiAgICAgICAgICAgIHZhciBjb2xvckF0dHJpYiA9IGF0dHJpYnV0ZXMuY29sb3I7XG4gICAgICAgICAgICB2YXIgdXNlVmVydGV4Q29sb3IgPSBjb2xvckF0dHJpYi52YWx1ZSAmJiBjb2xvckF0dHJpYi52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgdmFyIHByaUNvbG9yID0gcHJpbWl0aXZlLmNvbG9yO1xuXG4gICAgICAgICAgICBwcmltaXRpdmUuZGVwdGggPSAwO1xuICAgICAgICAgICAgaWYgKHVzZVZlcnRleENvbG9yKSB7XG4gICAgICAgICAgICAgICAgdmVjNC5zZXQocHJpQ29sb3IsIDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2xpcHBlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIHZhciBwZXJjZW50ID0gMSAvIHNpemU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBjb29yZCA9IHByaW1pdGl2ZS52ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmdldChpbmRpY2VzW2ldLCBjb29yZCk7XG4gICAgICAgICAgICAgICAgY29vcmRbM10gPSAxO1xuICAgICAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChjb29yZCwgY29vcmQsIHdvcmxkVmlld1Byb2pNYXQpO1xuICAgICAgICAgICAgICAgIGlmICh1c2VWZXJ0ZXhDb2xvcikge1xuICAgICAgICAgICAgICAgICAgICBjb2xvckF0dHJpYi5nZXQoaW5kaWNlc1tpXSwgdmVydGV4Q29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBdmVyYWdlIHZlcnRleCBjb2xvclxuICAgICAgICAgICAgICAgICAgICAvLyBFYWNoIHByaW1pdGl2ZSBvbmx5IGNhbGwgZmlsbCBvciBzdHJva2Ugb25jZVxuICAgICAgICAgICAgICAgICAgICAvLyBTbyBjb2xvciBtdXN0IGJlIHRoZSBzYW1lXG4gICAgICAgICAgICAgICAgICAgIHZlYzQuc2NhbGVBbmRBZGQocHJpQ29sb3IsIHByaUNvbG9yLCB2ZXJ0ZXhDb2xvciwgcGVyY2VudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2xpcHBpbmdcbiAgICAgICAgICAgICAgICB2YXIgeCA9IGNvb3JkWzBdO1xuICAgICAgICAgICAgICAgIHZhciB5ID0gY29vcmRbMV07XG4gICAgICAgICAgICAgICAgdmFyIHogPSBjb29yZFsyXTtcbiAgICAgICAgICAgICAgICB2YXIgdyA9IGNvb3JkWzNdO1xuXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBQb2ludCBjbGlwcGluZ1xuICAgICAgICAgICAgICAgIGlmICh4ID4gLXcgJiYgeCA8IHcgJiYgeSA+IC13ICYmIHkgPCB3ICYmIHogPiAtdyAmJiB6IDwgdykge1xuICAgICAgICAgICAgICAgICAgICBjbGlwcGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGludlcgPSAxIC8gdztcbiAgICAgICAgICAgICAgICBjb29yZFswXSA9IHggKiBpbnZXO1xuICAgICAgICAgICAgICAgIGNvb3JkWzFdID0geSAqIGludlc7XG4gICAgICAgICAgICAgICAgY29vcmRbMl0gPSB6ICogaW52VztcbiAgICAgICAgICAgICAgICAvLyBVc2UgcHJpbWl0aXZlIGF2ZXJhZ2UgZGVwdGg7XG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlLmRlcHRoICs9IGNvb3JkWzJdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISBjbGlwcGVkKSB7XG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlLmRlcHRoIC89IHNpemU7XG5cbiAgICAgICAgICAgICAgICBpZiAodXNlVmVydGV4Q29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmVjNC5tdWwocHJpQ29sb3IsIHByaUNvbG9yLCBtYXRDb2xvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2ZWM0LmNvcHkocHJpQ29sb3IsIG1hdENvbG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbGlwcGVkO1xuICAgICAgICB9XG4gICAgfSkoKSxcblxuICAgIF9kcmF3UHJpbWl0aXZlczogZnVuY3Rpb24gKHByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XG5cbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5fd2lkdGggKiBkcHI7XG4gICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLl9oZWlnaHQgKiBkcHI7XG4gICAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcblxuICAgICAgICB2YXIgcHJldkxpbmVXaWR0aDtcbiAgICAgICAgdmFyIHByZXZTdHJva2VDb2xvcjtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByaW1pdGl2ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwcmltaXRpdmUgPSBwcmltaXRpdmVzW2ldO1xuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gcHJpbWl0aXZlLnZlcnRpY2VzO1xuXG4gICAgICAgICAgICB2YXIgcHJpbWl0aXZlVHlwZSA9IHByaW1pdGl2ZS50eXBlO1xuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcHJpbWl0aXZlLm1hdGVyaWFsO1xuICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBTZXQgbWF0ZXJpYWxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSBtYXRlcmlhbC5vcGFjaXR5O1xuICAgICAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY29sb3JTdHIgPSB2ZWM0VG9Db2xvclN0cihwcmltaXRpdmUuY29sb3IpO1xuICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQUklNSVRJVkVfVFJJQU5HTEU6XG4gICAgICAgICAgICAgICAgICAgIHZhciB2MCA9IHZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdjEgPSB2ZXJ0aWNlc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYyID0gdmVydGljZXNbMl07XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvclN0cjtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKCh2MFswXSArIDEpICogaGFsZldpZHRoLCAoLXYwWzFdICsgMSkgKiBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbygodjFbMF0gKyAxKSAqIGhhbGZXaWR0aCwgKC12MVsxXSArIDEpICogaGFsZkhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oKHYyWzBdICsgMSkgKiBoYWxmV2lkdGgsICgtdjJbMV0gKyAxKSAqIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUFJJTUlUSVZFX0xJTkU6XG4gICAgICAgICAgICAgICAgICAgIHZhciB2MCA9IHZlcnRpY2VzWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdjEgPSB2ZXJ0aWNlc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHByaW1pdGl2ZS5saW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2U3Ryb2tlQ29sb3IgIT09IGNvbG9yU3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2U3Ryb2tlQ29sb3IgPSBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvclN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGluZVdpZHRoICE9PSBwcmV2TGluZVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gcHJldkxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oKHYwWzBdICsgMSkgKiBoYWxmV2lkdGgsICgtdjBbMV0gKyAxKSAqIGhhbGZIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKCh2MVswXSArIDEpICogaGFsZldpZHRoLCAoLXYxWzFdICsgMSkgKiBoYWxmSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFBSSU1JVElWRV9QT0lOVDpcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50U2l6ZSA9IG1hdGVyaWFsLnBvaW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50U2hhcGUgPSBtYXRlcmlhbC5wb2ludFNoYXBlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFsZlNpemUgPSBwb2ludFNpemUgLyAyO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYwID0gdmVydGljZXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ggPSAodjBbMF0gKyAxKSAqIGhhbGZXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeSA9ICgtdjBbMV0gKyAxKSAqIGhhbGZIZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvclN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludFNoYXBlID09PSAncmVjdGFuZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChjeCAtIGhhbGZTaXplLCBjeSAtIGhhbGZTaXplLCBwb2ludFNpemUsIHBvaW50U2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludFNoYXBlID09PSAnY2lyY2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYXJjKGN4LCBjeSwgaGFsZlNpemUsIDAsIE1hdGguUEkgKiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9LFxuXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl90cmlhbmdsZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fbGluZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fcG9pbnRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3ByaW1pdGl2ZXMgPSBbXTtcblxuICAgICAgICB0aGlzLmN0eCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzUmVuZGVyZXI7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuXG4vLyBQRU5ESU5HXG4vLyBVc2UgdG9wb2xvZ2ljYWwgc29ydCA/XG5cbi8qKlxuICogTm9kZSBvZiBncmFwaCBiYXNlZCBwb3N0IHByb2Nlc3NpbmcuXG4gKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5Ob2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICpcbiAqL1xudmFyIE5vZGUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLk5vZGUjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcbiAgICAgICAgICogQGV4YW1wbGU6XG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgaW5wdXRMaW5rczoge30sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxuICAgICAgICAgKiBAZXhhbXBsZTpcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxuXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXG4gICAgICAgIC8vIFdpbGwgYmUgdXNlZCB3aGVuIHRoZXJlIGV4aXN0IGEgY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxuXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcblxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxuICAgICAgICBfcmVuZGVyZWQ6IGZhbHNlLFxuXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXG4gICAgfTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Ob2RlLnByb3RvdHlwZSAqL1xue1xuXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyLmdsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgcGFyYW1ldGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcbiAgICAgKi9cbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge30sXG4gICAgLyoqXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxuICAgICAqIEByZXR1cm4ge31cbiAgICAgKi9cbiAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lKSB7fSxcbiAgICAvKipcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAgICAgKi9cbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSB7XG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcihuYW1lLCBvYmpbbmFtZV0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge30sXG5cbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciAvKm9wdGlvbmFsKi8sIG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBvdXRwdXQgdGV4dHVyZSB3aXRob3V0IHJlbmRlcmluZ1xuICAgICAgICAgICAgbmFtZSA9IHJlbmRlcmVyO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xuICAgICAgICBpZiAoIW91dHB1dEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbHJlYWR5IGJlZW4gcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHJldHVybiB0ZXh0dXJlIGluIGxhc3QgZnJhbWVcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgICAvLyBTb2x2ZSBDaXJjdWxhciBSZWZlcmVuY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJsYW5rIHRleHR1cmUgYXQgZmlyc3QgcGFzc1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKG91dHB1dEluZm8ucGFyYW1ldGVycyB8fCB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXIocmVuZGVyZXIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xuICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdLS07XG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBsaW5rOiBmdW5jdGlvbiAoaW5wdXRQaW5OYW1lLCBmcm9tTm9kZSwgZnJvbVBpbk5hbWUpIHtcblxuICAgICAgICAvLyBUaGUgcmVsYXRpb25zaGlwIGZyb20gb3V0cHV0IHBpbiB0byBpbnB1dCBwaW4gaXMgb25lLW9uLW11bHRpcGxlXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rc1tpbnB1dFBpbk5hbWVdID0ge1xuICAgICAgICAgICAgbm9kZTogZnJvbU5vZGUsXG4gICAgICAgICAgICBwaW46IGZyb21QaW5OYW1lXG4gICAgICAgIH07XG4gICAgICAgIGlmICghZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdKSB7XG4gICAgICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0ucHVzaCh7XG4gICAgICAgICAgICBub2RlOiB0aGlzLFxuICAgICAgICAgICAgcGluOiBpbnB1dFBpbk5hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW5hYmxlZCB0aGUgcGluIHRleHR1cmUgaW4gc2hhZGVyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKGlucHV0UGluTmFtZSk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5wdXRMaW5rcyA9IHt9O1xuICAgICAgICB0aGlzLm91dHB1dExpbmtzID0ge307XG4gICAgfSxcblxuICAgIHVwZGF0ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZW5kZXJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmlucHV0TGlua3NbaW5wdXROYW1lXTtcbiAgICAgICAgICAgICAgICBsaW5rLm5vZGUudXBkYXRlUmVmZXJlbmNlKGxpbmsucGluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdXRwdXROYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdICsrO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dExpbmtzKSB7XG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID0gMDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhZnRlckZyYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdGV4dHVyZXMgdG8gcG9vbFxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0TGlua3MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGU7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IEdyYXBoTm9kZSBmcm9tICcuL05vZGUnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBHcmFwaCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGgjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5jb21wb3NpdG9yLk5vZGU+fVxuICAgICAgICAgKi9cbiAgICAgICAgbm9kZXM6IFtdXG4gICAgfTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaC5wcm90b3R5cGUgKi9cbntcblxuICAgIC8qKlxuICAgICAqIE1hcmsgdG8gdXBkYXRlXG4gICAgICovXG4gICAgZGlydHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtjbGF5LmNvbXBvc2l0b3IuTm9kZX0gbm9kZVxuICAgICAqL1xuICAgIGFkZE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZXMuaW5kZXhPZihub2RlKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5jb21wb3NpdG9yLk5vZGV8c3RyaW5nfSBub2RlXG4gICAgICovXG4gICAgcmVtb3ZlTm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5TmFtZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLk5vZGV9XG4gICAgICovXG4gICAgZ2V0Tm9kZUJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlc1tpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBsaW5rcyBvZiBncmFwaFxuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmF2ZXJzZSBhbGwgdGhlIG5vZGVzIGFuZCBidWlsZCB0aGUgZ3JhcGhcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZXNbaV07XG5cbiAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHMpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xuICAgICAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHNbaW5wdXROYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFzcyAmJiAhbm9kZS5wYXNzLm1hdGVyaWFsLmlzVW5pZm9ybUVuYWJsZWQoaW5wdXROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiAnICArIG5vZGUubmFtZSArICcuJyArIGlucHV0TmFtZSArICcgbm90IHVzZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbkluZm8gPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZyb21QaW4gPSB0aGlzLmZpbmRQaW4oZnJvbVBpbkluZm8pO1xuICAgICAgICAgICAgICAgIGlmIChmcm9tUGluKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGluayhpbnB1dE5hbWUsIGZyb21QaW4ubm9kZSwgZnJvbVBpbi5waW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmcm9tUGluSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSAnICsgZnJvbVBpbkluZm8gKyAnIG5vdCBleGlzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaW4gb2YgJyArIGZyb21QaW5JbmZvLm5vZGUgKyAnLicgKyBmcm9tUGluSW5mby5waW4gKyAnIG5vdCBleGlzdCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpbmRQaW46IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB2YXIgbm9kZTtcbiAgICAgICAgLy8gVHJ5IHRvIHRha2UgaW5wdXQgYXMgYSBkaXJlY3RseSBhIG5vZGVcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBHcmFwaE5vZGUpIHtcbiAgICAgICAgICAgIGlucHV0ID0ge1xuICAgICAgICAgICAgICAgIG5vZGU6IGlucHV0XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5ub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMubm9kZXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRtcC5uYW1lID09PSBpbnB1dC5ub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0bXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm9kZSA9IGlucHV0Lm5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dFBpbiA9IGlucHV0LnBpbjtcbiAgICAgICAgICAgIGlmICghaW5wdXRQaW4pIHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgZmlyc3QgcGluIGRlZmF1bHRseVxuICAgICAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQaW4gPSBPYmplY3Qua2V5cyhub2RlLm91dHB1dHMpWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHNbaW5wdXRQaW5dKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgcGluOiBpbnB1dFBpblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgR3JhcGg7XG4iLCJpbXBvcnQgR3JhcGggZnJvbSAnLi9HcmFwaCc7XG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi9UZXh0dXJlUG9vbCc7XG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xuXG4vKipcbiAqIENvbXBvc2l0b3IgcHJvdmlkZSBncmFwaCBiYXNlZCBwb3N0IHByb2Nlc3NpbmdcbiAqXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaFxuICpcbiAqL1xudmFyIENvbXBvc2l0b3IgPSBHcmFwaC5leHRlbmQoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLy8gT3V0cHV0IG5vZGVcbiAgICAgICAgX291dHB1dHM6IFtdLFxuXG4gICAgICAgIF90ZXh0dXJlUG9vbDogbmV3IFRleHR1cmVQb29sKCksXG5cbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoe1xuICAgICAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfTtcbn0sXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yLnByb3RvdHlwZSAqL1xue1xuICAgIGFkZE5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgR3JhcGgucHJvdG90eXBlLmFkZE5vZGUuY2FsbCh0aGlzLCBub2RlKTtcbiAgICAgICAgbm9kZS5fY29tcG9zaXRvciA9IHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9kaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2Rlc1tpXS5vdXRwdXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh0aGlzLm5vZGVzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmZXJlbmNlIG51bWJlciBvZiBlYWNoIG91dHB1dCB0ZXh0dXJlXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmJlZm9yZUZyYW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0udXBkYXRlUmVmZXJlbmNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0ucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIENsZWFyIHVwXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmFmdGVyRnJhbWUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhbGxvY2F0ZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlUG9vbC5nZXQocGFyYW1ldGVycyk7XG4gICAgfSxcblxuICAgIHJlbGVhc2VUZXh0dXJlOiBmdW5jdGlvbiAocGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQocGFyYW1ldGVycyk7XG4gICAgfSxcblxuICAgIGdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZSBjb21wb3NpdG9yXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlcik7XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3I7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuU2NlbmVOb2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuTm9kZVxuICovXG52YXIgU2NlbmVOb2RlID0gTm9kZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGUjICovXG57XG4gICAgbmFtZTogJ3NjZW5lJyxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cbiAgICAgKi9cbiAgICBzY2VuZTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Y2xheS5DYW1lcmF9XG4gICAgICovXG4gICAgY2FtZXJhOiBudWxsLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGF1dG9VcGRhdGVTY2VuZTogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwcmVaOiBmYWxzZVxuXG59LCBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XG59LCB7XG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlcikge1xuXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicpO1xuXG4gICAgICAgIHZhciByZW5kZXJJbmZvO1xuXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XG5cbiAgICAgICAgICAgIHJlbmRlckluZm8gPSByZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEsICF0aGlzLmF1dG9VcGRhdGVTY2VuZSwgdGhpcy5wcmVaKTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLmZyYW1lQnVmZmVyO1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcblxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50IHx8IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGF0dGFjaG1lbnQpID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBfZ2xbYXR0YWNobWVudF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XG4gICAgICAgICAgICBpZiAoZXh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gcGFyc2VJbnQoYXR0YWNobWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDw9IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCArIDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyBjbGVhclxuICAgICAgICAgICAgLy8gUEVORElOR1xuICAgICAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XG4gICAgICAgICAgICByZW5kZXJlci5jbGVhckJpdCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUIHwgZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XG4gICAgICAgICAgICByZW5kZXJlci5yZXN0b3JlQ2xlYXIoKTtcblxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCByZW5kZXJJbmZvKTtcblxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTY2VuZU5vZGU7XG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGVcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5Ob2RlXG4gKi9cbnZhciBUZXh0dXJlTm9kZSA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZSMgKi8ge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxuICAgICAgICAgKi9cbiAgICAgICAgdGV4dHVyZTogbnVsbCxcblxuICAgICAgICAvLyBUZXh0dXJlIG5vZGUgbXVzdCBoYXZlIG91dHB1dCB3aXRob3V0IHBhcmFtZXRlcnNcbiAgICAgICAgb3V0cHV0czoge1xuICAgICAgICAgICAgY29sb3I6IHt9XG4gICAgICAgIH1cbiAgICB9O1xufSwgZnVuY3Rpb24gKCkge1xufSwge1xuXG4gICAgZ2V0T3V0cHV0OiBmdW5jdGlvbiAocmVuZGVyZXIsIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZTtcbiAgICB9LFxuXG4gICAgLy8gRG8gbm90aGluZ1xuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7fSxcbiAgICBhZnRlckZyYW1lOiBmdW5jdGlvbiAoKSB7fVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmVOb2RlO1xuIiwiLy8gVE9ETyBTaGFkZXIgbGlicmFyeVxuaW1wb3J0IFBhc3MgZnJvbSAnLi9QYXNzJztcbmltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XG5cbi8vIFRPRE8gY3VybG5vaXNlIGRlbW8gd3JvbmdcblxuLy8gUEVORElOR1xuLy8gVXNlIHRvcG9sb2dpY2FsIHNvcnQgP1xuXG4vKipcbiAqIEZpbHRlciBub2RlXG4gKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5GaWx0ZXJOb2RlXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuTm9kZVxuICpcbiAqIEBleGFtcGxlXG4gICAgdmFyIG5vZGUgPSBuZXcgY2xheS5jb21wb3NpdG9yLk5vZGUoe1xuICAgICAgICBuYW1lOiAnZnhhYScsXG4gICAgICAgIHNoYWRlcjogY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZnhhYScpLFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogJ3NjZW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcGluOiAnY29sb3InXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIE11bHRpcGxlIG91dHB1dHMgaXMgcHJlc2VydmVkIGZvciBNUlQgc3VwcG9ydCBpbiBXZWJHTDIuMFxuICAgICAgICBvdXRwdXRzOiB7XG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IGNsYXkuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDBcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogY2xheS5UZXh0dXJlLlJHQkEsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MTIsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTEyXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBOb2RlIHdpbGwga2VlcCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcbiAgICAgICAgICAgICAgICBrZWVwTGFzdEZyYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBub2RlIG91dHB1dCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcbiAgICAgICAgICAgICAgICBvdXRwdXRMYXN0RnJhbWU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgICpcbiAgICAqL1xudmFyIEZpbHRlck5vZGUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLk5vZGUjICovIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICovXG4gICAgICAgIGlucHV0czoge30sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqL1xuICAgICAgICBvdXRwdXRzOiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgc2hhZGVyOiAnJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcbiAgICAgICAgICogQGV4YW1wbGU6XG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgaW5wdXRMaW5rczoge30sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxuICAgICAgICAgKiBAZXhhbXBsZTpcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xuICAgICAgICAgKiAgICAgfVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKi9cbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5jb21wb3NpdG9yLlBhc3N9XG4gICAgICAgICAqL1xuICAgICAgICBwYXNzOiBudWxsLFxuXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXG4gICAgICAgIC8vIFdpbGwgYmUgdXNlZCB3aGVuIHRoZXJlIGV4aXN0IGEgY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxuXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcblxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxuICAgICAgICBfcmVuZGVyZWQ6IGZhbHNlLFxuXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXG4gICAgfTtcbn0sIGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBwYXNzID0gbmV3IFBhc3Moe1xuICAgICAgICBmcmFnbWVudDogdGhpcy5zaGFkZXJcbiAgICB9KTtcbiAgICB0aGlzLnBhc3MgPSBwYXNzO1xufSxcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLk5vZGUucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcbiAgICAgKi9cbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCByZW5kZXJlcik7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcblxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XG5cbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xuICAgICAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmlucHV0TGlua3NbaW5wdXROYW1lXTtcbiAgICAgICAgICAgIHZhciBpbnB1dFRleHR1cmUgPSBsaW5rLm5vZGUuZ2V0T3V0cHV0KHJlbmRlcmVyLCBsaW5rLnBpbik7XG4gICAgICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShpbnB1dE5hbWUsIGlucHV0VGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3V0cHV0XG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51bmJpbmQocmVuZGVyZXIpO1xuXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IHt9O1xuXG4gICAgICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGFyYW1ldGVycy53aWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudCB8fCBfZ2wuQ09MT1JfQVRUQUNITUVOVDA7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gX2dsW2F0dGFjaG1lbnRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdID0gdGV4dHVyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5iaW5kKHJlbmRlcmVyKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgLy8gRklYTUUgYXR0YWNobWVudCBjaGFuZ2VzIGluIGRpZmZlcmVudCBub2Rlc1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0sIGF0dGFjaG1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyKTtcblxuICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxuICAgICAgICAgICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XG4gICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLmdldEZyYW1lQnVmZmVyKCkudXBkYXRlTWlwbWFwKHJlbmRlcmVyLmdsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiB0aGlzLmlucHV0TGlua3MpIHtcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XG4gICAgICAgICAgICBsaW5rLm5vZGUucmVtb3ZlUmVmZXJlbmNlKGxpbmsucGluKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlcmVyKTtcbiAgICB9LFxuXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgcGFyYW1ldGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcbiAgICAgKi9cbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgcGFyYW1ldGVyIHZhbHVlXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAgICogQHJldHVybiB7fVxuICAgICAqL1xuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFzcy5nZXRVbmlmb3JtKG5hbWUpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0IHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gICAgICovXG4gICAgc2V0UGFyYW1ldGVyczogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8gLyoqXG4gICAgLy8gICogU2V0IHNoYWRlciBjb2RlXG4gICAgLy8gICogQHBhcmFtIHtzdHJpbmd9IHNoYWRlclN0clxuICAgIC8vICAqL1xuICAgIC8vIHNldFNoYWRlcjogZnVuY3Rpb24gKHNoYWRlclN0cikge1xuICAgIC8vICAgICB2YXIgbWF0ZXJpYWwgPSB0aGlzLnBhc3MubWF0ZXJpYWw7XG4gICAgLy8gICAgIG1hdGVyaWFsLnNoYWRlci5zZXRGcmFnbWVudChzaGFkZXJTdHIpO1xuICAgIC8vICAgICBtYXRlcmlhbC5hdHRhY2hTaGFkZXIobWF0ZXJpYWwuc2hhZGVyLCB0cnVlKTtcbiAgICAvLyB9LFxuICAgIC8qKlxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIHh4eCk7XG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXG4gICAgICovXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc3ltYm9sLCB2YWwpIHtcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wsIHZhbCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KVxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXG4gICAgICovXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIHN5bWJvbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXG4gICAgICAgICAgICAgICAgLy8gUHV0IHRoZSB0ZXh0dXJlIGJhY2sgdG8gdGhlIHBvb2wuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgTm9kZS5wcm90b3R5cGUuY2xlYXIuY2FsbCh0aGlzKTtcblxuICAgICAgICAvLyBEZWZhdWx0IGRpc2FibGUgYWxsIHRleHR1cmVcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRpc2FibGVUZXh0dXJlc0FsbCgpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJOb2RlO1xuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcbmltcG9ydCBDb21wb3NpdG9yIGZyb20gJy4vQ29tcG9zaXRvcic7XG5pbXBvcnQgQ29tcG9TY2VuZU5vZGUgZnJvbSAnLi9TY2VuZU5vZGUnO1xuaW1wb3J0IENvbXBvVGV4dHVyZU5vZGUgZnJvbSAnLi9UZXh0dXJlTm9kZSc7XG5pbXBvcnQgQ29tcG9GaWx0ZXJOb2RlIGZyb20gJy4vRmlsdGVyTm9kZSc7XG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XG5cbnZhciBzaGFkZXJTb3VyY2VSZWcgPSAvXiNzb3VyY2VcXCgoLio/KVxcKS87XG5cbi8qKlxuICogQG5hbWUgY2xheS5jb21wb3NpdG9yLmNyZWF0ZUNvbXBvc2l0b3JcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGpzb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cbiAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yfVxuICovXG5mdW5jdGlvbiBjcmVhdGVDb21wb3NpdG9yKGpzb24sIG9wdHMpIHtcbiAgICB2YXIgY29tcG9zaXRvciA9IG5ldyBDb21wb3NpdG9yKCk7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICB2YXIgbGliID0ge1xuICAgICAgICB0ZXh0dXJlczoge30sXG4gICAgICAgIHBhcmFtZXRlcnM6IHt9XG4gICAgfTtcbiAgICB2YXIgYWZ0ZXJMb2FkID0gZnVuY3Rpb24oc2hhZGVyTGliLCB0ZXh0dXJlTGliKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG5vZGVJbmZvID0ganNvbi5ub2Rlc1tpXTtcbiAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlTm9kZShub2RlSW5mbywgbGliLCBvcHRzKTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgY29tcG9zaXRvci5hZGROb2RlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4ganNvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHZhciBwYXJhbUluZm8gPSBqc29uLnBhcmFtZXRlcnNbbmFtZV07XG4gICAgICAgIGxpYi5wYXJhbWV0ZXJzW25hbWVdID0gY29udmVydFBhcmFtZXRlcihwYXJhbUluZm8pO1xuICAgIH1cbiAgICAvLyBUT0RPIGxvYWQgdGV4dHVyZSBhc3luY2hyb25vdXNcbiAgICBsb2FkVGV4dHVyZXMoanNvbiwgbGliLCBvcHRzLCBmdW5jdGlvbih0ZXh0dXJlTGliKSB7XG4gICAgICAgIGxpYi50ZXh0dXJlcyA9IHRleHR1cmVMaWI7XG4gICAgICAgIGFmdGVyTG9hZCgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBvc2l0b3I7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cykge1xuICAgIHZhciB0eXBlID0gbm9kZUluZm8udHlwZSB8fCAnZmlsdGVyJztcbiAgICB2YXIgc2hhZGVyU291cmNlO1xuICAgIHZhciBpbnB1dHM7XG4gICAgdmFyIG91dHB1dHM7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgICAgdmFyIHNoYWRlckV4cCA9IG5vZGVJbmZvLnNoYWRlci50cmltKCk7XG4gICAgICAgIHZhciByZXMgPSBzaGFkZXJTb3VyY2VSZWcuZXhlYyhzaGFkZXJFeHApO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBTaGFkZXIuc291cmNlKHJlc1sxXS50cmltKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNoYWRlckV4cC5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gbGliLnNoYWRlcnNbc2hhZGVyRXhwLnN1YnN0cigxKV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaGFkZXJTb3VyY2UpIHtcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IHNoYWRlckV4cDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGVJbmZvLmlucHV0cykge1xuICAgICAgICBpbnB1dHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5pbnB1dHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZUluZm8uaW5wdXRzW25hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IG5vZGVJbmZvLmlucHV0c1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZUluZm8uaW5wdXRzW25hbWVdLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHBpbjogbm9kZUluZm8uaW5wdXRzW25hbWVdLnBpblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVJbmZvLm91dHB1dHMpIHtcbiAgICAgICAgb3V0cHV0cyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLm91dHB1dHMpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gbm9kZUluZm8ub3V0cHV0c1tuYW1lXTtcbiAgICAgICAgICAgIG91dHB1dHNbbmFtZV0gPSB7fTtcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmF0dGFjaG1lbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0uYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ua2VlcExhc3RGcmFtZSA9IG91dHB1dEluZm8ua2VlcExhc3RGcmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5vdXRwdXRMYXN0RnJhbWUgPSBvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLnBhcmFtZXRlcnMgPSBjb252ZXJ0UGFyYW1ldGVyKG91dHB1dEluZm8ucGFyYW1ldGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKHR5cGUgPT09ICdzY2VuZScpIHtcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb1NjZW5lTm9kZSh7XG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxuICAgICAgICAgICAgc2NlbmU6IG9wdHMuc2NlbmUsXG4gICAgICAgICAgICBjYW1lcmE6IG9wdHMuY2FtZXJhLFxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmUnKSB7XG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9UZXh0dXJlTm9kZSh7XG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gRGVmYXVsdCBpcyBmaWx0ZXJcbiAgICBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb0ZpbHRlck5vZGUoe1xuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyU291cmNlLFxuICAgICAgICAgICAgaW5wdXRzOiBpbnB1dHMsXG4gICAgICAgICAgICBvdXRwdXRzOiBvdXRwdXRzXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZUluZm8ucGFyYW1ldGVycykge1xuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGVJbmZvLnBhcmFtZXRlcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZih2YWwpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBsaWIudGV4dHVyZXNbdmFsLnN1YnN0cigxKV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLm9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmVyZW5kZXInLCBjcmVhdGVTaXplU2V0SGFuZGxlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZUluZm8uZGVmaW5lcyAmJiBub2RlLnBhc3MpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8uZGVmaW5lcykge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5kZWZpbmVzW25hbWVdO1xuICAgICAgICAgICAgICAgIG5vZGUucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgbmFtZSwgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gY29udmVydFBhcmFtZXRlcihwYXJhbUluZm8pIHtcbiAgICB2YXIgcGFyYW0gPSB7fTtcbiAgICBpZiAoIXBhcmFtSW5mbykge1xuICAgICAgICByZXR1cm4gcGFyYW07XG4gICAgfVxuICAgIFsndHlwZScsICdtaW5GaWx0ZXInLCAnbWFnRmlsdGVyJywgJ3dyYXBTJywgJ3dyYXBUJywgJ2ZsaXBZJywgJ3VzZU1pcG1hcCddXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XG4gICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBlbnVtXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IFRleHR1cmVbdmFsXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIFsnd2lkdGgnLCAnaGVpZ2h0J11cbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgaWYgKHBhcmFtSW5mb1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHBhcmFtSW5mb1tuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSBjcmVhdGVTaXplUGFyc2VyKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICBpZiAocGFyYW1JbmZvLnVzZU1pcG1hcCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmFtLnVzZU1pcG1hcCA9IHBhcmFtSW5mby51c2VNaXBtYXA7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbn1cblxuZnVuY3Rpb24gbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIWpzb24udGV4dHVyZXMpIHtcbiAgICAgICAgY2FsbGJhY2soe30pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0ZXh0dXJlcyA9IHt9O1xuICAgIHZhciBsb2FkaW5nID0gMDtcblxuICAgIHZhciBjYmQgPSBmYWxzZTtcbiAgICB2YXIgdGV4dHVyZVJvb3RQYXRoID0gb3B0cy50ZXh0dXJlUm9vdFBhdGg7XG4gICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uKHRleHR1cmVJbmZvLCBuYW1lKSB7XG4gICAgICAgIHZhciB0ZXh0dXJlO1xuICAgICAgICB2YXIgcGF0aCA9IHRleHR1cmVJbmZvLnBhdGg7XG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcih0ZXh0dXJlSW5mby5wYXJhbWV0ZXJzKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aCkgJiYgcGF0aC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShpdGVtLCB0ZXh0dXJlUm9vdFBhdGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZShwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHRleHR1cmVSb290UGF0aCkge1xuICAgICAgICAgICAgICAgIHBhdGggPSB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHRleHR1cmVSb290UGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcbiAgICAgICAgbG9hZGluZysrO1xuICAgICAgICB0ZXh0dXJlLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcbiAgICAgICAgICAgIGxvYWRpbmctLTtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodGV4dHVyZXMpO1xuICAgICAgICAgICAgICAgIGNiZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGxvYWRpbmcgPT09IDAgJiYgIWNiZCkge1xuICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTaXplU2V0SGFuZGxlcihuYW1lLCBleHByRnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCBzaXplIG9yIHdpbmRvdyBzaXplXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgICAgIC8vIFBFTkRJTkcgSWYgbXVsdGlwbHkgZHByID9cbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gZXhwckZ1bmMod2lkdGgsIGhlaWdodCwgZHByKTtcbiAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgcmVzdWx0KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTaXplUGFyc2VyKG5hbWUsIGV4cHJGdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xuICAgICAgICB2YXIgZHByID0gcmVuZGVyZXIuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xuICAgICAgICB2YXIgd2lkdGggPSByZW5kZXJlci5nZXRXaWR0aCgpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XG4gICAgICAgIHJldHVybiBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHRyeUNvbnZlcnRFeHByKHN0cmluZykge1xuICAgIC8vIFBFTkRJTkdcbiAgICB2YXIgZXhwclJlcyA9IC9eZXhwclxcKCguKilcXCkkLy5leGVjKHN0cmluZyk7XG4gICAgaWYgKGV4cHJSZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBmdW5jID0gbmV3IEZ1bmN0aW9uKCd3aWR0aCcsICdoZWlnaHQnLCAnZHByJywgJ3JldHVybiAnICsgZXhwclJlc1sxXSk7XG4gICAgICAgICAgICAvLyBUcnkgcnVuIHRcbiAgICAgICAgICAgIGZ1bmMoMSwgMSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjtcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BoZXJlXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cbiAqL1xudmFyIFNwaGVyZUxpZ2h0ID0gTGlnaHQuZXh0ZW5kKFxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlNwaGVyZSMgKi9cbntcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhbmdlOiAxMDAsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHJhZGl1czogNVxufSwge1xuXG4gICAgdHlwZTogJ1NQSEVSRV9MSUdIVCcsXG5cbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XG4gICAgICAgIHNwaGVyZUxpZ2h0UG9zaXRpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcGhlcmVMaWdodFJhbmdlOiB7XG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzcGhlcmVMaWdodFJhZGl1czoge1xuICAgICAgICAgICAgdHlwZTogJzFmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYWRpdXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNwaGVyZUxpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlTGlnaHQ7XG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5UdWJlXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cbiAqL1xudmFyIFR1YmVMaWdodCA9IExpZ2h0LmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5saWdodC5UdWJlIyAqL1xue1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgcmFuZ2U6IDEwMCxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbGVuZ3RoOiAxMFxufSwge1xuXG4gICAgdHlwZTogJ1RVQkVfTElHSFQnLFxuXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xuICAgICAgICB0dWJlTGlnaHRQb3NpdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogJzNmJyxcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHViZUxpZ2h0RXh0ZW5kOiB7XG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxuICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4dGVuZCBpbiB4IGF4aXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS54KVxuICAgICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgpLnNjYWxlKGluc3RhbmNlLmxlbmd0aCAvIDIpLmFycmF5O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSgpXG4gICAgICAgIH0sXG5cbiAgICAgICAgdHViZUxpZ2h0UmFuZ2U6IHtcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHViZUxpZ2h0Q29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6ICczZicsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVHViZUxpZ2h0O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL2NvcmUvcmVxdWVzdCc7XG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciBmcm9tICcuLi9jb21wb3NpdG9yL2NyZWF0ZUNvbXBvc2l0b3InO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5GWFxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEZYTG9hZGVyID0gQmFzZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkubG9hZGVyLkZYIyAqL1xue1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgcm9vdFBhdGg6ICcnLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGV4dHVyZVJvb3RQYXRoOiAnJyxcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNoYWRlclJvb3RQYXRoOiAnJyxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxuICAgICAqL1xuICAgIHNjZW5lOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxuICAgICAqL1xuICAgIGNhbWVyYTogbnVsbFxufSxcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuRlgucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB1cmxcbiAgICAgKi9cbiAgICBsb2FkOiBmdW5jdGlvbih1cmwpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIGlmICghdGhpcy5yb290UGF0aCkge1xuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0LmdldCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uKHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3NpdG9yKEpTT04ucGFyc2UoZGF0YSksIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVJvb3RQYXRoOiB0aGlzLnRleHR1cmVSb290UGF0aCB8fCB0aGlzLnJvb3RQYXRoLFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhLFxuICAgICAgICAgICAgICAgICAgICBzY2VuZTogdGhpcy5zY2VuZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRlhMb2FkZXI7XG4iLCJpbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQyID0gZ2xNYXRyaXgubWF0MjtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguTWF0cml4MlxuICovXG52YXIgTWF0cml4MiA9IGZ1bmN0aW9uKCkge1xuXG4gICAgLyoqXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXgyXG4gICAgICogQG5hbWUgYXJyYXlcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguTWF0cml4MiNcbiAgICAgKi9cbiAgICB0aGlzLmFycmF5ID0gbWF0Mi5jcmVhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIF9kaXJ0eVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguTWF0cml4MiNcbiAgICAgKi9cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG59O1xuXG5NYXRyaXgyLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyLFxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXG4gICAgICovXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyKCkpLmNvcHkodGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDIuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICAgICAqL1xuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyLmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnZlcnQgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICAgICAqL1xuICAgIGludmVydDogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDIuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgbWF0Mi5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgbWF0Mi5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2NhbGUgc2VsZiBieSBzXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9ICBzXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgbWF0Mi5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAgICAgKi9cbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyLnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xuICAgIH0sXG5cbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge01hdHJpeDJ9IG91dFxuICogQHBhcmFtICB7TWF0cml4Mn0gYVxuICogQHJldHVybiB7TWF0cml4Mn1cbiAqL1xuTWF0cml4Mi5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0Mi5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICBtYXQyLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5NYXRyaXgyLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBtYXQyLmRldGVybWluYW50KGEuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4Mn1cbiAqL1xuTWF0cml4Mi5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xuICAgIG1hdDIuaWRlbnRpdHkob3V0LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gKi9cbk1hdHJpeDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0Mi5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIG1hdDIubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4Mn0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLm11bHRpcGx5ID0gTWF0cml4Mi5tdWw7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJ9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gICByYWRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XG4gICAgbWF0Mi5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIHZcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyfVxuICovXG5NYXRyaXgyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XG4gICAgbWF0Mi5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBvdXRcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcbiAqIEByZXR1cm4ge01hdHJpeDJ9XG4gKi9cbk1hdHJpeDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0Mi50cmFuc3Bvc2Uob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcbiIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIG1hdDJkID0gZ2xNYXRyaXgubWF0MmQ7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5tYXRoLk1hdHJpeDJkXG4gKi9cbnZhciBNYXRyaXgyZCA9IGZ1bmN0aW9uKCkge1xuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MmRcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5NYXRyaXgyZCNcbiAgICAgKi9cbiAgICB0aGlzLmFycmF5ID0gbWF0MmQuY3JlYXRlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBfZGlydHlcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDJkI1xuICAgICAqL1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cbk1hdHJpeDJkLnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyZCxcblxuICAgIC8qKlxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgTWF0cml4MmRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyZCgpKS5jb3B5KHRoaXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IGZyb20gYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDJkLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XG4gICAgICAgIG1hdDJkLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJbnZlcnQgc2VsZlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBtYXQyZC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICAgICAqL1xuICAgIG11bDogZnVuY3Rpb24oYikge1xuICAgICAgICBtYXQyZC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYikge1xuICAgICAgICBtYXQyZC5tdWwodGhpcy5hcnJheSwgYi5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgbWF0MmQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIG1hdDJkLm11bHRpcGx5KHRoaXMuYXJyYXksIGIuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhblxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gICAgICovXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgbWF0MmQucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgc1xuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xuICAgICAgICBtYXQyZC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAgICAgKi9cbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgbWF0MmQudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XG4gICAgbWF0MmQuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5NYXRyaXgyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gKi9cbk1hdHJpeDJkLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XG4gICAgbWF0MmQuaWRlbnRpdHkob3V0LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gKi9cbk1hdHJpeDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xuICAgIG1hdDJkLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICBtYXQyZC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC5tdWx0aXBseSA9IE1hdHJpeDJkLm11bDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4MmR9XG4gKi9cbk1hdHJpeDJkLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XG4gICAgbWF0MmQucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIHZcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgyZH1cbiAqL1xuTWF0cml4MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQyZC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgyZH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgdlxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJkfVxuICovXG5NYXRyaXgyZC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcbiAgICBtYXQyZC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MmQ7XG4iLCJpbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQzID0gZ2xNYXRyaXgubWF0MztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5Lm1hdGguTWF0cml4M1xuICovXG52YXIgTWF0cml4MyA9IGZ1bmN0aW9uICgpIHtcblxuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4M1xuICAgICAqIEBuYW1lIGFycmF5XG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDMjXG4gICAgICovXG4gICAgdGhpcy5hcnJheSA9IG1hdDMuY3JlYXRlKCk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBfZGlydHlcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLk1hdHJpeDMjXG4gICAgICovXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xufTtcblxuTWF0cml4My5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MyxcblxuICAgIC8qKlxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxuICAgICAqL1xuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIGFkam9pbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWF0My5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgzXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MygpKS5jb3B5KHRoaXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IGZyb20gYlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgbWF0My5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIGRldGVybWluYW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBNYXRyaXgyZCBhXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDJkfSBhXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICBtYXQzLmZyb21NYXQyZCh0aGlzLmFycmF5LCBhLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgb2YgTWF0cml4NFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgZnJvbU1hdDQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIG1hdDMuZnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5RdWF0ZXJuaW9ufSBxXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIG1hdDMuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1hdDMuaWRlbnRpdHkodGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEludmVydCBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1hdDMuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBhXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gICAgICovXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgbWF0My5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xuICAgICAgICBtYXQzLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGFcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAgICAgKi9cbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIHJvdGF0ZTogZnVuY3Rpb24gKHJhZCkge1xuICAgICAgICBtYXQzLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gIHNcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgbWF0My5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSAgdlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICAgICAqL1xuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgbWF0My50cmFuc2xhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XG4gICAgICogQHBhcmFtIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICAgICAqL1xuICAgIG5vcm1hbEZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xuICAgICAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KHRoaXMuYXJyYXksIGEuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBUcmFuc3Bvc2Ugc2VsZiwgaW4tcGxhY2UuXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDJ9XG4gICAgICovXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1hdDMudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xuICAgIH0sXG5cbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcbiAgICB9XG59O1xuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMuYWRqb2ludCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmFkam9pbnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMuY29weSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5NYXRyaXgzLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudChhLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IG91dFxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMuaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XG4gICAgbWF0My5pZGVudGl0eShvdXQuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgbWF0My5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLm11bCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICBtYXQzLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My5tdWx0aXBseSA9IE1hdHJpeDMubXVsO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSAgb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4MmR9IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLmZyb21NYXQyZCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmZyb21NYXQyZChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My5mcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcbiAgICBtYXQzLmZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9ICAgIG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IGFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLmZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSkge1xuICAgIG1hdDMuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4NH0gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMubm9ybWFsRnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XG4gICAgbWF0My5ub3JtYWxGcm9tTWF0NChvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXgzfSBhXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xuICAgIG1hdDMucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjJ9IHZcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5NYXRyaXgzfVxuICovXG5NYXRyaXgzLnNjYWxlID0gZnVuY3Rpb24gKG91dCwgYSwgdikge1xuICAgIG1hdDMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguTWF0cml4M30gYVxuICogQHJldHVybiB7Y2xheS5tYXRoLk1hdHJpeDN9XG4gKi9cbk1hdHJpeDMudHJhbnNwb3NlID0gZnVuY3Rpb24gKG91dCwgYSkge1xuICAgIG1hdDMudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDN9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfSB2XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguTWF0cml4M31cbiAqL1xuTWF0cml4My50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XG4gICAgbWF0My50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL1ZlY3RvcjInO1xuXG4vKipcbiAqIFJhbmRvbSBvciBjb25zdGFudCAxZCwgMmQsIDNkIHZlY3RvciBnZW5lcmF0b3JcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkubWF0aC5WYWx1ZVxuICovXG52YXIgVmFsdWUgPSBmdW5jdGlvbigpIHt9O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ8Y2xheS5tYXRoLlZlY3RvcjJ8Y2xheS5tYXRoLlZlY3RvcjN9IFtvdXRdXG4gKiBAcmV0dXJuIHtudW1iZXJ8Y2xheS5tYXRoLlZlY3RvcjJ8Y2xheS5tYXRoLlZlY3RvcjN9XG4gKi9cblZhbHVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihvdXQpIHt9O1xuXG4vLyBDb25zdGFudFxudmFyIENvbnN0YW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH07XG59O1xuQ29uc3RhbnRWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RhbnRWYWx1ZTtcblxuLy8gVmVjdG9yXG52YXIgVmVjdG9yVmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB2YWwuY29uc3RydWN0b3I7XG4gICAgdGhpcy5nZXQgPSBmdW5jdGlvbihvdXQpIHtcbiAgICAgICAgaWYgKCFvdXQpIHtcbiAgICAgICAgICAgIG91dCA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgICB9XG4gICAgICAgIG91dC5jb3B5KHZhbCk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfTtcbn07XG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcblZlY3RvclZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFZlY3RvclZhbHVlO1xuLy9SYW5kb20gMURcbnZhciBSYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgdmFyIHJhbmdlID0gbWF4IC0gbWluO1xuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2UgKyBtaW47XG4gICAgfTtcbn07XG5SYW5kb20xRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcblJhbmRvbTFELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTFEO1xuXG4vLyBSYW5kb20yRFxudmFyIFJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcblxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XG4gICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMigpO1xuICAgICAgICB9XG4gICAgICAgIFZlY3RvcjIuc2V0KFxuICAgICAgICAgICAgb3V0LFxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH07XG59O1xuUmFuZG9tMkQucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XG5SYW5kb20yRC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5kb20yRDtcblxudmFyIFJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcbiAgICB2YXIgcmFuZ2VaID0gbWF4LnogLSBtaW4uejtcblxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XG4gICAgICAgIGlmICghb3V0KSB7XG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB9XG4gICAgICAgIFZlY3RvcjMuc2V0KFxuICAgICAgICAgICAgb3V0LFxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV0sXG4gICAgICAgICAgICByYW5nZVogKiBNYXRoLnJhbmRvbSgpICsgbWluLmFycmF5WzJdXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9O1xufTtcblJhbmRvbTNELnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xuUmFuZG9tM0QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tM0Q7XG5cbi8vIEZhY3RvcnkgbWV0aG9kc1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0YW50IDFkIHZhbHVlIGdlbmVyYXRvclxuICogQHBhcmFtICB7bnVtYmVyfSBjb25zdGFudFxuICogQHJldHVybiB7Y2xheS5tYXRoLlZhbHVlfVxuICovXG5WYWx1ZS5jb25zdGFudCA9IGZ1bmN0aW9uKGNvbnN0YW50KSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdGFudFZhbHVlKGNvbnN0YW50KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3JcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3IyfGNsYXkubWF0aC5WZWN0b3IzfSB2ZWN0b3JcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WYWx1ZX1cbiAqL1xuVmFsdWUudmVjdG9yID0gZnVuY3Rpb24odmVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBWZWN0b3JWYWx1ZSh2ZWN0b3IpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yXG4gKiBAcGFyYW0gIHtudW1iZXJ9IG1pblxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WYWx1ZX1cbiAqL1xuVmFsdWUucmFuZG9tMUQgPSBmdW5jdGlvbihtaW4sIG1heCkge1xuICAgIHJldHVybiBuZXcgUmFuZG9tMUQobWluLCBtYXgpO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gbWluXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yMn0gbWF4XG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmFsdWV9XG4gKi9cblZhbHVlLnJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbmV3IFJhbmRvbTJEKG1pbiwgbWF4KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvclxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG1pblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IG1heFxuICogQHJldHVybiB7Y2xheS5tYXRoLlZhbHVlfVxuICovXG5WYWx1ZS5yYW5kb20zRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIG5ldyBSYW5kb20zRChtaW4sIG1heCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWYWx1ZTtcbiIsImltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIHZlYzQgPSBnbE1hdHJpeC52ZWM0O1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvclxuICogQGFsaWFzIGNsYXkubWF0aC5WZWN0b3I0XG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XG4gKiBAcGFyYW0ge251bWJlcn0gd1xuICovXG52YXIgVmVjdG9yNCA9IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcblxuICAgIHggPSB4IHx8IDA7XG4gICAgeSA9IHkgfHwgMDtcbiAgICB6ID0geiB8fCAwO1xuICAgIHcgPSB3IHx8IDA7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjQsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHksIHosIHcgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcbiAgICAgKiBAbmFtZSBhcnJheVxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3I0I1xuICAgICAqL1xuICAgIHRoaXMuYXJyYXkgPSB2ZWM0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XG5cbiAgICAvKipcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxuICAgICAqIEBuYW1lIF9kaXJ0eVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yNCNcbiAgICAgKi9cbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG59O1xuXG5WZWN0b3I0LnByb3RvdHlwZSA9IHtcblxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3I0LFxuXG4gICAgLyoqXG4gICAgICogQWRkIGIgdG8gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSB6O1xuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBzZXRBcnJheTogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XG5cbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmUgYSBuZXcgVmVjdG9yNFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3I0KHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvcHkgZnJvbSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZGlzdDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdmVjNC5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkaXN0YW5jZTogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdmVjNC5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgZGl2OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBkaXZpZGU6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjNC5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgbGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuKHRoaXMuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBsZW5ndGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjNC5sZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIGxlcnA6IGZ1bmN0aW9uKGEsIGIsIHQpIHtcbiAgICAgICAgdmVjNC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNaW5pbXVtIG9mIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIG1pbjogZnVuY3Rpb24oYikge1xuICAgICAgICB2ZWM0Lm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBtYXg6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjNC5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5lZ2F0ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgbmVnYXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmVjNC5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmVjNC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIHJhbmRvbSB4LCB5LCB6LCB3IGNvbXBvbmVudHMgd2l0aCBhIGdpdmVuIHNjYWxlXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIHJhbmRvbTogZnVuY3Rpb24oc2NhbGUpIHtcbiAgICAgICAgdmVjNC5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTY2FsZSBzZWxmXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAgICAgKi9cbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xuICAgICAgICB2ZWM0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uKGIsIHMpIHtcbiAgICAgICAgdmVjNC5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmVjNC5zcXJMZW4odGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XG4gICAgICAgIHZlYzQuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgdmVjNC5zdWJ0cmFjdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDQgbVxuICAgICAqIEBwYXJhbSAge2NsYXkubWF0aC5NYXRyaXg0fSBtXG4gICAgICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gICAgICovXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBRdWF0ZXJuaW9uIHFcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lm1hdGguUXVhdGVybmlvbn0gcVxuICAgICAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICAgICAqL1xuICAgIHRyYW5zZm9ybVF1YXQ6IGZ1bmN0aW9uKHEpIHtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1RdWF0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHEuYXJyYXkpO1xuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XG4gICAgfSxcblxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xuICAgIH1cbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIEdldHRlciBhbmQgU2V0dGVyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcblxuICAgIHZhciBwcm90byA9IFZlY3RvcjQucHJvdG90eXBlO1xuICAgIC8qKlxuICAgICAqIEBuYW1lIHhcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yNFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgeVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIGNsYXkubWF0aC5WZWN0b3I0XG4gICAgICogQGluc3RhbmNlXG4gICAgICovXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSB6XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgY2xheS5tYXRoLlZlY3RvcjRcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKi9cbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHdcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lm1hdGguVmVjdG9yNFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqL1xuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxuICogQHBhcmFtICB7bnVtYmVyfSAgeVxuICogQHBhcmFtICB7bnVtYmVyfSAgelxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XG4gICAgdmVjNC5zZXQob3V0LmFycmF5LCB4LCB5LCB6LCB3KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcbiAgICB2ZWM0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yNC5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWM0LmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3I0LmRpc3RhbmNlID0gVmVjdG9yNC5kaXN0O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjNC5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuZGl2aWRlID0gVmVjdG9yNC5kaXY7XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjQuZG90ID0gZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiB2ZWM0LmRvdChhLmFycmF5LCBiLmFycmF5KTtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuVmVjdG9yNC5sZW4gPSBmdW5jdGlvbihiKSB7XG4gICAgcmV0dXJuIHZlYzQubGVuZ3RoKGIuYXJyYXkpO1xufTtcblxuLy8gVmVjdG9yNC5sZW5ndGggPSBWZWN0b3I0LmxlbjtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcbiAgICB2ZWM0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGJcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0Lm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xuICAgIHZlYzQubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcbiAgICB2ZWM0Lm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjNC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5tdWx0aXBseSA9IFZlY3RvcjQubXVsO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2ZWM0Lm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5ub3JtYWxpemUgPSBmdW5jdGlvbihvdXQsIGEpIHtcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XG4gICAgdmVjNC5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IG91dFxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXG4gKiBAcmV0dXJuIHtjbGF5Lm1hdGguVmVjdG9yNH1cbiAqL1xuVmVjdG9yNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcbiAgICB2ZWM0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LnNjYWxlQW5kQWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBzY2FsZSkge1xuICAgIHZlYzQuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjR9IGFcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjQuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gdmVjNC5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3I0LnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjQuc3FyRGlzdDtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5WZWN0b3I0LnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gdmVjNC5zcXJMZW4oYS5hcnJheSk7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblZlY3RvcjQuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjQuc3FyTGVuO1xuXG4vKipcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XG4gICAgdmVjNC5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xuICAgIG91dC5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBvdXQ7XG59O1xuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBvdXRcbiAqIEBwYXJhbSAge2NsYXkubWF0aC5WZWN0b3I0fSBhXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYlxuICogQHJldHVybiB7Y2xheS5tYXRoLlZlY3RvcjR9XG4gKi9cblZlY3RvcjQuc3VidHJhY3QgPSBWZWN0b3I0LnN1YjtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLk1hdHJpeDR9IG1cbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcbiAgICB2ZWM0LnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gb3V0XG4gKiBAcGFyYW0gIHtjbGF5Lm1hdGguVmVjdG9yNH0gYVxuICogQHBhcmFtICB7Y2xheS5tYXRoLlF1YXRlcm5pb259IHFcbiAqIEByZXR1cm4ge2NsYXkubWF0aC5WZWN0b3I0fVxuICovXG5WZWN0b3I0LnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcbiAgICB2ZWM0LnRyYW5zZm9ybVF1YXQob3V0LmFycmF5LCBhLmFycmF5LCBxLmFycmF5KTtcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yNDtcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBhbGlhcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlXG4gKi9cbnZhciBQYXJ0aWNsZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcblxuICAgIC8qKlxuICAgICAqIFVzZSBldWxlciBhbmdsZSB0byByZXByZXNlbnQgcGFydGljbGUgcm90YXRpb25cbiAgICAgKiBAdHlwZSB7Y2xheS5tYXRoLlZlY3RvcjN9XG4gICAgICovXG4gICAgdGhpcy5yb3RhdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WZWN0b3IzfVxuICAgICAqL1xuICAgIHRoaXMudmVsb2NpdHkgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUgez9jbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgKi9cbiAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGlmZSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuYWdlID0gMDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5zcHJpdGVTaXplID0gMTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy53ZWlnaHQgPSAxO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge2NsYXkucGFydGljbGUuRW1pdHRlcn1cbiAgICAgKi9cbiAgICB0aGlzLmVtaXR0ZXIgPSBudWxsO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgcGFydGljbGUgcG9zaXRpb25cbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXG4gKi9cblBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihkZWx0YVRpbWUpIHtcbiAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMucG9zaXRpb24uYXJyYXksIHRoaXMucG9zaXRpb24uYXJyYXksIHRoaXMudmVsb2NpdHkuYXJyYXksIGRlbHRhVGltZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMucm90YXRpb24uYXJyYXksIHRoaXMucm90YXRpb24uYXJyYXksIHRoaXMuYW5ndWxhclZlbG9jaXR5LmFycmF5LCBkZWx0YVRpbWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgUGFydGljbGUgZnJvbSAnLi9QYXJ0aWNsZSc7XG5pbXBvcnQgVmFsdWUgZnJvbSAnLi4vbWF0aC9WYWx1ZSc7XG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciB2ZWMzID0gIGdsTWF0cml4LnZlYzM7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRW1pdHRlclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcbiAqL1xudmFyIEVtaXR0ZXIgPSBCYXNlLmV4dGVuZChcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5FbWl0dGVyIyAqL1xue1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gbnVtYmVyIG9mIHBhcnRpY2xlcyBjcmVhdGVkIGJ5IHRoaXMgZW1pdHRlclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgbWF4OiAxMDAwLFxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXIgZWFjaCBzaG90XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBhbW91bnQ6IDIwLFxuXG4gICAgLy8gSW5pdCBzdGF0dXMgZm9yIGVhY2ggcGFydGljbGVcbiAgICAvKipcbiAgICAgKiBQYXJ0aWNsZSBsaWZlIGdlbmVyYXRvclxuICAgICAqIEB0eXBlIHs/Y2xheS5tYXRoLlZhbHVlLjxudW1iZXI+fVxuICAgICAqL1xuICAgIGxpZmU6IG51bGwsXG4gICAgLyoqXG4gICAgICogUGFydGljbGUgcG9zaXRpb24gZ2VuZXJhdG9yXG4gICAgICogQHR5cGUgez9jbGF5Lm1hdGguVmFsdWUuPGNsYXkubWF0aC5WZWN0b3IzPn1cbiAgICAgKi9cbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBQYXJ0aWNsZSByb3RhdGlvbiBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48Y2xheS5tYXRoLlZlY3RvcjM+fVxuICAgICAqL1xuICAgIHJvdGF0aW9uOiBudWxsLFxuICAgIC8qKlxuICAgICAqIFBhcnRpY2xlIHZlbG9jaXR5IGdlbmVyYXRvclxuICAgICAqIEB0eXBlIHs/Y2xheS5tYXRoLlZhbHVlLjxjbGF5Lm1hdGguVmVjdG9yMz59XG4gICAgICovXG4gICAgdmVsb2NpdHk6IG51bGwsXG4gICAgLyoqXG4gICAgICogUGFydGljbGUgYW5ndWxhciB2ZWxvY2l0eSBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48Y2xheS5tYXRoLlZlY3RvcjM+fVxuICAgICAqL1xuICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVsbCxcbiAgICAvKipcbiAgICAgKiBQYXJ0aWNsZSBzcHJpdGUgc2l6ZSBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48bnVtYmVyPn1cbiAgICAgKi9cbiAgICBzcHJpdGVTaXplOiBudWxsLFxuICAgIC8qKlxuICAgICAqIFBhcnRpY2xlIHdlaWdodCBnZW5lcmF0b3JcbiAgICAgKiBAdHlwZSB7P2NsYXkubWF0aC5WYWx1ZS48bnVtYmVyPn1cbiAgICAgKi9cbiAgICB3ZWlnaHQ6IG51bGwsXG5cbiAgICBfcGFydGljbGVQb29sOiBudWxsXG5cbn0sIGZ1bmN0aW9uKCkge1xuXG4gICAgdGhpcy5fcGFydGljbGVQb29sID0gW107XG5cbiAgICAvLyBUT0RPIFJlZHVjZSBoZWFwIG1lbW9yeVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXg7IGkrKykge1xuICAgICAgICB2YXIgcGFydGljbGUgPSBuZXcgUGFydGljbGUoKTtcbiAgICAgICAgcGFydGljbGUuZW1pdHRlciA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3BhcnRpY2xlUG9vbC5wdXNoKHBhcnRpY2xlKTtcblxuICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xuICAgICAgICAgICAgcGFydGljbGUudmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xuICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgfVxuICAgIH1cbn0sXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlci5wcm90b3R5cGUgKi9cbntcbiAgICAvKipcbiAgICAgKiBFbWl0dGVyIG51bWJlciBvZiBwYXJ0aWNsZXMgYW5kIHB1c2ggdGhlbSB0byBhIGdpdmVuIHBhcnRpY2xlIGxpc3QuIEVtbWl0IG51bWJlciBpcyBkZWZpbmVkIGJ5IGFtb3VudCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSAge0FycmF5LjxjbGF5LnBhcnRpY2xlLlBhcnRpY2xlPn0gb3V0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24ob3V0KSB7XG4gICAgICAgIHZhciBhbW91bnQgPSBNYXRoLm1pbih0aGlzLl9wYXJ0aWNsZVBvb2wubGVuZ3RoLCB0aGlzLmFtb3VudCk7XG5cbiAgICAgICAgdmFyIHBhcnRpY2xlO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlUG9vbC5wb3AoKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgcGFydGljbGUgc3RhdHVzXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24uZ2V0KHBhcnRpY2xlLnBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5nZXQocGFydGljbGUucm90YXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudmVsb2NpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LmdldChwYXJ0aWNsZS52ZWxvY2l0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hbmd1bGFyVmVsb2NpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5nZXQocGFydGljbGUuYW5ndWxhclZlbG9jaXR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmxpZmUpIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlID0gdGhpcy5saWZlLmdldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3ByaXRlU2l6ZSkge1xuICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNwcml0ZVNpemUgPSB0aGlzLnNwcml0ZVNpemUuZ2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy53ZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS53ZWlnaHQgPSB0aGlzLndlaWdodC5nZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRpY2xlLmFnZSA9IDA7XG5cbiAgICAgICAgICAgIG91dC5wdXNoKHBhcnRpY2xlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogS2lsbCBhIGRlYWQgcGFydGljbGUgYW5kIHB1dCBpdCBiYWNrIGluIHRoZSBwb29sXG4gICAgICogQHBhcmFtICB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZX0gcGFydGljbGVcbiAgICAgKi9cbiAgICBraWxsOiBmdW5jdGlvbihwYXJ0aWNsZSkge1xuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQ3JlYXRlIGEgY29uc3RhbnQgMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkubWF0aC5WYWx1ZS5jb25zdGFudH1cbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIuY29uc3RhbnRcbiAqL1xuRW1pdHRlci5jb25zdGFudCA9IFZhbHVlLmNvbnN0YW50O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbnN0YW50IHZlY3RvciB2YWx1ZSgyZCBvciAzZCkgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkubWF0aC5WYWx1ZS52ZWN0b3J9XG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnZlY3RvclxuICovXG5FbWl0dGVyLnZlY3RvciA9IFZhbHVlLnZlY3RvcjtcblxuLyoqXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkubWF0aC5WYWx1ZS5yYW5kb20xRH1cbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMURcbiAqL1xuRW1pdHRlci5yYW5kb20xRCA9IFZhbHVlLnJhbmRvbTFEO1xuXG4vKipcbiAqIENyZWF0ZSBhIHJhbmRvbSAyZCB2YWx1ZSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5tYXRoLlZhbHVlLnJhbmRvbTJEfVxuICogQGZ1bmN0aW9uIGNsYXkucGFydGljbGUuRW1pdHRlci5yYW5kb20yRFxuICovXG5FbWl0dGVyLnJhbmRvbTJEID0gVmFsdWUucmFuZG9tMkQ7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5Lm1hdGguVmFsdWUucmFuZG9tM0R9XG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTNEXG4gKi9cbkVtaXR0ZXIucmFuZG9tM0QgPSBWYWx1ZS5yYW5kb20zRDtcblxuZXhwb3J0IGRlZmF1bHQgRW1pdHRlcjtcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZpZWxkXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxuICovXG52YXIgRmllbGQgPSBCYXNlLmV4dGVuZCh7fSwge1xuICAgIC8qKlxuICAgICAqIEFwcGx5IGEgZmllbGQgdG8gdGhlIHBhcnRpY2xlIGFuZCB1cGRhdGUgdGhlIHBhcnRpY2xlIHZlbG9jaXR5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHZlbG9jaXR5XG4gICAgICogQHBhcmFtICB7Y2xheS5tYXRoLlZlY3RvcjN9IHBvc2l0aW9uXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB3ZWlnaHRcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnBhcnRpY2xlLkZpZWxkLnByb3RvdHlwZVxuICAgICAqL1xuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHt9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XG4iLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9GaWVsZCc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IGdsTWF0cml4IGZyb20gJy4uL2RlcC9nbG1hdHJpeCc7XG52YXIgdmVjMyA9ICBnbE1hdHJpeC52ZWMzO1xuXG4vKipcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGRcbiAqIEBleHRlbmRzIGNsYXkucGFydGljbGUuRmllbGRcbiAqL1xudmFyIEZvcmNlRmllbGQgPSBGaWVsZC5leHRlbmQoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZm9yY2U6IG5ldyBWZWN0b3IzKClcbiAgICB9O1xufSwge1xuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHtcbiAgICAgICAgaWYgKHdlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodmVsb2NpdHkuYXJyYXksIHZlbG9jaXR5LmFycmF5LCB0aGlzLmZvcmNlLmFycmF5LCBkZWx0YVRpbWUgLyB3ZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlRmllbGQ7XG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wYXJ0aWNsZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3IDogV09STERWSUVXO1xcbnVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uIDogUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQwIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDEgOiBURVhDT09SRF8xO1xcbnZhcnlpbmcgdmVjMiB2X1V2MDtcXG52YXJ5aW5nIHZlYzIgdl9VdjE7XFxuI2VuZGlmXFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG52b2lkIG1haW4oKSB7XFxuICAgIHZfQWdlID0gbm9ybWFsLng7XFxuICAgIGZsb2F0IHJvdGF0aW9uID0gbm9ybWFsLnk7XFxuICAgIHZlYzQgd29ybGRWaWV3UG9zaXRpb24gPSB3b3JsZFZpZXcgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB3b3JsZFZpZXdQb3NpdGlvbjtcXG4gICAgZmxvYXQgdyA9IGdsX1Bvc2l0aW9uLnc7XFxuICAgIGdsX1BvaW50U2l6ZSA9IG5vcm1hbC56ICogcHJvamVjdGlvblswXS54IC8gdztcXG4gICAgI2lmZGVmIFVWX0FOSU1BVElPTlxcbiAgICAgICAgdl9VdjAgPSB0ZXhjb29yZDA7XFxuICAgICAgICB2X1V2MSA9IHRleGNvb3JkMTtcXG4gICAgI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGFydGljbGUuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcHJpdGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnQ7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52b2lkIG1haW4oKSB7XFxuICAgIHZlYzQgY29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuICAgICNpZmRlZiBTUFJJVEVfRU5BQkxFRFxcbiAgICAgICAgI2lmZGVmIFVWX0FOSU1BVElPTlxcbiAgICAgICAgICAgIGNvbG9yICo9IHRleHR1cmUyRChzcHJpdGUsIG1peCh2X1V2MCwgdl9VdjEsIGdsX1BvaW50Q29vcmQpKTtcXG4gICAgICAgICNlbHNlXFxuICAgICAgICAgICAgY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgZ2xfUG9pbnRDb29yZCk7XFxuICAgICAgICAjZW5kaWZcXG4gICAgI2VuZGlmXFxuICAgICNpZmRlZiBHUkFESUVOVF9FTkFCTEVEXFxuICAgICAgICBjb2xvciAqPSB0ZXh0dXJlMkQoZ3JhZGllbnQsIHZlYzIodl9BZ2UsIDAuNSkpO1xcbiAgICAjZW5kaWZcXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcbkBlbmRcIjtcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xuXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcblxuaW1wb3J0IHBhcnRpY2xlRXNzbCBmcm9tICcuL3BhcnRpY2xlLmdsc2wuanMnO1xuU2hhZGVyWydpbXBvcnQnXShwYXJ0aWNsZUVzc2wpO1xuXG52YXIgcGFydGljbGVTaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUuZnJhZ21lbnQnKSk7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlXG4gKiBAZXh0ZW5kcyBjbGF5LlJlbmRlcmFibGVcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGUoe1xuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogNCxcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDQsXG4gKiAgICAgICAgIHNwcml0ZUFuaW1hdGlvblJlcGVhdDogMVxuICogICAgIH0pO1xuICogICAgIHNjZW5lLmFkZChwYXJ0aWNsZVJlbmRlcmFibGUpO1xuICogICAgIC8vIEVuYWJsZSB1diBhbmltYXRpb24gaW4gdGhlIHNoYWRlclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5tYXRlcmlhbC5kZWZpbmUoJ2JvdGgnLCAnVVZfQU5JTUFUSU9OJyk7XG4gKiAgICAgdmFyIEVtaXR0ZXIgPSBjbGF5LnBhcnRpY2xlLkVtaXR0ZXI7XG4gKiAgICAgdmFyIFZlY3RvcjMgPSBjbGF5Lm1hdGguVmVjdG9yMztcbiAqICAgICB2YXIgZW1pdHRlciA9IG5ldyBFbWl0dGVyKHtcbiAqICAgICAgICAgbWF4OiAyMDAwLFxuICogICAgICAgICBhbW91bnQ6IDEwMCxcbiAqICAgICAgICAgbGlmZTogRW1pdHRlci5yYW5kb20xRCgxMCwgMjApLFxuICogICAgICAgICBwb3NpdGlvbjogRW1pdHRlci52ZWN0b3IobmV3IFZlY3RvcjMoKSksXG4gKiAgICAgICAgIHZlbG9jaXR5OiBFbWl0dGVyLnJhbmRvbTNEKG5ldyBWZWN0b3IzKC0xMCwgMCwgLTEwKSwgbmV3IFZlY3RvcjMoMTAsIDAsIDEwKSk7XG4gKiAgICAgfSk7XG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEVtaXR0ZXIoZW1pdHRlcik7XG4gKiAgICAgdmFyIGdyYXZpdHlGaWVsZCA9IG5ldyBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGQoKTtcbiAqICAgICBncmF2aXR5RmllbGQuZm9yY2UueSA9IC0xMDtcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkRmllbGQoZ3Jhdml0eUZpZWxkKTtcbiAqICAgICAuLi5cbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24oZnJhbWVUaW1lKSB7XG4gKiAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS51cGRhdGVQYXJ0aWNsZXMoZnJhbWVUaW1lKTtcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuICogICAgIH0pO1xuICovXG52YXIgUGFydGljbGVSZW5kZXJhYmxlID0gUmVuZGVyYWJsZS5leHRlbmQoXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlIyAqL1xue1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIGxvb3A6IHRydWUsXG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgb25lc2hvdDogZmFsc2UsXG4gICAgLyoqXG4gICAgICogRHVyYXRpb24gb2YgcGFydGljbGUgc3lzdGVtIGluIG1pbGxpc2Vjb25kc1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZHVyYXRpb246IDEsXG5cbiAgICAvLyBVViBBbmltYXRpb25cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHNwcml0ZUFuaW1hdGlvblRpbGVYOiAxLFxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDEsXG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDAsXG5cbiAgICBtb2RlOiBSZW5kZXJhYmxlLlBPSU5UUyxcblxuICAgIGlnbm9yZVBpY2tpbmc6IHRydWUsXG5cbiAgICBfZWxhcHNlZFRpbWU6IDAsXG5cbiAgICBfZW1pdHRpbmc6IHRydWVcblxufSwgZnVuY3Rpb24oKXtcblxuICAgIHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xuICAgICAgICBkeW5hbWljOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMubWF0ZXJpYWwpIHtcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICBzaGFkZXI6IHBhcnRpY2xlU2hhZGVyLFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZSgnc3ByaXRlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGFydGljbGVzID0gW107XG4gICAgdGhpcy5fZmllbGRzID0gW107XG4gICAgdGhpcy5fZW1pdHRlcnMgPSBbXTtcbn0sXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlLnByb3RvdHlwZSAqL1xue1xuXG4gICAgY3VsbGluZzogZmFsc2UsXG5cbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2UsXG5cbiAgICBjYXN0U2hhZG93OiBmYWxzZSxcbiAgICByZWNlaXZlU2hhZG93OiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIEFkZCBlbWl0dGVyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcbiAgICAgKi9cbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnB1c2goZW1pdHRlcik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBlbWl0dGVyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcbiAgICAgKi9cbiAgICByZW1vdmVFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnNwbGljZSh0aGlzLl9lbWl0dGVycy5pbmRleE9mKGVtaXR0ZXIpLCAxKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIGZpZWxkXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkZpZWxkfSBmaWVsZFxuICAgICAqL1xuICAgIGFkZEZpZWxkOiBmdW5jdGlvbihmaWVsZCkge1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBmaWVsZFxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcbiAgICAgKi9cbiAgICByZW1vdmVGaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZSh0aGlzLl9maWVsZHMuaW5kZXhPZihmaWVsZCksIDEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgcGFydGljbGUgc3lzdGVtLlxuICAgICAqL1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gUHV0IGFsbCB0aGUgcGFydGljbGVzIGJhY2tcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xuICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGFydGljbGVzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxuICAgICAqL1xuICAgIHVwZGF0ZVBhcnRpY2xlczogZnVuY3Rpb24oZGVsdGFUaW1lKSB7XG5cbiAgICAgICAgLy8gTVMgPT4gU2Vjb25kc1xuICAgICAgICBkZWx0YVRpbWUgLz0gMTAwMDtcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgKz0gZGVsdGFUaW1lO1xuXG4gICAgICAgIHZhciBwYXJ0aWNsZXMgPSB0aGlzLl9wYXJ0aWNsZXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX2VtaXR0aW5nKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VtaXR0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlcnNbaV0uZW1pdChwYXJ0aWNsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub25lc2hvdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZ2luZ1xuICAgICAgICB2YXIgbGVuID0gcGFydGljbGVzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcbiAgICAgICAgICAgIHAuYWdlICs9IGRlbHRhVGltZTtcbiAgICAgICAgICAgIGlmIChwLmFnZSA+PSBwLmxpZmUpIHtcbiAgICAgICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZXNbaV0gPSBwYXJ0aWNsZXNbbGVuLTFdO1xuICAgICAgICAgICAgICAgIHBhcnRpY2xlcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBsZW4tLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgLy8gVXBkYXRlXG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmllbGRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1tqXS5hcHBseVRvKHAudmVsb2NpdHksIHAucG9zaXRpb24sIHAud2VpZ2h0LCBkZWx0YVRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAudXBkYXRlKGRlbHRhVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVWZXJ0aWNlcygpO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xuICAgICAgICAvLyBJZiBoYXMgdXYgYW5pbWF0aW9uXG4gICAgICAgIHZhciBhbmltVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xuICAgICAgICB2YXIgYW5pbVRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcbiAgICAgICAgdmFyIGFuaW1SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcbiAgICAgICAgdmFyIG5VdkFuaW1GcmFtZSA9IGFuaW1UaWxlWSAqIGFuaW1UaWxlWCAqIGFuaW1SZXBlYXQ7XG4gICAgICAgIHZhciBoYXNVdkFuaW1hdGlvbiA9IG5VdkFuaW1GcmFtZSA+IDE7XG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xuICAgICAgICAvLyBQdXQgcGFydGljbGUgc3RhdHVzIGluIG5vcm1hbFxuICAgICAgICB2YXIgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xuICAgICAgICB2YXIgdXZzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XG4gICAgICAgIHZhciB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWU7XG5cbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3BhcnRpY2xlcy5sZW5ndGg7XG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8IHBvc2l0aW9ucy5sZW5ndGggIT09IGxlbiAqIDMpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gT3B0aW1pemVcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xuICAgICAgICAgICAgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcbiAgICAgICAgICAgIGlmIChoYXNVdkFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAyKTtcbiAgICAgICAgICAgICAgICB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGludkFuaW1UaWxlWCA9IDEgLyBhbmltVGlsZVg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlc1tpXTtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpICogMztcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zW29mZnNldCArIGpdID0gcGFydGljbGUucG9zaXRpb24uYXJyYXlbal07XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXRdID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcbiAgICAgICAgICAgICAgICAvLyBub3JtYWxzW29mZnNldCArIDFdID0gcGFydGljbGUucm90YXRpb247XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAxXSA9IDA7XG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAyXSA9IHBhcnRpY2xlLnNwcml0ZVNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgb2Zmc2V0MiA9IGkgKiAyO1xuICAgICAgICAgICAgaWYgKGhhc1V2QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgIHZhciBwID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcbiAgICAgICAgICAgICAgICB2YXIgc3RhZ2UgPSBNYXRoLnJvdW5kKHAgKiAoblV2QW5pbUZyYW1lIC0gMSkpICogYW5pbVJlcGVhdDtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IE1hdGguZmxvb3Ioc3RhZ2UgKiBpbnZBbmltVGlsZVgpO1xuICAgICAgICAgICAgICAgIHZhciB1ID0gc3RhZ2UgLSB2ICogYW5pbVRpbGVYO1xuICAgICAgICAgICAgICAgIHV2c1tvZmZzZXQyXSA9IHUgLyBhbmltVGlsZVg7XG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDIgKyAxXSA9IDEgLSB2IC8gYW5pbVRpbGVZO1xuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0Ml0gPSAodSArIDEpIC8gYW5pbVRpbGVYO1xuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0MiArIDFdID0gMSAtICh2ICsgMSkgLyBhbmltVGlsZVk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW9tZXRyeS5kaXJ0eSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzRmluaXNoZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWUgPiB0aGlzLmR1cmF0aW9uICYmICF0aGlzLmxvb3A7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXG4gICAgICovXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcbiAgICAgICAgLy8gUHV0IGFsbCB0aGUgcGFydGljbGVzIGJhY2tcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xuICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3NlKHJlbmRlcmVyKTtcbiAgICAgICAgLy8gVE9ETyBEaXNwb3NlIHRleHR1cmUgP1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZX1cbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgUGFydGljbGVSZW5kZXJhYmxlKHtcbiAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLm1hdGVyaWFsXG4gICAgICAgIH0pO1xuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubG9vcCA9IHRoaXMubG9vcDtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLm9uZXNob3QgPSB0aGlzLm9uZXNob3Q7XG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVYID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWDtcblxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGQodGhpcy5fY2hpbGRyZW5baV0uY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRpY2xlUmVuZGVyYWJsZTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUGFydGljbGVSZW5kZXJhYmxlO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGlja2luZy5jb2xvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudm9pZCBtYWluKCl7XFxuICAgIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICAgICNpZmRlZiBTS0lOTklOR1xcbiAgICAgICAgQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuICAgICAgICBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAgICAjZW5kaWZcXG4gICAgZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzQgY29sb3IgOiBbMS4wLCAxLjAsIDEuMCwgMS4wXTtcXG52b2lkIG1haW4oKSB7XFxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XG5cbmltcG9ydCBjb2xvckVzc2wgZnJvbSAnLi9jb2xvci5nbHNsLmpzJztcblNoYWRlci5pbXBvcnQoY29sb3JFc3NsKTtcblxuLyoqXG4gKiBQaXhlbCBwaWNraW5nIGlzIGdwdSBiYXNlZCBwaWNraW5nLCB3aGljaCBpcyBmYXN0IGFuZCBhY2N1cmF0ZS5cbiAqIEJ1dCBub3QgbGlrZSByYXkgcGlja2luZywgaXQgY2FuJ3QgZ2V0IHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYW5kIHRyaWFuZ2xlLlxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmdcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXG4gKi9cbnZhciBQaXhlbFBpY2tpbmcgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBpY2tpbmcuUGl4ZWxQaWNraW5nIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYXJnZXQgcmVuZGVyZXJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XG4gICAgICAgICAqL1xuICAgICAgICByZW5kZXJlcjogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERvd25zYW1wbGUgcmF0aW8gb2YgaGlkZGVuIGZyYW1lIGJ1ZmZlclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgZG93blNhbXBsZVJhdGlvOiAxLFxuXG4gICAgICAgIHdpZHRoOiAxMDAsXG4gICAgICAgIGhlaWdodDogMTAwLFxuXG4gICAgICAgIGxvb2t1cE9mZnNldDogMSxcblxuICAgICAgICBfZnJhbWVCdWZmZXI6IG51bGwsXG4gICAgICAgIF90ZXh0dXJlOiBudWxsLFxuICAgICAgICBfc2hhZGVyOiBudWxsLFxuXG4gICAgICAgIF9pZE1hdGVyaWFsczogW10sXG4gICAgICAgIF9sb29rdXBUYWJsZTogW10sXG5cbiAgICAgICAgX21lc2hNYXRlcmlhbHM6IFtdLFxuXG4gICAgICAgIF9pZE9mZnNldDogMFxuICAgIH07XG59LCBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gdGhpcy5yZW5kZXJlci5nZXRXaWR0aCgpO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XG4gICAgfVxuICAgIHRoaXMuX2luaXQoKTtcbn0sIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZy5wcm90b3R5cGUgKi8ge1xuICAgIF9pbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbyxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgKiB0aGlzLmRvd25TYW1wbGVSYXRpb1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcblxuICAgICAgICB0aGlzLl9zaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGlja2luZy5jb2xvci52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5waWNraW5nLmNvbG9yLmZyYWdtZW50JykpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU2V0IHBpY2tpbmcgcHJlc2lzaW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXG4gICAgICovXG4gICAgc2V0UHJlY2lzaW9uOiBmdW5jdGlvbihyYXRpbykge1xuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gdGhpcy53aWR0aCAqIHJhdGlvO1xuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICogcmF0aW87XG4gICAgICAgIHRoaXMuZG93blNhbXBsZVJhdGlvID0gcmF0aW87XG4gICAgfSxcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fdGV4dHVyZS53aWR0aCA9IHdpZHRoICogdGhpcy5kb3duU2FtcGxlUmF0aW87XG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5kb3duU2FtcGxlUmF0aW87XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGlydHkoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgcGlja2luZyBmcmFtZWJ1ZmZlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xuICAgICAqL1xuICAgIHVwZGF0ZTogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSkge1xuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgICAgICBpZiAocmVuZGVyZXIuZ2V0V2lkdGgoKSAhPT0gdGhpcy53aWR0aCB8fCByZW5kZXJlci5nZXRIZWlnaHQoKSAhPT0gdGhpcy5oZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX3RleHR1cmUpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgdGhpcy5faWRPZmZzZXQgPSB0aGlzLmxvb2t1cE9mZnNldDtcbiAgICAgICAgdGhpcy5fc2V0TWF0ZXJpYWwoc2NlbmUpO1xuICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVNYXRlcmlhbCgpO1xuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xuICAgIH0sXG5cbiAgICBfc2V0TWF0ZXJpYWw6IGZ1bmN0aW9uKHJvb3QpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9MDsgaSA8IHJvb3QuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSByb290Ll9jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC5nZW9tZXRyeSAmJiBjaGlsZC5tYXRlcmlhbCAmJiBjaGlsZC5tYXRlcmlhbC5zaGFkZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9pZE9mZnNldCsrO1xuICAgICAgICAgICAgICAgIHZhciBpZHggPSBpZCAtIHRoaXMubG9va3VwT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF07XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX3NoYWRlclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gcGFja0lEKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMF0gLz0gMjU1O1xuICAgICAgICAgICAgICAgICAgICBjb2xvclsxXSAvPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzJdIC89IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbM10gPSAxLjA7XG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnY29sb3InLCBjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF0gPSBtYXRlcmlhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFsc1tpZHhdID0gY2hpbGQubWF0ZXJpYWw7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaWR4XSA9IGNoaWxkO1xuICAgICAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hpbGQuX2NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQaWNrIHRoZSBvYmplY3RcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxuICAgICAqIEBwYXJhbSAge251bWJlcn0geSBNb3VzZSBwb3NpdGlvbiB5XG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxuICAgICAqL1xuICAgIHBpY2s6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcblxuICAgICAgICB2YXIgcmF0aW8gPSB0aGlzLmRvd25TYW1wbGVSYXRpbztcbiAgICAgICAgeCA9IE1hdGguY2VpbChyYXRpbyAqIHgpO1xuICAgICAgICB5ID0gTWF0aC5jZWlsKHJhdGlvICogKHRoaXMuaGVpZ2h0IC0geSkpO1xuXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xuICAgICAgICB2YXIgcGl4ZWwgPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICAvLyBUT0RPIG91dCBvZiBib3VuZHMgP1xuICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgP1xuICAgICAgICBfZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBfZ2wuUkdCQSwgX2dsLlVOU0lHTkVEX0JZVEUsIHBpeGVsKTtcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcbiAgICAgICAgLy8gU2tpcCBpbnRlcnBvbGF0ZWQgcGl4ZWwgYmVjYXVzZSBvZiBhbnRpIGFsaWFzXG4gICAgICAgIGlmIChwaXhlbFszXSA9PT0gMjU1KSB7XG4gICAgICAgICAgICB2YXIgaWQgPSB1bnBhY2tJRChwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTtcbiAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuX2xvb2t1cFRhYmxlW2lkIC0gdGhpcy5sb29rdXBPZmZzZXRdO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfcmVzdG9yZU1hdGVyaWFsOiBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sb29rdXBUYWJsZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaV0ubWF0ZXJpYWwgPSB0aGlzLl9tZXNoTWF0ZXJpYWxzW2ldO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xuICAgIH1cbn0pO1xuXG5mdW5jdGlvbiBwYWNrSUQoaWQpe1xuICAgIHZhciByID0gaWQgPj4gMTY7XG4gICAgdmFyIGcgPSAoaWQgLSAociA8PCA4KSkgPj4gODtcbiAgICB2YXIgYiA9IGlkIC0gKHIgPDwgMTYpIC0gKGc8PDgpO1xuICAgIHJldHVybiBbciwgZywgYl07XG59XG5cbmZ1bmN0aW9uIHVucGFja0lEKHIsIGcsIGIpe1xuICAgIHJldHVybiAociA8PCAxNikgKyAoZzw8OCkgKyBiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBQaXhlbFBpY2tpbmc7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcblxuLyoqXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2xcbiAqIEBleGFtcGxlXG4gKiAgICAgdmFyIGNvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2woe1xuICogICAgICAgICB0YXJnZXQ6IGNhbWVyYSxcbiAqICAgICAgICAgZG9tRWxlbWVudDogcmVuZGVyZXIuY2FudmFzXG4gKiAgICAgfSk7XG4gKiAgICAgLi4uXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xuICogICAgICAgICBjb250cm9sLnVwZGF0ZShmcmFtZVRpbWUpO1xuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG4gKiAgICAgfSk7XG4gKi9cbnZhciBGcmVlQ29udHJvbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkZyZWVDb250cm9sIyAqLyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTY2VuZSBub2RlIHRvIGNvbnRyb2wsIG1vc3RseSBpdCBpcyBhIGNhbWVyYVxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxuICAgICAgICAgKi9cbiAgICAgICAgdGFyZ2V0OiBudWxsLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUYXJnZXQgZG9tIHRvIGJpbmQgd2l0aCBtb3VzZSBldmVudHNcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAgICAgKi9cbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTW91c2UgbW92ZSBzZW5zaXRpdml0eVxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgc2Vuc2l0aXZpdHk6IDEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRhcmdldCBtb3ZlIHNwZWVkXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBzcGVlZDogMC40LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcCBheGlzXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgICAgICovXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgbG9jayB2ZXJ0aWNhbCBtb3ZlbWVudFxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHZlcnRpY2FsTW92ZUxvY2s6IGZhbHNlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5hbmltYXRpb24uQW5pbWF0aW9ufVxuICAgICAgICAgKi9cbiAgICAgICAgYW5pbWF0aW9uOiBudWxsLFxuXG4gICAgICAgIF9tb3ZlRm9yd2FyZDogZmFsc2UsXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxuICAgICAgICBfbW92ZUxlZnQ6IGZhbHNlLFxuICAgICAgICBfbW92ZVJpZ2h0OiBmYWxzZSxcblxuICAgICAgICBfb2Zmc2V0UGl0Y2g6IDAsXG4gICAgICAgIF9vZmZzZXRSb2xsOiAwXG4gICAgfTtcbn0sIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xvY2tDaGFuZ2UgPSB0aGlzLl9sb2NrQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fa2V5RG93biA9IHRoaXMuX2tleURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLl9rZXlVcCA9IHRoaXMuX2tleVVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fbW91c2VNb3ZlID0gdGhpcy5fbW91c2VNb3ZlLmJpbmQodGhpcyk7XG5cbiAgICBpZiAodGhpcy5kb21FbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgfVxufSxcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2wucHJvdG90eXBlICovXG57XG4gICAgLyoqXG4gICAgICogRW5hYmxlIGNvbnRyb2xcbiAgICAgKi9cbiAgICBlbmFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBVc2UgcG9pbnRlciBsb2NrXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3BvaW50ZXJsb2NrL2ludHJvL1xuICAgICAgICB2YXIgZWwgPSB0aGlzLmRvbUVsZW1lbnQ7XG5cbiAgICAgICAgLy9NdXN0IHJlcXVlc3QgcG9pbnRlciBsb2NrIGFmdGVyIGNsaWNrIGV2ZW50LCBjYW4ndCBub3QgZG8gaXQgZGlyZWN0bHlcbiAgICAgICAgLy9XaHkgPyA/XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9rZXlVcCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5vbignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBjb250cm9sXG4gICAgICovXG4gICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdGhpcy50YXJnZXQub2ZmKCdiZWZvcmV1cGRhdGUnLCB0aGlzLl9iZWZvcmVVcGRhdGVDYW1lcmEpO1xuXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcblxuICAgICAgICBlbC5leGl0UG9pbnRlckxvY2sgPSBlbC5leGl0UG9pbnRlckxvY2tcbiAgICAgICAgICAgIHx8IGVsLm1vekV4aXRQb2ludGVyTG9ja1xuICAgICAgICAgICAgfHwgZWwud2Via2l0RXhpdFBvaW50ZXJMb2NrO1xuXG4gICAgICAgIGlmIChlbC5leGl0UG9pbnRlckxvY2spIHtcbiAgICAgICAgICAgIGVsLmV4aXRQb2ludGVyTG9jaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcblxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xuXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9rZXlVcCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5vZmYoJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9yZXF1ZXN0UG9pbnRlckxvY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZWwgPSB0aGlzO1xuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2sgPSBlbC5yZXF1ZXN0UG9pbnRlckxvY2tcbiAgICAgICAgICAgIHx8IGVsLm1velJlcXVlc3RQb2ludGVyTG9ja1xuICAgICAgICAgICAgfHwgZWwud2Via2l0UmVxdWVzdFBvaW50ZXJMb2NrO1xuXG4gICAgICAgIGVsLnJlcXVlc3RQb2ludGVyTG9jaygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sIHVwZGF0ZS4gU2hvdWxkIGJlIGludm9rZWQgZXZlcnkgZnJhbWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uKGZyYW1lVGltZSkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG5cbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy50YXJnZXQucG9zaXRpb247XG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcblxuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbE1vdmVMb2NrKSB7XG4gICAgICAgICAgICB6QXhpcy55ID0gMDtcbiAgICAgICAgICAgIHpBeGlzLm5vcm1hbGl6ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNwZWVkID0gdGhpcy5zcGVlZCAqIGZyYW1lVGltZSAvIDIwO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xuICAgICAgICAgICAgLy8gT3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHpcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCAtc3BlZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tb3ZlQmFja3dhcmQpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBzcGVlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21vdmVMZWZ0KSB7XG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLXNwZWVkIC8gMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21vdmVSaWdodCkge1xuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIHNwZWVkIC8gMik7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgeEF4aXMsIC10aGlzLl9vZmZzZXRSb2xsICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XG5cbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCA9IHRoaXMuX29mZnNldFBpdGNoID0gMDtcbiAgICB9LFxuXG4gICAgX2xvY2tDaGFuZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkb2N1bWVudC5wb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxuICAgICAgICAgICAgfHwgZG9jdW1lbnQubW96UG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcbiAgICAgICAgICAgIHx8IGRvY3VtZW50LndlYmtpdFBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XG4gICAgICAgICkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9tb3VzZU1vdmU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdmFyIGR4ID0gZS5tb3ZlbWVudFggfHwgZS5tb3pNb3ZlbWVudFggfHwgZS53ZWJraXRNb3ZlbWVudFggfHwgMDtcbiAgICAgICAgdmFyIGR5ID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pNb3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgMDtcblxuICAgICAgICB0aGlzLl9vZmZzZXRQaXRjaCArPSBkeCAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XG4gICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZHkgKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xuXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGV2ZW50IHRvIHJlbWluZCByZW5kZXJlciBkbyByZW5kZXJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2RldGVjdE1vdmVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCB8fCB0aGlzLl9tb3ZlQmFja3dhcmQgfHwgdGhpcy5fbW92ZUxlZnQgfHwgdGhpcy5fbW92ZVJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9rZXlEb3duOiBmdW5jdGlvbihlKSB7XG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgODc6IC8vd1xuICAgICAgICAgICAgY2FzZSAzNzogLy91cCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgODM6IC8vc1xuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2ODogLy9kXG4gICAgICAgICAgICBjYXNlIDM5OiAvL3JpZ2h0IGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXG4gICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfSxcblxuICAgIF9rZXlVcDogZnVuY3Rpb24oZSkge1xuICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIDg3OiAvL3dcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA4MzogLy9zXG4gICAgICAgICAgICBjYXNlIDQwOiAvL2Rvd24gYXJyb3dcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNjg6IC8vZFxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZyZWVDb250cm9sO1xuIiwidmFyIEdlc3R1cmVNZ3IgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICB0aGlzLl90cmFjayA9IFtdO1xufTtcblxuR2VzdHVyZU1nci5wcm90b3R5cGUgPSB7XG5cbiAgICBjb25zdHJ1Y3RvcjogR2VzdHVyZU1ncixcblxuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcbiAgICAgICAgdGhpcy5fZG9UcmFjayhldmVudCwgdGFyZ2V0LCByb290KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZShldmVudCk7XG4gICAgfSxcblxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3RyYWNrLmxlbmd0aCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfZG9UcmFjazogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xuXG4gICAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRyYWNrSXRlbSA9IHtcbiAgICAgICAgICAgIHBvaW50czogW10sXG4gICAgICAgICAgICB0b3VjaGVzOiBbXSxcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvdWNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB0b3VjaCA9IHRvdWNoZXNbaV07XG4gICAgICAgICAgICB0cmFja0l0ZW0ucG9pbnRzLnB1c2goW3RvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFldKTtcbiAgICAgICAgICAgIHRyYWNrSXRlbS50b3VjaGVzLnB1c2godG91Y2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhY2sucHVzaCh0cmFja0l0ZW0pO1xuICAgIH0sXG5cbiAgICBfcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIHJlY29nbml6ZXJzKSB7XG4gICAgICAgICAgICBpZiAocmVjb2duaXplcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IHJlY29nbml6ZXJzW2V2ZW50TmFtZV0odGhpcy5fdHJhY2ssIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZ2VzdHVyZUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGRpc3QocG9pbnRQYWlyKSB7XG4gICAgdmFyIGR4ID0gcG9pbnRQYWlyWzFdWzBdIC0gcG9pbnRQYWlyWzBdWzBdO1xuICAgIHZhciBkeSA9IHBvaW50UGFpclsxXVsxXSAtIHBvaW50UGFpclswXVsxXTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuXG5mdW5jdGlvbiBjZW50ZXIocG9pbnRQYWlyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgKHBvaW50UGFpclswXVswXSArIHBvaW50UGFpclsxXVswXSkgLyAyLFxuICAgICAgICAocG9pbnRQYWlyWzBdWzFdICsgcG9pbnRQYWlyWzFdWzFdKSAvIDJcbiAgICBdO1xufVxuXG52YXIgcmVjb2duaXplcnMgPSB7XG5cbiAgICBwaW5jaDogZnVuY3Rpb24gKHRyYWNrLCBldmVudCkge1xuICAgICAgICB2YXIgdHJhY2tMZW4gPSB0cmFjay5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCF0cmFja0xlbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBpbmNoRW5kID0gKHRyYWNrW3RyYWNrTGVuIC0gMV0gfHwge30pLnBvaW50cztcbiAgICAgICAgdmFyIHBpbmNoUHJlID0gKHRyYWNrW3RyYWNrTGVuIC0gMl0gfHwge30pLnBvaW50cyB8fCBwaW5jaEVuZDtcblxuICAgICAgICBpZiAocGluY2hQcmVcbiAgICAgICAgICAgICYmIHBpbmNoUHJlLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICYmIHBpbmNoRW5kXG4gICAgICAgICAgICAmJiBwaW5jaEVuZC5sZW5ndGggPiAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgdmFyIHBpbmNoU2NhbGUgPSBkaXN0KHBpbmNoRW5kKSAvIGRpc3QocGluY2hQcmUpO1xuICAgICAgICAgICAgIWlzRmluaXRlKHBpbmNoU2NhbGUpICYmIChwaW5jaFNjYWxlID0gMSk7XG5cbiAgICAgICAgICAgIGV2ZW50LnBpbmNoU2NhbGUgPSBwaW5jaFNjYWxlO1xuXG4gICAgICAgICAgICB2YXIgcGluY2hDZW50ZXIgPSBjZW50ZXIocGluY2hFbmQpO1xuICAgICAgICAgICAgZXZlbnQucGluY2hYID0gcGluY2hDZW50ZXJbMF07XG4gICAgICAgICAgICBldmVudC5waW5jaFkgPSBwaW5jaENlbnRlclsxXTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncGluY2gnLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdHJhY2tbMF0udGFyZ2V0LFxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEdlc3R1cmVNZ3I7XG4iLCJpbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XG5pbXBvcnQgUGxhbmUgZnJvbSAnLi4vbWF0aC9QbGFuZSc7XG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xuXG5pbXBvcnQgZ2xNYXRyaXggZnJvbSAnLi4vZGVwL2dsbWF0cml4JztcbnZhciBtYXQ0ID0gZ2xNYXRyaXgubWF0NDtcbnZhciB2ZWMzID0gZ2xNYXRyaXgudmVjMztcbnZhciB2ZWM0ID0gZ2xNYXRyaXgudmVjNDtcblxudmFyIHV2cyA9IFtbMCwgMF0sIFswLCAxXSwgWzEsIDFdLCBbMSwgMF1dO1xudmFyIHRyaXMgPSBbMCwgMSwgMiwgMiwgMywgMF07XG5cbnZhciBJbmZpbml0ZVBsYW5lID0gTWVzaC5leHRlbmQoe1xuXG4gICAgY2FtZXJhOiBudWxsLFxuXG4gICAgcGxhbmU6IG51bGwsXG5cbiAgICBtYXhHcmlkOiAwLFxuXG4gICAgLy8gVE9ET1xuICAgIGZydXN0dW1DdWxsaW5nOiBmYWxzZVxuXG59LCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XG4gICAgICAgIGR5bmFtaWM6IHRydWVcbiAgICB9KTtcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmluaXQoNik7XG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwuaW5pdCg2KTtcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KDYpO1xuICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoNik7XG5cbiAgICB0aGlzLnBsYW5lID0gbmV3IFBsYW5lKCk7XG59LCB7XG5cbiAgICB1cGRhdGVHZW9tZXRyeTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBjb29yZHMgPSB0aGlzLl91blByb2plY3RHcmlkKCk7XG4gICAgICAgIGlmICghY29vcmRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcbiAgICAgICAgdmFyIG5vcm1hbEF0dHIgPSB0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsO1xuICAgICAgICB2YXIgdGV4Y29vcmRzID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdlb21ldHJ5LmluZGljZXM7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpZHggPSB0cmlzW2ldO1xuICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChpLCBjb29yZHNbaWR4XS5hcnJheSk7XG4gICAgICAgICAgICBub3JtYWxBdHRyLnNldChpLCB0aGlzLnBsYW5lLm5vcm1hbC5hcnJheSk7XG4gICAgICAgICAgICB0ZXhjb29yZHMuc2V0KGksIHV2c1tpZHhdKTtcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlydHkoKTtcbiAgICB9LFxuXG4gICAgLy8gaHR0cDovL2ZpbGVhZG1pbi5jcy5sdGguc2UvZ3JhcGhpY3MvdGhlc2VzL3Byb2plY3RzL3Byb2pncmlkL1xuICAgIF91blByb2plY3RHcmlkOiAoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBwbGFuZVZpZXdTcGFjZSA9IG5ldyBQbGFuZSgpO1xuICAgICAgICB2YXIgbGluZXMgPSBbXG4gICAgICAgICAgICAwLCAxLCAwLCAyLCAxLCAzLCAyLCAzLFxuICAgICAgICAgICAgNCwgNSwgNCwgNiwgNSwgNywgNiwgNyxcbiAgICAgICAgICAgIDAsIDQsIDEsIDUsIDIsIDYsIDMsIDdcbiAgICAgICAgXTtcblxuICAgICAgICB2YXIgc3RhcnQgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICB2YXIgZW5kID0gbmV3IFZlY3RvcjMoKTtcblxuICAgICAgICB2YXIgcG9pbnRzID0gW107XG5cbiAgICAgICAgLy8gMS0tLS0yXG4gICAgICAgIC8vIHwgICAgfFxuICAgICAgICAvLyAwLS0tLTNcbiAgICAgICAgdmFyIGNvb3JkcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgICAgY29vcmRzW2ldID0gbmV3IFZlY3RvcjMoMCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5jb3B5KHRoaXMucGxhbmUpO1xuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuYXBwbHlUcmFuc2Zvcm0odGhpcy5jYW1lcmEudmlld01hdHJpeCk7XG5cbiAgICAgICAgICAgIHZhciBmcnVzdHVtVmVydGljZXMgPSB0aGlzLmNhbWVyYS5mcnVzdHVtLnZlcnRpY2VzO1xuXG4gICAgICAgICAgICB2YXIgblBvaW50cyA9IDA7XG4gICAgICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCBsaW5lcyBvZiBmcnVzdHVtXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdGFydC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMl1dO1xuICAgICAgICAgICAgICAgIGVuZC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMiArIDFdXTtcblxuICAgICAgICAgICAgICAgIHZhciBwb2ludCA9IHBsYW5lVmlld1NwYWNlLmludGVyc2VjdExpbmUoc3RhcnQsIGVuZCwgcG9pbnRzW25Qb2ludHNdKTtcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2ludHNbblBvaW50c10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tuUG9pbnRzXSA9IHBvaW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5Qb2ludHMrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoblBvaW50cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzW2ldLmFwcGx5UHJvamVjdGlvbih0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtaW5YID0gcG9pbnRzWzBdLmFycmF5WzBdO1xuICAgICAgICAgICAgdmFyIG1pblkgPSBwb2ludHNbMF0uYXJyYXlbMV07XG4gICAgICAgICAgICB2YXIgbWF4WCA9IHBvaW50c1swXS5hcnJheVswXTtcbiAgICAgICAgICAgIHZhciBtYXhZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuUG9pbnRzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcbiAgICAgICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaW5YID09IG1heFggfHwgbWluWSA9PSBtYXhZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29vcmRzWzBdLmFycmF5WzBdID0gbWluWDtcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVsxXSA9IG1pblk7XG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMF0gPSBtaW5YO1xuICAgICAgICAgICAgY29vcmRzWzFdLmFycmF5WzFdID0gbWF4WTtcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVswXSA9IG1heFg7XG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMV0gPSBtYXhZO1xuICAgICAgICAgICAgY29vcmRzWzNdLmFycmF5WzBdID0gbWF4WDtcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVsxXSA9IG1pblk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheShjb29yZHNbaV0sIHJheSk7XG4gICAgICAgICAgICAgICAgcmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIGNvb3Jkc1tpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb29yZHM7XG4gICAgICAgIH07XG4gICAgfSkoKVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlUGxhbmU7XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XG5pbXBvcnQgR2VzdHVyZU1nciBmcm9tICcuL0dlc3R1cmVNZ3InO1xuXG5mdW5jdGlvbiBmaXJzdE5vdE51bGwoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRUb0FycmF5KHZhbCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhbCA9IFt2YWwsIHZhbF07XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAYWxpYXMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sXG4gKi9cbnZhciBPcmJpdENvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG5cbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcblxuICAgICAgICB0aW1lbGluZTogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0hUTUxEb21FbGVtZW50fVxuICAgICAgICAgKi9cbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cbiAgICAgICAgICovXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lm1hdGguVmVjdG9yM31cbiAgICAgICAgICovXG4gICAgICAgIF9jZW50ZXI6IG5ldyBWZWN0b3IzKCksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1pbmltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgICAgICovXG4gICAgICAgIG1pbkRpc3RhbmNlOiAwLjEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1heGltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAgICAgKiBAZGVmYXVsdCAyXG4gICAgICAgICAqL1xuICAgICAgICBtYXhEaXN0YW5jZTogMTAwMCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTWluaW11bSBhbHBoYSByb3RhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbWluQWxwaGE6IC05MCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTWF4aW11bSBhbHBoYSByb3RhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbWF4QWxwaGE6IDkwLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNaW5pbXVtIGJldGEgcm90YXRpb25cbiAgICAgICAgICovXG4gICAgICAgIG1pbkJldGE6IC1JbmZpbml0eSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1heGltdW0gYmV0YSByb3RhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgbWF4QmV0YTogSW5maW5pdHksXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFN0YXJ0IGF1dG8gcm90YXRpbmcgYWZ0ZXIgc3RpbGwgZm9yIHRoZSBnaXZlbiB0aW1lXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvUm90YXRlQWZ0ZXJTdGlsbDogMCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogRGlyZWN0aW9uIG9mIGF1dG9Sb3RhdGUuIGN3IG9yIGNjdyB3aGVuIGxvb2tpbmcgdG9wIGRvd24uXG4gICAgICAgICAqL1xuICAgICAgICBhdXRvUm90YXRlRGlyZWN0aW9uOiAnY3cnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWdyZWUgcGVyIHNlY29uZFxuICAgICAgICAgKi9cbiAgICAgICAgYXV0b1JvdGF0ZVNwZWVkOiA2MCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogUGFuIG9yIHJvdGF0ZVxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgX21vZGU6ICdyb3RhdGUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGRhbXBpbmc6IDAuOCxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICByb3RhdGVTZW5zaXRpdml0eTogMSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICB6b29tU2Vuc2l0aXZpdHk6IDEsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgcGFuU2Vuc2l0aXZpdHk6IDEsXG5cbiAgICAgICAgX25lZWRzVXBkYXRlOiBmYWxzZSxcblxuICAgICAgICBfcm90YXRpbmc6IGZhbHNlLFxuXG4gICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB5QXhpc1xuICAgICAgICBfcGhpOiAwLFxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeEF4aXNcbiAgICAgICAgX3RoZXRhOiAwLFxuXG4gICAgICAgIF9tb3VzZVg6IDAsXG4gICAgICAgIF9tb3VzZVk6IDAsXG5cbiAgICAgICAgX3JvdGF0ZVZlbG9jaXR5OiBuZXcgVmVjdG9yMigpLFxuXG4gICAgICAgIF9wYW5WZWxvY2l0eTogbmV3IFZlY3RvcjIoKSxcblxuICAgICAgICBfZGlzdGFuY2U6IDIwLFxuXG4gICAgICAgIF96b29tU3BlZWQ6IDAsXG5cbiAgICAgICAgX3N0aWxsVGltZW91dDogMCxcblxuICAgICAgICBfYW5pbWF0b3JzOiBbXSxcblxuICAgICAgICBfZ2VzdHVyZU1ncjogbmV3IEdlc3R1cmVNZ3IoKVxuICAgIH07XG59LCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gRWFjaCBPcmJpdENvbnRyb2wgaGFzIGl0J3Mgb3duIGhhbmRsZXJcbiAgICB0aGlzLl9tb3VzZURvd25IYW5kbGVyID0gdGhpcy5fbW91c2VEb3duSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyID0gdGhpcy5fbW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX21vdXNlVXBIYW5kbGVyID0gdGhpcy5fbW91c2VVcEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9waW5jaEhhbmRsZXIgPSB0aGlzLl9waW5jaEhhbmRsZXIuYmluZCh0aGlzKTtcblxuICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuaW5pdCgpO1xufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplLlxuICAgICAqIE1vdXNlIGV2ZW50IGJpbmRpbmdcbiAgICAgKi9cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XG5cbiAgICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcblxuICAgICAgICBkb20uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XG4gICAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9uKCdmcmFtZScsIHRoaXMudXBkYXRlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXNwb3NlLlxuICAgICAqIE1vdXNlIGV2ZW50IHVuYmluZGluZ1xuICAgICAqL1xuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcblxuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcblxuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcbiAgICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9wQWxsQW5pbWF0aW9uKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBkaXN0YW5jZVxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBkaXN0YW5jZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIHNldERpc3RhbmNlOiBmdW5jdGlvbiAoZGlzdGFuY2UpIHtcbiAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxwaGEgcm90YXRpb25cbiAgICAgKiBBbHBoYSBhbmdsZSBmb3IgdG9wLWRvd24gcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byB0b3AuXG4gICAgICpcbiAgICAgKiBXaGljaCBtZWFucyBjYW1lcmEgcm90YXRpb24gYXJvdW5kIHggYXhpcy5cbiAgICAgKi9cbiAgICBnZXRBbHBoYTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGhldGEgLyBNYXRoLlBJICogMTgwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgYmV0YSByb3RhdGlvblxuICAgICAqIEJldGEgYW5nbGUgZm9yIGxlZnQtcmlnaHQgcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byByaWdodC5cbiAgICAgKlxuICAgICAqIFdoaWNoIG1lYW5zIGNhbWVyYSByb3RhdGlvbiBhcm91bmQgeSBheGlzLlxuICAgICAqL1xuICAgIGdldEJldGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIC10aGlzLl9waGkgLyBNYXRoLlBJICogMTgwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY29udHJvbCBjZW50ZXJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cbiAgICAgKi9cbiAgICBnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NlbnRlci50b0FycmF5KCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBhbHBoYSByb3RhdGlvbiBhbmdsZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbHBoYVxuICAgICAqL1xuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpIHtcbiAgICAgICAgYWxwaGEgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heEFscGhhLCBhbHBoYSksIHRoaXMubWluQWxwaGEpO1xuXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGEgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNldCBiZXRhIHJvdGF0aW9uIGFuZ2xlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJldGFcbiAgICAgKi9cbiAgICBzZXRCZXRhOiBmdW5jdGlvbiAoYmV0YSkge1xuICAgICAgICBiZXRhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhCZXRhLCBiZXRhKSwgdGhpcy5taW5CZXRhKTtcblxuICAgICAgICB0aGlzLl9waGkgPSAtYmV0YSAvIDE4MCAqIE1hdGguUEk7XG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbnRyb2wgY2VudGVyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gY2VudGVyXG4gICAgICovXG4gICAgc2V0Q2VudGVyOiBmdW5jdGlvbiAoY2VudGVyQXJyKSB7XG4gICAgICAgIHRoaXMuX2NlbnRlci5zZXRBcnJheShjZW50ZXJBcnIpO1xuICAgIH0sXG5cbiAgICBzZXRPcHRpb246IGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIFsnYXV0b1JvdGF0ZScsICdhdXRvUm90YXRlQWZ0ZXJTdGlsbCcsXG4gICAgICAgICAgICAnYXV0b1JvdGF0ZURpcmVjdGlvbicsICdhdXRvUm90YXRlU3BlZWQnLFxuICAgICAgICAgICAgJ2RhbXBpbmcnLFxuICAgICAgICAgICAgJ21pbkRpc3RhbmNlJywgJ21heERpc3RhbmNlJyxcbiAgICAgICAgICAgICdtaW5BbHBoYScsICdtYXhBbHBoYScsICdtaW5CZXRhJywgJ21heEJldGEnLFxuICAgICAgICAgICAgJ3JvdGF0ZVNlbnNpdGl2aXR5JywgJ3pvb21TZW5zaXRpdml0eScsICdwYW5TZW5zaXRpdml0eSdcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzW2tleV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXREaXN0YW5jZShvcHRzLmRpc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmFscGhhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QWxwaGEob3B0cy5hbHBoYSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldEJldGEob3B0cy5iZXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmNlbnRlcikge1xuICAgICAgICAgICAgdGhpcy5zZXRDZW50ZXIob3B0cy5jZW50ZXIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuZGlzdGFuY2VcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5hbHBoYVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmJldGFcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZHVyYXRpb249MTAwMF1cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZWFzaW5nPSdsaW5lYXInXVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kb25lXVxuICAgICAqL1xuICAgIGFuaW1hdGVUbzogZnVuY3Rpb24gKG9wdHMpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgdmFyIHRhcmdldCA9IHt9O1xuICAgICAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xuICAgICAgICBpZiAoIXRpbWVsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgb2JqLmRpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZSgpO1xuICAgICAgICAgICAgdGFyZ2V0LmRpc3RhbmNlID0gb3B0cy5kaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICBvYmouYWxwaGEgPSB0aGlzLmdldEFscGhhKCk7XG4gICAgICAgICAgICB0YXJnZXQuYWxwaGEgPSBvcHRzLmFscGhhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgb2JqLmJldGEgPSB0aGlzLmdldEJldGEoKTtcbiAgICAgICAgICAgIHRhcmdldC5iZXRhID0gb3B0cy5iZXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmNlbnRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBvYmouY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgIHRhcmdldC5jZW50ZXIgPSBvcHRzLmNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRBbmltYXRvcihcbiAgICAgICAgICAgIHRpbWVsaW5lLmFuaW1hdGUob2JqKVxuICAgICAgICAgICAgICAgIC53aGVuKG9wdHMuZHVyYXRpb24gfHwgMTAwMCwgdGFyZ2V0KVxuICAgICAgICAgICAgICAgIC5kdXJpbmcoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmFscGhhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QWxwaGEob2JqLmFscGhhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmJldGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRCZXRhKG9iai5iZXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmRpc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGlzdGFuY2Uob2JqLmRpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmNlbnRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldENlbnRlcihvYmouY2VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxmLl9uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG9uZShvcHRzLmRvbmUpXG4gICAgICAgICkuc3RhcnQob3B0cy5lYXNpbmcgfHwgJ2xpbmVhcicpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdG9wIGFsbCBhbmltYXRpb25zXG4gICAgICovXG4gICAgc3RvcEFsbEFuaW1hdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FuaW1hdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fYW5pbWF0b3JzW2ldLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID0gMDtcbiAgICB9LFxuXG4gICAgX2lzQW5pbWF0aW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID4gMDtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENhbGwgdXBkYXRlIGVhY2ggZnJhbWVcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZSBGcmFtZSB0aW1lXG4gICAgICovXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XG5cbiAgICAgICAgZGVsdGFUaW1lID0gZGVsdGFUaW1lIHx8IDE2O1xuXG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGluZykge1xuICAgICAgICAgICAgdmFyIHJhZGlhbiA9ICh0aGlzLmF1dG9Sb3RhdGVEaXJlY3Rpb24gPT09ICdjdycgPyAxIDogLTEpXG4gICAgICAgICAgICAgICAgKiB0aGlzLmF1dG9Sb3RhdGVTcGVlZCAvIDE4MCAqIE1hdGguUEk7XG4gICAgICAgICAgICB0aGlzLl9waGkgLT0gcmFkaWFuICogZGVsdGFUaW1lIC8gMTAwMDtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9yb3RhdGVWZWxvY2l0eS5sZW4oKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLl96b29tU3BlZWQpID4gMC4wMSB8fCB0aGlzLl9wYW5WZWxvY2l0eS5sZW4oKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbmVlZHNVcGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpeGVkIGRlbHRhVGltZVxuICAgICAgICB0aGlzLl91cGRhdGVEaXN0YW5jZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhbihNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlUm90YXRlKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcblxuICAgICAgICB0aGlzLl91cGRhdGVUcmFuc2Zvcm0oKTtcblxuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGUoKTtcblxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xuXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gZmFsc2U7XG4gICAgfSxcblxuICAgIF91cGRhdGVSb3RhdGU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcm90YXRlVmVsb2NpdHk7XG4gICAgICAgIHRoaXMuX3BoaSA9IHZlbG9jaXR5LnkgKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3BoaTtcbiAgICAgICAgdGhpcy5fdGhldGEgPSB2ZWxvY2l0eS54ICogZGVsdGFUaW1lIC8gMjAgKyB0aGlzLl90aGV0YTtcblxuICAgICAgICB0aGlzLnNldEFscGhhKHRoaXMuZ2V0QWxwaGEoKSk7XG4gICAgICAgIHRoaXMuc2V0QmV0YSh0aGlzLmdldEJldGEoKSk7XG5cbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgdGhpcy5kYW1waW5nKTtcbiAgICB9LFxuXG4gICAgX3VwZGF0ZURpc3RhbmNlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XG4gICAgICAgIHRoaXMuX3NldERpc3RhbmNlKHRoaXMuX2Rpc3RhbmNlICsgdGhpcy5fem9vbVNwZWVkICogZGVsdGFUaW1lIC8gMjApO1xuICAgICAgICB0aGlzLl96b29tU3BlZWQgKj0gdGhpcy5kYW1waW5nO1xuICAgIH0sXG5cbiAgICBfc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xuICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKGRpc3RhbmNlLCB0aGlzLm1heERpc3RhbmNlKSwgdGhpcy5taW5EaXN0YW5jZSk7XG4gICAgfSxcblxuICAgIF91cGRhdGVQYW46IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcGFuVmVsb2NpdHk7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9kaXN0YW5jZTtcblxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgICAgIHZhciB5QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS55O1xuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueDtcblxuICAgICAgICAvLyBQRU5ESU5HXG4gICAgICAgIHRoaXMuX2NlbnRlclxuICAgICAgICAgICAgLnNjYWxlQW5kQWRkKHhBeGlzLCAtdmVsb2NpdHkueCAqIGxlbiAvIDIwMClcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh5QXhpcywgLXZlbG9jaXR5LnkgKiBsZW4gLyAyMDApO1xuXG4gICAgICAgIHRoaXMuX3ZlY3RvckRhbXBpbmcodmVsb2NpdHksIDApO1xuICAgIH0sXG5cbiAgICBfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcblxuICAgICAgICB2YXIgZGlyID0gbmV3IFZlY3RvcjMoKTtcbiAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5fdGhldGEgKyBNYXRoLlBJIC8gMjtcbiAgICAgICAgdmFyIHBoaSA9IHRoaXMuX3BoaSArIE1hdGguUEkgLyAyO1xuICAgICAgICB2YXIgciA9IE1hdGguc2luKHRoZXRhKTtcblxuICAgICAgICBkaXIueCA9IHIgKiBNYXRoLmNvcyhwaGkpO1xuICAgICAgICBkaXIueSA9IC1NYXRoLmNvcyh0aGV0YSk7XG4gICAgICAgIGRpci56ID0gciAqIE1hdGguc2luKHBoaSk7XG5cbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy5fY2VudGVyKS5zY2FsZUFuZEFkZChkaXIsIHRoaXMuX2Rpc3RhbmNlKTtcbiAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmlkZW50aXR5KClcbiAgICAgICAgICAgIC8vIEZpcnN0IGFyb3VuZCB5LCB0aGVuIGFyb3VuZCB4XG4gICAgICAgICAgICAucm90YXRlWSgtdGhpcy5fcGhpKVxuICAgICAgICAgICAgLnJvdGF0ZVgoLXRoaXMuX3RoZXRhKTtcbiAgICB9LFxuXG4gICAgX3N0YXJ0Q291bnRpbmdTdGlsbDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3RpbGxUaW1lb3V0KTtcblxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuYXV0b1JvdGF0ZUFmdGVyU3RpbGw7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3RpbGxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcm90YXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSwgdGltZSAqIDEwMDApO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF92ZWN0b3JEYW1waW5nOiBmdW5jdGlvbiAodiwgZGFtcGluZykge1xuICAgICAgICB2YXIgc3BlZWQgPSB2LmxlbigpO1xuICAgICAgICBzcGVlZCA9IHNwZWVkICogZGFtcGluZztcbiAgICAgICAgaWYgKHNwZWVkIDwgMWUtNCkge1xuICAgICAgICAgICAgc3BlZWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHYubm9ybWFsaXplKCkuc2NhbGUoc3BlZWQpO1xuICAgIH0sXG5cbiAgICBkZWNvbXBvc2VUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRklYTUUgZXVsZXIgb3JkZXIuLi4uLi5cbiAgICAgICAgLy8gRklYTUUgYWxwaGEgaXMgbm90IGNlcnRhaW4gd2hlbiBiZXRhIGlzIDkwIG9yIC05MFxuICAgICAgICAvLyB2YXIgZXVsZXIgPSBuZXcgVmVjdG9yMygpO1xuICAgICAgICAvLyBldWxlci5ldWxlckZyb21NYXQzKFxuICAgICAgICAvLyAgICBuZXcgTWF0cml4MygpLmZyb21RdWF0KHRoaXMudGFyZ2V0LnJvdGF0aW9uKSwgJ1pZWCdcbiAgICAgICAgLy8gKTtcbiAgICAgICAgLy8gZXVsZXIuZXVsZXJGcm9tUXVhdChcbiAgICAgICAgLy8gICAgIHRoaXMudGFyZ2V0LnJvdGF0aW9uLm5vcm1hbGl6ZSgpLCAnWllYJ1xuICAgICAgICAvLyApO1xuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xuXG4gICAgICAgIHZhciBmb3J3YXJkID0gdGhpcy50YXJnZXQud29ybGRUcmFuc2Zvcm0uejtcbiAgICAgICAgdmFyIGFscGhhID0gTWF0aC5hc2luKGZvcndhcmQueSk7XG4gICAgICAgIHZhciBiZXRhID0gTWF0aC5hdGFuMihmb3J3YXJkLngsIGZvcndhcmQueik7XG5cbiAgICAgICAgdGhpcy5fdGhldGEgPSBhbHBoYTtcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGE7XG5cbiAgICAgICAgdGhpcy5zZXRCZXRhKHRoaXMuZ2V0QmV0YSgpKTtcbiAgICAgICAgdGhpcy5zZXRBbHBoYSh0aGlzLmdldEFscGhhKCkpO1xuXG4gICAgICAgIHRoaXMuX3NldERpc3RhbmNlKHRoaXMudGFyZ2V0LnBvc2l0aW9uLmRpc3QodGhpcy5fY2VudGVyKSk7XG4gICAgfSxcblxuICAgIF9tb3VzZURvd25IYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xuICAgICAgICB2YXIgeSA9IGUuY2xpZW50WTtcbiAgICAgICAgLy8gVG91Y2hcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcblxuICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdyb3RhdGUnO1xuXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnc3RhcnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XG4gICAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcbiAgICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xuXG4gICAgICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcbiAgICAgICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XG5cbiAgICAgICAgaWYgKGUuYnV0dG9uID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlID0gJ3JvdGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZS5idXR0b24gPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncGFuJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2V0IHJvdGF0ZSB2ZWxvY2l0eVxuICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS5zZXQoMCwgMCk7XG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcbiAgICB9LFxuXG4gICAgX21vdXNlTW92ZUhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHggPSBlLmNsaWVudFg7XG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xuXG4gICAgICAgIHZhciBoYXZlR2VzdHVyZTtcbiAgICAgICAgLy8gVG91Y2hcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcblxuICAgICAgICAgICAgaGF2ZUdlc3R1cmUgPSB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFuU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnBhblNlbnNpdGl2aXR5KTtcbiAgICAgICAgdmFyIHJvdGF0ZVNlbnNpdGl2aXR5ID0gY29udmVydFRvQXJyYXkodGhpcy5yb3RhdGVTZW5zaXRpdml0eSk7XG5cbiAgICAgICAgaWYgKCFoYXZlR2VzdHVyZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgPT09ICdyb3RhdGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueSA9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQgKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueCA9ICh5IC0gdGhpcy5fbW91c2VZKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIDIgKiByb3RhdGVTZW5zaXRpdml0eVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX21vZGUgPT09ICdwYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFuVmVsb2NpdHkueCA9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHBhblNlbnNpdGl2aXR5WzBdICogNDAwO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhblZlbG9jaXR5LnkgPSAoLXkgKyB0aGlzLl9tb3VzZVkpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHBhblNlbnNpdGl2aXR5WzFdICogNDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcblxuICAgIF9tb3VzZVdoZWVsSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSBlLndoZWVsRGVsdGEgLy8gV2Via2l0XG4gICAgICAgICAgICAgICAgfHwgLWUuZGV0YWlsOyAvLyBGaXJlZm94XG4gICAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3pvb21IYW5kbGVyKGUsIGRlbHRhID4gMCA/IC0xIDogMSk7XG4gICAgfSxcblxuICAgIF9waW5jaEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fem9vbUhhbmRsZXIoZSwgZS5waW5jaFNjYWxlID4gMSA/IC0wLjQgOiAwLjQpO1xuICAgIH0sXG5cbiAgICBfem9vbUhhbmRsZXI6IGZ1bmN0aW9uIChlLCBkZWx0YSkge1xuXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKFxuICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgLSB0aGlzLm1pbkRpc3RhbmNlLFxuICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSAtIHRoaXMuX2Rpc3RhbmNlXG4gICAgICAgICkpO1xuICAgICAgICB0aGlzLl96b29tU3BlZWQgPSBkZWx0YSAqIE1hdGgubWF4KGRpc3RhbmNlIC8gNDAgKiB0aGlzLnpvb21TZW5zaXRpdml0eSwgMC4yKTtcblxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUgJiYgdGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0sXG5cbiAgICBfbW91c2VVcEhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcbiAgICAgICAgZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xuICAgICAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShldmVudCwgJ2VuZCcpO1xuICAgIH0sXG5cbiAgICBfYWRkQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xuICAgICAgICB2YXIgYW5pbWF0b3JzID0gdGhpcy5fYW5pbWF0b3JzO1xuICAgICAgICBhbmltYXRvcnMucHVzaChhbmltYXRvcik7XG4gICAgICAgIGFuaW1hdG9yLmRvbmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGlkeCA9IGFuaW1hdG9ycy5pbmRleE9mKGFuaW1hdG9yKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhbmltYXRvcjtcbiAgICB9LFxuXG5cbiAgICBfcHJvY2Vzc0dlc3R1cmU6IGZ1bmN0aW9uIChldmVudCwgc3RhZ2UpIHtcbiAgICAgICAgdmFyIGdlc3R1cmVNZ3IgPSB0aGlzLl9nZXN0dXJlTWdyO1xuXG4gICAgICAgIHN0YWdlID09PSAnc3RhcnQnICYmIGdlc3R1cmVNZ3IuY2xlYXIoKTtcblxuICAgICAgICB2YXIgZ2VzdHVyZUluZm8gPSBnZXN0dXJlTWdyLnJlY29nbml6ZShcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudFxuICAgICAgICApO1xuXG4gICAgICAgIHN0YWdlID09PSAnZW5kJyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XG5cbiAgICAgICAgLy8gRG8gbm90IGRvIGFueSBwcmV2ZW50RGVmYXVsdCBoZXJlLiBVcHBlciBhcHBsaWNhdGlvbiBkbyB0aGF0IGlmIG5lY2Vzc2FyeS5cbiAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGdlc3R1cmVJbmZvLnR5cGU7XG4gICAgICAgICAgICBldmVudC5nZXN0dXJlRXZlbnQgPSB0eXBlO1xuXG4gICAgICAgICAgICB0aGlzLl9waW5jaEhhbmRsZXIoZ2VzdHVyZUluZm8uZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIElmIGF1dG8gcm90YXRlIHRoZSB0YXJnZXRcbiAqIEB0eXBlIHtib29sZWFufVxuICogQGRlZmF1bHQgZmFsc2VcbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICdhdXRvUm90YXRlJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1JvdGF0ZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB0aGlzLl9hdXRvUm90YXRlID0gdmFsO1xuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IHZhbDtcbiAgICB9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICd0YXJnZXQnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCAmJiB2YWwudGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcih2YWwudGFyZ2V0LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdmFsO1xuICAgICAgICB0aGlzLmRlY29tcG9zZVRyYW5zZm9ybSgpO1xuICAgIH1cbn0pO1xuXG5cbmV4cG9ydCBkZWZhdWx0IE9yYml0Q29udHJvbDtcbiIsIi8qKlxuICogU3RhdGljR2VvbWV0cnkgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgdGhleSd2ZSBiZWVuIHNldHVwXG4gKi9cbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuL0dlb21ldHJ5Jztcbi8qKlxuICogQGNvbnN0cnVjdG9yIGNsYXkuU3RhdGljR2VvbWV0cnlcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcbiAqL1xudmFyIFN0YXRpY0dlb21ldHJ5ID0gR2VvbWV0cnkuZXh0ZW5kKHtcbiAgICBkeW5hbWljOiBmYWxzZVxufSk7XG5leHBvcnQgZGVmYXVsdCBTdGF0aWNHZW9tZXRyeTtcbiIsIi8vIFRPRE8gdGVzdFxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XG5pbXBvcnQgU3RhbmRhcmRNYXRlcmlhbCBmcm9tICcuLi9TdGFuZGFyZE1hdGVyaWFsJztcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcbmltcG9ydCBnbE1hdHJpeCBmcm9tICcuLi9kZXAvZ2xtYXRyaXgnO1xudmFyIG1hdDQgPSBnbE1hdHJpeC5tYXQ0O1xudmFyIHZlYzMgPSBnbE1hdHJpeC52ZWMzO1xuXG4vKipcbiAqIEBuYW1lc3BhY2UgY2xheS51dGlsLm1lc2hcbiAqL1xudmFyIG1lc2hVdGlsID0ge1xuICAgIC8qKlxuICAgICAqIE1lcmdlIG11bHRpcGxlIG1lc2hlcyB0byBvbmUuXG4gICAgICogTm90ZSB0aGF0IHRoZXNlIG1lc2hlcyBtdXN0IGhhdmUgdGhlIHNhbWUgbWF0ZXJpYWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXkuPGNsYXkuTWVzaD59IG1lc2hlc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXBwbHlXb3JsZFRyYW5zZm9ybVxuICAgICAqIEByZXR1cm4gY2xheS5NZXNoXG4gICAgICogQG1lbWJlck9mIGNsYXkudXRpbC5tZXNoXG4gICAgICovXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChtZXNoZXMsIGFwcGx5V29ybGRUcmFuc2Zvcm0pIHtcblxuICAgICAgICBpZiAoISBtZXNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGVtcGxhdGVNZXNoID0gbWVzaGVzWzBdO1xuICAgICAgICB2YXIgdGVtcGxhdGVHZW8gPSB0ZW1wbGF0ZU1lc2guZ2VvbWV0cnk7XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IHRlbXBsYXRlTWVzaC5tYXRlcmlhbDtcblxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xuICAgICAgICAgICAgZHluYW1pYzogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG5cbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVzID0gdGVtcGxhdGVHZW8uZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW2ldO1xuICAgICAgICAgICAgdmFyIGF0dHIgPSB0ZW1wbGF0ZUdlby5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICAgICAgLy8gRXh0ZW5kIGN1c3RvbSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW25hbWVdID0gYXR0ci5jbG9uZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IGRhdGEgYW5kIG1lcmdlIGJvdW5kaW5nIGJveFxuICAgICAgICB2YXIgblZlcnRleCA9IDA7XG4gICAgICAgIHZhciBuRmFjZSA9IDA7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzaGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudEdlbyA9IG1lc2hlc1trXS5nZW9tZXRyeTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50R2VvLmJvdW5kaW5nQm94KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdlby5ib3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybShhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaGVzW2tdLndvcmxkVHJhbnNmb3JtIDogbWVzaGVzW2tdLmxvY2FsVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC51bmlvbihjdXJyZW50R2VvLmJvdW5kaW5nQm94KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5WZXJ0ZXggKz0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcbiAgICAgICAgICAgIG5GYWNlICs9IGN1cnJlbnRHZW8udHJpYW5nbGVDb3VudDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW25dO1xuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XG4gICAgICAgICAgICBhdHRyaWIuaW5pdChuVmVydGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoblZlcnRleCA+PSAweGZmZmYpIHtcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobkZhY2UgKiAzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobkZhY2UgKiAzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xuICAgICAgICB2YXIgaW5kaWNlc09mZnNldCA9IDA7XG4gICAgICAgIHZhciB1c2VJbmRpY2VzID0gdGVtcGxhdGVHZW8uaXNVc2VJbmRpY2VzKCk7XG5cbiAgICAgICAgZm9yICh2YXIgbW0gPSAwOyBtbSA8IG1lc2hlcy5sZW5ndGg7IG1tKyspIHtcbiAgICAgICAgICAgIHZhciBtZXNoID0gbWVzaGVzW21tXTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaC5nZW9tZXRyeTtcblxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xuXG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gYXBwbHlXb3JsZFRyYW5zZm9ybSA/IG1lc2gud29ybGRUcmFuc2Zvcm0uYXJyYXkgOiBtZXNoLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcbiAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBubiA9IDA7IG5uIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBubisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tubl07XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRBdHRyID0gY3VycmVudEdlby5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1bnVzZWQgYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRBdHRyLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnJlbnRBdHRyLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGN1cnJlbnRBdHRyLnNpemU7XG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZlcnRleE9mZnNldCAqIHNpemU7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gbGVuIC8gc2l6ZTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEF0dHIudmFsdWVbb2Zmc2V0ICsgaV0gPSBjdXJyZW50QXR0ci52YWx1ZVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvc2l0aW9uLCBub3JtYWwgYW5kIHRhbmdlbnRcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3Bvc2l0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICB2ZWMzLmZvckVhY2godGFyZ2V0QXR0ci52YWx1ZSwgc2l6ZSwgb2Zmc2V0LCBjb3VudCwgdmVjMy50cmFuc2Zvcm1NYXQ0LCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnbm9ybWFsJyB8fCBuYW1lID09PSAndGFuZ2VudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5mb3JFYWNoKHRhcmdldEF0dHIudmFsdWUsIHNpemUsIG9mZnNldCwgY291bnQsIHZlYzMudHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXNlSW5kaWNlcykge1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50R2VvLmluZGljZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlc1tpICsgaW5kaWNlc09mZnNldF0gPSBjdXJyZW50R2VvLmluZGljZXNbaV0gKyB2ZXJ0ZXhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZGljZXNPZmZzZXQgKz0gbGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQgKz0gblZlcnRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTWVzaCh7XG4gICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXG4gICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNwbGl0IG1lc2ggaW50byBzdWIgbWVzaGVzLCBlYWNoIG1lc2ggd2lsbCBoYXZlIG1heEpvaW50TnVtYmVyIGpvaW50cy5cbiAgICAgKiBAcGFyYW0ge2NsYXkuTWVzaH0gbWVzaFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhKb2ludE51bWJlclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5QbGFjZVxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxuICAgICAqL1xuXG4gICAgLy8gRklYTUUsIEhhdmUgaXNzdWVzIG9uIHNvbWUgbW9kZWxzXG4gICAgc3BsaXRCeUpvaW50czogZnVuY3Rpb24gKG1lc2gsIG1heEpvaW50TnVtYmVyLCBpblBsYWNlKSB7XG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG1lc2guZ2VvbWV0cnk7XG4gICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247XG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XG4gICAgICAgIHZhciBqb2ludHMgPSBtZXNoLmpvaW50cztcbiAgICAgICAgaWYgKCFnZW9tZXRyeSB8fCAhc2tlbGV0b24gfHwgIWpvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA8IG1heEpvaW50TnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzaDtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRpY2VzO1xuXG4gICAgICAgIHZhciBmYWNlTGVuID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcbiAgICAgICAgdmFyIHJlc3QgPSBmYWNlTGVuO1xuICAgICAgICB2YXIgaXNGYWNlQWRkZWQgPSBbXTtcbiAgICAgICAgdmFyIGpvaW50VmFsdWVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWNlTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlzRmFjZUFkZGVkW2ldID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkZGVkSm9pbnRJZHhQZXJGYWNlID0gW107XG5cbiAgICAgICAgdmFyIGJ1Y2tldHMgPSBbXTtcblxuICAgICAgICB2YXIgZ2V0Sm9pbnRCeUluZGV4ID0gZnVuY3Rpb24gKGlkeCkge1xuICAgICAgICAgICAgcmV0dXJuIGpvaW50c1tpZHhdO1xuICAgICAgICB9O1xuICAgICAgICB3aGlsZSAocmVzdCA+IDApIHtcbiAgICAgICAgICAgIHZhciBidWNrZXRUcmlhbmdsZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludFJldmVyc2VNYXAgPSBbXTtcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludHMgPSBbXTtcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtpXSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBmYWNlTGVuOyBmKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWNlQWRkZWRbZl0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjYW5BZGRUb0J1Y2tldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIGFkZGVkTnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBpbmRpY2VzW2YgKiAzICsgaV07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGpvaW50VmFsdWVzW2lkeCAqIDQgKyBqXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YkpvaW50TnVtYmVyIDwgbWF4Sm9pbnROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF0gPSBzdWJKb2ludE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50c1tzdWJKb2ludE51bWJlcisrXSA9IGpvaW50SWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRKb2ludElkeFBlckZhY2VbYWRkZWROdW1iZXIrK10gPSBqb2ludElkeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbkFkZFRvQnVja2V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5BZGRUb0J1Y2tldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIG9wZXJhdGlvblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGVkTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFthZGRlZEpvaW50SWR4UGVyRmFjZVtpXV0gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YkpvaW50TnVtYmVyLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldFRyaWFuZ2xlcy5wdXNoKGluZGljZXMuc3ViYXJyYXkoZiAqIDMsIChmICsgMSkgKiAzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaXNGYWNlQWRkZWRbZl0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXN0LS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVja2V0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXM6IGJ1Y2tldFRyaWFuZ2xlcyxcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldEpvaW50cy5tYXAoZ2V0Sm9pbnRCeUluZGV4KSxcbiAgICAgICAgICAgICAgICBqb2ludFJldmVyc2VNYXA6IGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm9vdCA9IG5ldyBOb2RlKHtcbiAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGF0dHJpYk5hbWVzID0gZ2VvbWV0cnkuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcblxuICAgICAgICBhdHRyaWJOYW1lcy5zcGxpY2UoYXR0cmliTmFtZXMuaW5kZXhPZignam9pbnQnKSwgMSk7XG4gICAgICAgIC8vIE1hcCBmcm9tIG9sZCB2ZXJ0ZXggaW5kZXggdG8gbmV3IHZlcnRleCBpbmRleFxuICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8IGJ1Y2tldHMubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgIHZhciBidWNrZXQgPSBidWNrZXRzW2JdO1xuICAgICAgICAgICAgdmFyIGpvaW50UmV2ZXJzZU1hcCA9IGJ1Y2tldC5qb2ludFJldmVyc2VNYXA7XG4gICAgICAgICAgICB2YXIgc3ViSm9pbnROdW1iZXIgPSBidWNrZXQuam9pbnRzLmxlbmd0aDtcblxuICAgICAgICAgICAgdmFyIHN1Yk1hdCA9IG1hdGVyaWFsLmNsb25lKCk7XG4gICAgICAgICAgICBzdWJNYXQubmFtZSA9IFttYXRlcmlhbC5uYW1lLCBiXS5qb2luKCctJyk7XG5cbiAgICAgICAgICAgIHZhciBzdWJHZW8gPSBuZXcgR2VvbWV0cnkoKTtcblxuICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgTWVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogW21lc2gubmFtZSwgaV0uam9pbignLScpLFxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBzdWJNYXQsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHN1YkdlbyxcbiAgICAgICAgICAgICAgICBza2VsZXRvbjogc2tlbGV0b24sXG4gICAgICAgICAgICAgICAgam9pbnRzOiBidWNrZXQuam9pbnRzLnNsaWNlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xuICAgICAgICAgICAgdmFyIG5WZXJ0ZXgyID0gZ2VvbWV0cnkudmVydGV4Q291bnQ7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXgyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3VudCBzdWIgZ2VvIG51bWJlclxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBidWNrZXQudHJpYW5nbGVzLmxlbmd0aDsgZisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBidWNrZXQudHJpYW5nbGVzW2ZdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBmYWNlW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3SW5kaWNlc1tpZHhdID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmliTmFtZXMubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmliTmFtZSA9IGF0dHJpYk5hbWVzW2FdO1xuICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcbiAgICAgICAgICAgICAgICBzdWJBdHRyaWIuaW5pdChuVmVydGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XG5cbiAgICAgICAgICAgIGlmIChuVmVydGV4ID4gMHhmZmZmKSB7XG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoICogMyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIG5WZXJ0ZXggPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpXSA9IC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdHJpYW5nbGUgPSBidWNrZXQudHJpYW5nbGVzW2ZdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IHRyaWFuZ2xlW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2lkeF0gPSBuVmVydGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJOYW1lID0gYXR0cmliTmFtZXNbYV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmliTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmliLnNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJBdHRyaWIudmFsdWVbblZlcnRleCAqIHNpemUgKyBqXSA9IGF0dHJpYi52YWx1ZVtpZHggKiBzaXplICsgal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRJZHggPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW2lkeCAqIDQgKyBqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gblZlcnRleCAqIDQgKyBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW29mZnNldF0gPSBqb2ludFJldmVyc2VNYXBbam9pbnRJZHhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbb2Zmc2V0XSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlc1tpbmRpY2VzT2Zmc2V0KytdID0gbmV3SW5kaWNlc1tpZHhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Ykdlby51cGRhdGVCb3VuZGluZ0JveCgpO1xuXG4gICAgICAgICAgICByb290LmFkZChzdWJNZXNoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBtZXNoLmNoaWxkcmVuKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJvb3QuYWRkKGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByb290LnBvc2l0aW9uLmNvcHkobWVzaC5wb3NpdGlvbik7XG4gICAgICAgIHJvb3Qucm90YXRpb24uY29weShtZXNoLnJvdGF0aW9uKTtcbiAgICAgICAgcm9vdC5zY2FsZS5jb3B5KG1lc2guc2NhbGUpO1xuXG4gICAgICAgIGlmIChpblBsYWNlKSB7XG4gICAgICAgICAgICBpZiAobWVzaC5nZXRQYXJlbnQoKSkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBtZXNoLmdldFBhcmVudCgpO1xuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmUobWVzaCk7XG4gICAgICAgICAgICAgICAgcGFyZW50LmFkZChyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNoVXRpbDtcbiIsImltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcblxudmFyIE1FVEEgPSB7XG4gICAgdmVyc2lvbjogMS4wLFxuICAgIHR5cGU6ICdHZW9tZXRyeScsXG4gICAgZ2VuZXJhdG9yOiAndXRpbC50cmFuc2ZlcmFibGUudG9PYmplY3QnXG59O1xuXG4vKipcbiAqIEBhbGlhcyBjbGF5LnV0aWwudHJhbnNmZXJhYmxlXG4gKi9cbnZhciB0cmFuc2ZlcmFibGVVdGlsID0ge1xuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZ2VvbWV0cnkgdG8gYSBvYmplY3QgY29udGFpbmluZyB0cmFuc2ZlcmFibGUgZGF0YVxuICAgICAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGdlb21ldHJ5XG4gICAgICogQHBhcmFtIHtCb29sZWFufSBzaGFsbG93IHdoZXRoZXIgc2hhbGxvdyBjb3B5XG4gICAgICogQHJldHVybnMge09iamVjdH0geyBkYXRhIDogZGF0YSwgYnVmZmVycyA6IGJ1ZmZlcnMgfSwgYnVmZmVycyBpcyB0aGUgdHJhbnNmZXJhYmxlIGxpc3RcbiAgICAgKi9cbiAgICB0b09iamVjdCA6IGZ1bmN0aW9uIChnZW9tZXRyeSwgc2hhbGxvdykge1xuICAgICAgICBpZiAoIWdlb21ldHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgIG1ldGFkYXRhIDogdXRpbC5leHRlbmQoe30sIE1FVEEpXG4gICAgICAgIH07XG4gICAgICAgIC8vdHJhbnNmZXJhYmxlIGJ1ZmZlcnNcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcblxuICAgICAgICAvL2R5bmFtaWNcbiAgICAgICAgZGF0YS5keW5hbWljID0gZ2VvbWV0cnkuZHluYW1pYztcblxuICAgICAgICAvL2JvdW5kaW5nIGJveFxuICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcbiAgICAgICAgICAgIGRhdGEuYm91bmRpbmdCb3ggPSB7XG4gICAgICAgICAgICAgICAgbWluIDogZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICBtYXggOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgudG9BcnJheSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pbmRpY2VzXG4gICAgICAgIGlmIChnZW9tZXRyeS5pbmRpY2VzICYmIGdlb21ldHJ5LmluZGljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YS5pbmRpY2VzID0gY29weUlmTmVjZXNzYXJ5KGdlb21ldHJ5LmluZGljZXMsIHNoYWxsb3cpO1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGRhdGEuaW5kaWNlcy5idWZmZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9hdHRyaWJ1dGVzXG4gICAgICAgIGRhdGEuYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBwIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHsgXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShwKSkge1xuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1twXTtcbiAgICAgICAgICAgICAgICAvL2lnbm9yZSBlbXB0eSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgaWYgKGF0dHIgJiYgYXR0ci52YWx1ZSAmJiBhdHRyLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGRhdGEuYXR0cmlidXRlc1twXSA9IGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdyk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChhdHRyLnZhbHVlLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGEgOiBkYXRhLFxuICAgICAgICAgICAgYnVmZmVycyA6IGJ1ZmZlcnNcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIC8qKlxuICAgICAqIFJlcHJvZHVjZSBhIGdlb21ldHJ5IGZyb20gb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxuICAgICAqIEByZXR1cm5zIHtHZW9tZXRyeX0gZ2VvbWV0cnlcbiAgICAgKi9cbiAgICB0b0dlb21ldHJ5IDogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iamVjdC5kYXRhICYmIG9iamVjdC5idWZmZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlVXRpbC50b0dlb21ldHJ5KG9iamVjdC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9iamVjdC5tZXRhZGF0YSB8fCBvYmplY3QubWV0YWRhdGEuZ2VuZXJhdG9yICE9PSBNRVRBLmdlbmVyYXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbdXRpbC50cmFuc2ZlcmFibGUudG9HZW9tZXRyeV0gdGhlIG9iamVjdCBpcyBub3QgZ2VuZXJhdGVkIGJ5IHV0aWwudHJhbnNmZXJhYmxlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9iYXNpYyBvcHRpb25zXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgZHluYW1pYyA6IG9iamVjdC5keW5hbWljLFxuICAgICAgICAgICAgaW5kaWNlcyA6IG9iamVjdC5pbmRpY2VzXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG9iamVjdC5ib3VuZGluZ0JveCkge1xuICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyBWZWN0b3IzKCkuc2V0QXJyYXkob2JqZWN0LmJvdW5kaW5nQm94Lm1pbik7XG4gICAgICAgICAgICB2YXIgbWF4ID0gbmV3IFZlY3RvcjMoKS5zZXRBcnJheShvYmplY3QuYm91bmRpbmdCb3gubWF4KTtcbiAgICAgICAgICAgIG9wdGlvbnMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3gobWluLCBtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkob3B0aW9ucyk7XG4gICAgICAgIFxuICAgICAgICAvL2F0dHJpYnV0ZXNcbiAgICAgICAgZm9yICh2YXIgcCBpbiBvYmplY3QuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBvYmplY3QuYXR0cmlidXRlc1twXTtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdID0gbmV3IEdlb21ldHJ5LkF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudHlwZSwgYXR0ci5zaXplLCBhdHRyLnNlbWFudGljKTtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdLnZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICB9XG4gICAgXG59XG5cbmZ1bmN0aW9uIGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUgOiBhdHRyLm5hbWUsXG4gICAgICAgIHR5cGUgOiBhdHRyLnR5cGUsXG4gICAgICAgIHNpemUgOiBhdHRyLnNpemUsXG4gICAgICAgIHNlbWFudGljIDogYXR0ci5zZW1hbnRpYyxcbiAgICAgICAgdmFsdWUgOiBjb3B5SWZOZWNlc3NhcnkoYXR0ci52YWx1ZSwgc2hhbGxvdylcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjb3B5SWZOZWNlc3NhcnkoYXJyLCBzaGFsbG93KSB7XG4gICAgaWYgKCFzaGFsbG93KSB7XG4gICAgICAgIHJldHVybiBuZXcgYXJyLmNvbnN0cnVjdG9yKGFycik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zZmVyYWJsZVV0aWw7XG4iLCIvKipcbiAqIEBuYW1lIGNsYXkudmVyc2lvblxuICovXG5leHBvcnQgZGVmYXVsdCAnMS4wLjEnO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkudnIuZGlzb3J0ZXIub3V0cHV0LnZlcnRleFxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gICAgdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueHksIDAuNSwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxufVxcbkBlbmRcIjtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9ibG9iL21hc3Rlci9zcmMvY2FyZGJvYXJkLWRpc3RvcnRlci5qc1xuXG4vLyBVc2Ugd2VidnIgbWF5IGhhdmUgc2NhbGUgcHJvYmxlbS5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQwXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvc2VhcmNoP3E9U0NBTEUmdHlwZT1Jc3N1ZXMmdXRmOD0lRTIlOUMlOTNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQ3XG5cblxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcblxuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9vdXRwdXQuZ2xzbC5qcyc7XG5cblNoYWRlci5pbXBvcnQob3V0cHV0RXNzbCk7XG5cbmZ1bmN0aW9uIGxlcnAgKGEsIGIsIHQpIHtcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcbn1cblxudmFyIENhcmRib2FyZERpc3RvcnRlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLCAwLCAwLCAxXSxcblxuICAgICAgICBfbWVzaDogbmV3IE1lc2goe1xuICAgICAgICAgICAgZ2VvbWV0cnk6IG5ldyBHZW9tZXRyeSh7XG4gICAgICAgICAgICAgICAgZHluYW1pYzogdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjdWxsaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIG1hdGVyaWFsOiBuZXcgTWF0ZXJpYWwoe1xuICAgICAgICAgICAgICAgIC8vIEZJWE1FIFdoeSBkaXNhYmxlIGRlcHRoTWFzayB3aWxsIGJlIHdyb25nXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBkZXB0aFRlc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4JyksXG4gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LnZyLmRpc29ydGVyLm91dHB1dC5mcmFnbWVudCcpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pLFxuICAgICAgICBfZmFrZUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcbiAgICB9O1xufSwge1xuXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNvdXJjZVRleHR1cmUpIHtcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSB0aGlzLmNsZWFyQ29sb3I7XG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xuICAgICAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xuICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcblxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcblxuICAgICAgICB0aGlzLl9tZXNoLm1hdGVyaWFsLnNldCgndGV4dHVyZScsIHNvdXJjZVRleHR1cmUpO1xuXG4gICAgICAgIC8vIEZ1bGwgc2l6ZT9cbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHJlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpKTtcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpcy5fbWVzaF0sIHRoaXMuX2Zha2VDYW1lcmEpO1xuICAgICAgICByZW5kZXJlci5yZXN0b3JlVmlld3BvcnQoKTtcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5zaGFkZXIuYmluZChyZW5kZXJlcik7XG4gICAgICAgIC8vIHRoaXMuX21lc2gubWF0ZXJpYWwuYmluZChyZW5kZXJlcik7XG4gICAgICAgIC8vIHRoaXMuX21lc2gucmVuZGVyKHJlbmRlcmVyLmdsKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSkge1xuXG4gICAgICAgIC8vIEZJWE1FXG4gICAgICAgIGlmICh2ckRpc3BsYXkuZGV2aWNlSW5mb18pIHtcbiAgICAgICAgICAgIC8vIEhhcmRjb2RlZCBtZXNoIHNpemVcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU1lc2goMjAsIDIwLCB2ckRpc3BsYXkuZGV2aWNlSW5mb18pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW50IGdldCB2ckRpc3BsYXkuZGV2aWNlSW5mb18sIHNlZW1zIGNvZGUgY2hhbmdlZCcpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF91cGRhdGVNZXNoOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZGV2aWNlSW5mbykge1xuXG4gICAgICAgIHZhciBwb3NpdGlvbkF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICAgIHZhciBsZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVUYW5BbmdsZXMoKTtcbiAgICAgICAgdmFyIG5vTGVuc0ZydXN0dW0gPSBkZXZpY2VJbmZvLmdldExlZnRFeWVOb0xlbnNUYW5BbmdsZXMoKTtcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVNjcmVlblJlY3Qobm9MZW5zRnJ1c3R1bSk7XG4gICAgICAgIHZhciB2aWR4ID0gMDtcblxuICAgICAgICB2YXIgcG9zID0gW107XG4gICAgICAgIHZhciB1diA9IFtdO1xuXG4gICAgICAgIC8vIFZlcnRpY2VzXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aDsgaSsrLCB2aWR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBpIC8gKHdpZHRoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2ID0gaiAvIChoZWlnaHQgLSAxKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBHcmlkIHBvaW50cyByZWd1bGFybHkgc3BhY2VkIGluIFN0cmVvU2NyZWVuLCBhbmQgYmFycmVsIGRpc3RvcnRlZCBpblxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWVzaC5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB1O1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHY7XG4gICAgICAgICAgICAgICAgICAgIHZhciB4ID0gbGVycChsZW5zRnJ1c3R1bVswXSwgbGVuc0ZydXN0dW1bMl0sIHUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGxlcnAobGVuc0ZydXN0dW1bM10sIGxlbnNGcnVzdHVtWzFdLCB2KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gZGV2aWNlSW5mby5kaXN0b3J0aW9uLmRpc3RvcnRJbnZlcnNlKGQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHggKiByIC8gZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB5ICogciAvIGQ7XG4gICAgICAgICAgICAgICAgICAgIHUgPSAocCAtIG5vTGVuc0ZydXN0dW1bMF0pIC8gKG5vTGVuc0ZydXN0dW1bMl0gLSBub0xlbnNGcnVzdHVtWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgdiA9IChxIC0gbm9MZW5zRnJ1c3R1bVszXSkgLyAobm9MZW5zRnJ1c3R1bVsxXSAtIG5vTGVuc0ZydXN0dW1bM10pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdSx2IHRvIG1lc2ggc2NyZWVuIGNvb3JkaW5hdGVzLlxuICAgICAgICAgICAgICAgICAgICB2YXIgYXNwZWN0ID0gZGV2aWNlSW5mby5kZXZpY2Uud2lkdGhNZXRlcnMgLyBkZXZpY2VJbmZvLmRldmljZS5oZWlnaHRNZXRlcnM7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBvcmlnaW5hbCBVbml0eSBwbHVnaW4gbXVsdGlwbGllZCBVIGJ5IHRoZSBhc3BlY3QgcmF0aW9cbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRpZG4ndCBtdWx0aXBseSBlaXRoZXIgdmFsdWUgYnkgMiwgYnV0IHRoYXQgc2VlbXMgdG8gZ2V0IGl0XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWxseSBjbG9zZSB0byBjb3JyZWN0IGxvb2tpbmcgZm9yIG1lLiBJIGhhdGUgdGhpcyBraW5kIG9mIFwiRG9uJ3RcbiAgICAgICAgICAgICAgICAgICAgLy8ga25vdyB3aHkgaXQgd29ya3NcIiBjb2RlIHRob3VnaCwgYW5kIHdvbGQgbG92ZSBhIG1vcmUgbG9naWNhbFxuICAgICAgICAgICAgICAgICAgICAvLyBleHBsYW5hdGlvbiBvZiB3aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlLlxuICAgICAgICAgICAgICAgICAgICB1ID0gKHZpZXdwb3J0LnggKyB1ICogdmlld3BvcnQud2lkdGggLSAwLjUpICogMi4wOyAvLyogYXNwZWN0O1xuICAgICAgICAgICAgICAgICAgICB2ID0gKHZpZXdwb3J0LnkgKyB2ICogdmlld3BvcnQuaGVpZ2h0IC0gMC41KSAqIDIuMDtcblxuICAgICAgICAgICAgICAgICAgICBwb3NbMF0gPSB1O1xuICAgICAgICAgICAgICAgICAgICBwb3NbMV0gPSB2O1xuICAgICAgICAgICAgICAgICAgICBwb3NbMl0gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIHV2WzBdID0gcyAqIDAuNSArIGUgKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgIHV2WzFdID0gdDtcblxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkF0dHIuc2V0KHZpZHgsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIHRleGNvb3JkQXR0ci5zZXQodmlkeCwgdXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHcgPSBsZW5zRnJ1c3R1bVsyXSAtIGxlbnNGcnVzdHVtWzBdO1xuICAgICAgICAgICAgbGVuc0ZydXN0dW1bMF0gPSAtKHcgKyBsZW5zRnJ1c3R1bVswXSk7XG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVsyXSA9IHcgLSBsZW5zRnJ1c3R1bVsyXTtcbiAgICAgICAgICAgIHcgPSBub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXTtcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMF0gPSAtKHcgKyBub0xlbnNGcnVzdHVtWzBdKTtcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMl0gPSB3IC0gbm9MZW5zRnJ1c3R1bVsyXTtcbiAgICAgICAgICAgIHZpZXdwb3J0LnggPSAxIC0gKHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmRpY2VzXG4gICAgICAgIHZhciBpbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDIgKiAod2lkdGggLSAxKSAqIChoZWlnaHQgLSAxKSAqIDYpO1xuICAgICAgICB2YXIgaGFsZndpZHRoID0gd2lkdGggLyAyO1xuICAgICAgICB2YXIgaGFsZmhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgICAgIHZhciB2aWR4ID0gMDtcbiAgICAgICAgdmFyIGlpZHggPSAwO1xuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IDI7IGUrKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGogPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgcXVhZC4gIExvd2VyIHJpZ2h0IGFuZCB1cHBlciBsZWZ0IHF1YWRyYW50cyBoYXZlIHF1YWRzIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRyaWFuZ2xlIGRpYWdvbmFsIGZsaXBwZWQgdG8gZ2V0IHRoZSB2aWduZXR0ZSB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoaSA8PSBoYWxmd2lkdGgpID09IChqIDw9IGhhbGZoZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFkIGRpYWdvbmFsIGxvd2VyIGxlZnQgdG8gdXBwZXIgcmlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBRdWFkIGRpYWdvbmFsIHVwcGVyIGxlZnQgdG8gbG93ZXIgcmlnaHQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXNoLmdlb21ldHJ5LmluZGljZXMgPSBpbmRpY2VzO1xuXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuZGlydHkoKTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FyZGJvYXJkRGlzdG9ydGVyO1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vTm9kZSc7XG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xuXG52YXIgdG1wUHJvamVjdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cbnZhciBTdGVyZW9DYW1lcmEgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcblxuICAgICAgICBhc3BlY3Q6IDAuNSxcblxuICAgICAgICBfbGVmdENhbWVyYTogbmV3IENhbWVyYSgpLFxuXG4gICAgICAgIF9yaWdodENhbWVyYTogbmV3IENhbWVyYSgpLFxuXG4gICAgICAgIF9leWVMZWZ0OiBuZXcgTWF0cml4NCgpLFxuICAgICAgICBfZXllUmlnaHQ6IG5ldyBNYXRyaXg0KCksXG5cbiAgICAgICAgX2ZyYW1lRGF0YTogbnVsbFxuICAgIH07XG59LCB7XG5cbiAgICB1cGRhdGVGcm9tQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhLCBmb2N1cywgem9vbSwgZXllU2VwKSB7XG4gICAgICAgIGlmIChjYW1lcmEudHJhbnNmb3JtTmVlZHNVcGRhdGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXMgPSBmb2N1cyA9PSBudWxsID8gMTAgOiBmb2N1cztcbiAgICAgICAgem9vbSA9IHpvb20gPT0gbnVsbCA/IDEgOiB6b29tO1xuICAgICAgICBleWVTZXAgPSBleWVTZXAgPT0gbnVsbCA/IDAuMDY0IDogZXllU2VwO1xuXG4gICAgICAgIHZhciBmb3YgPSBjYW1lcmEuZm92O1xuICAgICAgICB2YXIgYXNwZWN0ID0gY2FtZXJhLmFzcGVjdCAqIHRoaXMuYXNwZWN0O1xuICAgICAgICB2YXIgbmVhciA9IGNhbWVyYS5uZWFyO1xuXG4gICAgICAgIC8vIE9mZi1heGlzIHN0ZXJlb3Njb3BpYyBlZmZlY3QgYmFzZWQgb25cbiAgICAgICAgLy8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cblxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgICB2YXIgZXllU2VwID0gZXllU2VwIC8gMjtcbiAgICAgICAgdmFyIGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcCAqIG5lYXIgLyBmb2N1cztcbiAgICAgICAgdmFyIHltYXggPSAobmVhciAqIE1hdGgudGFuKE1hdGguUEkgLyAxODAgKiBmb3YgKiAwLjUgKSApIC8gem9vbTtcbiAgICAgICAgdmFyIHhtaW4sIHhtYXg7XG5cbiAgICAgICAgLy8gdHJhbnNsYXRlIHhPZmZzZXRcbiAgICAgICAgdGhpcy5fZXllTGVmdC5hcnJheVsxMl0gPSAtIGV5ZVNlcDtcbiAgICAgICAgdGhpcy5fZXllUmlnaHQuYXJyYXlbMTJdID0gZXllU2VwO1xuXG4gICAgICAgIC8vIGZvciBsZWZ0IGV5ZVxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xuICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCArIGV5ZVNlcE9uUHJvamVjdGlvbjtcblxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzhdID0gKHhtYXggKyB4bWluICkgLyAoeG1heCAtIHhtaW4pO1xuXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRtcFByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICAgIC8vIGZvciByaWdodCBleWVcbiAgICAgICAgeG1pbiA9IC0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcbiAgICAgICAgeG1heCA9IHltYXggKiBhc3BlY3QgLSBleWVTZXBPblByb2plY3Rpb247XG5cbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVswXSA9IDIgKiBuZWFyIC8gKHhtYXggLSB4bWluKTtcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVs4XSA9ICh4bWF4ICsgeG1pbiApIC8gKHhtYXggLSB4bWluKTtcblxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XG5cbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybVxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxuICAgICAgICAgICAgLm11bHRpcGx5KHRoaXMuX2V5ZUxlZnQpO1xuXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtXG4gICAgICAgICAgICAuY29weShjYW1lcmEud29ybGRUcmFuc2Zvcm0pXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllUmlnaHQpO1xuXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XG5cbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVGcm9tVlJEaXNwbGF5OiBmdW5jdGlvbiAodnJEaXNwbGF5LCBwYXJlbnROb2RlKSB7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBWUkZyYW1lRGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmcmFtZURhdGEgPSB0aGlzLl9mcmFtZURhdGEgfHwgKHRoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1lRGF0YSgpKTtcbiAgICAgICAgdnJEaXNwbGF5LmdldEZyYW1lRGF0YShmcmFtZURhdGEpO1xuICAgICAgICB2YXIgbGVmdENhbWVyYSA9IHRoaXMuX2xlZnRDYW1lcmE7XG4gICAgICAgIHZhciByaWdodENhbWVyYSA9IHRoaXMuX3JpZ2h0Q2FtZXJhO1xuXG4gICAgICAgIGxlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5zZXRBcnJheShmcmFtZURhdGEubGVmdFByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgbGVmdENhbWVyYS52aWV3TWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0Vmlld01hdHJpeCk7XG4gICAgICAgIGxlZnRDYW1lcmEuc2V0Vmlld01hdHJpeChsZWZ0Q2FtZXJhLnZpZXdNYXRyaXgpO1xuXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0UHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIHJpZ2h0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgcmlnaHRDYW1lcmEudmlld01hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRWaWV3TWF0cml4KTtcbiAgICAgICAgcmlnaHRDYW1lcmEuc2V0Vmlld01hdHJpeChyaWdodENhbWVyYS52aWV3TWF0cml4KTtcblxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XG4gICAgICAgICAgICByaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XG4gICAgICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldExlZnRDYW1lcmE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDYW1lcmE7XG4gICAgfSxcblxuICAgIGdldFJpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yaWdodENhbWVyYTtcbiAgICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU3RlcmVvQ2FtZXJhO1xuIiwiLyoqIEBuYW1lc3BhY2UgY2xheSAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5tYXRoICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LmFuaW1hdGlvbiAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5hc3luYyAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5jYW1lcmEgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkuY29tcG9zaXRvciAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5jb3JlICovXG4vKiogQG5hbWVzcGFjZSBjbGF5Lmdlb21ldHJ5ICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LmhlbHBlciAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5saWdodCAqL1xuLyoqIEBuYW1lc3BhY2UgY2xheS5sb2FkZXIgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkucGFydGljbGVTeXN0ZW0gKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkucGx1Z2luICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LnByZVBhc3MgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkuc2hhZGVyICovXG4vKiogQG5hbWVzcGFjZSBjbGF5LnRleHR1cmUgKi9cbi8qKiBAbmFtZXNwYWNlIGNsYXkudXRpbCAqL1xuXG5pbXBvcnQgQW5pbWF0b3IkMCBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XG5pbXBvcnQgQmxlbmQxRENsaXAkMSBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDFEQ2xpcCc7XG5pbXBvcnQgQmxlbmQyRENsaXAkMiBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcCc7XG5pbXBvcnQgQ2xpcCQzIGZyb20gJy4vYW5pbWF0aW9uL0NsaXAnO1xuaW1wb3J0IGVhc2luZyQ0IGZyb20gJy4vYW5pbWF0aW9uL2Vhc2luZyc7XG5pbXBvcnQgU2FtcGxlclRyYWNrJDUgZnJvbSAnLi9hbmltYXRpb24vU2FtcGxlclRyYWNrJztcbmltcG9ydCBUaW1lbGluZSQ2IGZyb20gJy4vYW5pbWF0aW9uL1RpbWVsaW5lJztcbmltcG9ydCBUcmFja0NsaXAkNyBmcm9tICcuL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xuaW1wb3J0IFRyYW5zZm9ybVRyYWNrJDggZnJvbSAnLi9hbmltYXRpb24vVHJhbnNmb3JtVHJhY2snO1xuaW1wb3J0IGFwcGxpY2F0aW9uJDkgZnJvbSAnLi9hcHBsaWNhdGlvbic7XG5pbXBvcnQgVGFzayQxMCBmcm9tICcuL2FzeW5jL1Rhc2snO1xuaW1wb3J0IFRhc2tHcm91cCQxMSBmcm9tICcuL2FzeW5jL1Rhc2tHcm91cCc7XG5pbXBvcnQgQ2FtZXJhJDEyIGZyb20gJy4vQ2FtZXJhJztcbmltcG9ydCBPcnRob2dyYXBoaWMkMTMgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcbmltcG9ydCBQZXJzcGVjdGl2ZSQxNCBmcm9tICcuL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XG5pbXBvcnQgTWF0ZXJpYWwkMTUgZnJvbSAnLi9jYW52YXMvTWF0ZXJpYWwnO1xuaW1wb3J0IFJlbmRlcmVyJDE2IGZyb20gJy4vY2FudmFzL1JlbmRlcmVyJztcbmltcG9ydCBDb21wb3NpdG9yJDE3IGZyb20gJy4vY29tcG9zaXRvci9Db21wb3NpdG9yJztcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yJDE4IGZyb20gJy4vY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yJztcbmltcG9ydCBGaWx0ZXJOb2RlJDE5IGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcbmltcG9ydCBHcmFwaCQyMCBmcm9tICcuL2NvbXBvc2l0b3IvR3JhcGgnO1xuaW1wb3J0IE5vZGUkMjEgZnJvbSAnLi9jb21wb3NpdG9yL05vZGUnO1xuaW1wb3J0IFBhc3MkMjIgZnJvbSAnLi9jb21wb3NpdG9yL1Bhc3MnO1xuaW1wb3J0IFNjZW5lTm9kZSQyMyBmcm9tICcuL2NvbXBvc2l0b3IvU2NlbmVOb2RlJztcbmltcG9ydCBUZXh0dXJlTm9kZSQyNCBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xuaW1wb3J0IFRleHR1cmVQb29sJDI1IGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlUG9vbCc7XG5pbXBvcnQgQmFzZSQyNiBmcm9tICcuL2NvcmUvQmFzZSc7XG5pbXBvcnQgQ2FjaGUkMjcgZnJvbSAnLi9jb3JlL0NhY2hlJztcbmltcG9ydCBjb2xvciQyOCBmcm9tICcuL2NvcmUvY29sb3InO1xuaW1wb3J0IGdsZW51bSQyOSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcbmltcG9ydCBHTEluZm8kMzAgZnJvbSAnLi9jb3JlL0dMSW5mbyc7XG5pbXBvcnQgTGlua2VkTGlzdCQzMSBmcm9tICcuL2NvcmUvTGlua2VkTGlzdCc7XG5pbXBvcnQgTFJVJDMyIGZyb20gJy4vY29yZS9MUlUnO1xuaW1wb3J0IGV4dGVuZCQzMyBmcm9tICcuL2NvcmUvbWl4aW4vZXh0ZW5kJztcbmltcG9ydCBub3RpZmllciQzNCBmcm9tICcuL2NvcmUvbWl4aW4vbm90aWZpZXInO1xuaW1wb3J0IHJlcXVlc3QkMzUgZnJvbSAnLi9jb3JlL3JlcXVlc3QnO1xuaW1wb3J0IHV0aWwkMzYgZnJvbSAnLi9jb3JlL3V0aWwnO1xuaW1wb3J0IHZlbmRvciQzNyBmcm9tICcuL2NvcmUvdmVuZG9yJztcbmltcG9ydCBHQnVmZmVyJDM4IGZyb20gJy4vZGVmZXJyZWQvR0J1ZmZlcic7XG5pbXBvcnQgUmVuZGVyZXIkMzkgZnJvbSAnLi9kZWZlcnJlZC9SZW5kZXJlcic7XG5pbXBvcnQgZ2xtYXRyaXgkNDAgZnJvbSAnLi9kZXAvZ2xtYXRyaXgnO1xuaW1wb3J0IEZyYW1lQnVmZmVyJDQxIGZyb20gJy4vRnJhbWVCdWZmZXInO1xuaW1wb3J0IEdlb21ldHJ5JDQyIGZyb20gJy4vR2VvbWV0cnknO1xuaW1wb3J0IENvbmUkNDMgZnJvbSAnLi9nZW9tZXRyeS9Db25lJztcbmltcG9ydCBDdWJlJDQ0IGZyb20gJy4vZ2VvbWV0cnkvQ3ViZSc7XG5pbXBvcnQgQ3lsaW5kZXIkNDUgZnJvbSAnLi9nZW9tZXRyeS9DeWxpbmRlcic7XG5pbXBvcnQgUGFyYW1ldHJpY1N1cmZhY2UkNDYgZnJvbSAnLi9nZW9tZXRyeS9QYXJhbWV0cmljU3VyZmFjZSc7XG5pbXBvcnQgUGxhbmUkNDcgZnJvbSAnLi9nZW9tZXRyeS9QbGFuZSc7XG5pbXBvcnQgU3BoZXJlJDQ4IGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcbmltcG9ydCBHTFByb2dyYW0kNDkgZnJvbSAnLi9ncHUvR0xQcm9ncmFtJztcbmltcG9ydCBQcm9ncmFtTWFuYWdlciQ1MCBmcm9tICcuL2dwdS9Qcm9ncmFtTWFuYWdlcic7XG5pbXBvcnQgSm9pbnQkNTEgZnJvbSAnLi9Kb2ludCc7XG5pbXBvcnQgTGlnaHQkNTIgZnJvbSAnLi9MaWdodCc7XG5pbXBvcnQgQW1iaWVudCQ1MyBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xuaW1wb3J0IEFtYmllbnRDdWJlbWFwJDU0IGZyb20gJy4vbGlnaHQvQW1iaWVudEN1YmVtYXAnO1xuaW1wb3J0IEFtYmllbnRTSCQ1NSBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XG5pbXBvcnQgRGlyZWN0aW9uYWwkNTYgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XG5pbXBvcnQgUG9pbnQkNTcgZnJvbSAnLi9saWdodC9Qb2ludCc7XG5pbXBvcnQgU3BoZXJlJDU4IGZyb20gJy4vbGlnaHQvU3BoZXJlJztcbmltcG9ydCBTcG90JDU5IGZyb20gJy4vbGlnaHQvU3BvdCc7XG5pbXBvcnQgVHViZSQ2MCBmcm9tICcuL2xpZ2h0L1R1YmUnO1xuaW1wb3J0IEZYJDYxIGZyb20gJy4vbG9hZGVyL0ZYJztcbmltcG9ydCBHTFRGJDYyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xuaW1wb3J0IE1hdGVyaWFsJDYzIGZyb20gJy4vTWF0ZXJpYWwnO1xuaW1wb3J0IEJvdW5kaW5nQm94JDY0IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XG5pbXBvcnQgRnJ1c3R1bSQ2NSBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XG5pbXBvcnQgTWF0cml4MiQ2NiBmcm9tICcuL21hdGgvTWF0cml4Mic7XG5pbXBvcnQgTWF0cml4MmQkNjcgZnJvbSAnLi9tYXRoL01hdHJpeDJkJztcbmltcG9ydCBNYXRyaXgzJDY4IGZyb20gJy4vbWF0aC9NYXRyaXgzJztcbmltcG9ydCBNYXRyaXg0JDY5IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcbmltcG9ydCBQbGFuZSQ3MCBmcm9tICcuL21hdGgvUGxhbmUnO1xuaW1wb3J0IFF1YXRlcm5pb24kNzEgZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xuaW1wb3J0IFJheSQ3MiBmcm9tICcuL21hdGgvUmF5JztcbmltcG9ydCB1dGlsJDczIGZyb20gJy4vbWF0aC91dGlsJztcbmltcG9ydCBWYWx1ZSQ3NCBmcm9tICcuL21hdGgvVmFsdWUnO1xuaW1wb3J0IFZlY3RvcjIkNzUgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xuaW1wb3J0IFZlY3RvcjMkNzYgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xuaW1wb3J0IFZlY3RvcjQkNzcgZnJvbSAnLi9tYXRoL1ZlY3RvcjQnO1xuaW1wb3J0IE1lc2gkNzggZnJvbSAnLi9NZXNoJztcbmltcG9ydCBOb2RlJDc5IGZyb20gJy4vTm9kZSc7XG5pbXBvcnQgRW1pdHRlciQ4MCBmcm9tICcuL3BhcnRpY2xlL0VtaXR0ZXInO1xuaW1wb3J0IEZpZWxkJDgxIGZyb20gJy4vcGFydGljbGUvRmllbGQnO1xuaW1wb3J0IEZvcmNlRmllbGQkODIgZnJvbSAnLi9wYXJ0aWNsZS9Gb3JjZUZpZWxkJztcbmltcG9ydCBQYXJ0aWNsZSQ4MyBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlJztcbmltcG9ydCBQYXJ0aWNsZVJlbmRlcmFibGUkODQgZnJvbSAnLi9wYXJ0aWNsZS9QYXJ0aWNsZVJlbmRlcmFibGUnO1xuaW1wb3J0IFBpeGVsUGlja2luZyQ4NSBmcm9tICcuL3BpY2tpbmcvUGl4ZWxQaWNraW5nJztcbmltcG9ydCBSYXlQaWNraW5nJDg2IGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcbmltcG9ydCBGcmVlQ29udHJvbCQ4NyBmcm9tICcuL3BsdWdpbi9GcmVlQ29udHJvbCc7XG5pbXBvcnQgR2VzdHVyZU1nciQ4OCBmcm9tICcuL3BsdWdpbi9HZXN0dXJlTWdyJztcbmltcG9ydCBJbmZpbml0ZVBsYW5lJDg5IGZyb20gJy4vcGx1Z2luL0luZmluaXRlUGxhbmUnO1xuaW1wb3J0IE9yYml0Q29udHJvbCQ5MCBmcm9tICcuL3BsdWdpbi9PcmJpdENvbnRyb2wnO1xuaW1wb3J0IFNreWJveCQ5MSBmcm9tICcuL3BsdWdpbi9Ta3lib3gnO1xuaW1wb3J0IFNreWRvbWUkOTIgZnJvbSAnLi9wbHVnaW4vU2t5ZG9tZSc7XG5pbXBvcnQgRW52aXJvbm1lbnRNYXAkOTMgZnJvbSAnLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcbmltcG9ydCBTaGFkb3dNYXAkOTQgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XG5pbXBvcnQgUmVuZGVyYWJsZSQ5NSBmcm9tICcuL1JlbmRlcmFibGUnO1xuaW1wb3J0IFJlbmRlcmVyJDk2IGZyb20gJy4vUmVuZGVyZXInO1xuaW1wb3J0IFNjZW5lJDk3IGZyb20gJy4vU2NlbmUnO1xuaW1wb3J0IFNoYWRlciQ5OCBmcm9tICcuL1NoYWRlcic7XG5pbXBvcnQgbGlicmFyeSQ5OSBmcm9tICcuL3NoYWRlci9saWJyYXJ5JztcbmltcG9ydCBsaWdodCQxMDAgZnJvbSAnLi9zaGFkZXIvc291cmNlL2hlYWRlci9saWdodCc7XG5pbXBvcnQgU2tlbGV0b24kMTAxIGZyb20gJy4vU2tlbGV0b24nO1xuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwkMTAyIGZyb20gJy4vU3RhbmRhcmRNYXRlcmlhbCc7XG5pbXBvcnQgU3RhdGljR2VvbWV0cnkkMTAzIGZyb20gJy4vU3RhdGljR2VvbWV0cnknO1xuaW1wb3J0IFRleHR1cmUkMTA0IGZyb20gJy4vVGV4dHVyZSc7XG5pbXBvcnQgVGV4dHVyZTJEJDEwNSBmcm9tICcuL1RleHR1cmUyRCc7XG5pbXBvcnQgVGV4dHVyZUN1YmUkMTA2IGZyb20gJy4vVGV4dHVyZUN1YmUnO1xuaW1wb3J0IGN1YmVtYXAkMTA3IGZyb20gJy4vdXRpbC9jdWJlbWFwJztcbmltcG9ydCBkZHMkMTA4IGZyb20gJy4vdXRpbC9kZHMnO1xuaW1wb3J0IGRlbGF1bmF5JDEwOSBmcm9tICcuL3V0aWwvZGVsYXVuYXknO1xuaW1wb3J0IGhkciQxMTAgZnJvbSAnLi91dGlsL2hkcic7XG5pbXBvcnQgbWVzaCQxMTEgZnJvbSAnLi91dGlsL21lc2gnO1xuaW1wb3J0IHNoJDExMiBmcm9tICcuL3V0aWwvc2gnO1xuaW1wb3J0IHRleHR1cmUkMTEzIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcbmltcG9ydCB0cmFuc2ZlcmFibGUkMTE0IGZyb20gJy4vdXRpbC90cmFuc2ZlcmFibGUnO1xuaW1wb3J0IHZlcnNpb24kMTE1IGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQgQ2FyZGJvYXJkRGlzdG9ydGVyJDExNiBmcm9tICcuL3ZyL0NhcmRib2FyZERpc3RvcnRlcic7XG5pbXBvcnQgU3RlcmVvQ2FtZXJhJDExNyBmcm9tICcuL3ZyL1N0ZXJlb0NhbWVyYSc7XG5cblxudmFyIGFuaW1hdGlvbiA9IHtcbiAgICBBbmltYXRvciA6IEFuaW1hdG9yJDAsXG4gICAgQmxlbmQxRENsaXAgOiBCbGVuZDFEQ2xpcCQxLFxuICAgIEJsZW5kMkRDbGlwIDogQmxlbmQyRENsaXAkMixcbiAgICBDbGlwIDogQ2xpcCQzLFxuICAgIGVhc2luZyA6IGVhc2luZyQ0LFxuICAgIFNhbXBsZXJUcmFjayA6IFNhbXBsZXJUcmFjayQ1LFxuICAgIFRpbWVsaW5lIDogVGltZWxpbmUkNixcbiAgICBUcmFja0NsaXAgOiBUcmFja0NsaXAkNyxcbiAgICBUcmFuc2Zvcm1UcmFjayA6IFRyYW5zZm9ybVRyYWNrJDhcbn07XG5leHBvcnQgeyBhbmltYXRpb24gfTtcblxuZXhwb3J0IHsgYXBwbGljYXRpb24kOSBhcyBhcHBsaWNhdGlvbiB9O1xuXG52YXIgYXN5bmMgPSB7XG4gICAgVGFzayA6IFRhc2skMTAsXG4gICAgVGFza0dyb3VwIDogVGFza0dyb3VwJDExXG59O1xuZXhwb3J0IHsgYXN5bmMgfTtcblxuZXhwb3J0IHsgQ2FtZXJhJDEyIGFzIENhbWVyYSB9O1xuXG52YXIgY2FtZXJhID0ge1xuICAgIE9ydGhvZ3JhcGhpYyA6IE9ydGhvZ3JhcGhpYyQxMyxcbiAgICBQZXJzcGVjdGl2ZSA6IFBlcnNwZWN0aXZlJDE0XG59O1xuZXhwb3J0IHsgY2FtZXJhIH07XG5cblxudmFyIGNhbnZhcyA9IHtcbiAgICBNYXRlcmlhbCA6IE1hdGVyaWFsJDE1LFxuICAgIFJlbmRlcmVyIDogUmVuZGVyZXIkMTZcbn07XG5leHBvcnQgeyBjYW52YXMgfTtcblxuXG52YXIgY29tcG9zaXRvciA9IHtcbiAgICBDb21wb3NpdG9yIDogQ29tcG9zaXRvciQxNyxcbiAgICBjcmVhdGVDb21wb3NpdG9yIDogY3JlYXRlQ29tcG9zaXRvciQxOCxcbiAgICBGaWx0ZXJOb2RlIDogRmlsdGVyTm9kZSQxOSxcbiAgICBHcmFwaCA6IEdyYXBoJDIwLFxuICAgIE5vZGUgOiBOb2RlJDIxLFxuICAgIFBhc3MgOiBQYXNzJDIyLFxuICAgIFNjZW5lTm9kZSA6IFNjZW5lTm9kZSQyMyxcbiAgICBUZXh0dXJlTm9kZSA6IFRleHR1cmVOb2RlJDI0LFxuICAgIFRleHR1cmVQb29sIDogVGV4dHVyZVBvb2wkMjVcbn07XG5leHBvcnQgeyBjb21wb3NpdG9yIH07XG5cblxudmFyIGNvcmUgPSB7XG4gICAgQmFzZSA6IEJhc2UkMjYsXG4gICAgQ2FjaGUgOiBDYWNoZSQyNyxcbiAgICBjb2xvciA6IGNvbG9yJDI4LFxuICAgIGdsZW51bSA6IGdsZW51bSQyOSxcbiAgICBHTEluZm8gOiBHTEluZm8kMzAsXG4gICAgTGlua2VkTGlzdCA6IExpbmtlZExpc3QkMzEsXG4gICAgTFJVIDogTFJVJDMyLFxuICAgIG1peGluIDoge1xuICAgICAgICBleHRlbmQgOiBleHRlbmQkMzMsXG4gICAgICAgIG5vdGlmaWVyIDogbm90aWZpZXIkMzRcbiAgICB9LFxuICAgIHJlcXVlc3QgOiByZXF1ZXN0JDM1LFxuICAgIHV0aWwgOiB1dGlsJDM2LFxuICAgIHZlbmRvciA6IHZlbmRvciQzN1xufTtcbmV4cG9ydCB7IGNvcmUgfTtcblxuXG52YXIgZGVmZXJyZWQgPSB7XG4gICAgR0J1ZmZlciA6IEdCdWZmZXIkMzgsXG4gICAgUmVuZGVyZXIgOiBSZW5kZXJlciQzOVxufTtcbmV4cG9ydCB7IGRlZmVycmVkIH07XG5cblxudmFyIGRlcCA9IHtcbiAgICBnbG1hdHJpeCA6IGdsbWF0cml4JDQwXG59O1xuZXhwb3J0IHsgZGVwIH07XG5cbmV4cG9ydCB7IEZyYW1lQnVmZmVyJDQxIGFzIEZyYW1lQnVmZmVyIH07XG5leHBvcnQgeyBHZW9tZXRyeSQ0MiBhcyBHZW9tZXRyeSB9O1xuXG52YXIgZ2VvbWV0cnkgPSB7XG4gICAgQ29uZSA6IENvbmUkNDMsXG4gICAgQ3ViZSA6IEN1YmUkNDQsXG4gICAgQ3lsaW5kZXIgOiBDeWxpbmRlciQ0NSxcbiAgICBQYXJhbWV0cmljU3VyZmFjZSA6IFBhcmFtZXRyaWNTdXJmYWNlJDQ2LFxuICAgIFBsYW5lIDogUGxhbmUkNDcsXG4gICAgU3BoZXJlIDogU3BoZXJlJDQ4XG59O1xuZXhwb3J0IHsgZ2VvbWV0cnkgfTtcblxuXG52YXIgZ3B1ID0ge1xuICAgIEdMUHJvZ3JhbSA6IEdMUHJvZ3JhbSQ0OSxcbiAgICBQcm9ncmFtTWFuYWdlciA6IFByb2dyYW1NYW5hZ2VyJDUwXG59O1xuZXhwb3J0IHsgZ3B1IH07XG5cbmV4cG9ydCB7IEpvaW50JDUxIGFzIEpvaW50IH07XG5leHBvcnQgeyBMaWdodCQ1MiBhcyBMaWdodCB9O1xuXG52YXIgbGlnaHQgPSB7XG4gICAgQW1iaWVudCA6IEFtYmllbnQkNTMsXG4gICAgQW1iaWVudEN1YmVtYXAgOiBBbWJpZW50Q3ViZW1hcCQ1NCxcbiAgICBBbWJpZW50U0ggOiBBbWJpZW50U0gkNTUsXG4gICAgRGlyZWN0aW9uYWwgOiBEaXJlY3Rpb25hbCQ1NixcbiAgICBQb2ludCA6IFBvaW50JDU3LFxuICAgIFNwaGVyZSA6IFNwaGVyZSQ1OCxcbiAgICBTcG90IDogU3BvdCQ1OSxcbiAgICBUdWJlIDogVHViZSQ2MFxufTtcbmV4cG9ydCB7IGxpZ2h0IH07XG5cblxudmFyIGxvYWRlciA9IHtcbiAgICBGWCA6IEZYJDYxLFxuICAgIEdMVEYgOiBHTFRGJDYyXG59O1xuZXhwb3J0IHsgbG9hZGVyIH07XG5cbmV4cG9ydCB7IE1hdGVyaWFsJDYzIGFzIE1hdGVyaWFsIH07XG5cbnZhciBtYXRoID0ge1xuICAgIEJvdW5kaW5nQm94IDogQm91bmRpbmdCb3gkNjQsXG4gICAgRnJ1c3R1bSA6IEZydXN0dW0kNjUsXG4gICAgTWF0cml4MiA6IE1hdHJpeDIkNjYsXG4gICAgTWF0cml4MmQgOiBNYXRyaXgyZCQ2NyxcbiAgICBNYXRyaXgzIDogTWF0cml4MyQ2OCxcbiAgICBNYXRyaXg0IDogTWF0cml4NCQ2OSxcbiAgICBQbGFuZSA6IFBsYW5lJDcwLFxuICAgIFF1YXRlcm5pb24gOiBRdWF0ZXJuaW9uJDcxLFxuICAgIFJheSA6IFJheSQ3MixcbiAgICB1dGlsIDogdXRpbCQ3MyxcbiAgICBWYWx1ZSA6IFZhbHVlJDc0LFxuICAgIFZlY3RvcjIgOiBWZWN0b3IyJDc1LFxuICAgIFZlY3RvcjMgOiBWZWN0b3IzJDc2LFxuICAgIFZlY3RvcjQgOiBWZWN0b3I0JDc3XG59O1xuZXhwb3J0IHsgbWF0aCB9O1xuXG5leHBvcnQgeyBNZXNoJDc4IGFzIE1lc2ggfTtcbmV4cG9ydCB7IE5vZGUkNzkgYXMgTm9kZSB9O1xuXG52YXIgcGFydGljbGUgPSB7XG4gICAgRW1pdHRlciA6IEVtaXR0ZXIkODAsXG4gICAgRmllbGQgOiBGaWVsZCQ4MSxcbiAgICBGb3JjZUZpZWxkIDogRm9yY2VGaWVsZCQ4MixcbiAgICBQYXJ0aWNsZSA6IFBhcnRpY2xlJDgzLFxuICAgIFBhcnRpY2xlUmVuZGVyYWJsZSA6IFBhcnRpY2xlUmVuZGVyYWJsZSQ4NFxufTtcbmV4cG9ydCB7IHBhcnRpY2xlIH07XG5cblxudmFyIHBpY2tpbmcgPSB7XG4gICAgUGl4ZWxQaWNraW5nIDogUGl4ZWxQaWNraW5nJDg1LFxuICAgIFJheVBpY2tpbmcgOiBSYXlQaWNraW5nJDg2XG59O1xuZXhwb3J0IHsgcGlja2luZyB9O1xuXG5cbnZhciBwbHVnaW4gPSB7XG4gICAgRnJlZUNvbnRyb2wgOiBGcmVlQ29udHJvbCQ4NyxcbiAgICBHZXN0dXJlTWdyIDogR2VzdHVyZU1nciQ4OCxcbiAgICBJbmZpbml0ZVBsYW5lIDogSW5maW5pdGVQbGFuZSQ4OSxcbiAgICBPcmJpdENvbnRyb2wgOiBPcmJpdENvbnRyb2wkOTAsXG4gICAgU2t5Ym94IDogU2t5Ym94JDkxLFxuICAgIFNreWRvbWUgOiBTa3lkb21lJDkyXG59O1xuZXhwb3J0IHsgcGx1Z2luIH07XG5cblxudmFyIHByZVBhc3MgPSB7XG4gICAgRW52aXJvbm1lbnRNYXAgOiBFbnZpcm9ubWVudE1hcCQ5MyxcbiAgICBTaGFkb3dNYXAgOiBTaGFkb3dNYXAkOTRcbn07XG5leHBvcnQgeyBwcmVQYXNzIH07XG5cbmV4cG9ydCB7IFJlbmRlcmFibGUkOTUgYXMgUmVuZGVyYWJsZSB9O1xuZXhwb3J0IHsgUmVuZGVyZXIkOTYgYXMgUmVuZGVyZXIgfTtcbmV4cG9ydCB7IFNjZW5lJDk3IGFzIFNjZW5lIH07XG5leHBvcnQgeyBTaGFkZXIkOTggYXMgU2hhZGVyIH07XG5cbnZhciBzaGFkZXIgPSB7XG4gICAgbGlicmFyeSA6IGxpYnJhcnkkOTksXG4gICAgc291cmNlIDoge1xuICAgIGhlYWRlciA6IHtcbiAgICAgICAgbGlnaHQgOiBsaWdodCQxMDBcbiAgICB9XG4gICAgfVxufTtcbmV4cG9ydCB7IHNoYWRlciB9O1xuXG5leHBvcnQgeyBTa2VsZXRvbiQxMDEgYXMgU2tlbGV0b24gfTtcbmV4cG9ydCB7IFN0YW5kYXJkTWF0ZXJpYWwkMTAyIGFzIFN0YW5kYXJkTWF0ZXJpYWwgfTtcbmV4cG9ydCB7IFN0YXRpY0dlb21ldHJ5JDEwMyBhcyBTdGF0aWNHZW9tZXRyeSB9O1xuZXhwb3J0IHsgVGV4dHVyZSQxMDQgYXMgVGV4dHVyZSB9O1xuZXhwb3J0IHsgVGV4dHVyZTJEJDEwNSBhcyBUZXh0dXJlMkQgfTtcbmV4cG9ydCB7IFRleHR1cmVDdWJlJDEwNiBhcyBUZXh0dXJlQ3ViZSB9O1xuXG52YXIgdXRpbCA9IHtcbiAgICBjdWJlbWFwIDogY3ViZW1hcCQxMDcsXG4gICAgZGRzIDogZGRzJDEwOCxcbiAgICBkZWxhdW5heSA6IGRlbGF1bmF5JDEwOSxcbiAgICBoZHIgOiBoZHIkMTEwLFxuICAgIG1lc2ggOiBtZXNoJDExMSxcbiAgICBzaCA6IHNoJDExMixcbiAgICB0ZXh0dXJlIDogdGV4dHVyZSQxMTMsXG4gICAgdHJhbnNmZXJhYmxlIDogdHJhbnNmZXJhYmxlJDExNFxufTtcbmV4cG9ydCB7IHV0aWwgfTtcblxuZXhwb3J0IHsgdmVyc2lvbiQxMTUgYXMgdmVyc2lvbiB9O1xuXG52YXIgdnIgPSB7XG4gICAgQ2FyZGJvYXJkRGlzdG9ydGVyIDogQ2FyZGJvYXJkRGlzdG9ydGVyJDExNixcbiAgICBTdGVyZW9DYW1lcmEgOiBTdGVyZW9DYW1lcmEkMTE3XG59O1xuZXhwb3J0IHsgdnIgfTtcbjtcbiJdLCJuYW1lcyI6WyJlYXNpbmciLCJFYXNpbmciLCJlYXNpbmdGdW5jcyIsInRoaXMiLCJnbE1hdHJpeCIsInF1YXQiLCJ2ZWMzIiwidXRpbCIsIm5vdGlmaWVyTWl4aW4iLCJjYW52YXMiLCJwcm90byIsIm1hdDQiLCJkZWZpbmVQcm9wZXJ0eSIsIkxSVSIsInBhcnNlQ29sb3IiLCJnZXREZWZpbmVDb2RlIiwibWF0MyIsImxpZ2h0U2hhZGVyIiwicHJlekVzc2wiLCJub29wIiwidmVjNCIsIlBsYW5lIiwidmVjM1NldCIsInZlYzNDb3B5IiwiRVBTSUxPTiIsInByb2dyYW1LZXlDYWNoZSIsImdldFByb2dyYW1LZXkiLCJDdWJlIiwiU3BoZXJlIiwiUGFyYW1ldHJpY1N1cmZhY2UiLCJpc1Bvd2VyT2ZUd28iLCJQZXJzcGVjdGl2ZSIsIk9ydGhvZ3JhcGhpYyIsInV0aWxFc3NsIiwic2hhZGVyTGlicmFyeSIsIlBlcnNwZWN0aXZlQ2FtZXJhIiwiT3J0aG9ncmFwaGljQ2FtZXJhIiwiY2FtZXJhIiwiT3J0aG9DYW1lcmEiLCJDdWJlR2VvbWV0cnkiLCJ0YXJnZXRzIiwiU3BoZXJlR2VvbWV0cnkiLCJyZXQiLCJoZHIiLCJkZHMiLCJ2ZWMyIiwiQ29uZSIsIkN5bGluZGVyIiwiQ29uZUdlb21ldHJ5IiwiQ29uZUdlbyIsIkN5bGluZGVyR2VvIiwiRnVsbFF1YWRQYXNzIiwiU3BoZXJlR2VvIiwiTFJVQ2FjaGUiLCJDdWJlR2VvIiwiUGxhbmVHZW8iLCJQYXJhbWV0cmljU3VyZmFjZUdlbyIsInNoVXRpbCIsIk5vZGUiLCJHcmFwaE5vZGUiLCJTY2VuZU5vZGUiLCJUZXh0dXJlTm9kZSIsIkZpbHRlck5vZGUiLCJDb21wb1NjZW5lTm9kZSIsIkNvbXBvVGV4dHVyZU5vZGUiLCJDb21wb0ZpbHRlck5vZGUiLCJtYXQyIiwib3V0cHV0RXNzbCIsIkJhc2UiLCJDYW1lcmEiLCJBbmltYXRvciQwIiwiQmxlbmQxRENsaXAkMSIsIkJsZW5kMkRDbGlwJDIiLCJDbGlwJDMiLCJlYXNpbmckNCIsIlNhbXBsZXJUcmFjayQ1IiwiVGltZWxpbmUkNiIsIlRyYWNrQ2xpcCQ3IiwiVHJhbnNmb3JtVHJhY2skOCIsIlRhc2skMTAiLCJUYXNrR3JvdXAkMTEiLCJPcnRob2dyYXBoaWMkMTMiLCJQZXJzcGVjdGl2ZSQxNCIsIk1hdGVyaWFsJDE1IiwiUmVuZGVyZXIkMTYiLCJDb21wb3NpdG9yJDE3IiwiY3JlYXRlQ29tcG9zaXRvciQxOCIsIkZpbHRlck5vZGUkMTkiLCJHcmFwaCQyMCIsIk5vZGUkMjEiLCJQYXNzJDIyIiwiU2NlbmVOb2RlJDIzIiwiVGV4dHVyZU5vZGUkMjQiLCJUZXh0dXJlUG9vbCQyNSIsIkJhc2UkMjYiLCJDYWNoZSQyNyIsImNvbG9yJDI4IiwiZ2xlbnVtJDI5IiwiR0xJbmZvJDMwIiwiTGlua2VkTGlzdCQzMSIsIkxSVSQzMiIsImV4dGVuZCQzMyIsIm5vdGlmaWVyJDM0IiwicmVxdWVzdCQzNSIsInV0aWwkMzYiLCJ2ZW5kb3IkMzciLCJHQnVmZmVyJDM4IiwiUmVuZGVyZXIkMzkiLCJnbG1hdHJpeCQ0MCIsIkNvbmUkNDMiLCJDdWJlJDQ0IiwiQ3lsaW5kZXIkNDUiLCJQYXJhbWV0cmljU3VyZmFjZSQ0NiIsIlBsYW5lJDQ3IiwiU3BoZXJlJDQ4IiwiR0xQcm9ncmFtJDQ5IiwiUHJvZ3JhbU1hbmFnZXIkNTAiLCJBbWJpZW50JDUzIiwiQW1iaWVudEN1YmVtYXAkNTQiLCJBbWJpZW50U0gkNTUiLCJEaXJlY3Rpb25hbCQ1NiIsIlBvaW50JDU3IiwiU3BoZXJlJDU4IiwiU3BvdCQ1OSIsIlR1YmUkNjAiLCJGWCQ2MSIsIkdMVEYkNjIiLCJCb3VuZGluZ0JveCQ2NCIsIkZydXN0dW0kNjUiLCJNYXRyaXgyJDY2IiwiTWF0cml4MmQkNjciLCJNYXRyaXgzJDY4IiwiTWF0cml4NCQ2OSIsIlBsYW5lJDcwIiwiUXVhdGVybmlvbiQ3MSIsIlJheSQ3MiIsInV0aWwkNzMiLCJWYWx1ZSQ3NCIsIlZlY3RvcjIkNzUiLCJWZWN0b3IzJDc2IiwiVmVjdG9yNCQ3NyIsIkVtaXR0ZXIkODAiLCJGaWVsZCQ4MSIsIkZvcmNlRmllbGQkODIiLCJQYXJ0aWNsZSQ4MyIsIlBhcnRpY2xlUmVuZGVyYWJsZSQ4NCIsIlBpeGVsUGlja2luZyQ4NSIsIlJheVBpY2tpbmckODYiLCJGcmVlQ29udHJvbCQ4NyIsIkdlc3R1cmVNZ3IkODgiLCJJbmZpbml0ZVBsYW5lJDg5IiwiT3JiaXRDb250cm9sJDkwIiwiU2t5Ym94JDkxIiwiU2t5ZG9tZSQ5MiIsIkVudmlyb25tZW50TWFwJDkzIiwiU2hhZG93TWFwJDk0IiwibGlicmFyeSQ5OSIsImxpZ2h0JDEwMCIsImN1YmVtYXAkMTA3IiwiZGRzJDEwOCIsImRlbGF1bmF5JDEwOSIsImhkciQxMTAiLCJtZXNoJDExMSIsInNoJDExMiIsInRleHR1cmUkMTEzIiwidHJhbnNmZXJhYmxlJDExNCIsIkNhcmRib2FyZERpc3RvcnRlciQxMTYiLCJTdGVyZW9DYW1lcmEkMTE3Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7QUFLQSxJQUFJLE1BQU0sR0FBRzs7Ozs7O0lBTVQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEI7Ozs7OztJQU1ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFD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QztRQUN0QixFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDL0I7O1NBRUksSUFBSSxRQUFRLEdBQUcsT0FBTyxFQUFFO1FBQ3pCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDL0I7O1NBRUk7UUFDRCxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxF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UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7UUFFaEIsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSTtZQUMzQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEQ7U0FDSjs7O1FBR0QsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELFFBQVEsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O1FBRXZCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDekQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoRSxPQUFPLElBQUksQ0FBQztTQUNmOztRQUVELElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7UUFHdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQ1gs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QyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQVV2QixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxDQUFDLENBQUMs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Q0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLFdBQVc7SUFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztJQUV4QixPQUFPLFNBQVMsQ0FB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R0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDOzs7Ozs7OztBQVFwQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNyQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7O0FBUXZCLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDMUIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7QUFTakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtFQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQixPQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7O1FBRVQsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xELENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2hDLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDOztJQUVyQixJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7SUFFeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNuQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7OztJQUdyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzs7SUFHbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbEQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztHQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7TUFFZCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O01BR2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7TUFHM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7O0lBRWpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUczQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7SUFFakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUduQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUdaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMs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RixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMs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QUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtRQUNULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUNoQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQzs7O0lBR3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQztJQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQztJQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztRQUcxQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7O0lBR25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxF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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNqQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDcEIsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUN6RSxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkcsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDcEIsQ0FBQzs7QUFFRixHQUFHLE9BQU8sT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCO0FBQ0QsQUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMENELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDckIsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO29CQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMxRCxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9JLENBQUM7O0FBRUYsR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtJQUNoQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztDQUN6QjtBQUNELEFBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QkQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0FBT2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEIsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWxDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDNUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTVDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6RyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWxDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUUzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRWpCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3BCLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtvQkFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO29CQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMxRCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDdk0sQ0FBQzs7O0FBR0YsR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtJQUNoQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztDQUN2QjtBQUNELEFBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QkQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0FBT2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztJQUU5QixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7UUFDWCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDakIsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOztRQUVsRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRzs7O1FBRzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEYsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVwRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7OztJQUdoQyxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ2hGLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHdkQsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOztJQUUzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOztJQUUzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOztJQUU1QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25DLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7O0lBR2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7O0lBR2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7O0lBR25DLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDekMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFekMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7OztBQU16QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Ozs7Ozs7OztBQVNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7SUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNyRCxNQUFNO1FBQ0gsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWpELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDOztRQUV6RCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2pEOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0lBQ3ZDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNQLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNiLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNiLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztJQUVsQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRTs7SUFFbkQsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDZCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNULENBQUMsSUFBSSxHQUFHLENBQUM7O0lBRVQsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVYsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUdqRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0RSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O0lBR3RFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUU1QyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxF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R0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNqQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWYsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNuQjs7O0lBR0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkYsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7O0lBRWhELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztRQUVWLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUFFRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVgsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMs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QUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDN0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUM7UUFDdkIsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLEVBQUUsR0FB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LENBQUM7UUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ1YsTUFBTTtRQUNILEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2QsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDVixFQUFFLElBQUksR0FBRyxDQUFDO0tBQ2I7O0lBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNwQixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtvQkFDdEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7b0JBQ3JELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJO29CQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQzVFLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztD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QUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDL0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBV3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7Ozs7OztBQVV4QixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVYLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRTNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2xDLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRVgsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7QUFXdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7OztJQUlqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLFdBQVcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBRy9DLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxLQUFLLEtBQUssR0FBRyxHQUFHLEdBQUc7UUFDZixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FDYjs7SUFFRCxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxRQUFRLEdBQUc7O1FBRTVCLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUN4QyxNQUFNOzs7UUFHSCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7O0lBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQzs7SUFFbkMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOzs7O0lBSS9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0FBTTFCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBU3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7O0FBTXhDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7OztBQVVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztJQUc3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQzs7SUFFVixLQUFLLE1BQU0sR0FBRyxHQUFHLEdBQUc7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztLQUM5QixNQUFNOztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3BCLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Q0FDekUsQ0FBQzs7QUFFRixHQUFHLE9BQU8sT0FBTyxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3ZCO0FBQ0QsQUFBQzs7Ozs7Ozs7Ozs7Ozs7R0FjRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNsQixFQUFFRyxjQUFJLENB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TyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FB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R0FBRyxDQUFDLFlBQVk7SUFDNUMsSUFBSSxFQUFFLEdBQUdBLE1BQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixJQUFJLEVBQUUsR0FBR0EsTUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztRQUVsQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Ozs7UUFJcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNUQSxNQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pDLE1BQU07WUFDSEEsTUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDQSxNQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUNBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QztLQUNKLENBQUM7Q0FDTCxHQUFHLENBQUM7O0FBRUwsY0FBYyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFB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R0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5DLE9BQU8sR0FBRyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7SUFJckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5FLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBR3hDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7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QUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3RTs7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FB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LEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7OztJQVNELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELEtBQUssRUFBRSxZQUFZO1FBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2ZBLE1BQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7Ozs7SUFRRCxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ25CQSxNQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELElBQUksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNmLE9BQU9BLE1BQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDekM7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDbkIsT0FBT0EsTUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3Qzs7Ozs7OztJQU9ELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNkQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNqQkEsTUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDZCxPQUFPQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3hDOzs7Ozs7SUFNRCxHQUFHLEVBQUUsWUFBWTtRQUNiLE9BQU9BLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQy9COzs7Ozs7SUFNRCxNQUFNLEVBQUUsWUFBWTtRQUNoQixPQUFPQSxNQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNsQzs7Ozs7Ozs7SUFRRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNyQkEsTUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2RBLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2RBLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FB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Ozs7Ozs7QUFNRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLE9BQU9BLE1BQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQy9CLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQ0EsTUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUJBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsUUFB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QUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNO1FBQ1Y7WUFDSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0lBRTdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7SUFFdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDaEM7aUJBQ0k7Z0JBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFDRCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMs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QUM7WUFDdkIsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQUV6QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JELElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOztnQkFFckQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JELElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUN4RDtZQUNELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0tBQ0o7Ozs7OztJQU1ELEtBQUssRUFBRSxVQUFVLElBQUksRUFBRTtRQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkJBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0NBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsWUFBWSxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQzFCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQkEsTUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQ0EsTUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0Qsb0JBQW9CLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDbEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2VBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUU7Ozs7Ozs7SUFPRCxrQkFBa0IsRUFBRSxVQUFVLElBQUksRUFBRTs7UUFFaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxDQUFDLFlBQVk7O1FBRXpCLElBQUksRUFBRSxHQUFHQSxNQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUdBLE1BQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBR0EsTUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHQSxNQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUdBLE1BQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBR0EsTUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFO1lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztZQUV6QixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDOztZQUVyQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVwRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVwRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVyRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTFGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXZCLE9BQU8sSUFBSSxDQUFDO1NBQ2YsQ0FBQztLQUNMLEdBQUc7Ozs7OztJQU1KLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFekIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWpCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDO2FBQ0k7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRW5DLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUV4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7UUFFdkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxjQUFjLEVBQUUsWUFBWTtRQUN4QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUU7O1lBRVgsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBR0EsTUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzFDOzs7Ozs7WUFNRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtRQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7UUFHekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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QUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3RCO1FBQ0QsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFOzs7WUFHZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVkLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0tBQ0osQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFTSEUsZ0JBQWMsQ0FBQ0YsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDdEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDZCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENB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QUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDekRBLE1BQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7SUFDNUNBLE1BQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUJBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxD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LENBQUMsQ0FBQztJQUNuRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxD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SyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLEtB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QUMsQ0FBQzs7Ozs7Ozs7SUFRSEUsZ0JBQWMsQ0FBQ0YsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEUsZ0JBQWMsQ0FBQ0YsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEUsZ0JBQWMsQ0FBQ0YsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztDQUNOOzs7Ozs7Ozs7O0FBVUQsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDTCxNQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDeENBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNyQixDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDaENBLE1BQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDdENBLE1BQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDckNBLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxH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LENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOzs7Ozs7SUFNM0MsUUFBUSxLQUFLO1FBQ1QsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hD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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztRQUd2RGdCLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7O1FBR3RCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O1lBRXhCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7WUFFaEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7O1lBRzdCQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztZQUVqREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztZQUVoREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckRBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3REO2FBQ0k7WUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7O1lBRzFCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkYsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs7WUFFdkYsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDaEMsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7O1lBRzdCQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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Q0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUV6QixJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQzNDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNkLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQ3RDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1NBQ3pDO2FBQ0k7WUFDRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztZQUN0QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztTQUN6QztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNkLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQ3ZDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO1NBQzFDO2FBQ0k7WUFDRCxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztZQUN2QyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQztTQUMx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RSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsREEsT0FBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRztnQkFDaEMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTs7Z0JBRXJDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxD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Q0FBQztZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWxDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVB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RSxZQUFZO1FBQ25DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25DOzs7O0lBSUQsS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJ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S0FBSyxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLElBQUksQ0FBQ0EsT0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3Qzs7O1FBR0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFbkIsU0FBUyxDQUFDLElBQUksQ0FBQ3VDLE1BQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTFCLFNBQVMsQ0FBQyxJQUFJLENBQUNBLE1BQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7OztRQUdELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDQSxNQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7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SSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7Ozs7Ozs7O0lBUUQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDcEJBLE1BQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiQSxNQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQkEsTUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELE1BQU0sRUFBRSxXQUFXO1FBQ2ZBLE1BQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsU0FBUyxFQUFFLFdBQVc7UUFDbEJBLE1BQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxTQUFTLEtBQUssRUFBRTtRQUNwQkEsTUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZkEsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDeEJBLE1BQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPQSxNQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVDOzs7Ozs7O0lBT0QsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3pCLE9BQU9BLE1BQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDcEQ7Ozs7OztJQU1ELE1BQU0sRUFBRSxXQUFXO1FBQ2YsT0FBT0EsTUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7Ozs7OztJQU1ELGFBQWEsRUFBRSxXQUFXO1FBQ3RCLE9BQU9BLE1BQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pDOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2JBLE1BQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2xCQSxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGFBQWEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN2QkEsTUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdkJBLE1BQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFFBQVEsRUFBRSxXQUFXO1FBQ2pCLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNqRTs7SUFFRCxPQUFPLEVBQUUsWUFBWTtRQUNqQixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakQ7Q0FDSixDQUFDOztBQUVGLElBQUlSLGdCQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7QUFFM0MsSUFBSUEsZ0JBQWMsRUFBRTs7SUFFaEIsSUFBSUYsT0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7SUFPOUJFLGdCQUFjLENBQUNGLE9BQUssRUFBRSxHQUFHLEVBQUU7UUFDdkIsR0FBRyxFQUFFLFlBQVk7WUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSixDQUFDLENBQUM7Ozs7Ozs7O0lBUUhFLGdCQUFjLENBQUNGLE9BQUssRUFBRSxHQUFHLEVBQUU7UUFDdkIsR0FBRyxFQUFFLFlBQVk7WUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSixDQUFDLENBQUM7Ozs7Ozs7O0lBUUhFLGdCQUFjLENBQUNGLE9BQUssRUFBRSxHQUFHLEVBQUU7UUFDdkIsR0FBRyxFQUFFLFlBQVk7WUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSixDQUFDLENBQUM7Ozs7Ozs7O0lBUUhFLGdCQUFjLENBQUNGLE9BQUssRUFBRSxHQUFHLEVBQUU7UUFDdkIsR0FBRyxFQUFFLFlBQVk7WUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSixDQUFDLENBQUM7Q0FDTjs7Ozs7Ozs7OztBQVVELE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QlUsTUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDcENBLE1BQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNyQixDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUJBLE1BQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsT0FBT0EsTUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMxQyxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7QUFRaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7QUFPN0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekIsT0FBT0EsTUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNyQyxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLE9BQU9BLE1BQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQy9CLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQ0EsTUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCQSxNQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxD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 diff --git a/dist/claygl.min.js b/dist/claygl.min.js index 39549e536..0e85b6943 100644 --- a/dist/claygl.min.js +++ b/dist/claygl.min.js @@ -1,14 +1,14 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.clay={})}(this,function(t){"use strict";function e(){}function r(t,e){return t[e]}function n(t,e,r){t[e]=r}function i(t,e,r){return(e-t)*r+t}function a(t,e,r,n,a){var o=t.length;if(1==a)for(var s=0;si)t.length=i;else for(var a=n;a=0&&!(T[w]<=e);w--);w=Math.min(w,g-2)}else{for(w=O;we);w++);w=Math.min(w-1,g-2)}O=w,B=e;var r=T[w+1]-T[w];0!==r&&(R=(e-T[w])/r,R=Math.max(Math.min(1,R),0),R=b[w+1](R),_?(P=E[w],L=E[0===w?w:w-1],D=E[w>g-2?g-1:w+1],I=E[w>g-3?g-1:w+2],f?p(t,s,f(m(t,s),L,P,D,I,R)):y?u(L,P,D,I,R,R*R,R*R*R,m(t,s),x):p(t,s,l(L,P,D,I,R,R*R,R*R*R))):f?p(t,s,f(m(t,s),E[w],E[w+1],R)):y?a(E[w],E[w+1],R,m(t,s),x):p(t,s,i(E[w],E[w+1],R)))},U=new le({target:t._target,life:d,loop:t._loop,delay:t._delay,onframe:F,onfinish:r});return e&&"spline"!==e&&U.setEasing(e),U}}}function d(t,e,i,a,o){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||r,this._setter=a||n,this._interpolater=o||null,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[],this._maxTime=0,this._lastKFTime=0}function m(t){return t}function p(t){var e,r,n,i,a,o,s=Number.POSITIVE_INFINITY,u=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,c=Number.NEGATIVE_INFINITY;for(e=t.length;e--;)t[e][0]l&&(l=t[e][0]),t[e][1]c&&(c=t[e][1]);return r=l-s,n=c-u,i=Math.max(r,n),a=s+.5*r,o=u+.5*n,[[a-20*i,o-i],[a,o+20*i],[a+20*i,o-i]]}function _(t,e,r,n){var i,a,o,s,u,l,c,h,f,d,m=t[e][0],p=t[e][1],_=t[r][0],g=t[r][1],v=t[n][0],y=t[n][1],x=Math.abs(p-g),T=Math.abs(g-y);if(xT?o*(i-u)+c:s*(i-l)+h),f=_-i,d=g-a,{i:e,j:r,k:n,x:i,y:a,r:f*f+d*d}}function g(t){var e,r,n,i,a,o;for(r=t.length;r;)for(i=t[--r],n=t[--r],e=r;e;)if(o=t[--e],a=t[--e],n===a&&i===o||n===o&&i===a){t.splice(r,2),t.splice(e,2);break}}function v(t,e){return t.time-e.time}function y(t,e,r,n,i,a){var o=e[i],s=e[i+1],u=e[i+2];return t[0]=o+n*(r[a]-o),t[1]=s+n*(r[a+1]-s),t[2]=u+n*(r[a+2]-u),t}function x(t,e,r,n,i,a){var o,s,u,l,c,h=e[0+i],f=e[1+i],d=e[2+i],m=e[3+i],p=r[0+a],_=r[1+a],g=r[2+a],v=r[3+a];return s=h*p+f*_+d*g+m*v,s<0&&(s=-s,p=-p,_=-_,g=-g,v=-v),1-s>1e-6?(o=Math.acos(s),u=Math.sin(o),l=Math.sin((1-n)*o)/u,c=Math.sin(n*o)/u):(l=1-n,c=n),t[0]=l*h+c*p,t[1]=l*f+c*_,t[2]=l*d+c*g,t[3]=l*m+c*v,t}function T(t,e,r){"object"==typeof e&&(r=e,e=null);var n,i=this;if(!(t instanceof Function)){n=[];for(var a in t)t.hasOwnProperty(a)&&n.push(a)}var o=function(e){if(i.apply(this,arguments),t instanceof Function?E(this,t.call(this,e)):b(this,t,n),this.constructor===o)for(var r=o.__initializers__,a=0;ar?r:t}function M(t){return t=Math.round(t),t<0?0:t>255?255:t}function C(t){return t=Math.round(t),t<0?0:t>360?360:t}function N(t){return t<0?0:t>1?1:t}function R(t){return M(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function L(t){return N(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function P(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}function D(t,e,r){return t+(e-t)*r}function I(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function O(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function B(t,e){pr&&O(pr,e),pr=mr.put(t,pr||e.slice())}function F(t,e){var r=(parseFloat(t[0])%360+360)%360/360,n=L(t[1]),i=L(t[2]),a=i<=.5?i*(n+1):i+n-i*n,o=2*i-a;return e=e||[],I(e,M(255*P(o,a,r+1/3)),M(255*P(o,a,r)),M(255*P(o,a,r-1/3)),1),4===t.length&&(e[3]=t[3]),e}function U(t){if(t){var e,r,n=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),u=s-o,l=(s+o)/2;if(0===u)e=0,r=0;else{r=l<.5?u/(s+o):u/(2-s-o);var c=((s-n)/6+u/2)/u,h=((s-i)/6+u/2)/u,f=((s-a)/6+u/2)/u;n===s?e=f-h:i===s?e=1/3+c-f:a===s&&(e=2/3+h-c),e<0&&(e+=1),e>1&&(e-=1)}var d=[360*e,r,l];return null!=t[3]&&d.push(t[3]),d}}function k(t,e,r){var n=Object.keys(t);n.sort();for(var i=[],a=0;a0&&n.push("#define "+i.toUpperCase()+"_COUNT "+a)}if(r)for(var o=0;o=400?t.onerror&&t.onerror():t.onload&&t.onload(e.response)},t.onerror&&(e.onerror=t.onerror),e.send(null)}function ht(t,e,r,n){var i=t.accessors[r],a=e.bufferViews[i.bufferView],o=i.byteOffset||0,s=fi[i.componentType]||We.Float32Array,u=di[i.type];null==u&&n&&(u=1);var l=new s(a,o,u*i.count),c=i.extensions&&i.extensions.WEB3D_quantized_attributes;if(c){for(var h,f,d=new We.Float32Array(u*i.count),m=c.decodeMatrix,h=new Array(u),f=new Array(u),p=0;p0){var i=Math.pow(2,t[3]-128-8+n);e[r+0]=t[0]*i,e[r+1]=t[1]*i,e[r+2]=t[2]*i}else e[r+0]=0,e[r+1]=0,e[r+2]=0;return e[r+3]=1,e}function mt(t,e,r){for(var n="",i=e;i0;)if(t[a][0]=e[r++],t[a][1]=e[r++],t[a][2]=e[r++],t[a][3]=e[r++],1===t[a][0]&&1===t[a][1]&&1===t[a][2]){for(var s=t[a][3]<>>0;s>0;s--)pt(t[a-1],t[a]),a++,o--;i+=8}else a++,o--,i=0;return r}function gt(t,e,r,n){if(nUi)return _t(t,e,r,n);var i=e[r++];if(2!=i)return _t(t,e,r-1,n);if(t[0][1]=e[r++],t[0][2]=e[r++],i=e[r++],(t[0][2]<<8>>>0|i)>>>0!==n)return null;for(var i=0;i<4;i++)for(var a=0;a128){o=(127&o)>>>0;for(var s=e[r++];o--;)t[a++][i]=s}else for(;o--;)t[a++][i]=e[r++]}return r}function vt(t){Le.defaultsWithPropList(t,ji,qi),yt(t);for(var e="",r=0;r>16,r=t-(e<<8)>>8;return[e,r,t-(e<<16)-(r<<8)]}function ee(t,e,r){return(t<<16)+(e<<8)+r}function re(t){var e=t[1][0]-t[0][0],r=t[1][1]-t[0][1];return Math.sqrt(e*e+r*r)}function ne(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function ie(t){return Array.isArray(t)||(t=[t,t]),t}function ae(t,e){return{name:t.name,type:t.type,size:t.size,semantic:t.semantic,value:oe(t.value,e)}}function oe(t,e){return e?t:new t.constructor(t)}function se(t,e,r){return t*(1-r)+e*r}var ue={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,r=.1;return 0===t?0:1===t?1:(!r||r<1?(r=1,e=.1):e=.4*Math.asin(1/r)/(2*Math.PI),-r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,r=.1;return 0===t?0:1===t?1:(!r||r<1?(r=1,e=.1):e=.4*Math.asin(1/r)/(2*Math.PI),r*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,r=.1;return 0===t?0:1===t?1:(!r||r<1?(r=1,e=.1):e=.4*Math.asin(1/r)/(2*Math.PI),(t*=2)<1?r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*-.5:r*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-ue.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*ue.bounceIn(2*t):.5*ue.bounceOut(2*t-1)+.5}},le=function(t){t=t||{},this.name=t.name||"",this.target=t.target,this.life=t.life||1e3,this.delay=t.delay||0,this.gap=t.gap||0,this.playbackRate=t.playbackRate||1,this._initialized=!1,this._elapsedTime=0,this._loop=null!=t.loop&&t.loop,this.setLoop(this._loop),null!=t.easing&&this.setEasing(t.easing),this.onframe=t.onframe||e,this.onfinish=t.onfinish||e,this.onrestart=t.onrestart||e,this._paused=!1};le.prototype={gap:0,life:0,delay:0,setLoop:function(t){this._loop=t,t&&(this._loopRemained="number"==typeof t?t:1e8)},setEasing:function(t){"string"==typeof t&&(t=ue[t]),this.easing=t},step:function(t,e,r){if(this._initialized||(this._startTime=t+this.delay,this._initialized=!0),null!=this._currentTime&&(e=t-this._currentTime),this._currentTime=t,this._paused)return"paused";if(!(t0?(this._restartInLoop(t),this._loopRemained--,"restart"):(this._needsRemove=!0,"finish"):null}}},setTime:function(t){return this.step(t+this._startTime)},restart:function(t){var e=0;t&&(this._elapse(t),e=this._elapsedTime%this.life),t=t||Date.now(),this._startTime=t-e+this.delay,this._elapsedTime=0,this._needsRemove=!1,this._paused=!1},getElapsedTime:function(){return this._elapsedTime},_restartInLoop:function(t){this._startTime=t+this.gap,this._elapsedTime=0},_elapse:function(t,e){this._elapsedTime+=e*this.playbackRate},fire:function(t,e){var r="on"+t;this[r]&&this[r](this.target,e)},clone:function(){var t=new this.constructor;return t.name=this.name,t._loop=this._loop,t._loopRemained=this._loopRemained,t.life=this.life,t.gap=this.gap,t.delay=this.delay,t},pause:function(){this._paused=!0},resume:function(){this._paused=!1}},le.prototype.constructor=le;var ce=Array.prototype.slice;d.prototype={constructor:d,when:function(t,e,r){this._maxTime=Math.max(t,this._maxTime),r=("function"==typeof r?r:ue[r])||m;for(var n in e)this._tracks[n]||(this._tracks[n]=[],0!==t&&this._tracks[n].push({time:0,value:s(this._getter(this._target,n)),easing:r})),this._tracks[n].push({time:parseInt(t),value:e[n],easing:r});return this},then:function(t,e,r){return this.when(t+this._lastKFTime,e,r),this._lastKFTime+=t,this},during:function(t){return this._onframeList.push(t),this},_doneCallback:function(){this._tracks={},this._clipList.length=0;for(var t=this._doneList,e=t.length,r=0;rt)this.inputs.unshift(n);else if(this.inputs[i-1].position<=t)this.inputs.push(n);else{var a=this._findKey(t);this.inputs.splice(a,n)}return n},fe.prototype.step=function(t,e,r){var n=le.prototype.step.call(this,t);return"finish"!==n&&this.setTime(this.getElapsedTime()),r||"paused"===n||this.fire("frame"),n},fe.prototype.setTime=function(t){var e=this.position,r=this.inputs,n=r.length,i=r[0].position,a=r[n-1].position;if(e<=i||e>=a){var o=e<=i?r[0]:r[n-1],s=o.clip,u=o.offset;s.setTime((t+u)%s.life),s.output instanceof le?this.output.copy(s.output):this.output.copy(s)}else{var l=this._findKey(e),c=r[l],h=r[l+1],f=c.clip,d=h.clip;f.setTime((t+c.offset)%f.life),d.setTime((t+h.offset)%d.life);var m=(this.position-c.position)/(h.position-c.position),p=f.output instanceof le?f.output:f,_=d.output instanceof le?d.output:d;this.output.blend1D(p,_,m)}},fe.prototype.clone=function(t){var e=le.prototype.clone.call(this);e.output=this.output.clone();for(var r=0;r=r[i].position&&t=0;i--)t>=r[i].position&&t=0&&(this._cacheKey=e,this._cachePosition=t),e};var de=1/1048576,me={triangulate:function(t,e){var r,n,i,a,o,s,u,l,c,h,f,d,m=t.length;if(m<3)return[];if(t=t.slice(0),e)for(r=m;r--;)t[r]=t[r][e];for(i=new Array(m),r=m;r--;)i[r]=r;for(i.sort(function(e,r){var n=t[r][0]-t[e][0];return 0!==n?n:e-r}),a=p(t),t.push(a[0],a[1],a[2]),o=[_(t,m+0,m+1,m+2)],s=[],u=[],r=i.length;r--;u.length=0){for(d=i[r],n=o.length;n--;)l=t[d][0]-o[n].x,l>0&&l*l>o[n].r?(s.push(o[n]),o.splice(n,1)):(c=t[d][1]-o[n].y,l*l+c*c-o[n].r>de||(u.push(o[n].i,o[n].j,o[n].j,o[n].k,o[n].k,o[n].i),o.splice(n,1)));for(g(u),n=u.length;n;)f=u[--n],h=u[--n],o.push(_(t,h,f,d))}for(r=o.length;r--;)s.push(o[r]);for(o.length=0,r=s.length;r--;)s[r].it[0][0]&&e[0]>t[1][0]&&e[0]>t[2][0]||e[1]t[0][1]&&e[1]>t[1][1]&&e[1]>t[2][1])return null;var r=t[1][0]-t[0][0],n=t[2][0]-t[0][0],i=t[1][1]-t[0][1],a=t[2][1]-t[0][1],o=r*a-n*i;if(0===o)return null;var s=(a*(e[0]-t[0][0])-n*(e[1]-t[0][1]))/o,u=(r*(e[1]-t[0][1])-i*(e[0]-t[0][0]))/o;return s<0||u<0||s+u>1?null:[s,u]}},pe=("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self,function(t,e){return e={exports:{}},t(e,e.exports),e.exports}(function(t,e){!function(t){ -var r={};r.exports=e,function(t){if(!e)var e=1e-6;if(!r)var r="undefined"!=typeof Float32Array?Float32Array:Array;if(!n)var n=Math.random;var i={};i.setMatrixArrayType=function(t){r=t},void 0!==t&&(t.glMatrix=i);var a=Math.PI/180;i.toRadian=function(t){return t*a};var o={};o.create=function(){var t=new r(2);return t[0]=0,t[1]=0,t},o.clone=function(t){var e=new r(2);return e[0]=t[0],e[1]=t[1],e},o.fromValues=function(t,e){var n=new r(2);return n[0]=t,n[1]=e,n},o.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t},o.set=function(t,e,r){return t[0]=e,t[1]=r,t},o.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t},o.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t},o.sub=o.subtract,o.multiply=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t},o.mul=o.multiply,o.divide=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t},o.div=o.divide,o.min=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t},o.max=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t},o.scale=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t},o.scaleAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t},o.distance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1];return Math.sqrt(r*r+n*n)},o.dist=o.distance,o.squaredDistance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1];return r*r+n*n},o.sqrDist=o.squaredDistance,o.length=function(t){var e=t[0],r=t[1];return Math.sqrt(e*e+r*r)},o.len=o.length,o.squaredLength=function(t){var e=t[0],r=t[1];return e*e+r*r},o.sqrLen=o.squaredLength,o.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t},o.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t},o.normalize=function(t,e){var r=e[0],n=e[1],i=r*r+n*n;return i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i),t},o.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]},o.cross=function(t,e,r){var n=e[0]*r[1]-e[1]*r[0];return t[0]=t[1]=0,t[2]=n,t},o.lerp=function(t,e,r,n){var i=e[0],a=e[1];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t},o.random=function(t,e){e=e||1;var r=2*n()*Math.PI;return t[0]=Math.cos(r)*e,t[1]=Math.sin(r)*e,t},o.transformMat2=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i,t[1]=r[1]*n+r[3]*i,t},o.transformMat2d=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i+r[4],t[1]=r[1]*n+r[3]*i+r[5],t},o.transformMat3=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[3]*i+r[6],t[1]=r[1]*n+r[4]*i+r[7],t},o.transformMat4=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t},o.forEach=function(){var t=o.create();return function(e,r,n,i,a,o){var s,u;for(r||(r=2),n||(n=0),u=i?Math.min(i*r+n,e.length):e.length,s=n;s0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t},s.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},s.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2];return t[0]=i*u-a*s,t[1]=a*o-n*u,t[2]=n*s-i*o,t},s.lerp=function(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t},s.random=function(t,e){e=e||1;var r=2*n()*Math.PI,i=2*n()-1,a=Math.sqrt(1-i*i)*e;return t[0]=Math.cos(r)*a,t[1]=Math.sin(r)*a,t[2]=i*e,t},s.transformMat4=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t},s.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},s.transformQuat=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2],l=r[3],c=l*n+s*a-u*i,h=l*i+u*n-o*a,f=l*a+o*i-s*n,d=-o*n-s*i-u*a;return t[0]=c*l+d*-o+h*-u-f*-s,t[1]=h*l+d*-s+f*-o-c*-u,t[2]=f*l+d*-u+c*-s-h*-o,t},s.rotateX=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0],a[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),a[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},s.rotateY=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),a[1]=i[1],a[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},s.rotateZ=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),a[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),a[2]=i[2],t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},s.forEach=function(){var t=s.create();return function(e,r,n,i,a,o){var s,u;for(r||(r=3),n||(n=0),u=i?Math.min(i*r+n,e.length):e.length,s=n;s1?0:Math.acos(i)},s.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},void 0!==t&&(t.vec3=s);var u={};u.create=function(){var t=new r(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},u.clone=function(t){var e=new r(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},u.fromValues=function(t,e,n,i){var a=new r(4);return a[0]=t,a[1]=e,a[2]=n,a[3]=i,a},u.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},u.set=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t},u.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t},u.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t},u.sub=u.subtract,u.multiply=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t},u.mul=u.multiply,u.divide=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t},u.div=u.divide,u.min=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t},u.max=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t},u.scale=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},u.scaleAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t},u.distance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)},u.dist=u.distance,u.squaredDistance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a},u.sqrDist=u.squaredDistance,u.length=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)},u.len=u.length,u.squaredLength=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i},u.sqrLen=u.squaredLength,u.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t},u.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t},u.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t[3]=e[3]*o),t},u.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},u.lerp=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t},u.random=function(t,e){return e=e||1,t[0]=n(),t[1]=n(),t[2]=n(),t[3]=n(),u.normalize(t,t),u.scale(t,t,e),t},u.transformMat4=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t},u.transformQuat=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2],l=r[3],c=l*n+s*a-u*i,h=l*i+u*n-o*a,f=l*a+o*i-s*n,d=-o*n-s*i-u*a;return t[0]=c*l+d*-o+h*-u-f*-s,t[1]=h*l+d*-s+f*-o-c*-u,t[2]=f*l+d*-u+c*-s-h*-o,t},u.forEach=function(){var t=u.create();return function(e,r,n,i,a,o){var s,u;for(r||(r=4),n||(n=0),u=i?Math.min(i*r+n,e.length):e.length,s=n;s.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(s.cross(t,i,a),n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=1+o,d.normalize(n,n))}}(),d.setAxes=function(){var t=h.create();return function(e,r,n,i){return t[0]=n[0],t[3]=n[1],t[6]=n[2],t[1]=i[0],t[4]=i[1],t[7]=i[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],d.normalize(e,d.fromMat3(e,t))}}(),d.clone=u.clone,d.fromValues=u.fromValues,d.copy=u.copy,d.set=u.set,d.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},d.setAxisAngle=function(t,e,r){r*=.5;var n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t},d.add=u.add,d.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=r[0],u=r[1],l=r[2],c=r[3];return t[0]=n*c+o*s+i*l-a*u,t[1]=i*c+o*u+a*s-n*l,t[2]=a*c+o*l+n*u-i*s,t[3]=o*c-n*s-i*u-a*l,t},d.mul=d.multiply,d.scale=u.scale,d.rotateX=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=n*u+o*s,t[1]=i*u+a*s,t[2]=a*u-i*s,t[3]=o*u-n*s,t},d.rotateY=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=n*u-a*s,t[1]=i*u+o*s,t[2]=a*u+n*s,t[3]=o*u-i*s,t},d.rotateZ=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=n*u+i*s,t[1]=i*u-n*s,t[2]=a*u+o*s,t[3]=o*u-a*s,t},d.calculateW=function(t,e){var r=e[0],n=e[1],i=e[2];return t[0]=r,t[1]=n,t[2]=i,t[3]=Math.sqrt(Math.abs(1-r*r-n*n-i*i)),t},d.dot=u.dot,d.lerp=u.lerp,d.slerp=function(t,e,r,n){var i,a,o,s,u,l=e[0],c=e[1],h=e[2],f=e[3],d=r[0],m=r[1],p=r[2],_=r[3];return a=l*d+c*m+h*p+f*_,a<0&&(a=-a,d=-d,m=-m,p=-p,_=-_),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,u=Math.sin(n*i)/o):(s=1-n,u=n),t[0]=s*l+u*d,t[1]=s*c+u*m,t[2]=s*h+u*p,t[3]=s*f+u*_,t},d.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a,s=o?1/o:0;return t[0]=-r*s,t[1]=-n*s,t[2]=-i*s,t[3]=a*s,t},d.conjugate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t},d.length=u.length,d.len=d.length,d.squaredLength=u.squaredLength,d.sqrLen=d.squaredLength,d.normalize=u.normalize,d.fromMat3=function(t,e){var r,n=e[0]+e[4]+e[8];if(n>0)r=Math.sqrt(n+1),t[3]=.5*r,r=.5/r,t[0]=(e[5]-e[7])*r,t[1]=(e[6]-e[2])*r,t[2]=(e[1]-e[3])*r;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[3*i+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;r=Math.sqrt(e[3*i+i]-e[3*a+a]-e[3*o+o]+1),t[i]=.5*r,r=.5/r,t[3]=(e[3*a+o]-e[3*o+a])*r,t[a]=(e[3*a+i]+e[3*i+a])*r,t[o]=(e[3*o+i]+e[3*i+o])*r}return t},d.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},void 0!==t&&(t.quat=d)}(r.exports)}()})),_e=pe.vec2,ge=function(t,e){t=t||0,e=e||0,this.array=_e.fromValues(t,e),this._dirty=!0};if(ge.prototype={constructor:ge,add:function(t){return _e.add(this.array,this.array,t.array),this._dirty=!0,this},set:function(t,e){return this.array[0]=t,this.array[1]=e,this._dirty=!0,this},setArray:function(t){return this.array[0]=t[0],this.array[1]=t[1],this._dirty=!0,this},clone:function(){return new ge(this.x,this.y)},copy:function(t){return _e.copy(this.array,t.array),this._dirty=!0,this},cross:function(t,e){return _e.cross(t.array,this.array,e.array),t._dirty=!0,this},dist:function(t){return _e.dist(this.array,t.array)},distance:function(t){return _e.distance(this.array,t.array)},div:function(t){return _e.div(this.array,this.array,t.array),this._dirty=!0,this},divide:function(t){return _e.divide(this.array,this.array,t.array),this._dirty=!0,this},dot:function(t){return _e.dot(this.array,t.array)},len:function(){return _e.len(this.array)},length:function(){return _e.length(this.array)},lerp:function(t,e,r){return _e.lerp(this.array,t.array,e.array,r),this._dirty=!0,this},min:function(t){return _e.min(this.array,this.array,t.array),this._dirty=!0,this},max:function(t){return _e.max(this.array,this.array,t.array),this._dirty=!0,this},mul:function(t){return _e.mul(this.array,this.array,t.array),this._dirty=!0,this},multiply:function(t){return _e.multiply(this.array,this.array,t.array),this._dirty=!0,this},negate:function(){return _e.negate(this.array,this.array),this._dirty=!0,this},normalize:function(){return _e.normalize(this.array,this.array),this._dirty=!0,this},random:function(t){return _e.random(this.array,t),this._dirty=!0,this},scale:function(t){return _e.scale(this.array,this.array,t),this._dirty=!0,this},scaleAndAdd:function(t,e){return _e.scaleAndAdd(this.array,this.array,t.array,e),this._dirty=!0,this},sqrDist:function(t){return _e.sqrDist(this.array,t.array)},squaredDistance:function(t){return _e.squaredDistance(this.array,t.array)},sqrLen:function(){return _e.sqrLen(this.array)},squaredLength:function(){return _e.squaredLength(this.array)},sub:function(t){return _e.sub(this.array,this.array,t.array),this._dirty=!0,this},subtract:function(t){return _e.subtract(this.array,this.array,t.array),this._dirty=!0,this},transformMat2:function(t){return _e.transformMat2(this.array,this.array,t.array),this._dirty=!0,this},transformMat2d:function(t){return _e.transformMat2d(this.array,this.array,t.array),this._dirty=!0,this},transformMat3:function(t){return _e.transformMat3(this.array,this.array,t.array),this._dirty=!0,this},transformMat4:function(t){return _e.transformMat4(this.array,this.array,t.array),this._dirty=!0,this},toString:function(){return"["+Array.prototype.join.call(this.array,",")+"]"},toArray:function(){return Array.prototype.slice.call(this.array)}},Object.defineProperty){var ve=ge.prototype;Object.defineProperty(ve,"x",{get:function(){return this.array[0]},set:function(t){this.array[0]=t,this._dirty=!0}}),Object.defineProperty(ve,"y",{get:function(){return this.array[1]},set:function(t){this.array[1]=t,this._dirty=!0}})}ge.add=function(t,e,r){return _e.add(t.array,e.array,r.array),t._dirty=!0,t},ge.set=function(t,e,r){return _e.set(t.array,e,r),t._dirty=!0,t},ge.copy=function(t,e){return _e.copy(t.array,e.array),t._dirty=!0,t},ge.cross=function(t,e,r){return _e.cross(t.array,e.array,r.array),t._dirty=!0,t},ge.dist=function(t,e){return _e.distance(t.array,e.array)},ge.distance=ge.dist,ge.div=function(t,e,r){return _e.divide(t.array,e.array,r.array),t._dirty=!0,t},ge.divide=ge.div,ge.dot=function(t,e){return _e.dot(t.array,e.array)},ge.len=function(t){return _e.length(t.array)},ge.lerp=function(t,e,r,n){return _e.lerp(t.array,e.array,r.array,n),t._dirty=!0,t},ge.min=function(t,e,r){return _e.min(t.array,e.array,r.array),t._dirty=!0,t},ge.max=function(t,e,r){return _e.max(t.array,e.array,r.array),t._dirty=!0,t}, -ge.mul=function(t,e,r){return _e.multiply(t.array,e.array,r.array),t._dirty=!0,t},ge.multiply=ge.mul,ge.negate=function(t,e){return _e.negate(t.array,e.array),t._dirty=!0,t},ge.normalize=function(t,e){return _e.normalize(t.array,e.array),t._dirty=!0,t},ge.random=function(t,e){return _e.random(t.array,e),t._dirty=!0,t},ge.scale=function(t,e,r){return _e.scale(t.array,e.array,r),t._dirty=!0,t},ge.scaleAndAdd=function(t,e,r,n){return _e.scaleAndAdd(t.array,e.array,r.array,n),t._dirty=!0,t},ge.sqrDist=function(t,e){return _e.sqrDist(t.array,e.array)},ge.squaredDistance=ge.sqrDist,ge.sqrLen=function(t){return _e.sqrLen(t.array)},ge.squaredLength=ge.sqrLen,ge.sub=function(t,e,r){return _e.subtract(t.array,e.array,r.array),t._dirty=!0,t},ge.subtract=ge.sub,ge.transformMat2=function(t,e,r){return _e.transformMat2(t.array,e.array,r.array),t._dirty=!0,t},ge.transformMat2d=function(t,e,r){return _e.transformMat2d(t.array,e.array,r.array),t._dirty=!0,t},ge.transformMat3=function(t,e,r){return _e.transformMat3(t.array,e.array,r.array),t._dirty=!0,t},ge.transformMat4=function(t,e,r){return _e.transformMat4(t.array,e.array,r.array),t._dirty=!0,t};var ye=function(t){t=t||{},le.call(this,t),this.output=t.output||null,this.inputs=t.inputs||[],this.position=new ge,this._cacheTriangle=null,this._triangles=[],this._updateTriangles()};ye.prototype=new le,ye.prototype.constructor=ye,ye.prototype.addInput=function(t,e,r){var n={position:t,clip:e,offset:r||0};return this.inputs.push(n),this.life=Math.max(e.life,this.life),this._updateTriangles(),n},ye.prototype._updateTriangles=function(){var t=this.inputs.map(function(t){return t.position});this._triangles=me.triangulate(t,"array")},ye.prototype.step=function(t,e,r){var n=le.prototype.step.call(this,t);return"finish"!==n&&this.setTime(this.getElapsedTime()),r||"paused"===n||this.fire("frame"),n},ye.prototype.setTime=function(t){var e=this._findTriangle(this.position);if(e){var r=e[1],n=e[2],i=e[0],a=this.inputs[i.indices[0]],o=this.inputs[i.indices[1]],s=this.inputs[i.indices[2]],u=a.clip,l=o.clip,c=s.clip;u.setTime((t+a.offset)%u.life),l.setTime((t+o.offset)%l.life),c.setTime((t+s.offset)%c.life);var h=u.output instanceof le?u.output:u,f=l.output instanceof le?l.output:l,d=c.output instanceof le?c.output:c;this.output.blend2D(h,f,d,r,n)}},ye.prototype.clone=function(t){var e=le.prototype.clone.call(this);e.output=this.output.clone();for(var r=0;r=t.time)return this.keyFrames.splice(e,0,t),e}this.life=t.time,this.keyFrames.push(t)},Ee.prototype.addKeyFrames=function(t){for(var e=0;ei[i.length-1].time)){if(t=a-1?a-1:this._cacheKey+1,s=o;s>=0;s--)if(i[s].time<=t&&i[s][e])r=i[s],this._cacheKey=s,this._cacheTime=t;else if(i[s][e]){n=i[s];break}}else for(var s=this._cacheKey;s=e.time[r-1])t=e.time[r-1],n=r-2;else if(t=0;a--)if(e.time[a-1]<=t&&e.time[a]>t){n=a-1;break}}else for(var a=this._cacheKey;at){n=a;break}if(n>-1){this._cacheKey=n,this._cacheTime=t;var o=n,s=n+1,u=e.time[o],l=e.time[s],c=l-u,h=0===c?0:(t-u)/c;e.rotation&&x(this.rotation,e.rotation,e.rotation,h,4*o,4*s),e.position&&y(this.position,e.position,e.position,h,3*o,3*s),e.scale&&y(this.scale,e.scale,e.scale,h,3*o,3*s)}n==r-2&&(this._cacheKey=0,this._cacheTime=0),this.updateTarget()}},Se.prototype.updateTarget=function(){var t=this.channels;this.target&&(t.position&&this.target.position.setArray(this.position),t.rotation&&this.target.rotation.setArray(this.rotation),t.scale&&this.target.scale.setArray(this.scale))},Se.prototype.getMaxTime=function(){return this.channels.time[this.channels.time.length-1]},Se.prototype.getSubTrack=function(t,e){var r=new Se({name:this.name}),n=this.channels.time[0];t=Math.min(Math.max(t,n),this.life),e=Math.min(Math.max(e,n),this.life);var i=this._findRange(t),a=this._findRange(e),o=a[0]-i[0]+1;0===i[1]&&0===a[1]&&(o-=1),this.channels.rotation&&(r.channels.rotation=new Float32Array(4*o)),this.channels.position&&(r.channels.position=new Float32Array(3*o)),this.channels.scale&&(r.channels.scale=new Float32Array(3*o)),this.channels.time&&(r.channels.time=new Float32Array(o)),this.setTime(t);for(var s=0;s<3;s++)r.channels.rotation[s]=this.rotation[s],r.channels.position[s]=this.position[s],r.channels.scale[s]=this.scale[s];r.channels.time[0]=0,r.channels.rotation[3]=this.rotation[3];for(var s=1;st&&(n=i);var a=0;if(n>=0)var o=e.time[n],s=e.time[n+1],a=(t-o)/(s-o);return[n,a]},Se.prototype.blend1D=Ee.prototype.blend1D,Se.prototype.blend2D=Ee.prototype.blend2D,Se.prototype.additiveBlend=Ee.prototype.additiveBlend,Se.prototype.subtractiveBlend=Ee.prototype.subtractiveBlend,Se.prototype.clone=function(){var t=Se.prototype.clone.call(this);return t.channels={time:this.channels.time||null,position:this.channels.position||null,rotation:this.channels.rotation||null,scale:this.channels.scale||null},Ae.copy(t.position,this.position),be.copy(t.rotation,this.rotation),Ae.copy(t.scale,this.scale),t.target=this.target,t.updateTarget(),t};var we={extend:T,derive:T},Me={trigger:function(t){if(this.hasOwnProperty("__handlers__")&&this.__handlers__.hasOwnProperty(t)){var e=this.__handlers__[t],r=e.length,n=-1,i=arguments;switch(i.length){case 1:for(;++n=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),r=0;r=0&&this.tracks.splice(e,1)},Fe.prototype.getSubClip=function(t,e,r){for(var n=new Fe({name:this.name}),i=0;i0){var e=this.min,r=this.max,n=e.array,i=r.array;Qe(n,t[0]),Qe(i,t[0]);for(var a=1;ai[0]&&(i[0]=o[0]),o[1]>i[1]&&(i[1]=o[1]),o[2]>i[2]&&(i[2]=o[2])}e._dirty=!0,r._dirty=!0}},union:function(t){var e=this.min,r=this.max;return Je.min(e.array,e.array,t.min.array),Je.max(r.array,r.array,t.max.array),e._dirty=!0,r._dirty=!0,this},intersection:function(t){var e=this.min,r=this.max;return Je.max(e.array,e.array,t.min.array),Je.min(r.array,r.array,t.max.array),e._dirty=!0,r._dirty=!0,this},intersectBoundingBox:function(t){var e=this.min.array,r=this.max.array,n=t.min.array,i=t.max.array;return!(e[0]>i[0]||e[1]>i[1]||e[2]>i[2]||r[0]=i[0]&&r[1]>=i[1]&&r[2]>=i[2]},containPoint:function(t){var e=this.min.array,r=this.max.array,n=t.array;return e[0]<=n[0]&&e[1]<=n[1]&&e[2]<=n[2]&&r[0]>=n[0]&&r[1]>=n[1]&&r[2]>=n[2]},isFinite:function(){var t=this.min.array,e=this.max.array;return isFinite(t[0])&&isFinite(t[1])&&isFinite(t[2])&&isFinite(e[0])&&isFinite(e[1])&&isFinite(e[2])}, -applyTransform:function(){var t=Je.create(),e=Je.create(),r=Je.create(),n=Je.create(),i=Je.create(),a=Je.create();return function(o){var s=this.min.array,u=this.max.array,l=o.array;return t[0]=l[0]*s[0],t[1]=l[1]*s[0],t[2]=l[2]*s[0],e[0]=l[0]*u[0],e[1]=l[1]*u[0],e[2]=l[2]*u[0],r[0]=l[4]*s[1],r[1]=l[5]*s[1],r[2]=l[6]*s[1],n[0]=l[4]*u[1],n[1]=l[5]*u[1],n[2]=l[6]*u[1],i[0]=l[8]*s[2],i[1]=l[9]*s[2],i[2]=l[10]*s[2],a[0]=l[8]*u[2],a[1]=l[9]*u[2],a[2]=l[10]*u[2],s[0]=Math.min(t[0],e[0])+Math.min(r[0],n[0])+Math.min(i[0],a[0])+l[12],s[1]=Math.min(t[1],e[1])+Math.min(r[1],n[1])+Math.min(i[1],a[1])+l[13],s[2]=Math.min(t[2],e[2])+Math.min(r[2],n[2])+Math.min(i[2],a[2])+l[14],u[0]=Math.max(t[0],e[0])+Math.max(r[0],n[0])+Math.max(i[0],a[0])+l[12],u[1]=Math.max(t[1],e[1])+Math.max(r[1],n[1])+Math.max(i[1],a[1])+l[13],u[2]=Math.max(t[2],e[2])+Math.max(r[2],n[2])+Math.max(i[2],a[2])+l[14],this.min._dirty=!0,this.max._dirty=!0,this}}(),applyProjection:function(t){var e=this.min.array,r=this.max.array,n=t.array,i=e[0],a=e[1],o=e[2],s=r[0],u=r[1],l=e[2],c=r[0],h=r[1],f=r[2];if(1===n[15])e[0]=n[0]*i+n[12],e[1]=n[5]*a+n[13],r[2]=n[10]*o+n[14],r[0]=n[0]*c+n[12],r[1]=n[5]*h+n[13],e[2]=n[10]*f+n[14];else{var d=-1/o;e[0]=n[0]*i*d,e[1]=n[5]*a*d,r[2]=(n[10]*o+n[14])*d,d=-1/l,r[0]=n[0]*s*d,r[1]=n[5]*u*d,d=-1/f,e[2]=(n[10]*f+n[14])*d}return this.min._dirty=!0,this.max._dirty=!0,this},updateVertices:function(){var t=this.vertices;if(!t){for(var t=[],e=0;e<8;e++)t[e]=Je.fromValues(0,0,0);this.vertices=t}var r=this.min.array,n=this.max.array;return $e(t[0],r[0],r[1],r[2]),$e(t[1],r[0],n[1],r[2]),$e(t[2],n[0],r[1],r[2]),$e(t[3],n[0],n[1],r[2]),$e(t[4],r[0],r[1],n[2]),$e(t[5],r[0],n[1],n[2]),$e(t[6],n[0],r[1],n[2]),$e(t[7],n[0],n[1],n[2]),this},copy:function(t){var e=this.min,r=this.max;return Qe(e.array,t.min.array),Qe(r.array,t.max.array),e._dirty=!0,r._dirty=!0,this},clone:function(){var t=new tr;return t.copy(this),t}};var er=pe.mat4,rr=pe.vec3,nr=pe.mat3,ir=pe.quat,ar=function(){this._axisX=new Xe,this._axisY=new Xe,this._axisZ=new Xe,this.array=er.create(),this._dirty=!0};ar.prototype={constructor:ar,setArray:function(t){for(var e=0;e>e;return t+1},dispose:function(t){var e=this._cache;e.use(t.__uid__);var r=e.get("webgl_texture");r&&t.gl.deleteTexture(r),e.deleteContext(t.__uid__)},isRenderable:function(){},isPowerOfTwo:function(){}});Object.defineProperty(lr.prototype,"width",{get:function(){return this._width},set:function(t){this._width=t}}),Object.defineProperty(lr.prototype,"height",{get:function(){return this._height},set:function(t){this._height=t}}),lr.BYTE=He.BYTE,lr.UNSIGNED_BYTE=He.UNSIGNED_BYTE,lr.SHORT=He.SHORT,lr.UNSIGNED_SHORT=He.UNSIGNED_SHORT,lr.INT=He.INT,lr.UNSIGNED_INT=He.UNSIGNED_INT,lr.FLOAT=He.FLOAT,lr.HALF_FLOAT=36193,lr.UNSIGNED_INT_24_8_WEBGL=34042,lr.DEPTH_COMPONENT=He.DEPTH_COMPONENT,lr.DEPTH_STENCIL=He.DEPTH_STENCIL,lr.ALPHA=He.ALPHA,lr.RGB=He.RGB,lr.RGBA=He.RGBA,lr.LUMINANCE=He.LUMINANCE,lr.LUMINANCE_ALPHA=He.LUMINANCE_ALPHA,lr.SRGB=35904,lr.SRGB_ALPHA=35906,lr.COMPRESSED_RGB_S3TC_DXT1_EXT=33776,lr.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777,lr.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778,lr.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779,lr.NEAREST=He.NEAREST,lr.LINEAR=He.LINEAR,lr.NEAREST_MIPMAP_NEAREST=He.NEAREST_MIPMAP_NEAREST,lr.LINEAR_MIPMAP_NEAREST=He.LINEAR_MIPMAP_NEAREST,lr.NEAREST_MIPMAP_LINEAR=He.NEAREST_MIPMAP_LINEAR,lr.LINEAR_MIPMAP_LINEAR=He.LINEAR_MIPMAP_LINEAR,lr.REPEAT=He.REPEAT,lr.CLAMP_TO_EDGE=He.CLAMP_TO_EDGE,lr.MIRRORED_REPEAT=He.MIRRORED_REPEAT;var cr=function(){this.head=null,this.tail=null,this._length=0};cr.prototype.insert=function(t){var e=new cr.Entry(t);return this.insertEntry(e),e},cr.prototype.insertAt=function(t,e){if(!(t<0)){for(var r=this.head,n=0;r&&n!=t;)r=r.next,n++;if(r){var i=new cr.Entry(e),a=r.prev;a?(a.next=i,i.prev=a):this.head=i,i.next=r,r.prev=i}else this.insert(e)}},cr.prototype.insertBeforeEntry=function(t,e){var r=new cr.Entry(t),n=e.prev;n?(n.next=r,r.prev=n):this.head=r,r.next=e,e.prev=r,this._length++},cr.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,this.tail=t):this.head=this.tail=t,this._length++},cr.prototype.remove=function(t){var e=t.prev,r=t.next;e?e.next=r:this.head=r,r?r.prev=e:this.tail=e,t.next=t.prev=null,this._length--},cr.prototype.removeAt=function(t){if(!(t<0)){for(var e=this.head,r=0;e&&r!=t;)e=e.next,r++;return e?(this.remove(e),e.value):void 0}},cr.prototype.getHead=function(){if(this.head)return this.head.value},cr.prototype.getTail=function(){if(this.tail)return this.tail.value},cr.prototype.getAt=function(t){if(!(t<0)){for(var e=this.head,r=0;e&&r!=t;)e=e.next,r++;return e.value}},cr.prototype.indexOf=function(t){for(var e=this.head,r=0;e;){if(e.value===t)return r;e=e.next,r++}},cr.prototype.length=function(){return this._length},cr.prototype.isEmpty=function(){return 0===this._length},cr.prototype.forEach=function(t,e){for(var r=this.head,n=0,i=void 0!==e;r;)i?t.call(e,r.value,n):t(r.value,n),r=r.next,n++},cr.prototype.clear=function(){this.tail=this.head=null,this._length=0},cr.Entry=function(t){this.value=t,this.next=null,this.prev=null};var hr=function(t){this._list=new cr,this._map={},this._maxSize=t||10};hr.prototype.setMaxSize=function(t){this._maxSize=t},hr.prototype.put=function(t,e){if(void 0===this._map[t]){var r=this._list.length();if(r>=this._maxSize&&r>0){var n=this._list.head;this._list.remove(n),delete this._map[n.key]}var i=this._list.insert(e);i.key=t,this._map[t]=i}},hr.prototype.get=function(t){var e=this._map[t];if(void 0!==e)return e!==this._list.tail&&(this._list.remove(e),this._list.insertEntry(e)),e.value},hr.prototype.remove=function(t){var e=this._map[t];void 0!==e&&(delete this._map[t],this._list.remove(e))},hr.prototype.clear=function(){this._list.clear(),this._map={}};var fr={},dr={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},mr=new hr(20),pr=null;fr.parse=function(t,e){if(t){e=e||[];var r=mr.get(t);if(r)return O(e,r);t+="";var n=t.replace(/ /g,"").toLowerCase();if(n in dr)return O(e,dr[n]),B(t,e),e;if("#"!==n.charAt(0)){var i=n.indexOf("("),a=n.indexOf(")");if(-1!==i&&a+1===n.length){var o=n.substr(0,i),s=n.substr(i+1,a-(i+1)).split(","),u=1;switch(o){case"rgba":if(4!==s.length)return void I(e,0,0,0,1);u=L(s.pop());case"rgb":return 3!==s.length?void I(e,0,0,0,1):(I(e,R(s[0]),R(s[1]),R(s[2]),u),B(t,e),e);case"hsla":return 4!==s.length?void I(e,0,0,0,1):(s[3]=L(s[3]),F(s,e),B(t,e),e);case"hsl":return 3!==s.length?void I(e,0,0,0,1):(F(s,e),B(t,e),e);default:return}}I(e,0,0,0,1)}else{if(4===n.length){var l=parseInt(n.substr(1),16);return l>=0&&l<=4095?(I(e,(3840&l)>>4|(3840&l)>>8,240&l|(240&l)>>4,15&l|(15&l)<<4,1),B(t,e),e):void I(e,0,0,0,1)}if(7===n.length){var l=parseInt(n.substr(1),16);return l>=0&&l<=16777215?(I(e,(16711680&l)>>16,(65280&l)>>8,255&l,1),B(t,e),e):void I(e,0,0,0,1)}}}},fr.parseToFloat=function(t,e){if(e=fr.parse(t,e))return e[0]/=255,e[1]/=255,e[2]/=255,e},fr.lift=function(t,e){var r=fr.parse(t);if(r){for(var n=0;n<3;n++)r[n]=e<0?r[n]*(1-e)|0:(255-r[n])*e+r[n]|0;return fr.stringify(r,4===r.length?"rgba":"rgb")}},fr.toHex=function(t){var e=fr.parse(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)},fr.fastLerp=function(t,e,r){if(e&&e.length&&t>=0&&t<=1){r=r||[];var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=e[i],s=e[a],u=n-i;return r[0]=M(D(o[0],s[0],u)),r[1]=M(D(o[1],s[1],u)),r[2]=M(D(o[2],s[2],u)),r[3]=N(D(o[3],s[3],u)),r}},fr.fastMapToColor=fr.fastLerp,fr.lerp=function(t,e,r){if(e&&e.length&&t>=0&&t<=1){var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=fr.parse(e[i]),s=fr.parse(e[a]),u=n-i,l=fr.stringify([M(D(o[0],s[0],u)),M(D(o[1],s[1],u)),M(D(o[2],s[2],u)),N(D(o[3],s[3],u))],"rgba");return r?{color:l,leftIndex:i,rightIndex:a,value:n}:l}},fr.mapToColor=fr.lerp,fr.modifyHSL=function(t,e,r,n){if(t=fr.parse(t))return t=U(t),null!=e&&(t[0]=C(e)),null!=r&&(t[1]=L(r)),null!=n&&(t[2]=L(n)),fr.stringify(F(t),"rgba")},fr.modifyAlpha=function(t,e){if((t=fr.parse(t))&&null!=e)return t[3]=N(e),fr.stringify(t,"rgba")},fr.stringify=function(t,e){if(t&&t.length){var r=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(r+=","+t[3]),e+"("+r+")"}};var _r=fr.parseToFloat,gr={},vr=Pe.extend(function(){return{name:"",depthTest:!0,depthMask:!0,transparent:!1,blend:null,autoUpdateTextureStatus:!0,uniforms:{},vertexDefines:{},fragmentDefines:{},_textureStatus:{},_enabledUniforms:null}},function(){this.name||(this.name="MATERIAL_"+this.__uid__),this.shader&&this.attachShader(this.shader,!0)},{precision:"highp",bind:function(t,e,r,n){for(var i=t.gl,a=e.currentTextureSlot(),o=0;o=0},getEnabledUniforms:function(){return this._enabledUniforms},getTextureUniforms:function(){return this._textureUniforms},set:function(t,e){if("object"==typeof t)for(var r in t){var n=t[r];this.setUniform(r,n)}else this.setUniform(t,e)},get:function(t){var e=this.uniforms[t];if(e)return e.value},attachShader:function(t,e){var r=this.uniforms;this.uniforms=t.createUniforms(),this.shader=t;var n=this.uniforms;this._enabledUniforms=Object.keys(n),this._enabledUniforms.sort(),this._textureUniforms=this._enabledUniforms.filter(function(t){var e=this.uniforms[t].type;return"t"===e||"tv"===e},this);var i=this.vertexDefines,a=this.fragmentDefines;if(this.vertexDefines=Le.clone(t.vertexDefines),this.fragmentDefines=Le.clone(t.fragmentDefines),e){for(var o in r)n[o]&&(n[o].value=r[o].value);Le.defaults(this.vertexDefines,i),Le.defaults(this.fragmentDefines,a)}var s={};for(var u in t.textures)s[u]={shaderType:t.textures[u].shaderType,type:t.textures[u].type,enabled:!(!e||!this._textureStatus[u])&&this._textureStatus[u].enabled};this._textureStatus=s,this._programKey=""},clone:function(){var t=new this.constructor({name:this.name,shader:this.shader});for(var e in this.uniforms)t.uniforms[e].value=this.uniforms[e].value;return t.depthTest=this.depthTest,t.depthMask=this.depthMask,t.transparent=this.transparent,t.blend=this.blend,t.vertexDefines=Le.clone(this.vertexDefines),t.fragmentDefines=Le.clone(this.fragmentDefines),t.enableTexture(this.getEnabledTextures()),t.precision=this.precision,t},define:function(t,e,r){var n=this.vertexDefines,i=this.fragmentDefines;"vertex"!==t&&"fragment"!==t&&"both"!==t&&arguments.length<3&&(r=e,e=t,t="both"),r=null!=r?r:null,"vertex"!==t&&"both"!==t||n[e]!==r&&(n[e]=r,this._programKey=""),"fragment"!==t&&"both"!==t||i[e]!==r&&(i[e]=r,"both"!==t&&(this._programKey=""))},undefine:function(t,e){"vertex"!==t&&"fragment"!==t&&"both"!==t&&arguments.length<2&&(e=t,t="both"),"vertex"!==t&&"both"!==t||this.isDefined("vertex",e)&&(delete this.vertexDefines[e],this._programKey=""),"fragment"!==t&&"both"!==t||this.isDefined("fragment",e)&&(delete this.fragmentDefines[e],"both"!==t&&(this._programKey=""))},isDefined:function(t,e){switch(t){case"vertex":return void 0!==this.vertexDefines[e];case"fragment":return void 0!==this.fragmentDefines[e]}},getDefine:function(t,e){switch(t){case"vertex":return this.vertexDefines[e];case"fragment":return this.fragmentDefines[e]}},enableTexture:function(t){if(Array.isArray(t))for(var e=0;e=0)r.attributeSemantics[u]={symbol:a,type:c},h=!1;else if(Pr.indexOf(u)>=0){var f=!1,d=u;u.match(/TRANSPOSE$/)&&(f=!0,d=u.slice(0,-9)),r.matrixSemantics[u]={symbol:a,type:c,isTranspose:f,semanticNoTranspose:d},h=!1}else if(Lr.indexOf(u)>=0)r.uniformSemantics[u]={symbol:a,type:c},h=!1;else if("unconfigurable"===u)h=!1;else{if(!(l=r._parseDefaultValue(i,u)))throw new Error('Unkown semantic "'+u+'"');u=""}h&&(e[a]={type:c,value:o?Nr.array:l||Nr[i],semantic:u||null})}return["uniform",i,a,o].join(" ")+";\n"}}var e={},r=this,n="vertex";this._uniformList=[],this._vertexCode=this._vertexCode.replace(Sr,t),n="fragment",this._fragmentCode=this._fragmentCode.replace(Sr,t),r.matrixSemanticKeys=Object.keys(this.matrixSemantics),this.uniformTemplates=e},_parseDefaultValue:function(t,e){var r=/\[\s*(.*)\s*\]/;{if("vec2"!==t&&"vec3"!==t&&"vec4"!==t)return"bool"===t?function(){return"true"===e.toLowerCase() -}:"float"===t?function(){return parseFloat(e)}:"int"===t?function(){return parseInt(e)}:void 0;var n=r.exec(e)[1];if(n){var i=n.split(/\s*,\s*/);return function(){return new We.Float32Array(i)}}}},_parseAttributes:function(){function t(t,n,i,a,o){if(n&&i){var s=1;switch(n){case"vec4":s=4;break;case"vec3":s=3;break;case"vec2":s=2;break;case"float":s=1}if(e[i]={type:"float",size:s,semantic:o||null},o){if(Rr.indexOf(o)<0)throw new Error('Unkown semantic "'+o+'"');r.attributeSemantics[o]={symbol:i,type:n}}}return["attribute",n,i].join(" ")+";\n"}var e={},r=this;this._vertexCode=this._vertexCode.replace(wr,t),this.attributes=e},_parseDefines:function(){function t(t,n,i){var a="vertex"===r?e.vertexDefines:e.fragmentDefines;return a[n]||(a[n]="false"!=i&&("true"==i||(i?isNaN(parseFloat(i))?i.trim():parseFloat(i):null))),""}var e=this,r="vertex";this._vertexCode=this._vertexCode.replace(Mr,t),r="fragment",this._fragmentCode=this._fragmentCode.replace(Mr,t)},clone:function(){var t=Ir[this._shaderID];return new K(t.vertex,t.fragment)}},Object.defineProperty&&(Object.defineProperty(K.prototype,"shaderID",{get:function(){return this._shaderID}}),Object.defineProperty(K.prototype,"vertex",{get:function(){return this._vertexCode}}),Object.defineProperty(K.prototype,"fragment",{get:function(){return this._fragmentCode}}),Object.defineProperty(K.prototype,"uniforms",{get:function(){return this._uniformList}}));var Or=/(@import)\s*([0-9a-zA-Z_\-\.]*)/g;K.parseImport=function(t){return t=t.replace(Or,function(t,e,r){var t=K.source(r);return t?K.parseImport(t):(console.error('Shader chunk "'+r+'" not existed in library'),"")})};var Br=/(@export)\s*([0-9a-zA-Z_\-\.]*)\s*\n([\s\S]*?)@end/g;K.import=function(t){t.replace(Br,function(t,e,r,n){var n=n.replace(/(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+\x24)/g,"");if(n){for(var i,a=r.split("."),o=K.codes,s=0;s0&&this.setViewport(this._viewportStack.pop())},saveClear:function(){this._clearStack.push({clearBit:this.clearBit,clearColor:this.clearColor})},restoreClear:function(){if(this._clearStack.length>0){var t=this._clearStack.pop();this.clearColor=t.clearColor,this.clearBit=t.clearBit}},bindSceneRendering:function(t){this._sceneRendering=t},render:function(t,e,r,n){var i=this.gl,a=this.clearColor;if(this.clearBit){i.colorMask(!0,!0,!0,!0),i.depthMask(!0);var o=this.viewport,s=!1,u=o.devicePixelRatio;(o.width!==this._width||o.height!==this._height||u&&u!==this.devicePixelRatio||o.x||o.y)&&(s=!0,i.enable(i.SCISSOR_TEST),i.scissor(o.x*u,o.y*u,o.width*u,o.height*u)),i.clearColor(a[0],a[1],a[2],a[3]),i.clear(this.clearBit),s&&i.disable(i.SCISSOR_TEST)}if(r||t.update(!1),!(e=e||t.getMainCamera()))return void console.error("Can't find camera in the scene.");e.getScene()||e.update(!0),this._sceneRendering=t,t.viewBoundingBoxLastFrame.min.set(1/0,1/0,1/0),t.viewBoundingBoxLastFrame.max.set(-1/0,-1/0,-1/0);var l=this.cullRenderList(t.opaqueList,t,e),c=this.cullRenderList(t.transparentList,t,e),h=t.material;t.trigger("beforerender",this,t,e),n?(this.renderPreZ(l,t,e),i.depthFunc(i.LEQUAL)):i.depthFunc(i.LESS);for(var f=Vr(),d=Gr.create(),m=0;m0){var s=t[i-1],u=s.joints?s.joints.length:0;if((a.joints.length?a.joints.length:0)===u&&a.material===s.material&&a.lightGroup===s.lightGroup){a.__program=s.__program;continue}}var l=this._programMgr.getProgram(a,o,e);this.validateProgram(l),a.__program=l}},cullRenderList:function(t,e,r){for(var n=[],i=0;i0&&t.min.array[2]<0&&(t.max.array[2]=-1e-20),t.applyProjection(e);var u=t.min.array,l=t.max.array;if(l[0]<-1||u[0]>1||l[1]<-1||u[1]>1||l[2]<-1||u[2]>1)return!0}return!1}}(),disposeScene:function(t){this.disposeNode(t,!0,!0),t.dispose()},disposeNode:function(t,e,r){t.getParent()&&t.getParent().remove(t),t.traverse(function(t){t.geometry&&e&&t.geometry.dispose(this),t.dispose&&t.dispose(this)},this)},disposeGeometry:function(t){t.dispose(this)},disposeTexture:function(t){t.dispose(this)},disposeFrameBuffer:function(t){t.dispose(this)},dispose:function(){},screenToNDC:function(t,e,r){r||(r=new ge),e=this._height-e;var n=this.viewport,i=r.array;return i[0]=(t-n.x)/n.width,i[0]=2*i[0]-1,i[1]=(e-n.y)/n.height,i[1]=2*i[1]-1,r}});zr.opaqueSortCompare=zr.prototype.opaqueSortCompare=function(t,e){return t.renderOrder===e.renderOrder?t.__program===e.__program?t.material===e.material?t.geometry.__uid__-e.geometry.__uid__:t.material.__uid__-e.material.__uid__:t.__program&&e.__program?t.__program.__uid__-e.__program.__uid__:0:t.renderOrder-e.renderOrder},zr.transparentSortCompare=zr.prototype.transparentSortCompare=function(t,e){return t.renderOrder===e.renderOrder?t.__depth===e.__depth?t.__program===e.__program?t.material===e.material?t.geometry.__uid__-e.geometry.__uid__:t.material.__uid__-e.material.__uid__:t.__program&&e.__program?t.__program.__uid__-e.__program.__uid__:0:t.__depth-e.__depth:t.renderOrder-e.renderOrder};var Xr={IDENTITY:Vr(),WORLD:Vr(),VIEW:Vr(),PROJECTION:Vr(),WORLDVIEW:Vr(),VIEWPROJECTION:Vr(),WORLDVIEWPROJECTION:Vr(),WORLDINVERSE:Vr(),VIEWINVERSE:Vr(),PROJECTIONINVERSE:Vr(),WORLDVIEWINVERSE:Vr(),VIEWPROJECTIONINVERSE:Vr(),WORLDVIEWPROJECTIONINVERSE:Vr(),WORLDTRANSPOSE:Vr(),VIEWTRANSPOSE:Vr(),PROJECTIONTRANSPOSE:Vr(),WORLDVIEWTRANSPOSE:Vr(),VIEWPROJECTIONTRANSPOSE:Vr(),WORLDVIEWPROJECTIONTRANSPOSE:Vr(),WORLDINVERSETRANSPOSE:Vr(),VIEWINVERSETRANSPOSE:Vr(),PROJECTIONINVERSETRANSPOSE:Vr(),WORLDVIEWINVERSETRANSPOSE:Vr(),VIEWPROJECTIONINVERSETRANSPOSE:Vr(),WORLDVIEWPROJECTIONINVERSETRANSPOSE:Vr()};zr.COLOR_BUFFER_BIT=He.COLOR_BUFFER_BIT,zr.DEPTH_BUFFER_BIT=He.DEPTH_BUFFER_BIT,zr.STENCIL_BUFFER_BIT=He.STENCIL_BUFFER_BIT;var jr=pe.quat,qr=function(t,e,r,n){t=t||0,e=e||0,r=r||0,n=void 0===n?1:n,this.array=jr.fromValues(t,e,r,n),this._dirty=!0};qr.prototype={constructor:qr,add:function(t){return jr.add(this.array,this.array,t.array),this._dirty=!0,this},calculateW:function(){return jr.calculateW(this.array,this.array),this._dirty=!0,this},set:function(t,e,r,n){return this.array[0]=t,this.array[1]=e,this.array[2]=r,this.array[3]=n,this._dirty=!0,this},setArray:function(t){return this.array[0]=t[0],this.array[1]=t[1],this.array[2]=t[2],this.array[3]=t[3],this._dirty=!0,this},clone:function(){return new qr(this.x,this.y,this.z,this.w)},conjugate:function(){return jr.conjugate(this.array,this.array),this._dirty=!0,this},copy:function(t){return jr.copy(this.array,t.array),this._dirty=!0,this},dot:function(t){return jr.dot(this.array,t.array)},fromMat3:function(t){return jr.fromMat3(this.array,t.array),this._dirty=!0,this},fromMat4:function(){var t=pe.mat3,e=t.create();return function(r){return t.fromMat4(e,r.array),t.transpose(e,e),jr.fromMat3(this.array,e),this._dirty=!0,this}}(),identity:function(){return jr.identity(this.array),this._dirty=!0,this},invert:function(){return jr.invert(this.array,this.array),this._dirty=!0,this},len:function(){return jr.len(this.array)},length:function(){return jr.length(this.array)},lerp:function(t,e,r){return jr.lerp(this.array,t.array,e.array,r),this._dirty=!0,this},mul:function(t){return jr.mul(this.array,this.array,t.array),this._dirty=!0,this},mulLeft:function(t){return jr.multiply(this.array,t.array,this.array),this._dirty=!0,this},multiply:function(t){return jr.multiply(this.array,this.array,t.array),this._dirty=!0,this},multiplyLeft:function(t){return jr.multiply(this.array,t.array,this.array),this._dirty=!0,this},normalize:function(){return jr.normalize(this.array,this.array),this._dirty=!0,this},rotateX:function(t){return jr.rotateX(this.array,this.array,t),this._dirty=!0,this},rotateY:function(t){return jr.rotateY(this.array,this.array,t),this._dirty=!0,this},rotateZ:function(t){return jr.rotateZ(this.array,this.array,t),this._dirty=!0,this},rotationTo:function(t,e){return jr.rotationTo(this.array,t.array,e.array),this._dirty=!0,this},setAxes:function(t,e,r){return jr.setAxes(this.array,t.array,e.array,r.array),this._dirty=!0,this},setAxisAngle:function(t,e){return jr.setAxisAngle(this.array,t.array,e),this._dirty=!0,this},slerp:function(t,e,r){return jr.slerp(this.array,t.array,e.array,r),this._dirty=!0,this},sqrLen:function(){return jr.sqrLen(this.array)},squaredLength:function(){return jr.squaredLength(this.array)},fromEuler:function(t,e){return qr.fromEuler(this,t,e)},toString:function(){return"["+Array.prototype.join.call(this.array,",")+"]"},toArray:function(){return Array.prototype.slice.call(this.array)}};var Yr=Object.defineProperty;if(Yr){var Kr=qr.prototype;Yr(Kr,"x",{get:function(){return this.array[0]},set:function(t){this.array[0]=t,this._dirty=!0}}),Yr(Kr,"y",{get:function(){return this.array[1]},set:function(t){this.array[1]=t,this._dirty=!0}}),Yr(Kr,"z",{get:function(){return this.array[2]},set:function(t){this.array[2]=t,this._dirty=!0}}),Yr(Kr,"w",{get:function(){return this.array[3]},set:function(t){this.array[3]=t,this._dirty=!0}})}qr.add=function(t,e,r){return jr.add(t.array,e.array,r.array),t._dirty=!0,t},qr.set=function(t,e,r,n,i){jr.set(t.array,e,r,n,i),t._dirty=!0},qr.copy=function(t,e){return jr.copy(t.array,e.array),t._dirty=!0,t},qr.calculateW=function(t,e){return jr.calculateW(t.array,e.array),t._dirty=!0,t},qr.conjugate=function(t,e){return jr.conjugate(t.array,e.array),t._dirty=!0,t},qr.identity=function(t){return jr.identity(t.array),t._dirty=!0,t},qr.invert=function(t,e){return jr.invert(t.array,e.array),t._dirty=!0,t},qr.dot=function(t,e){return jr.dot(t.array,e.array)},qr.len=function(t){return jr.length(t.array)},qr.lerp=function(t,e,r,n){return jr.lerp(t.array,e.array,r.array,n),t._dirty=!0,t},qr.slerp=function(t,e,r,n){return jr.slerp(t.array,e.array,r.array,n),t._dirty=!0,t},qr.mul=function(t,e,r){return jr.multiply(t.array,e.array,r.array),t._dirty=!0,t},qr.multiply=qr.mul,qr.rotateX=function(t,e,r){return jr.rotateX(t.array,e.array,r),t._dirty=!0,t},qr.rotateY=function(t,e,r){return jr.rotateY(t.array,e.array,r),t._dirty=!0,t},qr.rotateZ=function(t,e,r){return jr.rotateZ(t.array,e.array,r),t._dirty=!0,t},qr.setAxisAngle=function(t,e,r){return jr.setAxisAngle(t.array,e.array,r),t._dirty=!0,t},qr.normalize=function(t,e){return jr.normalize(t.array,e.array),t._dirty=!0,t},qr.sqrLen=function(t){return jr.sqrLen(t.array)},qr.squaredLength=qr.sqrLen,qr.fromMat3=function(t,e){return jr.fromMat3(t.array,e.array),t._dirty=!0,t},qr.setAxes=function(t,e,r,n){return jr.setAxes(t.array,e.array,r.array,n.array),t._dirty=!0,t},qr.rotationTo=function(t,e,r){return jr.rotationTo(t.array,e.array,r.array),t._dirty=!0,t},qr.fromEuler=function(t,e,r){t._dirty=!0,e=e.array;var n=t.array,i=Math.cos(e[0]/2),a=Math.cos(e[1]/2),o=Math.cos(e[2]/2),s=Math.sin(e[0]/2),u=Math.sin(e[1]/2),l=Math.sin(e[2]/2),r=(r||"XYZ").toUpperCase();switch(r){case"XYZ":n[0]=s*a*o+i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o-s*u*l;break;case"YXZ":n[0]=s*a*o+i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o+s*u*l;break;case"ZXY":n[0]=s*a*o-i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o-s*u*l;break;case"ZYX":n[0]=s*a*o-i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o+s*u*l;break;case"YZX":n[0]=s*a*o+i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o-s*u*l;break;case"XZY":n[0]=s*a*o-i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o+s*u*l}};var Zr=pe.mat4,Jr=0,Qr=Pe.extend({name:"",position:null,rotation:null,scale:null,worldTransform:null,localTransform:null,autoUpdateLocalTransform:!0,_parent:null,_scene:null,_needsUpdateWorldTransform:!0,_inIterating:!1,__depth:0},function(){this.name||(this.name=(this.type||"NODE")+"_"+Jr++),this.position||(this.position=new Xe),this.rotation||(this.rotation=new qr),this.scale||(this.scale=new Xe(1,1,1)),this.worldTransform=new ar,this.localTransform=new ar,this._children=[]},{target:null,invisible:!1,isSkinnedMesh:function(){return!1},isRenderable:function(){return!1},setName:function(t){var e=this._scene;if(e){var r=e._nodeRepository;delete r[this.name],r[t]=this}this.name=t},add:function(t){this._inIterating&&console.warn("Add operation can cause unpredictable error when in iterating");var e=t._parent;if(e!==this){e&&e.remove(t),t._parent=this,this._children.push(t);var r=this._scene;r&&r!==t.scene&&t.traverse(this._addSelfToScene,this),t._needsUpdateWorldTransform=!0}},remove:function(t){this._inIterating&&console.warn("Remove operation can cause unpredictable error when in iterating");var e=this._children,r=e.indexOf(t);r<0||(e.splice(r,1),t._parent=null,this._scene&&t.traverse(this._removeSelfFromScene,this))},removeAll:function(){for(var t=this._children,e=0;ethis.distance,i=1;i<8;i++)if(tn.dot(e[i].array,r)>this.distance!=n)return!0},intersectLine:function(){var t=tn.create();return function(e,r,n){var i=this.distanceToPoint(e),a=this.distanceToPoint(r);if(i>0&&a>0||i<0&&a<0)return null;var o=this.normal.array,s=this.distance,u=e.array;tn.sub(t,r.array,e.array),tn.normalize(t,t);var l=tn.dot(o,t);if(0===l)return null;n||(n=new Xe);var c=(tn.dot(o,u)-s)/l;return tn.scaleAndAdd(n.array,u,t,-c),n._dirty=!0,n}}(),applyTransform:function(){var t=en.create(),e=rn.create(),r=rn.create();return r[3]=1,function(n){n=n.array,tn.scale(r,this.normal.array,this.distance),rn.transformMat4(r,r,n),this.distance=tn.dot(r,this.normal.array),en.invert(t,n),en.transpose(t,t),e[3]=0,tn.copy(e,this.normal.array),rn.transformMat4(e,e,t),tn.copy(this.normal.array,e)}}(),copy:function(t){tn.copy(this.normal.array,t.normal.array),this.normal._dirty=!0,this.distance=t.distance},clone:function(){var t=new nn;return t.copy(this),t}};var an=pe.vec3,on=an.set,sn=an.copy,un=an.transformMat4,ln=Math.min,cn=Math.max,hn=function(){this.planes=[];for(var t=0;t<6;t++)this.planes.push(new nn);this.boundingBox=new tr,this.vertices=[];for(var t=0;t<8;t++)this.vertices[t]=an.fromValues(0,0,0)};hn.prototype={setFromProjection:function(t){var e=this.planes,r=t.array,n=r[0],i=r[1],a=r[2],o=r[3],s=r[4],u=r[5],l=r[6],c=r[7],h=r[8],f=r[9],d=r[10],m=r[11],p=r[12],_=r[13],g=r[14],v=r[15];on(e[0].normal.array,o-n,c-s,m-h),e[0].distance=-(v-p),e[0].normalize(),on(e[1].normal.array,o+n,c+s,m+h),e[1].distance=-(v+p),e[1].normalize(),on(e[2].normal.array,o+i,c+u,m+f),e[2].distance=-(v+_),e[2].normalize(),on(e[3].normal.array,o-i,c-u,m-f),e[3].distance=-(v-_),e[3].normalize(),on(e[4].normal.array,o-a,c-l,m-d),e[4].distance=-(v-g),e[4].normalize(),on(e[5].normal.array,o+a,c+l,m+d),e[5].distance=-(v+g),e[5].normalize();var y=this.boundingBox;if(0===v){var x=u/n,T=-g/(d-1),E=-g/(d+1),b=-E/u,A=-T/u;y.min.set(-b*x,-b,E),y.max.set(b*x,b,T);var S=this.vertices;on(S[0],-b*x,-b,E),on(S[1],-b*x,b,E),on(S[2],b*x,-b,E),on(S[3],b*x,b,E),on(S[4],-A*x,-A,T),on(S[5],-A*x,A,T),on(S[6],A*x,-A,T),on(S[7],A*x,A,T)}else{var w=(-1-p)/n,M=(1-p)/n,C=(1-_)/u,N=(-1-_)/u,R=(-1-g)/d,L=(1-g)/d;y.min.set(Math.min(w,M),Math.min(N,C),Math.min(L,R)),y.max.set(Math.max(M,w),Math.max(C,N),Math.max(R,L));var P=y.min.array,D=y.max.array,S=this.vertices;on(S[0],P[0],P[1],P[2]),on(S[1],P[0],D[1],P[2]),on(S[2],D[0],P[1],P[2]),on(S[3],D[0],D[1],P[2]),on(S[4],P[0],P[1],D[2]),on(S[5],P[0],D[1],D[2]),on(S[6],D[0],P[1],D[2]),on(S[7],D[0],D[1],D[2])}},getTransformedBoundingBox:function(){var t=an.create();return function(e,r){var n=this.vertices,i=r.array,a=e.min,o=e.max,s=a.array,u=o.array,l=n[0];un(t,l,i),sn(s,t),sn(u,t);for(var c=1;c<8;c++)l=n[c],un(t,l,i),s[0]=ln(t[0],s[0]),s[1]=ln(t[1],s[1]),s[2]=ln(t[2],s[2]),u[0]=cn(t[0],u[0]),u[1]=cn(t[1],u[1]),u[2]=cn(t[2],u[2]);return a._dirty=!0,o._dirty=!0,e}}()};var fn=pe.vec3,dn=function(t,e){this.origin=t||new Xe,this.direction=e||new Xe};dn.prototype={constructor:dn,intersectPlane:function(t,e){var r=t.normal.array,n=t.distance,i=this.origin.array,a=this.direction.array,o=fn.dot(r,a);if(0===o)return null;e||(e=new Xe);var s=(fn.dot(r,i)-n)/o;return fn.scaleAndAdd(e.array,i,a,-s),e._dirty=!0,e},mirrorAgainstPlane:function(t){var e=fn.dot(t.normal.array,this.direction.array);fn.scaleAndAdd(this.direction.array,this.direction.array,t.normal.array,2*-e),this.direction._dirty=!0},distanceToPoint:function(){var t=fn.create();return function(e){fn.sub(t,e,this.origin.array);var r=fn.dot(t,this.direction.array);if(r<0)return fn.distance(this.origin.array,e);var n=fn.lenSquared(t);return Math.sqrt(n-r*r)}}(),intersectSphere:function(){var t=fn.create();return function(e,r,n){var i=this.origin.array,a=this.direction.array;e=e.array,fn.sub(t,e,i);var o=fn.dot(t,a),s=fn.squaredLength(t),u=s-o*o,l=r*r;if(!(u>l)){var c=Math.sqrt(l-u),h=o-c,f=o+c;return n||(n=new Xe),h<0?f<0?null:(fn.scaleAndAdd(n.array,i,a,f),n):(fn.scaleAndAdd(n.array,i,a,h),n)}}}(),intersectBoundingBox:function(t,e){var r,n,i,a,o,s,u=this.direction.array,l=this.origin.array,c=t.min.array,h=t.max.array,f=1/u[0],d=1/u[1],m=1/u[2];if(f>=0?(r=(c[0]-l[0])*f,n=(h[0]-l[0])*f):(n=(c[0]-l[0])*f,r=(h[0]-l[0])*f),d>=0?(i=(c[1]-l[1])*d,a=(h[1]-l[1])*d):(a=(c[1]-l[1])*d,i=(h[1]-l[1])*d),r>a||i>n)return null;if((i>r||r!==r)&&(r=i),(a=0?(o=(c[2]-l[2])*m,s=(h[2]-l[2])*m):(s=(c[2]-l[2])*m, -o=(h[2]-l[2])*m),r>s||o>n)return null;if((o>r||r!==r)&&(r=o),(s=0?r:n;return e||(e=new Xe),fn.scaleAndAdd(e.array,l,u,p),e},intersectTriangle:function(){var t=fn.create(),e=fn.create(),r=fn.create(),n=fn.create();return function(i,a,o,s,u,l){var c=this.direction.array,h=this.origin.array;i=i.array,a=a.array,o=o.array,fn.sub(t,a,i),fn.sub(e,o,i),fn.cross(n,e,c);var f=fn.dot(t,n);if(s){if(f>-1e-5)return null}else if(f>-1e-5&&f<1e-5)return null;fn.sub(r,h,i);var d=fn.dot(n,r)/f;if(d<0||d>1)return null;fn.cross(n,t,r);var m=fn.dot(c,n)/f;if(m<0||m>1||d+m>1)return null;fn.cross(n,t,e);var p=-fn.dot(r,n)/f;return p<0?null:(u||(u=new Xe),l&&Xe.set(l,1-d-m,d,m),fn.scaleAndAdd(u.array,h,c,p),u)}}(),applyTransform:function(t){Xe.add(this.direction,this.direction,this.origin),Xe.transformMat4(this.origin,this.origin,t),Xe.transformMat4(this.direction,this.direction,t),Xe.sub(this.direction,this.direction,this.origin),Xe.normalize(this.direction,this.direction)},copy:function(t){Xe.copy(this.origin,t.origin),Xe.copy(this.direction,t.direction)},clone:function(){var t=new dn;return t.copy(this),t}};var mn=pe.vec3,pn=pe.vec4,_n=Qr.extend(function(){return{projectionMatrix:new ar,invProjectionMatrix:new ar,viewMatrix:new ar,frustum:new hn}},function(){this.update(!0)},{update:function(t){Qr.prototype.update.call(this,t),ar.invert(this.viewMatrix,this.worldTransform),this.updateProjectionMatrix(),ar.invert(this.invProjectionMatrix,this.projectionMatrix),this.frustum.setFromProjection(this.projectionMatrix)},setViewMatrix:function(t){ar.copy(this.viewMatrix,t),ar.invert(this.worldTransform,t),this.decomposeWorldTransform()},decomposeProjectionMatrix:function(){},setProjectionMatrix:function(t){ar.copy(this.projectionMatrix,t),ar.invert(this.invProjectionMatrix,t),this.decomposeProjectionMatrix()},updateProjectionMatrix:function(){},castRay:function(){var t=pn.create();return function(e,r){var n=void 0!==r?r:new dn,i=e.array[0],a=e.array[1];return pn.set(t,i,a,-1,1),pn.transformMat4(t,t,this.invProjectionMatrix.array),pn.transformMat4(t,t,this.worldTransform.array),mn.scale(n.origin.array,t,1/t[3]),pn.set(t,i,a,1,1),pn.transformMat4(t,t,this.invProjectionMatrix.array),pn.transformMat4(t,t,this.worldTransform.array),mn.scale(t,t,1/t[3]),mn.sub(n.direction.array,t,n.origin.array),mn.normalize(n.direction.array,n.direction.array),n.direction._dirty=!0,n.origin._dirty=!0,n}}()}),gn={},vn=Qr.extend(function(){return{material:null,autoUpdate:!0,opaqueList:[],transparentList:[],lights:[],viewBoundingBoxLastFrame:new tr,shadowUniforms:{},_cameraList:[],_lightUniforms:{},_previousLightNumber:{},_lightNumber:{},_lightProgramKeys:{},_opaqueObjectCount:0,_transparentObjectCount:0,_nodeRepository:{}}},function(){this._scene=this},{addToScene:function(t){t instanceof _n&&(this._cameraList.length>0&&console.warn("Found multiple camera in one scene. Use the fist one."),this._cameraList.push(t)),t.name&&(this._nodeRepository[t.name]=t)},removeFromScene:function(t){if(t instanceof _n){var e=this._cameraList.indexOf(t);e>=0&&this._cameraList.splice(e,1)}t.name&&delete this._nodeRepository[t.name]},getNode:function(t){return this._nodeRepository[t]},cloneNode:function(t){var e=t.clone(),r={},n=function(i,a){i.skeleton&&(a.skeleton=i.skeleton.clone(t,e),a.joints=i.joints.slice()),i.material&&(r[i.material.__uid__]={oldMat:i.material});for(var o=0;o0&&this._updateRenderList(n)}},_updateLightUniforms:function(){var t=this.lights;t.sort($);var e=this._lightUniforms;for(var r in e)for(var n in e[r])e[r][n].value.length=0;for(var i=0;ia[0]&&(a[0]=s),u>a[1]&&(a[1]=u),l>a[2]&&(a[2]=l)}r._dirty=!0,n._dirty=!0}},dirty:function(){for(var t=this.getEnabledAttributes(),e=0;e=0){e||(e=Tn());var r=this.indices;return e[0]=r[3*t],e[1]=r[3*t+1],e[2]=r[3*t+2],e}},setTriangleIndices:function(t,e){var r=this.indices;r[3*t]=e[0],r[3*t+1]=e[1],r[3*t+2]=e[2]},isUseIndices:function(){return!!this.indices},initIndicesFromArray:function(t){var e,r=this.vertexCount>65535?We.Uint32Array:We.Uint16Array;if(t[0]&&t[0].length){var n=0;e=new r(3*t.length);for(var i=0;i=0&&(e.splice(r,1),delete this.attributes[t],!0)},getAttribute:function(t){return this.attributes[t]},getEnabledAttributes:function(){var t=this._enabledAttributes,e=this._attributeList;if(t)return t;for(var r=[],n=this.vertexCount,i=0;i65535&&(this.indices=new We.Uint32Array(this.indices));for(var t=this.attributes,e=this.indices,r=this.getEnabledAttributes(),n={},i=0;i65535?Uint32Array:Uint16Array,m=this.indices=new d(e*t*6),p=this.radius,_=this.phiStart,g=this.phiLength,v=this.thetaStart,y=this.thetaLength,p=this.radius,x=[],T=[],E=0,b=1/p;for(f=0;f<=t;f++)for(h=0;h<=e;h++)l=h/e,c=f/t,o=-p*Math.cos(_+l*g)*Math.sin(v+c*y),s=p*Math.cos(v+c*y),u=p*Math.sin(_+l*g)*Math.sin(v+c*y),x[0]=o,x[1]=s,x[2]=u,T[0]=l,T[1]=c,r.set(E,x),n.set(E,T),x[0]*=b,x[1]*=b,x[2]*=b,i.set(E,x),E++;var A,S,w,M,C=e+1,N=0;for(f=0;f65535?Uint32Array:Uint16Array,g=(o-1)*(s-1)*6,v=this.indices=new _(g),y=0,f=0;f>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t},Rn.nearestPowerOfTwo=function(t){return Math.pow(2,Math.round(Math.log(t)/Math.LN2))};var Ln=Rn.isPowerOfTwo,Pn=lr.extend(function(){return{image:null,pixels:null,mipmaps:[]}},{update:function(t){var e=t.gl;e.bindTexture(e.TEXTURE_2D,this._cache.get("webgl_texture")),this.updateCommon(t);var r=this.format,n=this.type;e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.getAvailableWrapS()),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.getAvailableWrapT()),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.getAvailableMagFilter()),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.getAvailableMinFilter());var i=t.getGLExtension("EXT_texture_filter_anisotropic");if(i&&this.anisotropic>1&&e.texParameterf(e.TEXTURE_2D,i.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===n){t.getGLExtension("OES_texture_half_float")||(n=He.FLOAT)}if(this.mipmaps.length)for(var a=this.width,o=this.height,s=0;s=lr.COMPRESSED_RGB_S3TC_DXT1_EXT?t.compressedTexImage2D(t.TEXTURE_2D,r,a,n,i,0,e.pixels):t.texImage2D(t.TEXTURE_2D,r,a,n,i,0,a,o,e.pixels)},generateMipmap:function(t){var e=t.gl;this.useMipmap&&!this.NPOT&&(e.bindTexture(e.TEXTURE_2D,this._cache.get("webgl_texture")),e.generateMipmap(e.TEXTURE_2D))},isPowerOfTwo:function(){var t,e;return this.image?(t=this.image.width,e=this.image.height):(t=this.width,e=this.height),Ln(t)&&Ln(e)},isRenderable:function(){return this.image?"CANVAS"===this.image.nodeName||"VIDEO"===this.image.nodeName||this.image.complete:!(!this.width||!this.height)},bind:function(t){t.gl.bindTexture(t.gl.TEXTURE_2D,this.getWebGLTexture(t))},unbind:function(t){t.gl.bindTexture(t.gl.TEXTURE_2D,null)},load:function(t,e){var r=new Image;e&&(r.crossOrigin=e);var n=this;return r.onload=function(){n.dirty(),n.trigger("success",n),r.onload=null},r.onerror=function(){n.trigger("error",n),r.onerror=null},r.src=t,this.image=r,this}});Object.defineProperty(Pn.prototype,"width",{get:function(){return this.image?this.image.width:this._width},set:function(t){this.image?console.warn("Texture from image can't set width"):(this._width!==t&&this.dirty(),this._width=t)}}),Object.defineProperty(Pn.prototype,"height",{get:function(){return this.image?this.image.height:this._height},set:function(t){this.image?console.warn("Texture from image can't set height"):(this._height!==t&&this.dirty(),this._height=t)}});var Dn=Rn.isPowerOfTwo,In=["px","nx","py","ny","pz","nz"],On=lr.extend(function(){return{image:{px:null,nx:null,py:null,ny:null,pz:null,nz:null},pixels:{px:null,nx:null,py:null,ny:null,pz:null,nz:null},mipmaps:[]}},{update:function(t){var e=t.gl;e.bindTexture(e.TEXTURE_CUBE_MAP,this._cache.get("webgl_texture")),this.updateCommon(t);var r=this.format,n=this.type;e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_S,this.getAvailableWrapS()),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_T,this.getAvailableWrapT()),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MAG_FILTER,this.getAvailableMagFilter()),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MIN_FILTER,this.getAvailableMinFilter());var i=t.getGLExtension("EXT_texture_filter_anisotropic");if(i&&this.anisotropic>1&&e.texParameterf(e.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===n){t.getGLExtension("OES_texture_half_float")||(n=He.FLOAT)}if(this.mipmaps.length)for(var a=this.width,o=this.height,s=0;s0},beforeRender:function(t){},afterRender:function(t,e){},getBoundingBox:function(t,e){return e=Qr.prototype.getBoundingBox.call(this,t,e),this.geometry&&this.geometry.boundingBox&&e.union(this.geometry.boundingBox),e},render:function(t,e,r){var n=t.gl;e=e||this.material;var i=e.shader,a=this.geometry,o=this.mode,s=a.vertexCount,u=(a.isUseIndices(),t.getGLExtension("OES_element_index_uint")),l=u&&s>65535,c=l?n.UNSIGNED_INT:n.UNSIGNED_SHORT,h=t.getGLExtension("OES_vertex_array_object"),f=!a.dynamic,d=this._renderInfo;d.vertexCount=s,d.triangleCount=0,d.drawCallCount=0;var m=!1;if(Fn=t.__uid__+"-"+a.__uid__+"-"+r.__uid__,Fn!==Hn?m=!0:(h&&f||a._cache.isDirty("any"))&&(m=!0),Hn=Fn,m){var p=this._drawCache[Fn];if(!p){var _=a.getBufferChunks(t);if(!_)return;p=[];for(var g=0;g<_.length;g++){for(var v=_[g],y=v.attributeBuffers,x=v.indicesBuffer,T=[],E=[],b=0;b0)},render:function(t,e,r){var n=t.gl;if(this.skeleton){this.skeleton.update();var i=this.skeleton.getSubSkinMatrices(this.__uid__,this.joints);r.setUniformOfSemantic(n,"SKIN_MATRIX",i)}return zn.prototype.render.call(this,t,e,r)},getSkinMatricesTexture:function(){return this._skinMatricesTexture=this._skinMatricesTexture||new Pn({type:He.FLOAT,minFilter:He.NEAREST,magFilter:He.NEAREST,useMipmap:!1,flipY:!1}),this._skinMatricesTexture}});Xn.POINTS=He.POINTS,Xn.LINES=He.LINES,Xn.LINE_LOOP=He.LINE_LOOP,Xn.LINE_STRIP=He.LINE_STRIP,Xn.TRIANGLES=He.TRIANGLES,Xn.TRIANGLE_STRIP=He.TRIANGLE_STRIP,Xn.TRIANGLE_FAN=He.TRIANGLE_FAN,Xn.BACK=He.BACK,Xn.FRONT=He.FRONT,Xn.FRONT_AND_BACK=He.FRONT_AND_BACK,Xn.CW=He.CW,Xn.CCW=He.CCW;var jn=_n.extend({fov:50,aspect:1,near:.1,far:2e3},{updateProjectionMatrix:function(){var t=this.fov/180*Math.PI;this.projectionMatrix.perspective(t,this.aspect,this.near,this.far)},decomposeProjectionMatrix:function(){var t=this.projectionMatrix.array,e=2*Math.atan(1/t[5]);this.fov=e/Math.PI*180,this.aspect=t[5]/t[0],this.near=t[14]/(t[10]-1),this.far=t[14]/(t[10]+1)},clone:function(){var t=_n.prototype.clone.call(this);return t.fov=this.fov,t.aspect=this.aspect,t.near=this.near,t.far=this.far,t}}),qn=_n.extend({left:-1,right:1,near:-1,far:1,top:1,bottom:-1},{updateProjectionMatrix:function(){this.projectionMatrix.ortho(this.left,this.right,this.bottom,this.top,this.near,this.far)},decomposeProjectionMatrix:function(){var t=this.projectionMatrix.array;this.left=(-1-t[12])/t[0],this.right=(1-t[12])/t[0],this.top=(1-t[13])/t[5],this.bottom=(-1-t[13])/t[5],this.near=-(-1-t[14])/t[10],this.far=-(1-t[14])/t[10]},clone:function(){var t=_n.prototype.clone.call(this);return t.left=this.left,t.right=this.right,t.near=this.near,t.far=this.far,t.top=this.top,t.bottom=this.bottom,t}}),Yn={get:ct -},Kn="\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\nattribute vec3 barycentric;\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\nuniform mat4 viewInverse : VIEWINVERSE;\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\nvarying vec2 v_Texcoord2;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\nvarying vec3 v_Barycentric;\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = 1.0 - roughness;\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /( b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= diffuseTerm;\n outColor.rgb += specularTerm;\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 51.5);\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n #endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end";K.import(Kn);var Zn,Jn=["diffuseMap","normalMap","roughnessMap","metalnessMap","emissiveMap","environmentMap","brdfLookup","ssaoMap","aoMap"],Qn=["color","emission","emissionIntensity","alpha","roughness","metalness","uvRepeat","uvOffset","aoIntensity","alphaCutoff"],$n=["linear","encodeRGBM","decodeRGBM","doubleSided","alphaTest","roughnessChannel","metalnessChannel","environmentMapPrefiltered"],ti={roughnessChannel:"ROUGHNESS_CHANNEL",metalnessChannel:"METALNESS_CHANNEL"},ei={linear:"SRGB_DECODE",encodeRGBM:"RGBM_ENCODE",decodeRGBM:"RGBM_DECODE",doubleSided:"DOUBLE_SIDED",alphaTest:"ALPHA_TEST",environmentMapPrefiltered:"ENVIRONMENTMAP_PREFILTER"},ri=vr.extend(function(){return Zn||(Zn=new K(K.source("clay.standard.vertex"),K.source("clay.standard.fragment"))),{shader:Zn}},function(t){Le.extend(this,t),Le.defaults(this,{color:[1,1,1],emission:[0,0,0],emissionIntensity:0,roughness:.5,metalness:0,alpha:1,alphaTest:!1,alphaCutoff:.9,doubleSided:!1,uvRepeat:[1,1],uvOffset:[0,0],aoIntensity:1,environmentMapPrefiltered:!1,linear:!1,encodeRGBM:!1,decodeRGBM:!1,roughnessChannel:0,metalnessChannel:1}),this.define("fragment","USE_METALNESS"),this.define("fragment","USE_ROUGHNESS")},{clone:function(){var t=new ri({name:this.name});return Jn.forEach(function(e){this[e]&&(t[e]=this[e])},this),Qn.concat($n).forEach(function(e){t[e]=this[e]},this),t}});Qn.forEach(function(t){Object.defineProperty(ri.prototype,t,{get:function(){return this.get(t)},set:function(e){this.setUniform(t,e)}})}),Jn.forEach(function(t){Object.defineProperty(ri.prototype,t,{get:function(){return this.get(t)},set:function(e){this.setUniform(t,e)}})}),$n.forEach(function(t){var e="_"+t;Object.defineProperty(ri.prototype,t,{get:function(){return this[e]},set:function(r){if(this[e]=r,t in ti){var n=ti[t];this.define("fragment",n,r)}else{var n=ei[t];r?this.define("fragment",n):this.undefine("fragment",n)}}})}),Object.defineProperty(ri.prototype,"environmentBox",{get:function(){var t=this._environmentBox;return t&&(t.min.setArray(this.get("environmentBoxMin")),t.max.setArray(this.get("environmentBoxMax"))),t},set:function(t){this._environmentBox=t;var e=this.uniforms=this.uniforms||{};e.environmentBoxMin=e.environmentBoxMin||{value:null},e.environmentBoxMax=e.environmentBoxMax||{value:null},t&&(this.setUniform("environmentBoxMin",t.min.array),this.setUniform("environmentBoxMax",t.max.array)),t?this.define("fragment","PARALLAX_CORRECTED"):this.undefine("fragment","PARALLAX_CORRECTED")}});var ni=Pe.extend({name:"",index:-1,node:null,rootNode:null}),ii=pe.quat,ai=pe.vec3,oi=pe.mat4,si=Pe.extend(function(){return{relativeRootNode:null,name:"",joints:[],_clips:[],_invBindPoseMatricesArray:null,_jointMatricesSubArrays:[],_skinMatricesArray:null,_skinMatricesSubArrays:[],_subSkinMatricesArray:{}}},{addClip:function(t,e){for(var r=0;r0&&this._clips.splice(e,1)},removeClipsAll:function(){this._clips=[]},getClip:function(t){if(this._clips[t])return this._clips[t].clip},getClipNumber:function(){return this._clips.length},updateJointMatrices:function(){var t=oi.create();return function(){this._invBindPoseMatricesArray=new Float32Array(16*this.joints.length),this._skinMatricesArray=new Float32Array(16*this.joints.length);for(var e=0;e 0.)\n {\n gl_FragColor.rgb = mix(gl_FragColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (gl_FragColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n gl_FragColor.rgb = ACESToneMapping(gl_FragColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n gl_FragColor = linearTosRGB(gl_FragColor);\n#endif\n gl_FragColor = encodeHDR(gl_FragColor);\n}\n@end"),K.import(Kn),K.import("@export clay.wireframe.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\nattribute vec3 barycentric;\n@import clay.chunk.skinning_header\nvarying vec3 v_Barycentric;\nvoid main()\n{\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0 );\n v_Barycentric = barycentric;\n}\n@end\n@export clay.wireframe.fragment\nuniform vec3 color : [0.0, 0.0, 0.0];\nuniform float alpha : 1.0;\nuniform float lineWidth : 1.0;\nvarying vec3 v_Barycentric;\n@import clay.util.edge_factor\nvoid main()\n{\n gl_FragColor.rgb = color;\n gl_FragColor.a = (1.0-edgeFactor(lineWidth)) * alpha;\n}\n@end"),K.import(ci),K.import(kr),kn.template("clay.basic",K.source("clay.basic.vertex"),K.source("clay.basic.fragment")),kn.template("clay.lambert",K.source("clay.lambert.vertex"),K.source("clay.lambert.fragment")),kn.template("clay.wireframe",K.source("clay.wireframe.vertex"),K.source("clay.wireframe.fragment")),kn.template("clay.skybox",K.source("clay.skybox.vertex"),K.source("clay.skybox.fragment")),kn.template("clay.prez",K.source("clay.prez.vertex"),K.source("clay.prez.fragment")),kn.template("clay.standard",K.source("clay.standard.vertex"),K.source("clay.standard.fragment")),kn.template("clay.standardMR",K.source("clay.standardMR.vertex"),K.source("clay.standardMR.fragment")),K.import("@export clay.compositor.coloradjust\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nuniform float contrast : 1.0;\nuniform float exposure : 0.0;\nuniform float gamma : 1.0;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = clamp(tex.rgb + vec3(brightness), 0.0, 1.0);\n color = clamp( (color-vec3(0.5))*contrast+vec3(0.5), 0.0, 1.0);\n color = clamp( color * pow(2.0, exposure), 0.0, 1.0);\n color = clamp( pow(color, vec3(gamma)), 0.0, 1.0);\n float luminance = dot( color, w );\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.brightness\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = tex.rgb + vec3(brightness);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.contrast\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float contrast : 1.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = (tex.rgb-vec3(0.5))*contrast+vec3(0.5);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.exposure\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float exposure : 0.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb * pow(2.0, exposure);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.gamma\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float gamma : 1.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = pow(tex.rgb, vec3(gamma));\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.saturation\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb;\n float luminance = dot(color, w);\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end"),K.import("@export clay.compositor.kernel.gaussian_9\nfloat gaussianKernel[9];\ngaussianKernel[0] = 0.07;\ngaussianKernel[1] = 0.09;\ngaussianKernel[2] = 0.12;\ngaussianKernel[3] = 0.14;\ngaussianKernel[4] = 0.16;\ngaussianKernel[5] = 0.14;\ngaussianKernel[6] = 0.12;\ngaussianKernel[7] = 0.09;\ngaussianKernel[8] = 0.07;\n@end\n@export clay.compositor.kernel.gaussian_13\nfloat gaussianKernel[13];\ngaussianKernel[0] = 0.02;\ngaussianKernel[1] = 0.03;\ngaussianKernel[2] = 0.06;\ngaussianKernel[3] = 0.08;\ngaussianKernel[4] = 0.11;\ngaussianKernel[5] = 0.13;\ngaussianKernel[6] = 0.14;\ngaussianKernel[7] = 0.13;\ngaussianKernel[8] = 0.11;\ngaussianKernel[9] = 0.08;\ngaussianKernel[10] = 0.06;\ngaussianKernel[11] = 0.03;\ngaussianKernel[12] = 0.02;\n@end\n@export clay.compositor.gaussian_blur\n#define SHADER_NAME gaussian_blur\nuniform sampler2D texture;varying vec2 v_Texcoord;\nuniform float blurSize : 2.0;\nuniform vec2 textureSize : [512.0, 512.0];\nuniform float blurDir : 0.0;\n@import clay.util.rgbm\n@import clay.util.clamp_sample\nvoid main (void)\n{\n @import clay.compositor.kernel.gaussian_9\n vec2 off = blurSize / textureSize;\n off *= vec2(1.0 - blurDir, blurDir);\n vec4 sum = vec4(0.0);\n float weightAll = 0.0;\n for (int i = 0; i < 9; i++) {\n float w = gaussianKernel[i];\n vec4 texel = decodeHDR(clampSample(texture, v_Texcoord + float(i - 4) * off));\n sum += texel * w;\n weightAll += w;\n }\n gl_FragColor = encodeHDR(sum / max(weightAll, 0.01));\n}\n@end\n"),K.import("@export clay.compositor.hdr.log_lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = decodeHDR(texture2D(texture, v_Texcoord));\n float luminance = dot(tex.rgb, w);\n luminance = log(luminance + 0.001);\n gl_FragColor = encodeHDR(vec4(vec3(luminance), 1.0));\n}\n@end\n@export clay.compositor.hdr.lum_adaption\nvarying vec2 v_Texcoord;\nuniform sampler2D adaptedLum;\nuniform sampler2D currentLum;\nuniform float frameTime : 0.02;\n@import clay.util.rgbm\nvoid main()\n{\n float fAdaptedLum = decodeHDR(texture2D(adaptedLum, vec2(0.5, 0.5))).r;\n float fCurrentLum = exp(encodeHDR(texture2D(currentLum, vec2(0.5, 0.5))).r);\n fAdaptedLum += (fCurrentLum - fAdaptedLum) * (1.0 - pow(0.98, 30.0 * frameTime));\n gl_FragColor = encodeHDR(vec4(vec3(fAdaptedLum), 1.0));\n}\n@end\n@export clay.compositor.lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord );\n float luminance = dot(tex.rgb, w);\n gl_FragColor = vec4(vec3(luminance), 1.0);\n}\n@end"),K.import("\n@export clay.compositor.lut\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform sampler2D lookup;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n float blueColor = tex.b * 63.0;\n vec2 quad1;\n quad1.y = floor(floor(blueColor) / 8.0);\n quad1.x = floor(blueColor) - (quad1.y * 8.0);\n vec2 quad2;\n quad2.y = floor(ceil(blueColor) / 8.0);\n quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n vec2 texPos1;\n texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.r);\n texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.g);\n vec2 texPos2;\n texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.r);\n texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.g);\n vec4 newColor1 = texture2D(lookup, texPos1);\n vec4 newColor2 = texture2D(lookup, texPos2);\n vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n gl_FragColor = vec4(newColor.rgb, tex.w);\n}\n@end"),K.import("@export clay.compositor.vignette\n#define OUTPUT_ALPHA\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float darkness: 1;\nuniform float offset: 1;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 texel = decodeHDR(texture2D(texture, v_Texcoord));\n gl_FragColor.rgb = texel.rgb;\n vec2 uv = (v_Texcoord - vec2(0.5)) * vec2(offset);\n gl_FragColor = encodeHDR(vec4(mix(texel.rgb, vec3(1.0 - darkness), dot(uv, uv)), texel.a));\n}\n@end"),K.import("@export clay.compositor.output\n#define OUTPUT_ALPHA\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = decodeHDR(texture2D(texture, v_Texcoord));\n gl_FragColor.rgb = tex.rgb;\n#ifdef OUTPUT_ALPHA\n gl_FragColor.a = tex.a;\n#else\n gl_FragColor.a = 1.0;\n#endif\n gl_FragColor = encodeHDR(gl_FragColor);\n#ifdef PREMULTIPLY_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n}\n@end"),K.import("@export clay.compositor.bright\nuniform sampler2D texture;\nuniform float threshold : 1;\nuniform float scale : 1.0;\nuniform vec2 textureSize: [512, 512];\nvarying vec2 v_Texcoord;\nconst vec3 lumWeight = vec3(0.2125, 0.7154, 0.0721);\n@import clay.util.rgbm\nvec4 median(vec4 a, vec4 b, vec4 c)\n{\n return a + b + c - min(min(a, b), c) - max(max(a, b), c);\n}\nvoid main()\n{\n vec4 texel = decodeHDR(texture2D(texture, v_Texcoord));\n#ifdef ANTI_FLICKER\n vec3 d = 1.0 / textureSize.xyx * vec3(1.0, 1.0, 0.0);\n vec4 s1 = decodeHDR(texture2D(texture, v_Texcoord - d.xz));\n vec4 s2 = decodeHDR(texture2D(texture, v_Texcoord + d.xz));\n vec4 s3 = decodeHDR(texture2D(texture, v_Texcoord - d.zy));\n vec4 s4 = decodeHDR(texture2D(texture, v_Texcoord + d.zy));\n texel = median(median(texel, s1, s2), s3, s4);\n#endif\n float lum = dot(texel.rgb , lumWeight);\n vec4 color;\n if (lum > threshold && texel.a > 0.0)\n {\n color = vec4(texel.rgb * scale, texel.a * scale);\n }\n else\n {\n color = vec4(0.0);\n }\n gl_FragColor = encodeHDR(color);\n}\n@end\n"),K.import("@export clay.compositor.downsample\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nfloat brightness(vec3 c)\n{\n return max(max(c.r, c.g), c.b);\n}\n@import clay.util.clamp_sample\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n#ifdef ANTI_FLICKER\n vec3 s1 = decodeHDR(clampSample(texture, v_Texcoord + d.xy)).rgb;\n vec3 s2 = decodeHDR(clampSample(texture, v_Texcoord + d.zy)).rgb;\n vec3 s3 = decodeHDR(clampSample(texture, v_Texcoord + d.xw)).rgb;\n vec3 s4 = decodeHDR(clampSample(texture, v_Texcoord + d.zw)).rgb;\n float s1w = 1.0 / (brightness(s1) + 1.0);\n float s2w = 1.0 / (brightness(s2) + 1.0);\n float s3w = 1.0 / (brightness(s3) + 1.0);\n float s4w = 1.0 / (brightness(s4) + 1.0);\n float oneDivideSum = 1.0 / (s1w + s2w + s3w + s4w);\n vec4 color = vec4(\n (s1 * s1w + s2 * s2w + s3 * s3w + s4 * s4w) * oneDivideSum,\n 1.0\n );\n#else\n vec4 color = decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.xw));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.zw));\n color *= 0.25;\n#endif\n gl_FragColor = encodeHDR(color);\n}\n@end"),K.import("\n@export clay.compositor.upsample\n#define HIGH_QUALITY\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nuniform float sampleScale: 0.5;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.clamp_sample\nvoid main()\n{\n#ifdef HIGH_QUALITY\n vec4 d = vec4(1.0, 1.0, -1.0, 0.0) / textureSize.xyxy * sampleScale;\n vec4 s;\n s = decodeHDR(clampSample(texture, v_Texcoord - d.xy));\n s += decodeHDR(clampSample(texture, v_Texcoord - d.wy)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord - d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zw)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord )) * 4.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xw)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.wy)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n gl_FragColor = encodeHDR(s / 16.0);\n#else\n vec4 d = vec4(-1.0, -1.0, +1.0, +1.0) / textureSize.xyxy;\n vec4 s;\n s = decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xw));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zw));\n gl_FragColor = encodeHDR(s / 4.0);\n#endif\n}\n@end"),K.import("@export clay.compositor.hdr.composite\nuniform sampler2D texture;\n#ifdef BLOOM_ENABLED\nuniform sampler2D bloom;\n#endif\n#ifdef LENSFLARE_ENABLED\nuniform sampler2D lensflare;\nuniform sampler2D lensdirt;\n#endif\n#ifdef LUM_ENABLED\nuniform sampler2D lum;\n#endif\n#ifdef LUT_ENABLED\nuniform sampler2D lut;\n#endif\n#ifdef COLOR_CORRECTION\nuniform float brightness : 0.0;\nuniform float contrast : 1.0;\nuniform float saturation : 1.0;\n#endif\n#ifdef VIGNETTE\nuniform float vignetteDarkness: 1.0;\nuniform float vignetteOffset: 1.0;\n#endif\nuniform float exposure : 1.0;\nuniform float bloomIntensity : 0.25;\nuniform float lensflareIntensity : 1;\nvarying vec2 v_Texcoord;\n@import clay.util.srgb\nvec3 ACESToneMapping(vec3 color)\n{\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\nfloat eyeAdaption(float fLum)\n{\n return mix(0.2, fLum, 0.5);\n}\n#ifdef LUT_ENABLED\nvec3 lutTransform(vec3 color) {\n float blueColor = color.b * 63.0;\n vec2 quad1;\n quad1.y = floor(floor(blueColor) / 8.0);\n quad1.x = floor(blueColor) - (quad1.y * 8.0);\n vec2 quad2;\n quad2.y = floor(ceil(blueColor) / 8.0);\n quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n vec2 texPos1;\n texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);\n texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);\n vec2 texPos2;\n texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);\n texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);\n vec4 newColor1 = texture2D(lut, texPos1);\n vec4 newColor2 = texture2D(lut, texPos2);\n vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n return newColor.rgb;\n}\n#endif\n@import clay.util.rgbm\nvoid main()\n{\n vec4 texel = vec4(0.0);\n vec4 originalTexel = vec4(0.0);\n#ifdef TEXTURE_ENABLED\n texel = decodeHDR(texture2D(texture, v_Texcoord));\n originalTexel = texel;\n#endif\n#ifdef BLOOM_ENABLED\n vec4 bloomTexel = decodeHDR(texture2D(bloom, v_Texcoord));\n texel.rgb += bloomTexel.rgb * bloomIntensity;\n texel.a += bloomTexel.a * bloomIntensity;\n#endif\n#ifdef LENSFLARE_ENABLED\n texel += decodeHDR(texture2D(lensflare, v_Texcoord)) * texture2D(lensdirt, v_Texcoord) * lensflareIntensity;\n#endif\n texel.a = min(texel.a, 1.0);\n#ifdef LUM_ENABLED\n float fLum = texture2D(lum, vec2(0.5, 0.5)).r;\n float adaptedLumDest = 3.0 / (max(0.1, 1.0 + 10.0*eyeAdaption(fLum)));\n float exposureBias = adaptedLumDest * exposure;\n#else\n float exposureBias = exposure;\n#endif\n texel.rgb *= exposureBias;\n texel.rgb = ACESToneMapping(texel.rgb);\n texel = linearTosRGB(texel);\n#ifdef LUT_ENABLED\n texel.rgb = lutTransform(clamp(texel.rgb,vec3(0.0),vec3(1.0)));\n#endif\n#ifdef COLOR_CORRECTION\n texel.rgb = clamp(texel.rgb + vec3(brightness), 0.0, 1.0);\n texel.rgb = clamp((texel.rgb - vec3(0.5))*contrast+vec3(0.5), 0.0, 1.0);\n float lum = dot(texel.rgb, vec3(0.2125, 0.7154, 0.0721));\n texel.rgb = mix(vec3(lum), texel.rgb, saturation);\n#endif\n#ifdef VIGNETTE\n vec2 uv = (v_Texcoord - vec2(0.5)) * vec2(vignetteOffset);\n texel.rgb = mix(texel.rgb, vec3(1.0 - vignetteDarkness), dot(uv, uv));\n#endif\n gl_FragColor = encodeHDR(texel);\n#ifdef DEBUG\n #if DEBUG == 1\n gl_FragColor = encodeHDR(decodeHDR(texture2D(texture, v_Texcoord)));\n #elif DEBUG == 2\n gl_FragColor = encodeHDR(decodeHDR(texture2D(bloom, v_Texcoord)) * bloomIntensity);\n #elif DEBUG == 3\n gl_FragColor = encodeHDR(decodeHDR(texture2D(lensflare, v_Texcoord) * lensflareIntensity));\n #endif\n#endif\n if (originalTexel.a <= 0.01 && gl_FragColor.a > 1e-5) {\n gl_FragColor.a = dot(gl_FragColor.rgb, vec3(0.2125, 0.7154, 0.0721));\n }\n#ifdef PREMULTIPLY_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n}\n@end"), -K.import("@export clay.compositor.dof.coc\nuniform sampler2D depth;\nuniform float zNear: 0.1;\nuniform float zFar: 2000;\nuniform float focalDist: 3;\nuniform float focalRange: 1;\nuniform float focalLength: 30;\nuniform float fstop: 2.8;\nvarying vec2 v_Texcoord;\n@import clay.util.encode_float\nvoid main()\n{\n float z = texture2D(depth, v_Texcoord).r * 2.0 - 1.0;\n float dist = 2.0 * zNear * zFar / (zFar + zNear - z * (zFar - zNear));\n float aperture = focalLength / fstop;\n float coc;\n float uppper = focalDist + focalRange;\n float lower = focalDist - focalRange;\n if (dist <= uppper && dist >= lower) {\n coc = 0.5;\n }\n else {\n float focalAdjusted = dist > uppper ? uppper : lower;\n coc = abs(aperture * (focalLength * (dist - focalAdjusted)) / (dist * (focalAdjusted - focalLength)));\n coc = clamp(coc, 0.0, 0.4) / 0.4000001;\n if (dist < lower) {\n coc = -coc;\n }\n coc = coc * 0.5 + 0.5;\n }\n gl_FragColor = encodeFloat(coc);\n}\n@end\n@export clay.compositor.dof.premultiply\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.decode_float\nvoid main() {\n float fCoc = max(abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0), 0.1);\n gl_FragColor = encodeHDR(\n vec4(decodeHDR(texture2D(texture, v_Texcoord)).rgb * fCoc, 1.0)\n );\n}\n@end\n@export clay.compositor.dof.min_coc\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.float\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n fCoc = min(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zy)));\n fCoc = min(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.xw)));\n fCoc = min(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zw)));\n gl_FragColor = encodeFloat(fCoc);\n}\n@end\n@export clay.compositor.dof.max_coc\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.float\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n fCoc = max(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zy)));\n fCoc = max(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.xw)));\n fCoc = max(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zw)));\n gl_FragColor = encodeFloat(fCoc);\n}\n@end\n@export clay.compositor.dof.coc_upsample\n#define HIGH_QUALITY\nuniform sampler2D coc;\nuniform vec2 textureSize : [512, 512];\nuniform float sampleScale: 0.5;\nvarying vec2 v_Texcoord;\n@import clay.util.float\nvoid main()\n{\n#ifdef HIGH_QUALITY\n vec4 d = vec4(1.0, 1.0, -1.0, 0.0) / textureSize.xyxy * sampleScale;\n float s;\n s = decodeFloat(texture2D(coc, v_Texcoord - d.xy));\n s += decodeFloat(texture2D(coc, v_Texcoord - d.wy)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord - d.zy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zw)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord )) * 4.0;\n s += decodeFloat(texture2D(coc, v_Texcoord + d.xw)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.wy)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n gl_FragColor = encodeFloat(s / 16.0);\n#else\n vec4 d = vec4(-1.0, -1.0, +1.0, +1.0) / textureSize.xyxy;\n float s;\n s = decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.xw));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zw));\n gl_FragColor = encodeFloat(s / 4.0);\n#endif\n}\n@end\n@export clay.compositor.dof.upsample\n#define HIGH_QUALITY\nuniform sampler2D coc;\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nuniform float sampleScale: 0.5;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.decode_float\nfloat tap(vec2 uv, inout vec4 color, float baseWeight) {\n float weight = abs(decodeFloat(texture2D(coc, uv)) * 2.0 - 1.0) * baseWeight;\n color += decodeHDR(texture2D(texture, uv)) * weight;\n return weight;\n}\nvoid main()\n{\n#ifdef HIGH_QUALITY\n vec4 d = vec4(1.0, 1.0, -1.0, 0.0) / textureSize.xyxy * sampleScale;\n vec4 color = vec4(0.0);\n float baseWeight = 1.0 / 16.0;\n float w = tap(v_Texcoord - d.xy, color, baseWeight);\n w += tap(v_Texcoord - d.wy, color, baseWeight * 2.0);\n w += tap(v_Texcoord - d.zy, color, baseWeight);\n w += tap(v_Texcoord + d.zw, color, baseWeight * 2.0);\n w += tap(v_Texcoord , color, baseWeight * 4.0);\n w += tap(v_Texcoord + d.xw, color, baseWeight * 2.0);\n w += tap(v_Texcoord + d.zy, color, baseWeight);\n w += tap(v_Texcoord + d.wy, color, baseWeight * 2.0);\n w += tap(v_Texcoord + d.xy, color, baseWeight);\n gl_FragColor = encodeHDR(color / w);\n#else\n vec4 d = vec4(-1.0, -1.0, +1.0, +1.0) / textureSize.xyxy;\n vec4 color = vec4(0.0);\n float baseWeight = 1.0 / 4.0;\n float w = tap(v_Texcoord + d.xy, color, baseWeight);\n w += tap(v_Texcoord + d.zy, color, baseWeight);\n w += tap(v_Texcoord + d.xw, color, baseWeight);\n w += tap(v_Texcoord + d.zw, color, baseWeight);\n gl_FragColor = encodeHDR(color / w);\n#endif\n}\n@end\n@export clay.compositor.dof.downsample\nuniform sampler2D texture;\nuniform sampler2D coc;\nuniform vec2 textureSize : [512, 512];\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.decode_float\nfloat tap(vec2 uv, inout vec4 color) {\n float weight = abs(decodeFloat(texture2D(coc, uv)) * 2.0 - 1.0) * 0.25;\n color += decodeHDR(texture2D(texture, uv)) * weight;\n return weight;\n}\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n vec4 color = vec4(0.0);\n float weight = tap(v_Texcoord + d.xy, color);\n weight += tap(v_Texcoord + d.zy, color);\n weight += tap(v_Texcoord + d.xw, color);\n weight += tap(v_Texcoord + d.zw, color);\n color /= weight;\n gl_FragColor = encodeHDR(color);\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_frag\n@import clay.util.float\nvec4 doBlur(sampler2D targetTexture, vec2 offset) {\n#ifdef BLUR_COC\n float cocSum = 0.0;\n#else\n vec4 color = vec4(0.0);\n#endif\n float weightSum = 0.0;\n float kernelWeight = 1.0 / float(KERNEL_SIZE);\n for (int i = 0; i < KERNEL_SIZE; i++) {\n vec2 coord = v_Texcoord + offset * float(i);\n float w = kernelWeight;\n#ifdef BLUR_COC\n float fCoc = decodeFloat(texture2D(targetTexture, coord)) * 2.0 - 1.0;\n cocSum += clamp(fCoc, -1.0, 0.0) * w;\n#else\n float fCoc = decodeFloat(texture2D(coc, coord)) * 2.0 - 1.0;\n vec4 texel = texture2D(targetTexture, coord);\n #if !defined(BLUR_NEARFIELD)\n w *= abs(fCoc);\n #endif\n color += decodeHDR(texel) * w;\n#endif\n weightSum += w;\n }\n#ifdef BLUR_COC\n return encodeFloat(clamp(cocSum / weightSum, -1.0, 0.0) * 0.5 + 0.5);\n#else\n return color / weightSum;\n#endif\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_1\n#define KERNEL_SIZE 5\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform float blurSize : 1.0;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.rgbm\n@import clay.compositor.dof.hexagonal_blur_frag\nvoid main()\n{\n vec2 offset = blurSize / textureSize;\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n gl_FragColor = doBlur(texture, vec2(0.0, offset.y));\n#if !defined(BLUR_COC)\n gl_FragColor = encodeHDR(gl_FragColor);\n#endif\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_2\n#define KERNEL_SIZE 5\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform float blurSize : 1.0;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.rgbm\n@import clay.compositor.dof.hexagonal_blur_frag\nvoid main()\n{\n vec2 offset = blurSize / textureSize;\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n offset.y /= 2.0;\n gl_FragColor = doBlur(texture, -offset);\n#if !defined(BLUR_COC)\n gl_FragColor = encodeHDR(gl_FragColor);\n#endif\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_3\n#define KERNEL_SIZE 5\nuniform sampler2D texture1;\nuniform sampler2D texture2;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform float blurSize : 1.0;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.rgbm\n@import clay.compositor.dof.hexagonal_blur_frag\nvoid main()\n{\n vec2 offset = blurSize / textureSize;\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n offset.y /= 2.0;\n vec2 vDownRight = vec2(offset.x, -offset.y);\n vec4 texel1 = doBlur(texture1, -offset);\n vec4 texel2 = doBlur(texture1, vDownRight);\n vec4 texel3 = doBlur(texture2, vDownRight);\n#ifdef BLUR_COC\n float coc1 = decodeFloat(texel1) * 2.0 - 1.0;\n float coc2 = decodeFloat(texel2) * 2.0 - 1.0;\n float coc3 = decodeFloat(texel3) * 2.0 - 1.0;\n gl_FragColor = encodeFloat(\n ((coc1 + coc2 + coc3) / 3.0) * 0.5 + 0.5\n );\n#else\n vec4 color = (texel1 + texel2 + texel3) / 3.0;\n gl_FragColor = encodeHDR(color);\n#endif\n}\n@end\n@export clay.compositor.dof.composite\n#define DEBUG 0\nuniform sampler2D original;\nuniform sampler2D blurred;\nuniform sampler2D nearfield;\nuniform sampler2D coc;\nuniform sampler2D nearcoc;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.float\nvoid main()\n{\n vec4 blurredColor = decodeHDR(texture2D(blurred, v_Texcoord));\n vec4 originalColor = decodeHDR(texture2D(original, v_Texcoord));\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord));\n fCoc = abs(fCoc * 2.0 - 1.0);\n float weight = smoothstep(0.0, 1.0, fCoc);\n#ifdef NEARFIELD_ENABLED\n vec4 nearfieldColor = decodeHDR(texture2D(nearfield, v_Texcoord));\n float fNearCoc = decodeFloat(texture2D(nearcoc, v_Texcoord));\n fNearCoc = abs(fNearCoc * 2.0 - 1.0);\n gl_FragColor = encodeHDR(\n mix(\n nearfieldColor, mix(originalColor, blurredColor, weight),\n pow(1.0 - fNearCoc, 4.0)\n )\n );\n#else\n gl_FragColor = encodeHDR(mix(originalColor, blurredColor, weight));\n#endif\n#if DEBUG == 1\n gl_FragColor = vec4(vec3(fCoc), 1.0);\n#elif DEBUG == 2\n gl_FragColor = vec4(vec3(fNearCoc), 1.0);\n#elif DEBUG == 3\n gl_FragColor = encodeHDR(blurredColor);\n#elif DEBUG == 4\n gl_FragColor = encodeHDR(nearfieldColor);\n#endif\n}\n@end"),K.import("@export clay.compositor.lensflare\n#define SAMPLE_NUMBER 8\nuniform sampler2D texture;\nuniform sampler2D lenscolor;\nuniform vec2 textureSize : [512, 512];\nuniform float dispersal : 0.3;\nuniform float haloWidth : 0.4;\nuniform float distortion : 1.0;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nvec4 textureDistorted(\n in vec2 texcoord,\n in vec2 direction,\n in vec3 distortion\n) {\n return vec4(\n decodeHDR(texture2D(texture, texcoord + direction * distortion.r)).r,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.g)).g,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.b)).b,\n 1.0\n );\n}\nvoid main()\n{\n vec2 texcoord = -v_Texcoord + vec2(1.0); vec2 textureOffset = 1.0 / textureSize;\n vec2 ghostVec = (vec2(0.5) - texcoord) * dispersal;\n vec2 haloVec = normalize(ghostVec) * haloWidth;\n vec3 distortion = vec3(-textureOffset.x * distortion, 0.0, textureOffset.x * distortion);\n vec4 result = vec4(0.0);\n for (int i = 0; i < SAMPLE_NUMBER; i++)\n {\n vec2 offset = fract(texcoord + ghostVec * float(i));\n float weight = length(vec2(0.5) - offset) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n }\n result *= texture2D(lenscolor, vec2(length(vec2(0.5) - texcoord)) / length(vec2(0.5)));\n float weight = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n vec2 offset = fract(texcoord + haloVec);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n gl_FragColor = result;\n}\n@end"),K.import("@export clay.compositor.blend\n#define SHADER_NAME blend\n#ifdef TEXTURE1_ENABLED\nuniform sampler2D texture1;\nuniform float weight1 : 1.0;\n#endif\n#ifdef TEXTURE2_ENABLED\nuniform sampler2D texture2;\nuniform float weight2 : 1.0;\n#endif\n#ifdef TEXTURE3_ENABLED\nuniform sampler2D texture3;\nuniform float weight3 : 1.0;\n#endif\n#ifdef TEXTURE4_ENABLED\nuniform sampler2D texture4;\nuniform float weight4 : 1.0;\n#endif\n#ifdef TEXTURE5_ENABLED\nuniform sampler2D texture5;\nuniform float weight5 : 1.0;\n#endif\n#ifdef TEXTURE6_ENABLED\nuniform sampler2D texture6;\nuniform float weight6 : 1.0;\n#endif\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = vec4(0.0);\n#ifdef TEXTURE1_ENABLED\n tex += decodeHDR(texture2D(texture1, v_Texcoord)) * weight1;\n#endif\n#ifdef TEXTURE2_ENABLED\n tex += decodeHDR(texture2D(texture2, v_Texcoord)) * weight2;\n#endif\n#ifdef TEXTURE3_ENABLED\n tex += decodeHDR(texture2D(texture3, v_Texcoord)) * weight3;\n#endif\n#ifdef TEXTURE4_ENABLED\n tex += decodeHDR(texture2D(texture4, v_Texcoord)) * weight4;\n#endif\n#ifdef TEXTURE5_ENABLED\n tex += decodeHDR(texture2D(texture5, v_Texcoord)) * weight5;\n#endif\n#ifdef TEXTURE6_ENABLED\n tex += decodeHDR(texture2D(texture6, v_Texcoord)) * weight6;\n#endif\n gl_FragColor = encodeHDR(tex);\n}\n@end"),K.import("@export clay.compositor.fxaa\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nvarying vec2 v_Texcoord;\n#define FXAA_REDUCE_MIN (1.0/128.0)\n#define FXAA_REDUCE_MUL (1.0/8.0)\n#define FXAA_SPAN_MAX 8.0\n@import clay.util.rgbm\nvoid main()\n{\n vec2 resolution = 1.0 / viewport.zw;\n vec3 rgbNW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbNE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ) ).xyz;\n vec4 rgbaM = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution ) );\n vec3 rgbM = rgbaM.xyz;\n float opacity = rgbaM.w;\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float lumaNW = dot( rgbNW, luma );\n float lumaNE = dot( rgbNE, luma );\n float lumaSW = dot( rgbSW, luma );\n float lumaSE = dot( rgbSE, luma );\n float lumaM = dot( rgbM, luma );\n float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\n float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\n float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\n dir = min( vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * resolution;\n vec3 rgbA = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA *= 0.5;\n vec3 rgbB = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * -0.5 ) ).xyz;\n rgbB += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * 0.5 ) ).xyz;\n rgbB *= 0.25;\n rgbB += rgbA * 0.5;\n float lumaB = dot( rgbB, luma );\n if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) )\n {\n gl_FragColor = vec4( rgbA, opacity );\n }\n else {\n gl_FragColor = vec4( rgbB, opacity );\n }\n}\n@end"),K.import("@export clay.compositor.fxaa3\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nuniform float subpixel: 0.75;\nuniform float edgeThreshold: 0.125;\nuniform float edgeThresholdMin: 0.0625;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nfloat FxaaLuma(vec4 rgba) { return rgba.y; }\nvec4 FxaaPixelShader(\n vec2 pos\n ,sampler2D tex\n ,vec2 fxaaQualityRcpFrame\n ,float fxaaQualitySubpix\n ,float fxaaQualityEdgeThreshold\n ,float fxaaQualityEdgeThresholdMin\n) {\n vec2 posM;\n posM.x = pos.x;\n posM.y = pos.y;\n vec4 rgbyM = decodeHDR(texture2D(texture, posM, 0.0));\n float lumaS = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 0.0, 1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaE = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 1.0, 0.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaN = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 0.0,-1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaW = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2(-1.0, 0.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float maxSM = max(lumaS, rgbyM.y);\n float minSM = min(lumaS, rgbyM.y);\n float maxESM = max(lumaE, maxSM);\n float minESM = min(lumaE, minSM);\n float maxWN = max(lumaN, lumaW);\n float minWN = min(lumaN, lumaW);\n float rangeMax = max(maxWN, maxESM);\n float rangeMin = min(minWN, minESM);\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\n float range = rangeMax - rangeMin;\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\n bool earlyExit = range < rangeMaxClamped;\n if(earlyExit) return rgbyM;\n float lumaNW = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2(-1.0,-1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaSE = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 1.0, 1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaNE = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 1.0,-1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaSW = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2(-1.0, 1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaNS = lumaN + lumaS;\n float lumaWE = lumaW + lumaE;\n float subpixRcpRange = 1.0/range;\n float subpixNSWE = lumaNS + lumaWE;\n float edgeHorz1 = (-2.0 * rgbyM.y) + lumaNS;\n float edgeVert1 = (-2.0 * rgbyM.y) + lumaWE;\n float lumaNESE = lumaNE + lumaSE;\n float lumaNWNE = lumaNW + lumaNE;\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\n float lumaNWSW = lumaNW + lumaSW;\n float lumaSWSE = lumaSW + lumaSE;\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\n float edgeVert = abs(edgeVert3) + edgeVert4;\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\n float lengthSign = fxaaQualityRcpFrame.x;\n bool horzSpan = edgeHorz >= edgeVert;\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\n if(!horzSpan) lumaN = lumaW;\n if(!horzSpan) lumaS = lumaE;\n if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\n float subpixB = (subpixA * (1.0/12.0)) - rgbyM.y;\n float gradientN = lumaN - rgbyM.y;\n float gradientS = lumaS - rgbyM.y;\n float lumaNN = lumaN + rgbyM.y;\n float lumaSS = lumaS + rgbyM.y;\n bool pairN = abs(gradientN) >= abs(gradientS);\n float gradient = max(abs(gradientN), abs(gradientS));\n if(pairN) lengthSign = -lengthSign;\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\n vec2 posB;\n posB.x = posM.x;\n posB.y = posM.y;\n vec2 offNP;\n offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n if(!horzSpan) posB.x += lengthSign * 0.5;\n if( horzSpan) posB.y += lengthSign * 0.5;\n vec2 posN;\n posN.x = posB.x - offNP.x * 1.0;\n posN.y = posB.y - offNP.y * 1.0;\n vec2 posP;\n posP.x = posB.x + offNP.x * 1.0;\n posP.y = posB.y + offNP.y * 1.0;\n float subpixD = ((-2.0)*subpixC) + 3.0;\n float lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN, 0.0)));\n float subpixE = subpixC * subpixC;\n float lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP, 0.0)));\n if(!pairN) lumaNN = lumaSS;\n float gradientScaled = gradient * 1.0/4.0;\n float lumaMM = rgbyM.y - lumaNN * 0.5;\n float subpixF = subpixD * subpixE;\n bool lumaMLTZero = lumaMM < 0.0;\n lumaEndN -= lumaNN * 0.5;\n lumaEndP -= lumaNN * 0.5;\n bool doneN = abs(lumaEndN) >= gradientScaled;\n bool doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 1.5;\n if(!doneN) posN.y -= offNP.y * 1.5;\n bool doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 1.5;\n if(!doneP) posP.y += offNP.y * 1.5;\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN.xy, 0.0)));\n if(!doneP) lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP.xy, 0.0)));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 2.0;\n if(!doneN) posN.y -= offNP.y * 2.0;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 2.0;\n if(!doneP) posP.y += offNP.y * 2.0;\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN.xy, 0.0)));\n if(!doneP) lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP.xy, 0.0)));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 4.0;\n if(!doneN) posN.y -= offNP.y * 4.0;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 4.0;\n if(!doneP) posP.y += offNP.y * 4.0;\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN.xy, 0.0)));\n if(!doneP) lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP.xy, 0.0)));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 12.0;\n if(!doneN) posN.y -= offNP.y * 12.0;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 12.0;\n if(!doneP) posP.y += offNP.y * 12.0;\n }\n }\n }\n float dstN = posM.x - posN.x;\n float dstP = posP.x - posM.x;\n if(!horzSpan) dstN = posM.y - posN.y;\n if(!horzSpan) dstP = posP.y - posM.y;\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\n float spanLength = (dstP + dstN);\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\n float spanLengthRcp = 1.0/spanLength;\n bool directionN = dstN < dstP;\n float dst = min(dstN, dstP);\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\n float subpixG = subpixF * subpixF;\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\n float subpixH = subpixG * fxaaQualitySubpix;\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\n if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\n if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\n return vec4(decodeHDR(texture2D(texture, posM, 0.0)).xyz, rgbyM.y);\n}\nvoid main()\n{\n vec4 color = FxaaPixelShader(\n v_Texcoord,\n texture,\n vec2(1.0) / viewport.zw,\n subpixel,\n edgeThreshold,\n edgeThresholdMin\n );\n gl_FragColor = vec4(color.rgb, 1.0);\n}\n@end");var hi={NORMAL:"normal",POSITION:"position",TEXCOORD_0:"texcoord0",TEXCOORD_1:"texcoord1",WEIGHTS_0:"weight",JOINTS_0:"joint",COLOR:"color"},fi={5120:We.Int8Array,5121:We.Uint8Array,5122:We.Int16Array,5123:We.Uint16Array,5125:We.Uint32Array,5126:We.Float32Array},di={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},mi=Pe.extend({rootNode:null,rootPath:null,textureRootPath:null,bufferRootPath:null,shader:"clay.standard",useStandardMaterial:!1,includeCamera:!0,includeAnimation:!0,includeMesh:!0,includeTexture:!0,crossOrigin:"",textureFlipY:!1,shaderLibrary:null},function(){this.shaderLibrary||(this.shaderLibrary=kn.createLibrary())},{load:function(t){var e=this,r=t.endsWith(".glb");null==this.rootPath&&(this.rootPath=t.slice(0,t.lastIndexOf("/"))),Yn.get({url:t,onprogress:function(t,r,n){e.trigger("progress",t,r,n)},onerror:function(t){e.trigger("error",t)},responseType:r?"arraybuffer":"text",onload:function(t){r?e.parseBinary(t):e.parse(JSON.parse(t))}})},parseBinary:function(t){var e=new Uint32Array(t,0,4);if(1179937895!==e[0])return void this.trigger("error","Invalid glTF binary format: Invalid header");if(e[0]<2)return void this.trigger("error","Only glTF2.0 is supported.");for(var r,n=new DataView(t,12),i=[],a=0;a=r.COLOR_ATTACHMENT0&&a<=r.COLOR_ATTACHMENT0+8&&i.push(a);n.drawBuffersEXT(i)}}this.trigger("beforerender",this,t);var o=this.clearDepth?r.DEPTH_BUFFER_BIT:0;if(r.depthMask(!0),this.clearColor){o|=r.COLOR_BUFFER_BIT,r.colorMask(!0,!0,!0,!0);var s=this.clearColor;Array.isArray(s)&&r.clearColor(s[0],s[1],s[2],s[3])}r.clear(o),this.blendWithPrevious?(r.enable(r.BLEND),this.material.transparent=!0):(r.disable(r.BLEND),this.material.transparent=!1),this.renderQuad(t),this.trigger("afterrender",this,t),e&&this.unbind(t,e)},renderQuad:function(t){Si.material=this.material,t.renderPass([Si],wi)},dispose:function(t){}});K.import(ci);var Ci=Xn.extend(function(){var t=new K({vertex:K.source("clay.skybox.vertex"),fragment:K.source("clay.skybox.fragment")}),e=new vr({shader:t,depthMask:!1});return{scene:null,geometry:new Mn,material:e,environmentMap:null,culling:!1}},function(){var t=this.scene;t&&this.attachScene(t),this.environmentMap&&this.setEnvironmentMap(this.environmentMap)},{attachScene:function(t){this.scene&&this.detachScene(),t.skybox=this,this.scene=t,t.on("beforerender",this._beforeRenderScene,this)},detachScene:function(){this.scene&&(this.scene.off("beforerender",this._beforeRenderScene),this.scene.skybox=null),this.scene=null},dispose:function(t){this.detachScene(),this.geometry.dispose(t)},setEnvironmentMap:function(t){this.material.set("environmentMap",t)},getEnvironmentMap:function(){return this.material.get("environmentMap")},_beforeRenderScene:function(t,e,r){this.renderSkybox(t,r)},renderSkybox:function(t,e){this.position.copy(e.getWorldPosition()),this.update(),t.gl.disable(t.gl.BLEND),this.material.get("lod")>0?this.material.define("fragment","LOD"):this.material.undefine("fragment","LOD"),t.renderPass([this],e)}}),Ni=["px","nx","py","ny","pz","nz"],Ri=Pe.extend(function(){var t={position:new Xe,far:1e3,near:.1,texture:null,shadowMapPass:null},e=t._cameras={px:new jn({fov:90}),nx:new jn({fov:90}),py:new jn({fov:90}),ny:new jn({fov:90}),pz:new jn({fov:90}),nz:new jn({fov:90})};return e.px.lookAt(Xe.POSITIVE_X,Xe.NEGATIVE_Y),e.nx.lookAt(Xe.NEGATIVE_X,Xe.NEGATIVE_Y),e.py.lookAt(Xe.POSITIVE_Y,Xe.POSITIVE_Z),e.ny.lookAt(Xe.NEGATIVE_Y,Xe.NEGATIVE_Z),e.pz.lookAt(Xe.POSITIVE_Z,Xe.NEGATIVE_Y),e.nz.lookAt(Xe.NEGATIVE_Z,Xe.NEGATIVE_Y),t._frameBuffer=new bi,t},{getCamera:function(t){return this._cameras[t]},render:function(t,e,r){var n=t.gl;r||e.update();for(var i=this.texture.width,a=2*Math.atan(i/(i-.5))/Math.PI*180,o=0;o<6;o++){var s=Ni[o],u=this._cameras[s];if(Xe.copy(u.position,this.position),u.far=this.far,u.near=this.near,u.fov=a,this.shadowMapPass){u.update();var l=e.getBoundingBox();l.applyTransform(u.viewMatrix),e.viewBoundingBoxLastFrame.copy(l),this.shadowMapPass.render(t,e,u,!0)}this._frameBuffer.attach(this.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_CUBE_MAP_POSITIVE_X+o),this._frameBuffer.bind(t),t.render(e,u,!0),this._frameBuffer.unbind(t)}},dispose:function(t){this._frameBuffer.dispose(t)}});K.import(li);var Li=Xn.extend(function(){var t=new K(K.source("clay.basic.vertex"),K.source("clay.basic.fragment")),e=new vr({shader:t,depthMask:!1});return e.enableTexture("diffuseMap"),{scene:null,geometry:new Cn({widthSegments:30,heightSegments:30}),material:e,environmentMap:null,culling:!1}},function(){var t=this.scene;t&&this.attachScene(t),this.environmentMap&&this.setEnvironmentMap(this.environmentMap)},{attachScene:function(t){this.scene&&this.detachScene(),t.skydome=this,this.scene=t,t.on("beforerender",this._beforeRenderScene,this)},detachScene:function(){this.scene&&(this.scene.off("beforerender",this._beforeRenderScene),this.scene.skydome=null),this.scene=null},_beforeRenderScene:function(t,e,r){this.position.copy(r.getWorldPosition()),this.update(),t.renderPass([this],r)},setEnvironmentMap:function(t){this.material.set("diffuseMap",t)},getEnvironmentMap:function(){return this.material.get("diffuseMap")},dispose:function(t){this.detachScene(),this.geometry.dispose(t)}}),Pi=ft("DXT1"),Di=ft("DXT3"),Ii=ft("DXT5"),Oi={parse:function(t,e){var r=new Int32Array(t,0,31);if(542327876!==r[0])return null;if(4&!r(20))return null;var n,i,a=r(21),o=r[4],s=r[3],u=512&r[28],l=131072&r[2];switch(a){case Pi:n=8,i=lr.COMPRESSED_RGB_S3TC_DXT1_EXT;break;case Di:n=16,i=lr.COMPRESSED_RGBA_S3TC_DXT3_EXT;break;case Ii:n=16,i=lr.COMPRESSED_RGBA_S3TC_DXT5_EXT;break;default:return null}var c=r[1]+4,h=u?6:1,f=1;l&&(f=Math.max(1,r[7]));for(var d=[],m=0;m=i)){a+=2;for(var o="";a20)return console.warn("Given image is not a height map"),t}var f,d,m,p;u%(4*n)==0?(f=o.data[u],m=o.data[u+4]):u%(4*n)==4*(n-1)?(f=o.data[u-4],m=o.data[u]):(f=o.data[u-4],m=o.data[u+4]),u<4*n?(d=o.data[u],p=o.data[u+4*n]):u>n*(i-1)*4?(d=o.data[u-4*n],p=o.data[u]):(d=o.data[u-4*n],p=o.data[u+4*n]),s.data[u]=f-m+127,s.data[u+1]=d-p+127,s.data[u+2]=255,s.data[u+3]=255}return a.putImageData(s,0,0),r},isHeightImage:function(t,e,r){if(!t||!t.width||!t.height)return!1;var n=document.createElement("canvas"),i=n.getContext("2d"),a=e||32;r=r||20,n.width=n.height=a,i.drawImage(t,0,0,a,a);for(var o=i.getImageData(0,0,a,a),s=0;sr)return!1}return!0},_fetchTexture:function(t,e,r){Yn.get({url:t,responseType:"arraybuffer",onload:e,onerror:r})},createChessboard:function(t,e,r,n){t=t||512,e=e||64,r=r||"black",n=n||"white";var i=Math.ceil(t/e),a=document.createElement("canvas");a.width=t,a.height=t;var o=a.getContext("2d");o.fillStyle=n,o.fillRect(0,0,t,t),o.fillStyle=r;for(var s=0;s 0.0) {\n prefilteredColor += decodeHDR(textureCube(environmentMap, L)).rgb * NoL;\n totalWeight += NoL;\n }\n }\n gl_FragColor = encodeHDR(vec4(prefilteredColor / totalWeight, 1.0));\n}\n"})});h.set("normalDistribution",n),r.encodeRGBM&&h.define("fragment","RGBM_ENCODE"),r.decodeRGBM&&h.define("fragment","RGBM_DECODE");var f,d=new vn;if(e instanceof Pn){var m=new On({width:a,height:o,type:s===lr.FLOAT?lr.HALF_FLOAT:s});Hi.panoramaToCubeMap(t,e,m,{encodeRGBM:r.decodeRGBM}),e=m}f=new Ci({scene:d,material:h}),f.material.set("environmentMap",e);var p=new Ri({texture:u});r.encodeRGBM&&(s=u.type=lr.UNSIGNED_BYTE);for(var _=new Pn({width:a,height:o,type:s}),g=new bi({depthBuffer:!1}),v=We[s===lr.UNSIGNED_BYTE?"Uint8Array":"Float32Array"],y=0;y 0.0) {\n float G = G_Smith(roughness, NoV, NoL);\n float G_Vis = G * VoH / (NoH * NoV);\n float Fc = pow(1.0 - VoH, 5.0);\n A += (1.0 - Fc) * G_Vis;\n B += Fc * G_Vis;\n }\n }\n gl_FragColor = vec4(vec2(A, B) / fSampleNumber, 0.0, 1.0);\n}\n"}),i=new Pn({width:512,height:256,type:lr.HALF_FLOAT,minFilter:lr.NEAREST,magFilter:lr.NEAREST,useMipmap:!1});return n.setUniform("normalDistribution",e),n.setUniform("viewportSize",[512,256]),n.attachOutput(i),n.render(t,r),r.dispose(t),i},Gi.generateNormalDistribution=function(t,e){for(var t=t||256,e=e||1024,r=new Pn({width:t,height:e,type:lr.FLOAT,minFilter:lr.NEAREST,magFilter:lr.NEAREST,useMipmap:!1}),n=new Float32Array(e*t*4),i=0;i>>16)>>>0;o=((1431655765&o)<<1|(2863311530&o)>>>1)>>>0,o=((858993459&o)<<2|(3435973836&o)>>>2)>>>0,o=((252645135&o)<<4|(4042322160&o)>>>4)>>>0,o=(((16711935&o)<<8|(4278255360&o)>>>8)>>>0)/4294967296;for(var s=0;s= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end");var Zi=Pe.extend(function(){return{softShadow:Zi.PCF,shadowBlur:1,lightFrustumBias:"auto",kernelPCF:new Float32Array([1,0,1,1,-1,1,0,1,-1,0,-1,-1,1,-1,0,-1]),precision:"mediump",_lastRenderNotCastShadow:!1,_frameBuffer:new bi,_textures:{},_shadowMapNumber:{POINT_LIGHT:0,DIRECTIONAL_LIGHT:0,SPOT_LIGHT:0},_depthMaterials:{},_distanceMaterials:{},_opaqueCasters:[],_receivers:[],_lightsCastShadow:[],_lightCameras:{},_lightMaterials:{},_texturePool:new Xi}},function(){this._gaussianPassH=new Mi({fragment:K.source("clay.compositor.gaussian_blur")}),this._gaussianPassV=new Mi({fragment:K.source("clay.compositor.gaussian_blur")}),this._gaussianPassH.setUniform("blurSize",this.shadowBlur),this._gaussianPassH.setUniform("blurDir",0),this._gaussianPassV.setUniform("blurSize",this.shadowBlur),this._gaussianPassV.setUniform("blurDir",1),this._outputDepthPass=new Mi({fragment:K.source("clay.sm.debug_depth")})},{render:function(t,e,r,n){r||(r=e.getMainCamera()),this.trigger("beforerender",this,t,e,r),this._renderShadowPass(t,e,r,n),this.trigger("afterrender",this,t,e,r)},renderDebug:function(t,e){t.saveClear();var r=t.viewport,n=0,i=e||r.width/4,a=i;this.softShadow===Zi.VSM?this._outputDepthPass.material.define("fragment","USE_VSM"):this._outputDepthPass.material.undefine("fragment","USE_VSM");for(var o in this._textures){var s=this._textures[o];t.setViewport(n,0,i*s.width/s.height,a),this._outputDepthPass.setUniform("depthMap",s),this._outputDepthPass.render(t),n+=i*s.width/s.height}t.setViewport(r),t.restoreClear()},_updateCasterAndReceiver:function(t,e){if(e.castShadow&&this._opaqueCasters.push(e),e.receiveShadow?(this._receivers.push(e),e.material.set("shadowEnabled",1),e.material.set("pcfKernel",this.kernelPCF)):e.material.set("shadowEnabled",0),!e.material.shader&&e.material.updateShader&&e.material.updateShader(t),this.softShadow===Zi.VSM)e.material.define("fragment","USE_VSM"),e.material.undefine("fragment","PCF_KERNEL_SIZE");else{e.material.undefine("fragment","USE_VSM");var r=this.kernelPCF;r&&r.length?e.material.define("fragment","PCF_KERNEL_SIZE",r.length/2):e.material.undefine("fragment","PCF_KERNEL_SIZE")}},_update:function(t,e){for(var r=0;r4){console.warn("Support at most 4 cascade");continue}p.shadowCascade>1&&(s=p.shadowCascade),this.renderDirectionalLightShadow(t,e,r,p,this._opaqueCasters,f,h,c)}else p instanceof gi?this.renderSpotLightShadow(t,e,p,this._opaqueCasters,l,u):p instanceof _i&&this.renderPointLightShadow(t,e,p,this._opaqueCasters,d);this._shadowMapNumber[p.type]++}for(var _ in this._shadowMapNumber)for(var g=this._shadowMapNumber[_],v=_+"_SHADOWMAP_COUNT",m=0;m0?x.define("fragment",v,g):x.isDefined("fragment",v)&&x.undefine("fragment",v))}for(var m=0;m0){var E=c.map(i);if(T.directionalLightShadowMaps={value:c,type:"tv"},T.directionalLightMatrices={value:h,type:"m4v"},T.directionalLightShadowMapSizes={value:E,type:"1fv"},s){var b=f.slice(),A=f.slice();b.pop(),A.shift(),b.reverse(),A.reverse(),h.reverse(),T.shadowCascadeClipsNear={value:b,type:"1fv"},T.shadowCascadeClipsFar={value:A,type:"1fv"}}}if(u.length>0){var S=u.map(i),T=e.shadowUniforms;T.spotLightShadowMaps={value:u,type:"tv"},T.spotLightMatrices={value:l,type:"m4v"},T.spotLightShadowMapSizes={value:S,type:"1fv"}}d.length>0&&(T.pointLightShadowMaps={value:d,type:"tv"})}},renderDirectionalLightShadow:function(){var t=new hn,e=new ar,r=new tr,n=new ar,i=new ar,a=new ar,o=new ar;return function(s,u,l,c,h,f,d,m){var p=this._getDepthMaterial(c),_={getMaterial:function(t){return t.shadowDepthMaterial||p},sortCompare:zr.opaqueSortCompare};if(!u.viewBoundingBoxLastFrame.isFinite()){var g=u.getBoundingBox();u.viewBoundingBoxLastFrame.copy(g).applyTransform(l.viewMatrix)}var v=Math.min(-u.viewBoundingBoxLastFrame.min.z,l.far),y=Math.max(-u.viewBoundingBoxLastFrame.max.z,l.near),x=this._getDirectionalLightCamera(c,u,l),T=a.array;o.copy(x.projectionMatrix),Yi.invert(i.array,x.worldTransform.array),Yi.multiply(i.array,i.array,l.worldTransform.array),Yi.multiply(T,o.array,i.array);for(var E=[],b=l instanceof jn,A=(l.near+l.far)/(l.near-l.far),S=2*l.near*l.far/(l.near-l.far),w=0;w<=c.shadowCascade;w++){var M=y*Math.pow(v/y,w/c.shadowCascade),C=y+(v-y)*w/c.shadowCascade,N=M*c.cascadeSplitLogFactor+C*(1-c.cascadeSplitLogFactor);E.push(N),f.push(-(-N*A+S)/-N)}var R=this._getTexture(c,c.shadowCascade);m.push(R);var L=s.viewport,P=s.gl;this._frameBuffer.attach(R),this._frameBuffer.bind(s),P.clear(P.COLOR_BUFFER_BIT|P.DEPTH_BUFFER_BIT);for(var w=0;w=0&&x[v]>1e-4&&(Ji.transformMat4(b,y,_[T[v]]),Ji.scaleAndAdd(E,E,b,x[v]));A.set(g,E)}}for(var g=0;g 0.0;\n#endif\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n #ifdef FIRST_PASS\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n if (hasTangent) {\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n }\n #endif\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n#ifdef FIRST_PASS\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n if (hasTangent) {\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n }\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n#endif\n}\n@end\n@export clay.deferred.gbuffer1.fragment\nuniform mat4 viewInverse : VIEWINVERSE;\nuniform float glossiness;\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nuniform sampler2D normalMap;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\nuniform sampler2D roughGlossMap;\nuniform bool useRoughGlossMap;\nuniform bool useRoughness;\nuniform bool doubleSided;\nuniform int roughGlossChannel: 0;\nfloat indexingTexel(in vec4 texel, in int idx) {\n if (idx == 3) return texel.a;\n else if (idx == 1) return texel.g;\n else if (idx == 2) return texel.b;\n else return texel.r;\n}\nvoid main()\n{\n vec3 N = v_Normal;\n if (doubleSided) {\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = eyePos - v_WorldPosition;\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n }\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, v_Texcoord).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n N = normalize(tbn * N);\n }\n }\n gl_FragColor.rgb = (N + 1.0) * 0.5;\n float g = glossiness;\n if (useRoughGlossMap) {\n float g2 = indexingTexel(texture2D(roughGlossMap, v_Texcoord), roughGlossChannel);\n if (useRoughness) {\n g2 = 1.0 - g2;\n }\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n }\n gl_FragColor.a = g + 0.005;\n}\n@end\n@export clay.deferred.gbuffer2.fragment\nuniform sampler2D diffuseMap;\nuniform sampler2D metalnessMap;\nuniform vec3 color;\nuniform float metalness;\nuniform bool useMetalnessMap;\nuniform bool linear;\nvarying vec2 v_Texcoord;\n@import clay.util.srgb\nvoid main ()\n{\n float m = metalness;\n if (useMetalnessMap) {\n vec4 metalnessTexel = texture2D(metalnessMap, v_Texcoord);\n m = clamp(metalnessTexel.r + (m * 2.0 - 1.0), 0.0, 1.0);\n }\n vec4 texel = texture2D(diffuseMap, v_Texcoord);\n if (linear) {\n texel = sRGBToLinear(texel);\n }\n gl_FragColor.rgb = texel.rgb * color;\n gl_FragColor.a = m + 0.005;\n}\n@end\n@export clay.deferred.gbuffer.debug\n@import clay.deferred.chunk.light_head\nuniform int debug: 0;\nvoid main ()\n{\n @import clay.deferred.chunk.gbuffer_read\n if (debug == 0) {\n gl_FragColor = vec4(N, 1.0);\n }\n else if (debug == 1) {\n gl_FragColor = vec4(vec3(z), 1.0);\n }\n else if (debug == 2) {\n gl_FragColor = vec4(position, 1.0);\n }\n else if (debug == 3) {\n gl_FragColor = vec4(vec3(glossiness), 1.0);\n }\n else if (debug == 4) {\n gl_FragColor = vec4(vec3(metalness), 1.0);\n }\n else {\n gl_FragColor = vec4(albedo, 1.0);\n }\n}\n@end"), -K.import("@export clay.deferred.chunk.light_head\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture2;\nuniform sampler2D gBufferTexture3;\nuniform vec2 windowSize: WINDOW_SIZE;\nuniform vec4 viewport: VIEWPORT;\nuniform mat4 viewProjectionInv;\n#ifdef DEPTH_ENCODED\n@import clay.util.decode_float\n#endif\n@end\n@export clay.deferred.chunk.gbuffer_read\n vec2 uv = gl_FragCoord.xy / windowSize;\n vec2 uv2 = (gl_FragCoord.xy - viewport.xy) / viewport.zw;\n vec4 texel1 = texture2D(gBufferTexture1, uv);\n vec4 texel3 = texture2D(gBufferTexture3, uv);\n if (dot(texel1.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n float glossiness = texel1.a;\n float metalness = texel3.a;\n vec3 N = texel1.rgb * 2.0 - 1.0;\n float z = texture2D(gBufferTexture2, uv).r * 2.0 - 1.0;\n vec2 xy = uv2 * 2.0 - 1.0;\n vec4 projectedPos = vec4(xy, z, 1.0);\n vec4 p4 = viewProjectionInv * projectedPos;\n vec3 position = p4.xyz / p4.w;\n vec3 albedo = texel3.rgb;\n vec3 diffuseColor = albedo * (1.0 - metalness);\n vec3 specularColor = mix(vec3(0.04), albedo, metalness);\n@end\n@export clay.deferred.chunk.light_equation\nfloat D_Phong(in float g, in float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(in float g, in float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (3.1415926 * tmp * tmp);\n}\nvec3 F_Schlick(in float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nvec3 lightEquation(\n in vec3 lightColor, in vec3 diffuseColor, in vec3 specularColor,\n in float ndl, in float ndh, in float ndv, in float g\n)\n{\n return ndl * lightColor\n * (diffuseColor + D_Phong(g, ndh) * F_Schlick(ndv, specularColor));\n}\n@end");var na=Pe.extend(function(){return{enableTargetTexture1:!0,enableTargetTexture2:!0,enableTargetTexture3:!0,renderTransparent:!1,_renderList:[],_gBufferTex1:new Pn({minFilter:lr.NEAREST,magFilter:lr.NEAREST,type:lr.HALF_FLOAT}),_gBufferTex2:new Pn({minFilter:lr.NEAREST,magFilter:lr.NEAREST,format:lr.DEPTH_STENCIL,type:lr.UNSIGNED_INT_24_8_WEBGL}),_gBufferTex3:new Pn({minFilter:lr.NEAREST,magFilter:lr.NEAREST}),_defaultNormalMap:new Pn({image:Tt("#000")}),_defaultRoughnessMap:new Pn({image:Tt("#fff")}),_defaultMetalnessMap:new Pn({image:Tt("#fff")}),_defaultDiffuseMap:new Pn({image:Tt("#fff")}),_frameBuffer:new bi,_gBufferMaterial1:new vr({shader:new K(K.source("clay.deferred.gbuffer.vertex"),K.source("clay.deferred.gbuffer1.fragment")),vertexDefines:{FIRST_PASS:null},fragmentDefines:{FIRST_PASS:null}}),_gBufferMaterial2:new vr({shader:new K(K.source("clay.deferred.gbuffer.vertex"),K.source("clay.deferred.gbuffer2.fragment"))}),_debugPass:new Mi({fragment:K.source("clay.deferred.gbuffer.debug")})}},{resize:function(t,e){this._gBufferTex1.width===t&&this._gBufferTex1.height===e||(this._gBufferTex1.width=t,this._gBufferTex1.height=e,this._gBufferTex2.width=t,this._gBufferTex2.height=e,this._gBufferTex3.width=t,this._gBufferTex3.height=e)},setViewport:function(t,e,r,n,i){var a;a="object"==typeof t?t:{x:t,y:e,width:r,height:n,devicePixelRatio:i||1},this._frameBuffer.viewport=a},getViewport:function(){return this._frameBuffer.viewport?this._frameBuffer.viewport:{x:0,y:0,width:this._gBufferTex1.width,height:this._gBufferTex1.height,devicePixelRatio:1}},update:function(t,e,r){for(var n=t.gl,i=this._frameBuffer,a=i.viewport,o=e.opaqueList,s=e.transparentList,u=0,l=this._renderList,c=0;c= shadowCascadeClipsNear[_idx_] &&\n z <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n lightShadowMap, lightMatrices[_idx_], position, lightShadowMapSize,\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n }\n }}\n gl_FragColor.rgb *= shadowContrib;\n#endif\n gl_FragColor.a = 1.0;\n}\n@end\n"),K.import("@export clay.deferred.ambient_light\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture3;\nuniform vec3 lightColor;\nuniform vec2 windowSize: WINDOW_SIZE;\nvoid main()\n{\n vec2 uv = gl_FragCoord.xy / windowSize;\n vec4 texel1 = texture2D(gBufferTexture1, uv);\n if (dot(texel1.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n vec3 albedo = texture2D(gBufferTexture3, uv).rgb;\n gl_FragColor.rgb = lightColor * albedo;\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.ambient_sh_light\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture3;\nuniform vec3 lightColor;\nuniform vec3 lightCoefficients[9];\nuniform vec2 windowSize: WINDOW_SIZE;\nvec3 calcAmbientSHLight(vec3 N) {\n return lightCoefficients[0]\n + lightCoefficients[1] * N.x\n + lightCoefficients[2] * N.y\n + lightCoefficients[3] * N.z\n + lightCoefficients[4] * N.x * N.z\n + lightCoefficients[5] * N.z * N.y\n + lightCoefficients[6] * N.y * N.x\n + lightCoefficients[7] * (3.0 * N.z * N.z - 1.0)\n + lightCoefficients[8] * (N.x * N.x - N.y * N.y);\n}\nvoid main()\n{\n vec2 uv = gl_FragCoord.xy / windowSize;\n vec4 texel1 = texture2D(gBufferTexture1, uv);\n if (dot(texel1.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n vec3 N = texel1.rgb * 2.0 - 1.0;\n vec3 albedo = texture2D(gBufferTexture3, uv).rgb;\n gl_FragColor.rgb = lightColor * albedo * calcAmbientSHLight(N);\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.ambient_cubemap_light\n@import clay.deferred.chunk.light_head\nuniform vec3 lightColor;\nuniform samplerCube lightCubemap;\nuniform sampler2D brdfLookup;\nuniform vec3 eyePosition;\n@import clay.util.rgbm\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 V = normalize(eyePosition - position);\n vec3 L = reflect(-V, N);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float rough = clamp(1.0 - glossiness, 0.0, 1.0);\n float bias = rough * 5.0;\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n vec3 envWeight = specularColor * brdfParam.x + brdfParam.y;\n vec3 envTexel = RGBMDecode(textureCubeLodEXT(lightCubemap, L, bias), 51.5);\n gl_FragColor.rgb = lightColor * envTexel * envWeight;\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.point_light\n@import clay.deferred.chunk.light_head\n@import clay.util.calculate_attenuation\n@import clay.deferred.chunk.light_equation\nuniform vec3 lightPosition;\nuniform vec3 lightColor;\nuniform float lightRange;\nuniform vec3 eyePosition;\n#ifdef SHADOWMAP_ENABLED\nuniform samplerCube lightShadowMap;\nuniform float lightShadowMapSize;\n#endif\nvarying vec3 v_Position;\n@import clay.plugin.shadow_map_common\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 L = lightPosition - position;\n vec3 V = normalize(eyePosition - position);\n float dist = length(L);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float attenuation = lightAttenuation(dist, lightRange);\n gl_FragColor.rgb = attenuation * lightEquation(\n lightColor, diffuseColor, specularColor, ndl, ndh, ndv, glossiness\n );\n#ifdef SHADOWMAP_ENABLED\n float shadowContrib = computeShadowContribOmni(\n lightShadowMap, -L * dist, lightRange\n );\n gl_FragColor.rgb *= clamp(shadowContrib, 0.0, 1.0);\n#endif\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.sphere_light\n@import clay.deferred.chunk.light_head\n@import clay.util.calculate_attenuation\n@import clay.deferred.chunk.light_equation\nuniform vec3 lightPosition;\nuniform vec3 lightColor;\nuniform float lightRange;\nuniform float lightRadius;\nuniform vec3 eyePosition;\nvarying vec3 v_Position;\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 L = lightPosition - position;\n vec3 V = normalize(eyePosition - position);\n float dist = length(L);\n vec3 R = reflect(V, N);\n float tmp = dot(L, R);\n vec3 cToR = tmp * R - L;\n float d = length(cToR);\n L = L + cToR * clamp(lightRadius / d, 0.0, 1.0);\n L = normalize(L);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float attenuation = lightAttenuation(dist, lightRange);\n gl_FragColor.rgb = lightColor * ndl * attenuation;\n glossiness = clamp(glossiness - lightRadius / 2.0 / dist, 0.0, 1.0);\n gl_FragColor.rgb = attenuation * lightEquation(\n lightColor, diffuseColor, specularColor, ndl, ndh, ndv, glossiness\n );\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.tube_light\n@import clay.deferred.chunk.light_head\n@import clay.util.calculate_attenuation\n@import clay.deferred.chunk.light_equation\nuniform vec3 lightPosition;\nuniform vec3 lightColor;\nuniform float lightRange;\nuniform vec3 lightExtend;\nuniform vec3 eyePosition;\nvarying vec3 v_Position;\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 L = lightPosition - position;\n vec3 V = normalize(eyePosition - position);\n vec3 R = reflect(V, N);\n vec3 L0 = lightPosition - lightExtend - position;\n vec3 L1 = lightPosition + lightExtend - position;\n vec3 LD = L1 - L0;\n float len0 = length(L0);\n float len1 = length(L1);\n float irra = 2.0 * clamp(dot(N, L0) / (2.0 * len0) + dot(N, L1) / (2.0 * len1), 0.0, 1.0);\n float LDDotR = dot(R, LD);\n float t = (LDDotR * dot(R, L0) - dot(L0, LD)) / (dot(LD, LD) - LDDotR * LDDotR);\n t = clamp(t, 0.0, 1.0);\n L = L0 + t * LD;\n float dist = length(L);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n glossiness = clamp(glossiness - 0.0 / 2.0 / dist, 0.0, 1.0);\n gl_FragColor.rgb = lightColor * irra * lightAttenuation(dist, lightRange)\n * (diffuseColor + D_Phong(glossiness, ndh) * F_Schlick(ndv, specularColor));\n gl_FragColor.a = 1.0;\n}\n@end"),K.import(kr);var ia=Pe.extend(function(){var t=K.source("clay.compositor.vertex"),e=K.source("clay.deferred.light_volume.vertex"),r=new K(t,K.source("clay.deferred.directional_light")),n=function(t){t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE)},i=function(t){return new vr({shader:t,blend:n,transparent:!0,depthMask:!1})},a=function(t){return new K(e,K.source("clay.deferred."+t))},o=new ea({capSegments:10}),s=new ar;s.rotateX(Math.PI/2).translate(new Xe(0,-1,0)),o.applyTransform(s);var u=new ra({capSegments:10});return s.identity().rotateZ(Math.PI/2),u.applyTransform(s),{shadowMapPass:null,autoResize:!0,_createLightPassMat:i,_gBuffer:new na,_lightAccumFrameBuffer:new bi({depthBuffer:!1}),_lightAccumTex:new Pn({type:lr.HALF_FLOAT,minFilter:lr.NEAREST,magFilter:lr.NEAREST}),_fullQuadPass:new Mi({blendWithPrevious:!0}),_directionalLightMat:i(r),_ambientMat:i(new K(t,K.source("clay.deferred.ambient_light"))),_ambientSHMat:i(new K(t,K.source("clay.deferred.ambient_sh_light"))),_ambientCubemapMat:i(new K(t,K.source("clay.deferred.ambient_cubemap_light"))),_spotLightShader:a("spot_light"),_pointLightShader:a("point_light"),_sphereLightShader:a("sphere_light"),_tubeLightShader:a("tube_light"),_lightSphereGeo:new Cn({widthSegments:10,heightSegements:10}),_lightConeGeo:o,_lightCylinderGeo:u,_outputPass:new Mi({fragment:K.source("clay.compositor.output")})}},{render:function(t,e,r,n){n=n||{},n.renderToTarget=n.renderToTarget||!1,n.notUpdateShadow=n.notUpdateShadow||!1,n.notUpdateScene=n.notUpdateScene||!1,n.notUpdateScene||e.update(!1,!0),r.update(!0);var i=t.getDevicePixelRatio();!this.autoResize||t.getWidth()*i===this._lightAccumTex.width&&t.getHeight()*i===this._lightAccumTex.height||this.resize(t.getWidth()*i,t.getHeight()*i),this._gBuffer.update(t,e,r),this._accumulateLightBuffer(t,e,r,!n.notUpdateShadow),n.renderToTarget||(this._outputPass.setUniform("texture",this._lightAccumTex),this._outputPass.render(t))},getTargetTexture:function(){return this._lightAccumTex},getTargetFrameBuffer:function(){return this._lightAccumFrameBuffer},getGBuffer:function(){return this._gBuffer},setViewport:function(t,e,r,n,i){this._gBuffer.setViewport(t,e,r,n,i),this._lightAccumFrameBuffer.viewport=this._gBuffer.getViewport()},resize:function(t,e){this._lightAccumTex.width=t,this._lightAccumTex.height=e,this._gBuffer.resize(t,e)},_accumulateLightBuffer:function(t,e,r,n){for(var i=t.gl,a=this._lightAccumTex,o=this._lightAccumFrameBuffer,s=r.getWorldPosition().array,u=0;u=0){var l="touchend"!=u?i.targetTouches[0]:i.changedTouches[0];"touchstart"===u?u="mousedown":"touchend"===u?u="mouseup":"touchmove"===u&&(u="mousemove"),a=l.clientX-s.left,o=l.clientY-s.top}else a=i.clientX-s.left,o=i.clientY-s.top;var c,h=t.pick(a,o);if("DOMMouseScroll"!==u&&"mousewheel"!==u||(c=i.wheelDelta?i.wheelDelta/120:-(i.detail||0)/3),h){if(h.target.silent)return;if("mousemove"===u){var f=h.target!==r;f&&r&&Pt(r,Lt("mouseout",{target:r},a,o)),Pt(h.target,Lt("mousemove",h,a,o)),f&&Pt(h.target,Lt("mouseover",h,a,o))}else Pt(h.target,Lt(u,h,a,o,c));r=h.target}else r&&(Pt(r,Lt("mouseout",{target:r},a,o)),r=null)}})},this)},Mt.prototype._updateGraphicOptions=function(t,e,r){for(var n,i=!!t.tonemapping,a=!!t.linear,o=0;o0,l=e.color;e.depth=0,u&&va.set(l,0,0,0,0);for(var c=!0,h=1/n,f=0;f-g&&m-g&&p-g&&_0){var _=f[0],b=(_[0]+1)*u,A=(1-_[1])*l;e.fillStyle=p,"rectangle"===T?e.fillRect(b-E,A-E,x,x):"circle"===T&&(e.beginPath(),e.arc(b,A,E,0,2*Math.PI),e.fill())}}}e.restore()},dispose:function(){this._triangles.clear(),this._lines.clear(),this._points.clear(),this._primitives=[],this.ctx=null,this.canvas=null}}),Ea=Pe.extend(function(){return{name:"",inputLinks:{},outputLinks:{},_prevOutputTextures:{},_outputTextures:{},_outputReferences:{},_rendering:!1,_rendered:!1,_compositor:null}},{updateParameter:function(t,e){var r=this.outputs[t],n=r.parameters,i=r._parametersCopy;if(i||(i=r._parametersCopy={}),n)for(var a in n)"width"!==a&&"height"!==a&&(i[a]=n[a]);var o,s;return o=n.width instanceof Function?n.width.call(this,e):n.width,s=n.height instanceof Function?n.height.call(this,e):n.height,i.width===o&&i.height===s||this._outputTextures[t]&&this._outputTextures[t].dispose(e.gl),i.width=o,i.height=s,i},setParameter:function(t,e){},getParameter:function(t){},setParameters:function(t){for(var e in t)this.setParameter(e,t[e])},render:function(){},getOutput:function(t,e){if(null==e)return e=t,this._outputTextures[e];var r=this.outputs[e];if(r)return this._rendered?r.outputLastFrame?this._prevOutputTextures[e]:this._outputTextures[e]:this._rendering?(this._prevOutputTextures[e]||(this._prevOutputTextures[e]=this._compositor.allocateTexture(r.parameters||{})),this._prevOutputTextures[e]):(this.render(t),this._outputTextures[e])},removeReference:function(t){if(0===--this._outputReferences[t]){this.outputs[t].keepLastFrame?(this._prevOutputTextures[t]&&this._compositor.releaseTexture(this._prevOutputTextures[t]),this._prevOutputTextures[t]=this._outputTextures[t]):this._compositor.releaseTexture(this._outputTextures[t])}},link:function(t,e,r){this.inputLinks[t]={node:e,pin:r},e.outputLinks[r]||(e.outputLinks[r]=[]),e.outputLinks[r].push({node:this,pin:t}),this.pass.material.enableTexture(t)},clear:function(){this.inputLinks={},this.outputLinks={}},updateReference:function(t){if(!this._rendering){this._rendering=!0;for(var e in this.inputLinks){var r=this.inputLinks[e];r.node.updateReference(r.pin)}this._rendering=!1}t&&this._outputReferences[t]++},beforeFrame:function(){this._rendered=!1;for(var t in this.outputLinks)this._outputReferences[t]=0},afterFrame:function(){for(var t in this.outputLinks)if(this._outputReferences[t]>0){var e=this.outputs[t];e.keepLastFrame?(this._prevOutputTextures[t]&&this._compositor.releaseTexture(this._prevOutputTextures[t]),this._prevOutputTextures[t]=this._outputTextures[t]):this._compositor.releaseTexture(this._outputTextures[t])}}}),ba=Pe.extend(function(){return{nodes:[]}},{dirty:function(){this._dirty=!0},addNode:function(t){this.nodes.indexOf(t)>=0||(this.nodes.push(t),this._dirty=!0)},removeNode:function(t){"string"==typeof t&&(t=this.getNodeByName(t));var e=this.nodes.indexOf(t);e>=0&&(this.nodes.splice(e,1),this._dirty=!0)},getNodeByName:function(t){for(var e=0;e=e.COLOR_ATTACHMENT0&&u<=e.COLOR_ATTACHMENT0+8&&c.push(u);l.drawBuffersEXT(c)}t.saveClear(),t.clearBit=He.DEPTH_BUFFER_BIT|He.COLOR_BUFFER_BIT,r=t.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ),t.restoreClear(),n.unbind(t)}else r=t.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ);this.trigger("afterrender",r),this._rendering=!1,this._rendered=!0}}),wa=Ea.extend(function(){return{texture:null,outputs:{color:{}}}},function(){},{getOutput:function(t,e){return this.texture},beforeFrame:function(){},afterFrame:function(){}}),Ma=Ea.extend(function(){return{name:"",inputs:{},outputs:null,shader:"",inputLinks:{},outputLinks:{},pass:null,_prevOutputTextures:{},_outputTextures:{},_outputReferences:{},_rendering:!1,_rendered:!1,_compositor:null}},function(){var t=new Mi({fragment:this.shader});this.pass=t},{render:function(t,e){this.trigger("beforerender",t),this._rendering=!0;var r=t.gl;for(var n in this.inputLinks){var i=this.inputLinks[n],a=i.node.getOutput(t,i.pin);this.pass.setUniform(n,a)}if(this.outputs){this.pass.outputs={};var o={};for(var s in this.outputs){var u=this.updateParameter(s,t);isNaN(u.width)&&this.updateParameter(s,t);var l=this.outputs[s],c=this._compositor.allocateTexture(u);this._outputTextures[s]=c;var h=l.attachment||r.COLOR_ATTACHMENT0;"string"==typeof h&&(h=r[h]),o[h]=c}this._compositor.getFrameBuffer().bind(t);for(var h in o)this._compositor.getFrameBuffer().attach(o[h],h);this.pass.render(t),this._compositor.getFrameBuffer().updateMipmap(t.gl)}else this.pass.outputs=null,this._compositor.getFrameBuffer().unbind(t),this.pass.render(t,e);for(var n in this.inputLinks){var i=this.inputLinks[n];i.node.removeReference(i.pin)}this._rendering=!1,this._rendered=!0,this.trigger("afterrender",t)},updateParameter:function(t,e){var r=this.outputs[t],n=r.parameters,i=r._parametersCopy;if(i||(i=r._parametersCopy={}),n)for(var a in n)"width"!==a&&"height"!==a&&(i[a]=n[a]);var o,s;return o=n.width instanceof Function?n.width.call(this,e):n.width,s=n.height instanceof Function?n.height.call(this,e):n.height,i.width===o&&i.height===s||this._outputTextures[t]&&this._outputTextures[t].dispose(e),i.width=o,i.height=s,i},setParameter:function(t,e){this.pass.setUniform(t,e)},getParameter:function(t){return this.pass.getUniform(t)},setParameters:function(t){for(var e in t)this.setParameter(e,t[e])},define:function(t,e){this.pass.material.define("fragment",t,e)},undefine:function(t){this.pass.material.undefine("fragment",t)},removeReference:function(t){if(0===--this._outputReferences[t]){this.outputs[t].keepLastFrame?(this._prevOutputTextures[t]&&this._compositor.releaseTexture(this._prevOutputTextures[t]),this._prevOutputTextures[t]=this._outputTextures[t]):this._compositor.releaseTexture(this._outputTextures[t])}},clear:function(){Ea.prototype.clear.call(this),this.pass.material.disableTexturesAll()}}),Ca=/^#source\((.*?)\)/,Na=$r.extend({range:100,radius:5},{type:"SPHERE_LIGHT",uniformTemplates:{sphereLightPosition:{type:"3f",value:function(t){return t.getWorldPosition().array}},sphereLightRange:{type:"1f",value:function(t){return t.range}},sphereLightRadius:{type:"1f",value:function(t){return t.radius}},sphereLightColor:{type:"3f",value:function(t){var e=t.color,r=t.intensity;return[e[0]*r,e[1]*r,e[2]*r]}}}}),Ra=$r.extend({range:100,length:10},{type:"TUBE_LIGHT",uniformTemplates:{tubeLightPosition:{type:"3f",value:function(t){return t.getWorldPosition().array}},tubeLightExtend:{type:"3f",value:function(){var t=new Xe;return function(e){return t.copy(e.worldTransform.x).normalize().scale(e.length/2).array}}()},tubeLightRange:{type:"1f",value:function(t){return t.range}},tubeLightColor:{type:"3f",value:function(t){var e=t.color,r=t.intensity;return[e[0]*r,e[1]*r,e[2]*r]}}}}),La=Pe.extend({rootPath:"",textureRootPath:"",shaderRootPath:"",scene:null,camera:null},{load:function(t){var e=this;this.rootPath||(this.rootPath=t.slice(0,t.lastIndexOf("/"))),Yn.get({url:t,onprogress:function(t,r,n){e.trigger("progress",t,r,n)},onerror:function(t){e.trigger("error",t)},responseType:"text",onload:function(t){qt(JSON.parse(t),{textureRootPath:this.textureRootPath||this.rootPath,camera:this.camera,scene:this.scene})}})}}),Pa=pe.mat2,Da=function(){this.array=Pa.create(),this._dirty=!0};Da.prototype={constructor:Da,setArray:function(t){for(var e=0;e0&&Qa.scaleAndAdd(t.array,t.array,this.force.array,n/r)}});K.import("@export clay.particle.vertex\nuniform mat4 worldView : WORLDVIEW;\nuniform mat4 projection : PROJECTION;\nattribute vec3 position : POSITION;\nattribute vec3 normal : NORMAL;\n#ifdef UV_ANIMATION\nattribute vec2 texcoord0 : TEXCOORD_0;\nattribute vec2 texcoord1 : TEXCOORD_1;\nvarying vec2 v_Uv0;\nvarying vec2 v_Uv1;\n#endif\nvarying float v_Age;\nvoid main() {\n v_Age = normal.x;\n float rotation = normal.y;\n vec4 worldViewPosition = worldView * vec4(position, 1.0);\n gl_Position = projection * worldViewPosition;\n float w = gl_Position.w;\n gl_PointSize = normal.z * projection[0].x / w;\n #ifdef UV_ANIMATION\n v_Uv0 = texcoord0;\n v_Uv1 = texcoord1;\n #endif\n}\n@end\n@export clay.particle.fragment\nuniform sampler2D sprite;\nuniform sampler2D gradient;\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\nvarying float v_Age;\n#ifdef UV_ANIMATION\nvarying vec2 v_Uv0;\nvarying vec2 v_Uv1;\n#endif\nvoid main() {\n vec4 color = vec4(color, alpha);\n #ifdef SPRITE_ENABLED\n #ifdef UV_ANIMATION\n color *= texture2D(sprite, mix(v_Uv0, v_Uv1, gl_PointCoord));\n #else\n color *= texture2D(sprite, gl_PointCoord);\n #endif\n #endif\n #ifdef GRADIENT_ENABLED\n color *= texture2D(gradient, vec2(v_Age, 0.5));\n #endif\n gl_FragColor = color;\n}\n@end");var to=new K(K.source("clay.particle.vertex"),K.source("clay.particle.fragment")),eo=zn.extend({loop:!0,oneshot:!1,duration:1,spriteAnimationTileX:1,spriteAnimationTileY:1,spriteAnimationRepeat:0,mode:zn.POINTS,ignorePicking:!0,_elapsedTime:0,_emitting:!0},function(){this.geometry=new An({dynamic:!0}),this.material||(this.material=new vr({shader:to,transparent:!0,depthMask:!1}),this.material.enableTexture("sprite")),this._particles=[],this._fields=[],this._emitters=[]},{culling:!1,frustumCulling:!1,castShadow:!1,receiveShadow:!1,addEmitter:function(t){this._emitters.push(t)},removeEmitter:function(t){this._emitters.splice(this._emitters.indexOf(t),1)},addField:function(t){this._fields.push(t)},removeField:function(t){this._fields.splice(this._fields.indexOf(t),1)},reset:function(){for(var t=0;t=i.life?(i.emitter.kill(i),e[r]=e[n-1],e.pop(),n--):r++}for(var r=0;r0)for(var a=0;a1,o=t.attributes.position.value,s=t.attributes.normal.value,u=t.attributes.texcoord0.value,l=t.attributes.texcoord1.value,c=this._particles.length;o&&o.length===3*c||(o=t.attributes.position.value=new Float32Array(3*c),s=t.attributes.normal.value=new Float32Array(3*c),a&&(u=t.attributes.texcoord0.value=new Float32Array(2*c),l=t.attributes.texcoord1.value=new Float32Array(2*c)));for(var h=1/e,f=0;fthis.duration&&!this.loop},dispose:function(t){for(var e=0;e1&&n&&n.length>1){var a=re(n)/re(i);!isFinite(a)&&(a=1),e.pinchScale=a;var o=ne(n);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:t[0].target,event:e}}}}},oo=[[0,0],[0,1],[1,1],[1,0]],so=[0,1,2,2,3,0],uo=Xn.extend({camera:null,plane:null,maxGrid:0,frustumCulling:!1},function(){var t=this.geometry=new An({dynamic:!0});t.attributes.position.init(6),t.attributes.normal.init(6),t.attributes.texcoord0.init(6),t.indices=new Uint16Array(6),this.plane=new nn},{updateGeometry:function(){var t=this._unProjectGrid();if(t){for(var e=this.geometry.attributes.position,r=this.geometry.attributes.normal,n=this.geometry.attributes.texcoord0,i=this.geometry.indices,a=0;a<6;a++){var o=so[a];e.set(a,t[o].array),r.set(a,this.plane.normal.array),n.set(a,oo[o]),i[a]=a}this.geometry.dirty()}},_unProjectGrid:function(){for(var t=new nn,e=[0,1,0,2,1,3,2,3,4,5,4,6,5,7,6,7,0,4,1,5,2,6,3,7],r=new Xe,n=new Xe,i=[],a=[],o=0;o<4;o++)a[o]=new Xe(0,0);var s=new dn;return function(){t.copy(this.plane),t.applyTransform(this.camera.viewMatrix);for(var o=this.camera.frustum.vertices,u=0,l=0;l<12;l++){r.array=o[e[2*l]],n.array=o[e[2*l+1]];var c=t.intersectLine(r,n,i[u]);c&&(i[u]||(i[u]=c),u++)}if(0!==u){for(var l=0;l0},update:function(t){if(t=t||16,this._rotating){var e=("cw"===this.autoRotateDirection?1:-1)*this.autoRotateSpeed/180*Math.PI;this._phi-=e*t/1e3,this._needsUpdate=!0}else this._rotateVelocity.len()>0&&(this._needsUpdate=!0);(Math.abs(this._zoomSpeed)>.01||this._panVelocity.len()>0)&&(this._needsUpdate=!0),this._needsUpdate&&(this._updateDistance(Math.min(t,50)),this._updatePan(Math.min(t,50)),this._updateRotate(Math.min(t,50)),this._updateTransform(),this.target.update(),this.trigger("update"),this._needsUpdate=!1)},_updateRotate:function(t){var e=this._rotateVelocity;this._phi=e.y*t/20+this._phi,this._theta=e.x*t/20+this._theta,this.setAlpha(this.getAlpha()),this.setBeta(this.getBeta()),this._vectorDamping(e,this.damping)},_updateDistance:function(t){this._setDistance(this._distance+this._zoomSpeed*t/20),this._zoomSpeed*=this.damping},_setDistance:function(t){this._distance=Math.max(Math.min(t,this.maxDistance),this.minDistance)},_updatePan:function(t){var e=this._panVelocity,r=this._distance,n=this.target,i=n.worldTransform.y,a=n.worldTransform.x;this._center.scaleAndAdd(a,-e.x*r/200).scaleAndAdd(i,-e.y*r/200),this._vectorDamping(e,0)},_updateTransform:function(){var t=this.target,e=new Xe,r=this._theta+Math.PI/2,n=this._phi+Math.PI/2,i=Math.sin(r);e.x=i*Math.cos(n),e.y=-Math.cos(r),e.z=i*Math.sin(n),t.position.copy(this._center).scaleAndAdd(e,this._distance),t.rotation.identity().rotateY(-this._phi).rotateX(-this._theta)},_startCountingStill:function(){clearTimeout(this._stillTimeout);var t=this.autoRotateAfterStill,e=this;!isNaN(t)&&t>0&&(this._stillTimeout=setTimeout(function(){e._rotating=!0},1e3*t))},_vectorDamping:function(t,e){var r=t.len();r*=e,r<1e-4&&(r=0),t.normalize().scale(r)},decomposeTransform:function(){if(this.target){this.target.updateWorldTransform();var t=this.target.worldTransform.z,e=Math.asin(t.y),r=Math.atan2(t.x,t.z);this._theta=e,this._phi=-r,this.setBeta(this.getBeta()),this.setAlpha(this.getAlpha()),this._setDistance(this.target.position.dist(this._center))}},_mouseDownHandler:function(t){if(!this._isAnimating()){var e=t.clientX,r=t.clientY;if(t.targetTouches){var n=t.targetTouches[0];e=n.clientX,r=n.clientY,this._mode="rotate",this._processGesture(t,"start")}var i=this.domElement;i.addEventListener("touchmove",this._mouseMoveHandler),i.addEventListener("touchend",this._mouseUpHandler),i.addEventListener("mousemove",this._mouseMoveHandler),i.addEventListener("mouseup",this._mouseUpHandler),0===t.button?this._mode="rotate":1===t.button&&(this._mode="pan"),this._rotateVelocity.set(0,0),this._rotating=!1,this.autoRotate&&this._startCountingStill(),this._mouseX=e,this._mouseY=r}},_mouseMoveHandler:function(t){if(!this._isAnimating()){var e,r=t.clientX,n=t.clientY;if(t.targetTouches){var i=t.targetTouches[0];r=i.clientX,n=i.clientY,e=this._processGesture(t,"change")}var a=ie(this.panSensitivity),o=ie(this.rotateSensitivity);e||("rotate"===this._mode?(this._rotateVelocity.y=(r-this._mouseX)/this.domElement.clientHeight*2*o[0],this._rotateVelocity.x=(n-this._mouseY)/this.domElement.clientWidth*2*o[1]):"pan"===this._mode&&(this._panVelocity.x=(r-this._mouseX)/this.domElement.clientWidth*a[0]*400,this._panVelocity.y=(-n+this._mouseY)/this.domElement.clientHeight*a[1]*400)),this._mouseX=r,this._mouseY=n,t.preventDefault()}},_mouseWheelHandler:function(t){if(!this._isAnimating()){var e=t.wheelDelta||-t.detail;0!==e&&this._zoomHandler(t,e>0?-1:1)}},_pinchHandler:function(t){this._isAnimating()||this._zoomHandler(t,t.pinchScale>1?-.4:.4)},_zoomHandler:function(t,e){var r=Math.max(Math.min(this._distance-this.minDistance,this.maxDistance-this._distance));this._zoomSpeed=e*Math.max(r/40*this.zoomSensitivity,.2),this._rotating=!1,this.autoRotate&&"rotate"===this._mode&&this._startCountingStill(),t.preventDefault()},_mouseUpHandler:function(t){var e=this.domElement;e.removeEventListener("touchmove",this._mouseMoveHandler),e.removeEventListener("touchend",this._mouseUpHandler),e.removeEventListener("mousemove",this._mouseMoveHandler),e.removeEventListener("mouseup",this._mouseUpHandler),this._processGesture(t,"end")},_addAnimator:function(t){var e=this._animators;return e.push(t),t.done(function(){var r=e.indexOf(t);r>=0&&e.splice(r,1)}),t},_processGesture:function(t,e){var r=this._gestureMgr;"start"===e&&r.clear();var n=r.recognize(t,null,this.domElement);if("end"===e&&r.clear(),n){var i=n.type;t.gestureEvent=i,this._pinchHandler(n.event)}return n}});Object.defineProperty(lo.prototype,"autoRotate",{get:function(){return this._autoRotate},set:function(t){this._autoRotate=t,this._rotating=t}}),Object.defineProperty(lo.prototype,"target",{get:function(){return this._target},set:function(t){t&&t.target&&this.setCenter(t.target.toArray()),this._target=t,this.decomposeTransform()}});var co=An.extend({dynamic:!1}),ho=pe.mat4,fo=pe.vec3,mo={merge:function(t,e){if(t.length){var r=t[0],n=r.geometry,i=r.material,a=new An({dynamic:!1});a.boundingBox=new tr;for(var o=n.getEnabledAttributes(),s=0;s=65535?new Uint32Array(3*f):new Uint16Array(3*f);for(var _=0,g=0,v=n.isUseIndices(),y=0;y0;){for(var _=[],g=[],v=[],y=0,f=0;f=0&&-1===g[S]&&(y65535?new Uint32Array(3*R.triangles.length):new Uint16Array(3*R.triangles.length);var G=0;O=0;for(var f=0;f=0?L[S]:-1}O++}D.indices[G++]=C[b]}D.updateBoundingBox(),w.add(I)}for(var j=t.children(),f=0;f0&&(r.indices=oe(t.indices,e),n.push(r.indices.buffer)),r.attributes={};for(var i in t.attributes)if(t.attributes.hasOwnProperty(i)){var a=t.attributes[i];a&&a.value&&a.value.length>0&&(a=r.attributes[i]=ae(a,e),n.push(a.value.buffer))}return{data:r,buffers:n}},toGeometry:function(t){if(!t)return null;if(t.data&&t.buffers)return _o.toGeometry(t.data);if(!t.metadata||t.metadata.generator!==po.generator)throw new Error("[util.transferable.toGeometry] the object is not generated by util.transferable.");var e={dynamic:t.dynamic,indices:t.indices};if(t.boundingBox){var r=(new Xe).setArray(t.boundingBox.min),n=(new Xe).setArray(t.boundingBox.max);e.boundingBox=new tr(r,n)}var i={};for(var a in t.attributes)if(t.attributes.hasOwnProperty(a)){var o=t.attributes[a];i[a]=new An.Attribute(o.name,o.type,o.size,o.semantic),i[a].value=o.value}return e.attributes=i,new An(e)}};K.import("@export clay.vr.disorter.output.vertex\nattribute vec2 texcoord: TEXCOORD_0;\nattribute vec3 position: POSITION;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n v_Texcoord = texcoord;\n gl_Position = vec4(position.xy, 0.5, 1.0);\n}\n@end\n@export clay.vr.disorter.output.fragment\nuniform sampler2D texture;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n gl_FragColor = texture2D(texture, v_Texcoord);\n}\n@end");var go=Pe.extend(function(){return{clearColor:[0,0,0,1],_mesh:new Xn({geometry:new An({dynamic:!0}),culling:!1,material:new vr({depthTest:!1,shader:new K({vertex:K.source("clay.vr.disorter.output.vertex"),fragment:K.source("clay.vr.disorter.output.fragment")})})}),_fakeCamera:new jn}},{render:function(t,e){var r=this.clearColor,n=t.gl;n.clearColor(r[0],r[1],r[2],r[3]),n.clear(n.COLOR_BUFFER_BIT),n.disable(n.BLEND),this._mesh.material.set("texture",e),t.saveViewport(),t.setViewport(0,0,t.getWidth(),t.getHeight()),t.renderPass([this._mesh],this._fakeCamera),t.restoreViewport()},updateFromVRDisplay:function(t){t.deviceInfo_?this._updateMesh(20,20,t.deviceInfo_):console.warn("Cant get vrDisplay.deviceInfo_, seems code changed")},_updateMesh:function(t,e,r){var n=this._mesh.geometry.attributes.position,i=this._mesh.geometry.attributes.texcoord0;n.init(2*t*e),i.init(2*t*e);for(var a=r.getLeftEyeVisibleTanAngles(),o=r.getLeftEyeNoLensTanAngles(),s=r.getLeftEyeVisibleScreenRect(o),u=0,l=[],c=[],h=0;h<2;h++){for(var f=0;fi)t.length=i;else for(var a=n;a=0&&!(T[w]<=e);w--);w=Math.min(w,g-2)}else{for(w=O;we);w++);w=Math.min(w-1,g-2)}O=w,B=e;var r=T[w+1]-T[w];0!==r&&(R=(e-T[w])/r,R=Math.max(Math.min(1,R),0),R=b[w+1](R),_?(P=E[w],L=E[0===w?w:w-1],D=E[w>g-2?g-1:w+1],I=E[w>g-3?g-1:w+2],f?p(t,s,f(m(t,s),L,P,D,I,R)):y?u(L,P,D,I,R,R*R,R*R*R,m(t,s),x):p(t,s,l(L,P,D,I,R,R*R,R*R*R))):f?p(t,s,f(m(t,s),E[w],E[w+1],R)):y?a(E[w],E[w+1],R,m(t,s),x):p(t,s,i(E[w],E[w+1],R)))},U=new le({target:t._target,life:d,loop:t._loop,delay:t._delay,onframe:F,onfinish:r});return e&&"spline"!==e&&U.setEasing(e),U}}}function d(t,e,i,a,o){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||r,this._setter=a||n,this._interpolater=o||null,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[],this._maxTime=0,this._lastKFTime=0}function m(t){return t}function p(t){var e,r,n,i,a,o,s=Number.POSITIVE_INFINITY,u=Number.POSITIVE_INFINITY,l=Number.NEGATIVE_INFINITY,c=Number.NEGATIVE_INFINITY;for(e=t.length;e--;)t[e][0]l&&(l=t[e][0]),t[e][1]c&&(c=t[e][1]);return r=l-s,n=c-u,i=Math.max(r,n),a=s+.5*r,o=u+.5*n,[[a-20*i,o-i],[a,o+20*i],[a+20*i,o-i]]}function _(t,e,r,n){var i,a,o,s,u,l,c,h,f,d,m=t[e][0],p=t[e][1],_=t[r][0],g=t[r][1],v=t[n][0],y=t[n][1],x=Math.abs(p-g),T=Math.abs(g-y);if(xT?o*(i-u)+c:s*(i-l)+h),f=_-i,d=g-a,{i:e,j:r,k:n,x:i,y:a,r:f*f+d*d}}function g(t){var e,r,n,i,a,o;for(r=t.length;r;)for(i=t[--r],n=t[--r],e=r;e;)if(o=t[--e],a=t[--e],n===a&&i===o||n===o&&i===a){t.splice(r,2),t.splice(e,2);break}}function v(t,e){return t.time-e.time}function y(t,e,r,n,i,a){var o=e[i],s=e[i+1],u=e[i+2];return t[0]=o+n*(r[a]-o),t[1]=s+n*(r[a+1]-s),t[2]=u+n*(r[a+2]-u),t}function x(t,e,r,n,i,a){var o,s,u,l,c,h=e[0+i],f=e[1+i],d=e[2+i],m=e[3+i],p=r[0+a],_=r[1+a],g=r[2+a],v=r[3+a];return s=h*p+f*_+d*g+m*v,s<0&&(s=-s,p=-p,_=-_,g=-g,v=-v),1-s>1e-6?(o=Math.acos(s),u=Math.sin(o),l=Math.sin((1-n)*o)/u,c=Math.sin(n*o)/u):(l=1-n,c=n),t[0]=l*h+c*p,t[1]=l*f+c*_,t[2]=l*d+c*g,t[3]=l*m+c*v,t}function T(t,e,r){"object"==typeof e&&(r=e,e=null);var n,i=this;if(!(t instanceof Function)){n=[];for(var a in t)t.hasOwnProperty(a)&&n.push(a)}var o=function(e){if(i.apply(this,arguments),t instanceof Function?E(this,t.call(this,e)):b(this,t,n),this.constructor===o)for(var r=o.__initializers__,a=0;ar?r:t}function M(t){return t=Math.round(t),t<0?0:t>255?255:t}function C(t){return t=Math.round(t),t<0?0:t>360?360:t}function N(t){return t<0?0:t>1?1:t}function R(t){return M(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function L(t){return N(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function P(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}function D(t,e,r){return t+(e-t)*r}function I(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function O(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function B(t,e){pr&&O(pr,e),pr=mr.put(t,pr||e.slice())}function F(t,e){var r=(parseFloat(t[0])%360+360)%360/360,n=L(t[1]),i=L(t[2]),a=i<=.5?i*(n+1):i+n-i*n,o=2*i-a;return e=e||[],I(e,M(255*P(o,a,r+1/3)),M(255*P(o,a,r)),M(255*P(o,a,r-1/3)),1),4===t.length&&(e[3]=t[3]),e}function U(t){if(t){var e,r,n=t[0]/255,i=t[1]/255,a=t[2]/255,o=Math.min(n,i,a),s=Math.max(n,i,a),u=s-o,l=(s+o)/2;if(0===u)e=0,r=0;else{r=l<.5?u/(s+o):u/(2-s-o);var c=((s-n)/6+u/2)/u,h=((s-i)/6+u/2)/u,f=((s-a)/6+u/2)/u;n===s?e=f-h:i===s?e=1/3+c-f:a===s&&(e=2/3+h-c),e<0&&(e+=1),e>1&&(e-=1)}var d=[360*e,r,l];return null!=t[3]&&d.push(t[3]),d}}function k(t,e,r){var n=Object.keys(t);n.sort();for(var i=[],a=0;a0&&n.push("#define "+i.toUpperCase()+"_COUNT "+a)}if(r)for(var o=0;o=400?t.onerror&&t.onerror():t.onload&&t.onload(e.response)},t.onerror&&(e.onerror=t.onerror),e.send(null)}function ht(t,e,r,n){var i=t.accessors[r],a=e.bufferViews[i.bufferView],o=i.byteOffset||0,s=di[i.componentType]||We.Float32Array,u=mi[i.type];null==u&&n&&(u=1);var l=new s(a,o,u*i.count),c=i.extensions&&i.extensions.WEB3D_quantized_attributes;if(c){for(var h,f,d=new We.Float32Array(u*i.count),m=c.decodeMatrix,h=new Array(u),f=new Array(u),p=0;p0){var i=Math.pow(2,t[3]-128-8+n);e[r+0]=t[0]*i,e[r+1]=t[1]*i,e[r+2]=t[2]*i}else e[r+0]=0,e[r+1]=0,e[r+2]=0;return e[r+3]=1,e}function mt(t,e,r){for(var n="",i=e;i0;)if(t[a][0]=e[r++],t[a][1]=e[r++],t[a][2]=e[r++],t[a][3]=e[r++],1===t[a][0]&&1===t[a][1]&&1===t[a][2]){for(var s=t[a][3]<>>0;s>0;s--)pt(t[a-1],t[a]),a++,o--;i+=8}else a++,o--,i=0;return r}function gt(t,e,r,n){if(nki)return _t(t,e,r,n);var i=e[r++];if(2!=i)return _t(t,e,r-1,n);if(t[0][1]=e[r++],t[0][2]=e[r++],i=e[r++],(t[0][2]<<8>>>0|i)>>>0!==n)return null;for(var i=0;i<4;i++)for(var a=0;a128){o=(127&o)>>>0;for(var s=e[r++];o--;)t[a++][i]=s}else for(;o--;)t[a++][i]=e[r++]}return r}function vt(t){Le.defaultsWithPropList(t,qi,Yi),yt(t);for(var e="",r=0;r>16,r=t-(e<<8)>>8;return[e,r,t-(e<<16)-(r<<8)]}function ee(t,e,r){return(t<<16)+(e<<8)+r}function re(t){var e=t[1][0]-t[0][0],r=t[1][1]-t[0][1];return Math.sqrt(e*e+r*r)}function ne(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}function ie(t){return Array.isArray(t)||(t=[t,t]),t}function ae(t,e){return{name:t.name,type:t.type,size:t.size,semantic:t.semantic,value:oe(t.value,e)}}function oe(t,e){return e?t:new t.constructor(t)}function se(t,e,r){return t*(1-r)+e*r}var ue={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,r=.1;return 0===t?0:1===t?1:(!r||r<1?(r=1,e=.1):e=.4*Math.asin(1/r)/(2*Math.PI),-r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,r=.1;return 0===t?0:1===t?1:(!r||r<1?(r=1,e=.1):e=.4*Math.asin(1/r)/(2*Math.PI),r*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,r=.1;return 0===t?0:1===t?1:(!r||r<1?(r=1,e=.1):e=.4*Math.asin(1/r)/(2*Math.PI),(t*=2)<1?r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*-.5:r*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-ue.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*ue.bounceIn(2*t):.5*ue.bounceOut(2*t-1)+.5}},le=function(t){t=t||{},this.name=t.name||"",this.target=t.target,this.life=t.life||1e3,this.delay=t.delay||0,this.gap=t.gap||0,this.playbackRate=t.playbackRate||1,this._initialized=!1,this._elapsedTime=0,this._loop=null!=t.loop&&t.loop,this.setLoop(this._loop),null!=t.easing&&this.setEasing(t.easing),this.onframe=t.onframe||e,this.onfinish=t.onfinish||e,this.onrestart=t.onrestart||e,this._paused=!1};le.prototype={gap:0,life:0,delay:0,setLoop:function(t){this._loop=t,t&&(this._loopRemained="number"==typeof t?t:1e8)},setEasing:function(t){"string"==typeof t&&(t=ue[t]),this.easing=t},step:function(t,e,r){if(this._initialized||(this._startTime=t+this.delay,this._initialized=!0),null!=this._currentTime&&(e=t-this._currentTime),this._currentTime=t,this._paused)return"paused";if(!(t0?(this._restartInLoop(t),this._loopRemained--,"restart"):(this._needsRemove=!0,"finish"):null}}},setTime:function(t){return this.step(t+this._startTime)},restart:function(t){var e=0;t&&(this._elapse(t),e=this._elapsedTime%this.life),t=t||Date.now(),this._startTime=t-e+this.delay,this._elapsedTime=0,this._needsRemove=!1,this._paused=!1},getElapsedTime:function(){return this._elapsedTime},_restartInLoop:function(t){this._startTime=t+this.gap,this._elapsedTime=0},_elapse:function(t,e){this._elapsedTime+=e*this.playbackRate},fire:function(t,e){var r="on"+t;this[r]&&this[r](this.target,e)},clone:function(){var t=new this.constructor;return t.name=this.name,t._loop=this._loop,t._loopRemained=this._loopRemained,t.life=this.life,t.gap=this.gap,t.delay=this.delay,t},pause:function(){this._paused=!0},resume:function(){this._paused=!1}},le.prototype.constructor=le;var ce=Array.prototype.slice;d.prototype={constructor:d,when:function(t,e,r){this._maxTime=Math.max(t,this._maxTime),r=("function"==typeof r?r:ue[r])||m;for(var n in e)this._tracks[n]||(this._tracks[n]=[],0!==t&&this._tracks[n].push({time:0,value:s(this._getter(this._target,n)),easing:r})),this._tracks[n].push({time:parseInt(t),value:e[n],easing:r});return this},then:function(t,e,r){return this.when(t+this._lastKFTime,e,r),this._lastKFTime+=t,this},during:function(t){return this._onframeList.push(t),this},_doneCallback:function(){this._tracks={},this._clipList.length=0;for(var t=this._doneList,e=t.length,r=0;rt)this.inputs.unshift(n);else if(this.inputs[i-1].position<=t)this.inputs.push(n);else{var a=this._findKey(t);this.inputs.splice(a,n)}return n},fe.prototype.step=function(t,e,r){var n=le.prototype.step.call(this,t);return"finish"!==n&&this.setTime(this.getElapsedTime()),r||"paused"===n||this.fire("frame"),n},fe.prototype.setTime=function(t){var e=this.position,r=this.inputs,n=r.length,i=r[0].position,a=r[n-1].position;if(e<=i||e>=a){var o=e<=i?r[0]:r[n-1],s=o.clip,u=o.offset;s.setTime((t+u)%s.life),s.output instanceof le?this.output.copy(s.output):this.output.copy(s)}else{var l=this._findKey(e),c=r[l],h=r[l+1],f=c.clip,d=h.clip;f.setTime((t+c.offset)%f.life),d.setTime((t+h.offset)%d.life);var m=(this.position-c.position)/(h.position-c.position),p=f.output instanceof le?f.output:f,_=d.output instanceof le?d.output:d;this.output.blend1D(p,_,m)}},fe.prototype.clone=function(t){var e=le.prototype.clone.call(this);e.output=this.output.clone();for(var r=0;r=r[i].position&&t=0;i--)t>=r[i].position&&t=0&&(this._cacheKey=e,this._cachePosition=t),e};var de=1/1048576,me={triangulate:function(t,e){var r,n,i,a,o,s,u,l,c,h,f,d,m=t.length;if(m<3)return[];if(t=t.slice(0),e)for(r=m;r--;)t[r]=t[r][e];for(i=new Array(m),r=m;r--;)i[r]=r;for(i.sort(function(e,r){var n=t[r][0]-t[e][0];return 0!==n?n:e-r}),a=p(t),t.push(a[0],a[1],a[2]),o=[_(t,m+0,m+1,m+2)],s=[],u=[],r=i.length;r--;u.length=0){for(d=i[r],n=o.length;n--;)l=t[d][0]-o[n].x,l>0&&l*l>o[n].r?(s.push(o[n]),o.splice(n,1)):(c=t[d][1]-o[n].y,l*l+c*c-o[n].r>de||(u.push(o[n].i,o[n].j,o[n].j,o[n].k,o[n].k,o[n].i),o.splice(n,1)));for(g(u),n=u.length;n;)f=u[--n],h=u[--n],o.push(_(t,h,f,d))}for(r=o.length;r--;)s.push(o[r]);for(o.length=0,r=s.length;r--;)s[r].it[0][0]&&e[0]>t[1][0]&&e[0]>t[2][0]||e[1]t[0][1]&&e[1]>t[1][1]&&e[1]>t[2][1])return null;var r=t[1][0]-t[0][0],n=t[2][0]-t[0][0],i=t[1][1]-t[0][1],a=t[2][1]-t[0][1],o=r*a-n*i;if(0===o)return null;var s=(a*(e[0]-t[0][0])-n*(e[1]-t[0][1]))/o,u=(r*(e[1]-t[0][1])-i*(e[0]-t[0][0]))/o;return s<0||u<0||s+u>1?null:[s,u]}},pe=("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self,function(t,e){return e={exports:{}},t(e,e.exports),e.exports}(function(t,e){!function(t){ +var r={};r.exports=e,function(t){var e=window.GLMAT_EPSILON;null==e&&(e=1e-6);var r=window.GLMAT_ARRAY_TYPE||Array,n=window.GLMAT_RANDOM;n||(n=Math.random);var i={};i.setMatrixArrayType=function(t){r=t},void 0!==t&&(t.glMatrix=i);var a=Math.PI/180;i.toRadian=function(t){return t*a};var o={};o.create=function(){var t=new r(2);return t[0]=0,t[1]=0,t},o.clone=function(t){var e=new r(2);return e[0]=t[0],e[1]=t[1],e},o.fromValues=function(t,e){var n=new r(2);return n[0]=t,n[1]=e,n},o.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t},o.set=function(t,e,r){return t[0]=e,t[1]=r,t},o.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t},o.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t},o.sub=o.subtract,o.multiply=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t},o.mul=o.multiply,o.divide=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t},o.div=o.divide,o.min=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t},o.max=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t},o.scale=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t},o.scaleAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t},o.distance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1];return Math.sqrt(r*r+n*n)},o.dist=o.distance,o.squaredDistance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1];return r*r+n*n},o.sqrDist=o.squaredDistance,o.length=function(t){var e=t[0],r=t[1];return Math.sqrt(e*e+r*r)},o.len=o.length,o.squaredLength=function(t){var e=t[0],r=t[1];return e*e+r*r},o.sqrLen=o.squaredLength,o.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t},o.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t},o.normalize=function(t,e){var r=e[0],n=e[1],i=r*r+n*n;return i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i),t},o.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]},o.cross=function(t,e,r){var n=e[0]*r[1]-e[1]*r[0];return t[0]=t[1]=0,t[2]=n,t},o.lerp=function(t,e,r,n){var i=e[0],a=e[1];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t},o.random=function(t,e){e=e||1;var r=2*n()*Math.PI;return t[0]=Math.cos(r)*e,t[1]=Math.sin(r)*e,t},o.transformMat2=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i,t[1]=r[1]*n+r[3]*i,t},o.transformMat2d=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i+r[4],t[1]=r[1]*n+r[3]*i+r[5],t},o.transformMat3=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[3]*i+r[6],t[1]=r[1]*n+r[4]*i+r[7],t},o.transformMat4=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t},o.forEach=function(){var t=o.create();return function(e,r,n,i,a,o){var s,u;for(r||(r=2),n||(n=0),u=i?Math.min(i*r+n,e.length):e.length,s=n;s0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t},s.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},s.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2];return t[0]=i*u-a*s,t[1]=a*o-n*u,t[2]=n*s-i*o,t},s.lerp=function(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t},s.random=function(t,e){e=e||1;var r=2*n()*Math.PI,i=2*n()-1,a=Math.sqrt(1-i*i)*e;return t[0]=Math.cos(r)*a,t[1]=Math.sin(r)*a,t[2]=i*e,t},s.transformMat4=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t},s.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},s.transformQuat=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2],l=r[3],c=l*n+s*a-u*i,h=l*i+u*n-o*a,f=l*a+o*i-s*n,d=-o*n-s*i-u*a;return t[0]=c*l+d*-o+h*-u-f*-s,t[1]=h*l+d*-s+f*-o-c*-u,t[2]=f*l+d*-u+c*-s-h*-o,t},s.rotateX=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0],a[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),a[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},s.rotateY=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),a[1]=i[1],a[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},s.rotateZ=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),a[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),a[2]=i[2],t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},s.forEach=function(){var t=s.create();return function(e,r,n,i,a,o){var s,u;for(r||(r=3),n||(n=0),u=i?Math.min(i*r+n,e.length):e.length,s=n;s1?0:Math.acos(i)},s.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},void 0!==t&&(t.vec3=s);var u={};u.create=function(){var t=new r(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},u.clone=function(t){var e=new r(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},u.fromValues=function(t,e,n,i){var a=new r(4);return a[0]=t,a[1]=e,a[2]=n,a[3]=i,a},u.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},u.set=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t},u.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t},u.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t},u.sub=u.subtract,u.multiply=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t},u.mul=u.multiply,u.divide=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t},u.div=u.divide,u.min=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t},u.max=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t},u.scale=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},u.scaleAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t},u.distance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)},u.dist=u.distance,u.squaredDistance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a},u.sqrDist=u.squaredDistance,u.length=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)},u.len=u.length,u.squaredLength=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i},u.sqrLen=u.squaredLength,u.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t},u.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t},u.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t[3]=e[3]*o),t},u.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},u.lerp=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t},u.random=function(t,e){return e=e||1,t[0]=n(),t[1]=n(),t[2]=n(),t[3]=n(),u.normalize(t,t),u.scale(t,t,e),t},u.transformMat4=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t},u.transformQuat=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],u=r[2],l=r[3],c=l*n+s*a-u*i,h=l*i+u*n-o*a,f=l*a+o*i-s*n,d=-o*n-s*i-u*a;return t[0]=c*l+d*-o+h*-u-f*-s,t[1]=h*l+d*-s+f*-o-c*-u,t[2]=f*l+d*-u+c*-s-h*-o,t},u.forEach=function(){var t=u.create();return function(e,r,n,i,a,o){var s,u;for(r||(r=4),n||(n=0),u=i?Math.min(i*r+n,e.length):e.length,s=n;s.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(s.cross(t,i,a),n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=1+o,d.normalize(n,n))}}(),d.setAxes=function(){var t=h.create();return function(e,r,n,i){return t[0]=n[0],t[3]=n[1],t[6]=n[2],t[1]=i[0],t[4]=i[1],t[7]=i[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],d.normalize(e,d.fromMat3(e,t))}}(),d.clone=u.clone,d.fromValues=u.fromValues,d.copy=u.copy,d.set=u.set,d.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},d.setAxisAngle=function(t,e,r){r*=.5;var n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t},d.add=u.add,d.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=r[0],u=r[1],l=r[2],c=r[3];return t[0]=n*c+o*s+i*l-a*u,t[1]=i*c+o*u+a*s-n*l,t[2]=a*c+o*l+n*u-i*s,t[3]=o*c-n*s-i*u-a*l,t},d.mul=d.multiply,d.scale=u.scale,d.rotateX=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=n*u+o*s,t[1]=i*u+a*s,t[2]=a*u-i*s,t[3]=o*u-n*s,t},d.rotateY=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=n*u-a*s,t[1]=i*u+o*s,t[2]=a*u+n*s,t[3]=o*u-i*s,t},d.rotateZ=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=n*u+i*s,t[1]=i*u-n*s,t[2]=a*u+o*s,t[3]=o*u-a*s,t},d.calculateW=function(t,e){var r=e[0],n=e[1],i=e[2];return t[0]=r,t[1]=n,t[2]=i,t[3]=Math.sqrt(Math.abs(1-r*r-n*n-i*i)),t},d.dot=u.dot,d.lerp=u.lerp,d.slerp=function(t,e,r,n){var i,a,o,s,u,l=e[0],c=e[1],h=e[2],f=e[3],d=r[0],m=r[1],p=r[2],_=r[3];return a=l*d+c*m+h*p+f*_,a<0&&(a=-a,d=-d,m=-m,p=-p,_=-_),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,u=Math.sin(n*i)/o):(s=1-n,u=n),t[0]=s*l+u*d,t[1]=s*c+u*m,t[2]=s*h+u*p,t[3]=s*f+u*_,t},d.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a,s=o?1/o:0;return t[0]=-r*s,t[1]=-n*s,t[2]=-i*s,t[3]=a*s,t},d.conjugate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t},d.length=u.length,d.len=d.length,d.squaredLength=u.squaredLength,d.sqrLen=d.squaredLength,d.normalize=u.normalize,d.fromMat3=function(t,e){var r,n=e[0]+e[4]+e[8];if(n>0)r=Math.sqrt(n+1),t[3]=.5*r,r=.5/r,t[0]=(e[5]-e[7])*r,t[1]=(e[6]-e[2])*r,t[2]=(e[1]-e[3])*r;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[3*i+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;r=Math.sqrt(e[3*i+i]-e[3*a+a]-e[3*o+o]+1),t[i]=.5*r,r=.5/r,t[3]=(e[3*a+o]-e[3*o+a])*r,t[a]=(e[3*a+i]+e[3*i+a])*r,t[o]=(e[3*o+i]+e[3*i+o])*r}return t},d.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},void 0!==t&&(t.quat=d)}(r.exports)}()})),_e=pe.vec2,ge=function(t,e){t=t||0,e=e||0,this.array=_e.fromValues(t,e),this._dirty=!0};if(ge.prototype={constructor:ge,add:function(t){return _e.add(this.array,this.array,t.array),this._dirty=!0,this},set:function(t,e){return this.array[0]=t,this.array[1]=e,this._dirty=!0,this},setArray:function(t){return this.array[0]=t[0],this.array[1]=t[1],this._dirty=!0,this},clone:function(){return new ge(this.x,this.y)},copy:function(t){return _e.copy(this.array,t.array),this._dirty=!0,this},cross:function(t,e){return _e.cross(t.array,this.array,e.array),t._dirty=!0,this},dist:function(t){return _e.dist(this.array,t.array)},distance:function(t){return _e.distance(this.array,t.array)},div:function(t){return _e.div(this.array,this.array,t.array),this._dirty=!0,this},divide:function(t){return _e.divide(this.array,this.array,t.array),this._dirty=!0,this},dot:function(t){return _e.dot(this.array,t.array)},len:function(){return _e.len(this.array)},length:function(){return _e.length(this.array)},lerp:function(t,e,r){return _e.lerp(this.array,t.array,e.array,r),this._dirty=!0,this},min:function(t){return _e.min(this.array,this.array,t.array),this._dirty=!0,this},max:function(t){return _e.max(this.array,this.array,t.array),this._dirty=!0,this},mul:function(t){return _e.mul(this.array,this.array,t.array),this._dirty=!0,this},multiply:function(t){return _e.multiply(this.array,this.array,t.array),this._dirty=!0,this},negate:function(){return _e.negate(this.array,this.array),this._dirty=!0,this},normalize:function(){return _e.normalize(this.array,this.array),this._dirty=!0,this},random:function(t){return _e.random(this.array,t),this._dirty=!0,this},scale:function(t){return _e.scale(this.array,this.array,t),this._dirty=!0,this},scaleAndAdd:function(t,e){return _e.scaleAndAdd(this.array,this.array,t.array,e),this._dirty=!0,this},sqrDist:function(t){return _e.sqrDist(this.array,t.array)},squaredDistance:function(t){return _e.squaredDistance(this.array,t.array)},sqrLen:function(){return _e.sqrLen(this.array)},squaredLength:function(){return _e.squaredLength(this.array)},sub:function(t){return _e.sub(this.array,this.array,t.array),this._dirty=!0,this},subtract:function(t){return _e.subtract(this.array,this.array,t.array),this._dirty=!0,this},transformMat2:function(t){return _e.transformMat2(this.array,this.array,t.array),this._dirty=!0,this},transformMat2d:function(t){return _e.transformMat2d(this.array,this.array,t.array),this._dirty=!0,this},transformMat3:function(t){return _e.transformMat3(this.array,this.array,t.array),this._dirty=!0,this},transformMat4:function(t){return _e.transformMat4(this.array,this.array,t.array),this._dirty=!0,this},toString:function(){return"["+Array.prototype.join.call(this.array,",")+"]"},toArray:function(){return Array.prototype.slice.call(this.array)}},Object.defineProperty){var ve=ge.prototype;Object.defineProperty(ve,"x",{get:function(){return this.array[0]},set:function(t){this.array[0]=t,this._dirty=!0}}),Object.defineProperty(ve,"y",{get:function(){return this.array[1]},set:function(t){this.array[1]=t,this._dirty=!0}})}ge.add=function(t,e,r){return _e.add(t.array,e.array,r.array),t._dirty=!0,t},ge.set=function(t,e,r){return _e.set(t.array,e,r),t._dirty=!0,t},ge.copy=function(t,e){return _e.copy(t.array,e.array),t._dirty=!0,t},ge.cross=function(t,e,r){return _e.cross(t.array,e.array,r.array),t._dirty=!0,t},ge.dist=function(t,e){return _e.distance(t.array,e.array)},ge.distance=ge.dist,ge.div=function(t,e,r){return _e.divide(t.array,e.array,r.array),t._dirty=!0,t},ge.divide=ge.div,ge.dot=function(t,e){return _e.dot(t.array,e.array)},ge.len=function(t){return _e.length(t.array)},ge.lerp=function(t,e,r,n){return _e.lerp(t.array,e.array,r.array,n),t._dirty=!0,t},ge.min=function(t,e,r){return _e.min(t.array,e.array,r.array),t._dirty=!0,t},ge.max=function(t,e,r){return _e.max(t.array,e.array,r.array), +t._dirty=!0,t},ge.mul=function(t,e,r){return _e.multiply(t.array,e.array,r.array),t._dirty=!0,t},ge.multiply=ge.mul,ge.negate=function(t,e){return _e.negate(t.array,e.array),t._dirty=!0,t},ge.normalize=function(t,e){return _e.normalize(t.array,e.array),t._dirty=!0,t},ge.random=function(t,e){return _e.random(t.array,e),t._dirty=!0,t},ge.scale=function(t,e,r){return _e.scale(t.array,e.array,r),t._dirty=!0,t},ge.scaleAndAdd=function(t,e,r,n){return _e.scaleAndAdd(t.array,e.array,r.array,n),t._dirty=!0,t},ge.sqrDist=function(t,e){return _e.sqrDist(t.array,e.array)},ge.squaredDistance=ge.sqrDist,ge.sqrLen=function(t){return _e.sqrLen(t.array)},ge.squaredLength=ge.sqrLen,ge.sub=function(t,e,r){return _e.subtract(t.array,e.array,r.array),t._dirty=!0,t},ge.subtract=ge.sub,ge.transformMat2=function(t,e,r){return _e.transformMat2(t.array,e.array,r.array),t._dirty=!0,t},ge.transformMat2d=function(t,e,r){return _e.transformMat2d(t.array,e.array,r.array),t._dirty=!0,t},ge.transformMat3=function(t,e,r){return _e.transformMat3(t.array,e.array,r.array),t._dirty=!0,t},ge.transformMat4=function(t,e,r){return _e.transformMat4(t.array,e.array,r.array),t._dirty=!0,t};var ye=function(t){t=t||{},le.call(this,t),this.output=t.output||null,this.inputs=t.inputs||[],this.position=new ge,this._cacheTriangle=null,this._triangles=[],this._updateTriangles()};ye.prototype=new le,ye.prototype.constructor=ye,ye.prototype.addInput=function(t,e,r){var n={position:t,clip:e,offset:r||0};return this.inputs.push(n),this.life=Math.max(e.life,this.life),this._updateTriangles(),n},ye.prototype._updateTriangles=function(){var t=this.inputs.map(function(t){return t.position});this._triangles=me.triangulate(t,"array")},ye.prototype.step=function(t,e,r){var n=le.prototype.step.call(this,t);return"finish"!==n&&this.setTime(this.getElapsedTime()),r||"paused"===n||this.fire("frame"),n},ye.prototype.setTime=function(t){var e=this._findTriangle(this.position);if(e){var r=e[1],n=e[2],i=e[0],a=this.inputs[i.indices[0]],o=this.inputs[i.indices[1]],s=this.inputs[i.indices[2]],u=a.clip,l=o.clip,c=s.clip;u.setTime((t+a.offset)%u.life),l.setTime((t+o.offset)%l.life),c.setTime((t+s.offset)%c.life);var h=u.output instanceof le?u.output:u,f=l.output instanceof le?l.output:l,d=c.output instanceof le?c.output:c;this.output.blend2D(h,f,d,r,n)}},ye.prototype.clone=function(t){var e=le.prototype.clone.call(this);e.output=this.output.clone();for(var r=0;r=t.time)return this.keyFrames.splice(e,0,t),e}this.life=t.time,this.keyFrames.push(t)},Ee.prototype.addKeyFrames=function(t){for(var e=0;ei[i.length-1].time)){if(t=a-1?a-1:this._cacheKey+1,s=o;s>=0;s--)if(i[s].time<=t&&i[s][e])r=i[s],this._cacheKey=s,this._cacheTime=t;else if(i[s][e]){n=i[s];break}}else for(var s=this._cacheKey;s=e.time[r-1])t=e.time[r-1],n=r-2;else if(t=0;a--)if(e.time[a-1]<=t&&e.time[a]>t){n=a-1;break}}else for(var a=this._cacheKey;at){n=a;break}if(n>-1){this._cacheKey=n,this._cacheTime=t;var o=n,s=n+1,u=e.time[o],l=e.time[s],c=l-u,h=0===c?0:(t-u)/c;e.rotation&&x(this.rotation,e.rotation,e.rotation,h,4*o,4*s),e.position&&y(this.position,e.position,e.position,h,3*o,3*s),e.scale&&y(this.scale,e.scale,e.scale,h,3*o,3*s)}n==r-2&&(this._cacheKey=0,this._cacheTime=0),this.updateTarget()}},Se.prototype.updateTarget=function(){var t=this.channels;this.target&&(t.position&&this.target.position.setArray(this.position),t.rotation&&this.target.rotation.setArray(this.rotation),t.scale&&this.target.scale.setArray(this.scale))},Se.prototype.getMaxTime=function(){return this.channels.time[this.channels.time.length-1]},Se.prototype.getSubTrack=function(t,e){var r=new Se({name:this.name}),n=this.channels.time[0];t=Math.min(Math.max(t,n),this.life),e=Math.min(Math.max(e,n),this.life);var i=this._findRange(t),a=this._findRange(e),o=a[0]-i[0]+1;0===i[1]&&0===a[1]&&(o-=1),this.channels.rotation&&(r.channels.rotation=new Float32Array(4*o)),this.channels.position&&(r.channels.position=new Float32Array(3*o)),this.channels.scale&&(r.channels.scale=new Float32Array(3*o)),this.channels.time&&(r.channels.time=new Float32Array(o)),this.setTime(t);for(var s=0;s<3;s++)r.channels.rotation[s]=this.rotation[s],r.channels.position[s]=this.position[s],r.channels.scale[s]=this.scale[s];r.channels.time[0]=0,r.channels.rotation[3]=this.rotation[3];for(var s=1;st&&(n=i);var a=0;if(n>=0)var o=e.time[n],s=e.time[n+1],a=(t-o)/(s-o);return[n,a]},Se.prototype.blend1D=Ee.prototype.blend1D,Se.prototype.blend2D=Ee.prototype.blend2D,Se.prototype.additiveBlend=Ee.prototype.additiveBlend,Se.prototype.subtractiveBlend=Ee.prototype.subtractiveBlend,Se.prototype.clone=function(){var t=Se.prototype.clone.call(this);return t.channels={time:this.channels.time||null,position:this.channels.position||null,rotation:this.channels.rotation||null,scale:this.channels.scale||null},Ae.copy(t.position,this.position),be.copy(t.rotation,this.rotation),Ae.copy(t.scale,this.scale),t.target=this.target,t.updateTarget(),t};var we={extend:T,derive:T},Me={trigger:function(t){if(this.hasOwnProperty("__handlers__")&&this.__handlers__.hasOwnProperty(t)){var e=this.__handlers__[t],r=e.length,n=-1,i=arguments;switch(i.length){case 1:for(;++n=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),r=0;r=0&&this.tracks.splice(e,1)},Fe.prototype.getSubClip=function(t,e,r){for(var n=new Fe({name:this.name}),i=0;i0){var e=this.min,r=this.max,n=e.array,i=r.array;Qe(n,t[0]),Qe(i,t[0]);for(var a=1;ai[0]&&(i[0]=o[0]),o[1]>i[1]&&(i[1]=o[1]),o[2]>i[2]&&(i[2]=o[2])}e._dirty=!0,r._dirty=!0}},union:function(t){var e=this.min,r=this.max;return Je.min(e.array,e.array,t.min.array),Je.max(r.array,r.array,t.max.array),e._dirty=!0,r._dirty=!0,this},intersection:function(t){var e=this.min,r=this.max;return Je.max(e.array,e.array,t.min.array),Je.min(r.array,r.array,t.max.array),e._dirty=!0,r._dirty=!0,this},intersectBoundingBox:function(t){var e=this.min.array,r=this.max.array,n=t.min.array,i=t.max.array;return!(e[0]>i[0]||e[1]>i[1]||e[2]>i[2]||r[0]=i[0]&&r[1]>=i[1]&&r[2]>=i[2]},containPoint:function(t){var e=this.min.array,r=this.max.array,n=t.array;return e[0]<=n[0]&&e[1]<=n[1]&&e[2]<=n[2]&&r[0]>=n[0]&&r[1]>=n[1]&&r[2]>=n[2]},isFinite:function(){var t=this.min.array,e=this.max.array;return isFinite(t[0])&&isFinite(t[1])&&isFinite(t[2])&&isFinite(e[0])&&isFinite(e[1])&&isFinite(e[2])}, +applyTransform:function(){var t=Je.create(),e=Je.create(),r=Je.create(),n=Je.create(),i=Je.create(),a=Je.create();return function(o){var s=this.min.array,u=this.max.array,l=o.array;return t[0]=l[0]*s[0],t[1]=l[1]*s[0],t[2]=l[2]*s[0],e[0]=l[0]*u[0],e[1]=l[1]*u[0],e[2]=l[2]*u[0],r[0]=l[4]*s[1],r[1]=l[5]*s[1],r[2]=l[6]*s[1],n[0]=l[4]*u[1],n[1]=l[5]*u[1],n[2]=l[6]*u[1],i[0]=l[8]*s[2],i[1]=l[9]*s[2],i[2]=l[10]*s[2],a[0]=l[8]*u[2],a[1]=l[9]*u[2],a[2]=l[10]*u[2],s[0]=Math.min(t[0],e[0])+Math.min(r[0],n[0])+Math.min(i[0],a[0])+l[12],s[1]=Math.min(t[1],e[1])+Math.min(r[1],n[1])+Math.min(i[1],a[1])+l[13],s[2]=Math.min(t[2],e[2])+Math.min(r[2],n[2])+Math.min(i[2],a[2])+l[14],u[0]=Math.max(t[0],e[0])+Math.max(r[0],n[0])+Math.max(i[0],a[0])+l[12],u[1]=Math.max(t[1],e[1])+Math.max(r[1],n[1])+Math.max(i[1],a[1])+l[13],u[2]=Math.max(t[2],e[2])+Math.max(r[2],n[2])+Math.max(i[2],a[2])+l[14],this.min._dirty=!0,this.max._dirty=!0,this}}(),applyProjection:function(t){var e=this.min.array,r=this.max.array,n=t.array,i=e[0],a=e[1],o=e[2],s=r[0],u=r[1],l=e[2],c=r[0],h=r[1],f=r[2];if(1===n[15])e[0]=n[0]*i+n[12],e[1]=n[5]*a+n[13],r[2]=n[10]*o+n[14],r[0]=n[0]*c+n[12],r[1]=n[5]*h+n[13],e[2]=n[10]*f+n[14];else{var d=-1/o;e[0]=n[0]*i*d,e[1]=n[5]*a*d,r[2]=(n[10]*o+n[14])*d,d=-1/l,r[0]=n[0]*s*d,r[1]=n[5]*u*d,d=-1/f,e[2]=(n[10]*f+n[14])*d}return this.min._dirty=!0,this.max._dirty=!0,this},updateVertices:function(){var t=this.vertices;if(!t){for(var t=[],e=0;e<8;e++)t[e]=Je.fromValues(0,0,0);this.vertices=t}var r=this.min.array,n=this.max.array;return $e(t[0],r[0],r[1],r[2]),$e(t[1],r[0],n[1],r[2]),$e(t[2],n[0],r[1],r[2]),$e(t[3],n[0],n[1],r[2]),$e(t[4],r[0],r[1],n[2]),$e(t[5],r[0],n[1],n[2]),$e(t[6],n[0],r[1],n[2]),$e(t[7],n[0],n[1],n[2]),this},copy:function(t){var e=this.min,r=this.max;return Qe(e.array,t.min.array),Qe(r.array,t.max.array),e._dirty=!0,r._dirty=!0,this},clone:function(){var t=new tr;return t.copy(this),t}};var er=pe.mat4,rr=pe.vec3,nr=pe.mat3,ir=pe.quat,ar=function(){this._axisX=new Xe,this._axisY=new Xe,this._axisZ=new Xe,this.array=er.create(),this._dirty=!0};ar.prototype={constructor:ar,setArray:function(t){for(var e=0;e>e;return t+1},dispose:function(t){var e=this._cache;e.use(t.__uid__);var r=e.get("webgl_texture");r&&t.gl.deleteTexture(r),e.deleteContext(t.__uid__)},isRenderable:function(){},isPowerOfTwo:function(){}});Object.defineProperty(lr.prototype,"width",{get:function(){return this._width},set:function(t){this._width=t}}),Object.defineProperty(lr.prototype,"height",{get:function(){return this._height},set:function(t){this._height=t}}),lr.BYTE=He.BYTE,lr.UNSIGNED_BYTE=He.UNSIGNED_BYTE,lr.SHORT=He.SHORT,lr.UNSIGNED_SHORT=He.UNSIGNED_SHORT,lr.INT=He.INT,lr.UNSIGNED_INT=He.UNSIGNED_INT,lr.FLOAT=He.FLOAT,lr.HALF_FLOAT=36193,lr.UNSIGNED_INT_24_8_WEBGL=34042,lr.DEPTH_COMPONENT=He.DEPTH_COMPONENT,lr.DEPTH_STENCIL=He.DEPTH_STENCIL,lr.ALPHA=He.ALPHA,lr.RGB=He.RGB,lr.RGBA=He.RGBA,lr.LUMINANCE=He.LUMINANCE,lr.LUMINANCE_ALPHA=He.LUMINANCE_ALPHA,lr.SRGB=35904,lr.SRGB_ALPHA=35906,lr.COMPRESSED_RGB_S3TC_DXT1_EXT=33776,lr.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777,lr.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778,lr.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779,lr.NEAREST=He.NEAREST,lr.LINEAR=He.LINEAR,lr.NEAREST_MIPMAP_NEAREST=He.NEAREST_MIPMAP_NEAREST,lr.LINEAR_MIPMAP_NEAREST=He.LINEAR_MIPMAP_NEAREST,lr.NEAREST_MIPMAP_LINEAR=He.NEAREST_MIPMAP_LINEAR,lr.LINEAR_MIPMAP_LINEAR=He.LINEAR_MIPMAP_LINEAR,lr.REPEAT=He.REPEAT,lr.CLAMP_TO_EDGE=He.CLAMP_TO_EDGE,lr.MIRRORED_REPEAT=He.MIRRORED_REPEAT;var cr=function(){this.head=null,this.tail=null,this._length=0};cr.prototype.insert=function(t){var e=new cr.Entry(t);return this.insertEntry(e),e},cr.prototype.insertAt=function(t,e){if(!(t<0)){for(var r=this.head,n=0;r&&n!=t;)r=r.next,n++;if(r){var i=new cr.Entry(e),a=r.prev;a?(a.next=i,i.prev=a):this.head=i,i.next=r,r.prev=i}else this.insert(e)}},cr.prototype.insertBeforeEntry=function(t,e){var r=new cr.Entry(t),n=e.prev;n?(n.next=r,r.prev=n):this.head=r,r.next=e,e.prev=r,this._length++},cr.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,this.tail=t):this.head=this.tail=t,this._length++},cr.prototype.remove=function(t){var e=t.prev,r=t.next;e?e.next=r:this.head=r,r?r.prev=e:this.tail=e,t.next=t.prev=null,this._length--},cr.prototype.removeAt=function(t){if(!(t<0)){for(var e=this.head,r=0;e&&r!=t;)e=e.next,r++;return e?(this.remove(e),e.value):void 0}},cr.prototype.getHead=function(){if(this.head)return this.head.value},cr.prototype.getTail=function(){if(this.tail)return this.tail.value},cr.prototype.getAt=function(t){if(!(t<0)){for(var e=this.head,r=0;e&&r!=t;)e=e.next,r++;return e.value}},cr.prototype.indexOf=function(t){for(var e=this.head,r=0;e;){if(e.value===t)return r;e=e.next,r++}},cr.prototype.length=function(){return this._length},cr.prototype.isEmpty=function(){return 0===this._length},cr.prototype.forEach=function(t,e){for(var r=this.head,n=0,i=void 0!==e;r;)i?t.call(e,r.value,n):t(r.value,n),r=r.next,n++},cr.prototype.clear=function(){this.tail=this.head=null,this._length=0},cr.Entry=function(t){this.value=t,this.next=null,this.prev=null};var hr=function(t){this._list=new cr,this._map={},this._maxSize=t||10};hr.prototype.setMaxSize=function(t){this._maxSize=t},hr.prototype.put=function(t,e){if(void 0===this._map[t]){var r=this._list.length();if(r>=this._maxSize&&r>0){var n=this._list.head;this._list.remove(n),delete this._map[n.key]}var i=this._list.insert(e);i.key=t,this._map[t]=i}},hr.prototype.get=function(t){var e=this._map[t];if(void 0!==e)return e!==this._list.tail&&(this._list.remove(e),this._list.insertEntry(e)),e.value},hr.prototype.remove=function(t){var e=this._map[t];void 0!==e&&(delete this._map[t],this._list.remove(e))},hr.prototype.clear=function(){this._list.clear(),this._map={}};var fr={},dr={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]},mr=new hr(20),pr=null;fr.parse=function(t,e){if(t){e=e||[];var r=mr.get(t);if(r)return O(e,r);t+="";var n=t.replace(/ /g,"").toLowerCase();if(n in dr)return O(e,dr[n]),B(t,e),e;if("#"!==n.charAt(0)){var i=n.indexOf("("),a=n.indexOf(")");if(-1!==i&&a+1===n.length){var o=n.substr(0,i),s=n.substr(i+1,a-(i+1)).split(","),u=1;switch(o){case"rgba":if(4!==s.length)return void I(e,0,0,0,1);u=L(s.pop());case"rgb":return 3!==s.length?void I(e,0,0,0,1):(I(e,R(s[0]),R(s[1]),R(s[2]),u),B(t,e),e);case"hsla":return 4!==s.length?void I(e,0,0,0,1):(s[3]=L(s[3]),F(s,e),B(t,e),e);case"hsl":return 3!==s.length?void I(e,0,0,0,1):(F(s,e),B(t,e),e);default:return}}I(e,0,0,0,1)}else{if(4===n.length){var l=parseInt(n.substr(1),16);return l>=0&&l<=4095?(I(e,(3840&l)>>4|(3840&l)>>8,240&l|(240&l)>>4,15&l|(15&l)<<4,1),B(t,e),e):void I(e,0,0,0,1)}if(7===n.length){var l=parseInt(n.substr(1),16);return l>=0&&l<=16777215?(I(e,(16711680&l)>>16,(65280&l)>>8,255&l,1),B(t,e),e):void I(e,0,0,0,1)}}}},fr.parseToFloat=function(t,e){if(e=fr.parse(t,e))return e[0]/=255,e[1]/=255,e[2]/=255,e},fr.lift=function(t,e){var r=fr.parse(t);if(r){for(var n=0;n<3;n++)r[n]=e<0?r[n]*(1-e)|0:(255-r[n])*e+r[n]|0;return fr.stringify(r,4===r.length?"rgba":"rgb")}},fr.toHex=function(t){var e=fr.parse(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)},fr.fastLerp=function(t,e,r){if(e&&e.length&&t>=0&&t<=1){r=r||[];var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=e[i],s=e[a],u=n-i;return r[0]=M(D(o[0],s[0],u)),r[1]=M(D(o[1],s[1],u)),r[2]=M(D(o[2],s[2],u)),r[3]=N(D(o[3],s[3],u)),r}},fr.fastMapToColor=fr.fastLerp,fr.lerp=function(t,e,r){if(e&&e.length&&t>=0&&t<=1){var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=fr.parse(e[i]),s=fr.parse(e[a]),u=n-i,l=fr.stringify([M(D(o[0],s[0],u)),M(D(o[1],s[1],u)),M(D(o[2],s[2],u)),N(D(o[3],s[3],u))],"rgba");return r?{color:l,leftIndex:i,rightIndex:a,value:n}:l}},fr.mapToColor=fr.lerp,fr.modifyHSL=function(t,e,r,n){if(t=fr.parse(t))return t=U(t),null!=e&&(t[0]=C(e)),null!=r&&(t[1]=L(r)),null!=n&&(t[2]=L(n)),fr.stringify(F(t),"rgba")},fr.modifyAlpha=function(t,e){if((t=fr.parse(t))&&null!=e)return t[3]=N(e),fr.stringify(t,"rgba")},fr.stringify=function(t,e){if(t&&t.length){var r=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(r+=","+t[3]),e+"("+r+")"}};var _r=fr.parseToFloat,gr={},vr=Pe.extend(function(){return{name:"",depthTest:!0,depthMask:!0,transparent:!1,blend:null,autoUpdateTextureStatus:!0,uniforms:{},vertexDefines:{},fragmentDefines:{},_textureStatus:{},_enabledUniforms:null}},function(){this.name||(this.name="MATERIAL_"+this.__uid__),this.shader&&this.attachShader(this.shader,!0)},{precision:"highp",bind:function(t,e,r,n){for(var i=t.gl,a=e.currentTextureSlot(),o=0;o=0},getEnabledUniforms:function(){return this._enabledUniforms},getTextureUniforms:function(){return this._textureUniforms},set:function(t,e){if("object"==typeof t)for(var r in t){var n=t[r];this.setUniform(r,n)}else this.setUniform(t,e)},get:function(t){var e=this.uniforms[t];if(e)return e.value},attachShader:function(t,e){var r=this.uniforms;this.uniforms=t.createUniforms(),this.shader=t;var n=this.uniforms;this._enabledUniforms=Object.keys(n),this._enabledUniforms.sort(),this._textureUniforms=this._enabledUniforms.filter(function(t){var e=this.uniforms[t].type;return"t"===e||"tv"===e},this);var i=this.vertexDefines,a=this.fragmentDefines;if(this.vertexDefines=Le.clone(t.vertexDefines),this.fragmentDefines=Le.clone(t.fragmentDefines),e){for(var o in r)n[o]&&(n[o].value=r[o].value);Le.defaults(this.vertexDefines,i),Le.defaults(this.fragmentDefines,a)}var s={};for(var u in t.textures)s[u]={shaderType:t.textures[u].shaderType,type:t.textures[u].type,enabled:!(!e||!this._textureStatus[u])&&this._textureStatus[u].enabled};this._textureStatus=s,this._programKey=""},clone:function(){var t=new this.constructor({name:this.name,shader:this.shader});for(var e in this.uniforms)t.uniforms[e].value=this.uniforms[e].value;return t.depthTest=this.depthTest,t.depthMask=this.depthMask,t.transparent=this.transparent,t.blend=this.blend,t.vertexDefines=Le.clone(this.vertexDefines),t.fragmentDefines=Le.clone(this.fragmentDefines),t.enableTexture(this.getEnabledTextures()),t.precision=this.precision,t},define:function(t,e,r){var n=this.vertexDefines,i=this.fragmentDefines;"vertex"!==t&&"fragment"!==t&&"both"!==t&&arguments.length<3&&(r=e,e=t,t="both"),r=null!=r?r:null,"vertex"!==t&&"both"!==t||n[e]!==r&&(n[e]=r,this._programKey=""),"fragment"!==t&&"both"!==t||i[e]!==r&&(i[e]=r,"both"!==t&&(this._programKey=""))},undefine:function(t,e){"vertex"!==t&&"fragment"!==t&&"both"!==t&&arguments.length<2&&(e=t,t="both"),"vertex"!==t&&"both"!==t||this.isDefined("vertex",e)&&(delete this.vertexDefines[e],this._programKey=""),"fragment"!==t&&"both"!==t||this.isDefined("fragment",e)&&(delete this.fragmentDefines[e],"both"!==t&&(this._programKey=""))},isDefined:function(t,e){switch(t){case"vertex":return void 0!==this.vertexDefines[e];case"fragment":return void 0!==this.fragmentDefines[e]}},getDefine:function(t,e){switch(t){case"vertex":return this.vertexDefines[e];case"fragment":return this.fragmentDefines[e]}},enableTexture:function(t){if(Array.isArray(t))for(var e=0;e=0)r.attributeSemantics[u]={symbol:a,type:c},h=!1;else if(Dr.indexOf(u)>=0){var f=!1,d=u;u.match(/TRANSPOSE$/)&&(f=!0,d=u.slice(0,-9)),r.matrixSemantics[u]={symbol:a,type:c,isTranspose:f,semanticNoTranspose:d},h=!1}else if(Pr.indexOf(u)>=0)r.uniformSemantics[u]={symbol:a,type:c},h=!1;else if("unconfigurable"===u)h=!1;else{if(!(l=r._parseDefaultValue(i,u)))throw new Error('Unkown semantic "'+u+'"');u=""}h&&(e[a]={type:c,value:o?Rr.array:l||Rr[i],semantic:u||null})}return["uniform",i,a,o].join(" ")+";\n"}}var e={},r=this,n="vertex";this._uniformList=[],this._vertexCode=this._vertexCode.replace(wr,t),n="fragment",this._fragmentCode=this._fragmentCode.replace(wr,t),r.matrixSemanticKeys=Object.keys(this.matrixSemantics),this.uniformTemplates=e},_parseDefaultValue:function(t,e){var r=/\[\s*(.*)\s*\]/;{ +if("vec2"!==t&&"vec3"!==t&&"vec4"!==t)return"bool"===t?function(){return"true"===e.toLowerCase()}:"float"===t?function(){return parseFloat(e)}:"int"===t?function(){return parseInt(e)}:void 0;var n=r.exec(e)[1];if(n){var i=n.split(/\s*,\s*/);return function(){return new We.Float32Array(i)}}}},_parseAttributes:function(){function t(t,n,i,a,o){if(n&&i){var s=1;switch(n){case"vec4":s=4;break;case"vec3":s=3;break;case"vec2":s=2;break;case"float":s=1}if(e[i]={type:"float",size:s,semantic:o||null},o){if(Lr.indexOf(o)<0)throw new Error('Unkown semantic "'+o+'"');r.attributeSemantics[o]={symbol:i,type:n}}}return["attribute",n,i].join(" ")+";\n"}var e={},r=this;this._vertexCode=this._vertexCode.replace(Mr,t),this.attributes=e},_parseDefines:function(){function t(t,n,i){var a="vertex"===r?e.vertexDefines:e.fragmentDefines;return a[n]||(a[n]="false"!=i&&("true"==i||(i?isNaN(parseFloat(i))?i.trim():parseFloat(i):null))),""}var e=this,r="vertex";this._vertexCode=this._vertexCode.replace(Cr,t),r="fragment",this._fragmentCode=this._fragmentCode.replace(Cr,t)},clone:function(){var t=Or[this._shaderID];return new K(t.vertex,t.fragment)}},Object.defineProperty&&(Object.defineProperty(K.prototype,"shaderID",{get:function(){return this._shaderID}}),Object.defineProperty(K.prototype,"vertex",{get:function(){return this._vertexCode}}),Object.defineProperty(K.prototype,"fragment",{get:function(){return this._fragmentCode}}),Object.defineProperty(K.prototype,"uniforms",{get:function(){return this._uniformList}}));var Br=/(@import)\s*([0-9a-zA-Z_\-\.]*)/g;K.parseImport=function(t){return t=t.replace(Br,function(t,e,r){var t=K.source(r);return t?K.parseImport(t):(console.error('Shader chunk "'+r+'" not existed in library'),"")})};var Fr=/(@export)\s*([0-9a-zA-Z_\-\.]*)\s*\n([\s\S]*?)@end/g;K.import=function(t){t.replace(Fr,function(t,e,r,n){var n=n.replace(/(^[\s\t\xa0\u3000]+)|([\u3000\xa0\s\t]+\x24)/g,"");if(n){for(var i,a=r.split("."),o=K.codes,s=0;s0&&this.setViewport(this._viewportStack.pop())},saveClear:function(){this._clearStack.push({clearBit:this.clearBit,clearColor:this.clearColor})},restoreClear:function(){if(this._clearStack.length>0){var t=this._clearStack.pop();this.clearColor=t.clearColor,this.clearBit=t.clearBit}},bindSceneRendering:function(t){this._sceneRendering=t},render:function(t,e,r,n){var i=this.gl,a=this.clearColor;if(this.clearBit){i.colorMask(!0,!0,!0,!0),i.depthMask(!0);var o=this.viewport,s=!1,u=o.devicePixelRatio;(o.width!==this._width||o.height!==this._height||u&&u!==this.devicePixelRatio||o.x||o.y)&&(s=!0,i.enable(i.SCISSOR_TEST),i.scissor(o.x*u,o.y*u,o.width*u,o.height*u)),i.clearColor(a[0],a[1],a[2],a[3]),i.clear(this.clearBit),s&&i.disable(i.SCISSOR_TEST)}if(r||t.update(!1),!(e=e||t.getMainCamera()))return void console.error("Can't find camera in the scene.");e.getScene()||e.update(!0),this._sceneRendering=t,t.viewBoundingBoxLastFrame.min.set(1/0,1/0,1/0),t.viewBoundingBoxLastFrame.max.set(-1/0,-1/0,-1/0);var l=this.cullRenderList(t.opaqueList,t,e),c=this.cullRenderList(t.transparentList,t,e),h=t.material;t.trigger("beforerender",this,t,e),n?(this.renderPreZ(l,t,e),i.depthFunc(i.LEQUAL)):i.depthFunc(i.LESS);for(var f=Wr(),d=Vr.create(),m=0;m0){var s=t[i-1],u=s.joints?s.joints.length:0;if((a.joints.length?a.joints.length:0)===u&&a.material===s.material&&a.lightGroup===s.lightGroup){a.__program=s.__program;continue}}var l=this._programMgr.getProgram(a,o,e);this.validateProgram(l),a.__program=l}},cullRenderList:function(t,e,r){for(var n=[],i=0;i0&&t.min.array[2]<0&&(t.max.array[2]=-1e-20),t.applyProjection(e);var u=t.min.array,l=t.max.array;if(l[0]<-1||u[0]>1||l[1]<-1||u[1]>1||l[2]<-1||u[2]>1)return!0}return!1}}(),disposeScene:function(t){this.disposeNode(t,!0,!0),t.dispose()},disposeNode:function(t,e,r){t.getParent()&&t.getParent().remove(t),t.traverse(function(t){t.geometry&&e&&t.geometry.dispose(this),t.dispose&&t.dispose(this)},this)},disposeGeometry:function(t){t.dispose(this)},disposeTexture:function(t){t.dispose(this)},disposeFrameBuffer:function(t){t.dispose(this)},dispose:function(){},screenToNDC:function(t,e,r){r||(r=new ge),e=this._height-e;var n=this.viewport,i=r.array;return i[0]=(t-n.x)/n.width,i[0]=2*i[0]-1,i[1]=(e-n.y)/n.height,i[1]=2*i[1]-1,r}});Xr.opaqueSortCompare=Xr.prototype.opaqueSortCompare=function(t,e){return t.renderOrder===e.renderOrder?t.__program===e.__program?t.material===e.material?t.geometry.__uid__-e.geometry.__uid__:t.material.__uid__-e.material.__uid__:t.__program&&e.__program?t.__program.__uid__-e.__program.__uid__:0:t.renderOrder-e.renderOrder},Xr.transparentSortCompare=Xr.prototype.transparentSortCompare=function(t,e){return t.renderOrder===e.renderOrder?t.__depth===e.__depth?t.__program===e.__program?t.material===e.material?t.geometry.__uid__-e.geometry.__uid__:t.material.__uid__-e.material.__uid__:t.__program&&e.__program?t.__program.__uid__-e.__program.__uid__:0:t.__depth-e.__depth:t.renderOrder-e.renderOrder};var jr={IDENTITY:Wr(),WORLD:Wr(),VIEW:Wr(),PROJECTION:Wr(),WORLDVIEW:Wr(),VIEWPROJECTION:Wr(),WORLDVIEWPROJECTION:Wr(),WORLDINVERSE:Wr(),VIEWINVERSE:Wr(),PROJECTIONINVERSE:Wr(),WORLDVIEWINVERSE:Wr(),VIEWPROJECTIONINVERSE:Wr(),WORLDVIEWPROJECTIONINVERSE:Wr(),WORLDTRANSPOSE:Wr(),VIEWTRANSPOSE:Wr(),PROJECTIONTRANSPOSE:Wr(),WORLDVIEWTRANSPOSE:Wr(),VIEWPROJECTIONTRANSPOSE:Wr(),WORLDVIEWPROJECTIONTRANSPOSE:Wr(),WORLDINVERSETRANSPOSE:Wr(),VIEWINVERSETRANSPOSE:Wr(),PROJECTIONINVERSETRANSPOSE:Wr(),WORLDVIEWINVERSETRANSPOSE:Wr(),VIEWPROJECTIONINVERSETRANSPOSE:Wr(),WORLDVIEWPROJECTIONINVERSETRANSPOSE:Wr()};Xr.COLOR_BUFFER_BIT=He.COLOR_BUFFER_BIT,Xr.DEPTH_BUFFER_BIT=He.DEPTH_BUFFER_BIT,Xr.STENCIL_BUFFER_BIT=He.STENCIL_BUFFER_BIT;var qr=pe.quat,Yr=function(t,e,r,n){t=t||0,e=e||0,r=r||0,n=void 0===n?1:n,this.array=qr.fromValues(t,e,r,n),this._dirty=!0};Yr.prototype={constructor:Yr,add:function(t){return qr.add(this.array,this.array,t.array),this._dirty=!0,this},calculateW:function(){return qr.calculateW(this.array,this.array),this._dirty=!0,this},set:function(t,e,r,n){return this.array[0]=t,this.array[1]=e,this.array[2]=r,this.array[3]=n,this._dirty=!0,this},setArray:function(t){return this.array[0]=t[0],this.array[1]=t[1],this.array[2]=t[2],this.array[3]=t[3],this._dirty=!0,this},clone:function(){return new Yr(this.x,this.y,this.z,this.w)},conjugate:function(){return qr.conjugate(this.array,this.array),this._dirty=!0,this},copy:function(t){return qr.copy(this.array,t.array),this._dirty=!0,this},dot:function(t){return qr.dot(this.array,t.array)},fromMat3:function(t){return qr.fromMat3(this.array,t.array),this._dirty=!0,this},fromMat4:function(){var t=pe.mat3,e=t.create();return function(r){return t.fromMat4(e,r.array),t.transpose(e,e),qr.fromMat3(this.array,e),this._dirty=!0,this}}(),identity:function(){return qr.identity(this.array),this._dirty=!0,this},invert:function(){return qr.invert(this.array,this.array),this._dirty=!0,this},len:function(){return qr.len(this.array)},length:function(){return qr.length(this.array)},lerp:function(t,e,r){return qr.lerp(this.array,t.array,e.array,r),this._dirty=!0,this},mul:function(t){return qr.mul(this.array,this.array,t.array),this._dirty=!0,this},mulLeft:function(t){return qr.multiply(this.array,t.array,this.array),this._dirty=!0,this},multiply:function(t){return qr.multiply(this.array,this.array,t.array),this._dirty=!0,this},multiplyLeft:function(t){return qr.multiply(this.array,t.array,this.array),this._dirty=!0,this},normalize:function(){return qr.normalize(this.array,this.array),this._dirty=!0,this},rotateX:function(t){return qr.rotateX(this.array,this.array,t),this._dirty=!0,this},rotateY:function(t){return qr.rotateY(this.array,this.array,t),this._dirty=!0,this},rotateZ:function(t){return qr.rotateZ(this.array,this.array,t),this._dirty=!0,this},rotationTo:function(t,e){return qr.rotationTo(this.array,t.array,e.array),this._dirty=!0,this},setAxes:function(t,e,r){return qr.setAxes(this.array,t.array,e.array,r.array),this._dirty=!0,this},setAxisAngle:function(t,e){return qr.setAxisAngle(this.array,t.array,e),this._dirty=!0,this},slerp:function(t,e,r){return qr.slerp(this.array,t.array,e.array,r),this._dirty=!0,this},sqrLen:function(){return qr.sqrLen(this.array)},squaredLength:function(){return qr.squaredLength(this.array)},fromEuler:function(t,e){return Yr.fromEuler(this,t,e)},toString:function(){return"["+Array.prototype.join.call(this.array,",")+"]"},toArray:function(){return Array.prototype.slice.call(this.array)}};var Kr=Object.defineProperty;if(Kr){var Zr=Yr.prototype;Kr(Zr,"x",{get:function(){return this.array[0]},set:function(t){this.array[0]=t,this._dirty=!0}}),Kr(Zr,"y",{get:function(){return this.array[1]},set:function(t){this.array[1]=t,this._dirty=!0}}),Kr(Zr,"z",{get:function(){return this.array[2]},set:function(t){this.array[2]=t,this._dirty=!0}}),Kr(Zr,"w",{get:function(){return this.array[3]},set:function(t){this.array[3]=t,this._dirty=!0}})}Yr.add=function(t,e,r){return qr.add(t.array,e.array,r.array),t._dirty=!0,t},Yr.set=function(t,e,r,n,i){qr.set(t.array,e,r,n,i),t._dirty=!0},Yr.copy=function(t,e){return qr.copy(t.array,e.array),t._dirty=!0,t},Yr.calculateW=function(t,e){return qr.calculateW(t.array,e.array),t._dirty=!0,t},Yr.conjugate=function(t,e){return qr.conjugate(t.array,e.array),t._dirty=!0,t},Yr.identity=function(t){return qr.identity(t.array),t._dirty=!0,t},Yr.invert=function(t,e){return qr.invert(t.array,e.array),t._dirty=!0,t},Yr.dot=function(t,e){return qr.dot(t.array,e.array)},Yr.len=function(t){return qr.length(t.array)},Yr.lerp=function(t,e,r,n){return qr.lerp(t.array,e.array,r.array,n),t._dirty=!0,t},Yr.slerp=function(t,e,r,n){return qr.slerp(t.array,e.array,r.array,n),t._dirty=!0,t},Yr.mul=function(t,e,r){return qr.multiply(t.array,e.array,r.array),t._dirty=!0,t},Yr.multiply=Yr.mul,Yr.rotateX=function(t,e,r){return qr.rotateX(t.array,e.array,r),t._dirty=!0,t},Yr.rotateY=function(t,e,r){return qr.rotateY(t.array,e.array,r),t._dirty=!0,t},Yr.rotateZ=function(t,e,r){return qr.rotateZ(t.array,e.array,r),t._dirty=!0,t},Yr.setAxisAngle=function(t,e,r){return qr.setAxisAngle(t.array,e.array,r),t._dirty=!0,t},Yr.normalize=function(t,e){return qr.normalize(t.array,e.array),t._dirty=!0,t},Yr.sqrLen=function(t){return qr.sqrLen(t.array)},Yr.squaredLength=Yr.sqrLen,Yr.fromMat3=function(t,e){return qr.fromMat3(t.array,e.array),t._dirty=!0,t},Yr.setAxes=function(t,e,r,n){return qr.setAxes(t.array,e.array,r.array,n.array),t._dirty=!0,t},Yr.rotationTo=function(t,e,r){return qr.rotationTo(t.array,e.array,r.array),t._dirty=!0,t},Yr.fromEuler=function(t,e,r){t._dirty=!0,e=e.array;var n=t.array,i=Math.cos(e[0]/2),a=Math.cos(e[1]/2),o=Math.cos(e[2]/2),s=Math.sin(e[0]/2),u=Math.sin(e[1]/2),l=Math.sin(e[2]/2),r=(r||"XYZ").toUpperCase();switch(r){case"XYZ":n[0]=s*a*o+i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o-s*u*l;break;case"YXZ":n[0]=s*a*o+i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o+s*u*l;break;case"ZXY":n[0]=s*a*o-i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o-s*u*l;break;case"ZYX":n[0]=s*a*o-i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o+s*u*l;break;case"YZX":n[0]=s*a*o+i*u*l,n[1]=i*u*o+s*a*l,n[2]=i*a*l-s*u*o,n[3]=i*a*o-s*u*l;break;case"XZY":n[0]=s*a*o-i*u*l,n[1]=i*u*o-s*a*l,n[2]=i*a*l+s*u*o,n[3]=i*a*o+s*u*l}};var Jr=pe.mat4,Qr=0,$r=Pe.extend({name:"",position:null,rotation:null,scale:null,worldTransform:null,localTransform:null,autoUpdateLocalTransform:!0,_parent:null,_scene:null,_needsUpdateWorldTransform:!0,_inIterating:!1,__depth:0},function(){this.name||(this.name=(this.type||"NODE")+"_"+Qr++),this.position||(this.position=new Xe),this.rotation||(this.rotation=new Yr),this.scale||(this.scale=new Xe(1,1,1)),this.worldTransform=new ar,this.localTransform=new ar,this._children=[]},{target:null,invisible:!1,isSkinnedMesh:function(){return!1},isRenderable:function(){return!1},setName:function(t){var e=this._scene;if(e){var r=e._nodeRepository;delete r[this.name],r[t]=this}this.name=t},add:function(t){this._inIterating&&console.warn("Add operation can cause unpredictable error when in iterating");var e=t._parent;if(e!==this){e&&e.remove(t),t._parent=this,this._children.push(t);var r=this._scene;r&&r!==t.scene&&t.traverse(this._addSelfToScene,this),t._needsUpdateWorldTransform=!0}},remove:function(t){this._inIterating&&console.warn("Remove operation can cause unpredictable error when in iterating");var e=this._children,r=e.indexOf(t);r<0||(e.splice(r,1),t._parent=null,this._scene&&t.traverse(this._removeSelfFromScene,this))},removeAll:function(){for(var t=this._children,e=0;ethis.distance,i=1;i<8;i++)if(en.dot(e[i].array,r)>this.distance!=n)return!0},intersectLine:function(){var t=en.create();return function(e,r,n){var i=this.distanceToPoint(e),a=this.distanceToPoint(r);if(i>0&&a>0||i<0&&a<0)return null;var o=this.normal.array,s=this.distance,u=e.array;en.sub(t,r.array,e.array),en.normalize(t,t);var l=en.dot(o,t);if(0===l)return null;n||(n=new Xe);var c=(en.dot(o,u)-s)/l;return en.scaleAndAdd(n.array,u,t,-c),n._dirty=!0,n}}(),applyTransform:function(){var t=rn.create(),e=nn.create(),r=nn.create();return r[3]=1,function(n){n=n.array,en.scale(r,this.normal.array,this.distance),nn.transformMat4(r,r,n),this.distance=en.dot(r,this.normal.array),rn.invert(t,n),rn.transpose(t,t),e[3]=0,en.copy(e,this.normal.array),nn.transformMat4(e,e,t),en.copy(this.normal.array,e)}}(),copy:function(t){en.copy(this.normal.array,t.normal.array),this.normal._dirty=!0,this.distance=t.distance},clone:function(){var t=new an;return t.copy(this),t}};var on=pe.vec3,sn=on.set,un=on.copy,ln=on.transformMat4,cn=Math.min,hn=Math.max,fn=function(){this.planes=[];for(var t=0;t<6;t++)this.planes.push(new an);this.boundingBox=new tr,this.vertices=[];for(var t=0;t<8;t++)this.vertices[t]=on.fromValues(0,0,0)};fn.prototype={setFromProjection:function(t){var e=this.planes,r=t.array,n=r[0],i=r[1],a=r[2],o=r[3],s=r[4],u=r[5],l=r[6],c=r[7],h=r[8],f=r[9],d=r[10],m=r[11],p=r[12],_=r[13],g=r[14],v=r[15];sn(e[0].normal.array,o-n,c-s,m-h),e[0].distance=-(v-p),e[0].normalize(),sn(e[1].normal.array,o+n,c+s,m+h),e[1].distance=-(v+p),e[1].normalize(),sn(e[2].normal.array,o+i,c+u,m+f),e[2].distance=-(v+_),e[2].normalize(),sn(e[3].normal.array,o-i,c-u,m-f),e[3].distance=-(v-_),e[3].normalize(),sn(e[4].normal.array,o-a,c-l,m-d),e[4].distance=-(v-g),e[4].normalize(),sn(e[5].normal.array,o+a,c+l,m+d),e[5].distance=-(v+g),e[5].normalize();var y=this.boundingBox;if(0===v){var x=u/n,T=-g/(d-1),E=-g/(d+1),b=-E/u,A=-T/u;y.min.set(-b*x,-b,E),y.max.set(b*x,b,T);var S=this.vertices;sn(S[0],-b*x,-b,E),sn(S[1],-b*x,b,E),sn(S[2],b*x,-b,E),sn(S[3],b*x,b,E),sn(S[4],-A*x,-A,T),sn(S[5],-A*x,A,T),sn(S[6],A*x,-A,T),sn(S[7],A*x,A,T)}else{var w=(-1-p)/n,M=(1-p)/n,C=(1-_)/u,N=(-1-_)/u,R=(-1-g)/d,L=(1-g)/d;y.min.set(Math.min(w,M),Math.min(N,C),Math.min(L,R)),y.max.set(Math.max(M,w),Math.max(C,N),Math.max(R,L));var P=y.min.array,D=y.max.array,S=this.vertices;sn(S[0],P[0],P[1],P[2]),sn(S[1],P[0],D[1],P[2]),sn(S[2],D[0],P[1],P[2]),sn(S[3],D[0],D[1],P[2]),sn(S[4],P[0],P[1],D[2]),sn(S[5],P[0],D[1],D[2]),sn(S[6],D[0],P[1],D[2]),sn(S[7],D[0],D[1],D[2])}},getTransformedBoundingBox:function(){var t=on.create();return function(e,r){var n=this.vertices,i=r.array,a=e.min,o=e.max,s=a.array,u=o.array,l=n[0];ln(t,l,i),un(s,t),un(u,t);for(var c=1;c<8;c++)l=n[c],ln(t,l,i),s[0]=cn(t[0],s[0]),s[1]=cn(t[1],s[1]),s[2]=cn(t[2],s[2]),u[0]=hn(t[0],u[0]),u[1]=hn(t[1],u[1]),u[2]=hn(t[2],u[2]);return a._dirty=!0,o._dirty=!0,e}}()};var dn=pe.vec3,mn=function(t,e){this.origin=t||new Xe,this.direction=e||new Xe};mn.prototype={constructor:mn,intersectPlane:function(t,e){var r=t.normal.array,n=t.distance,i=this.origin.array,a=this.direction.array,o=dn.dot(r,a);if(0===o)return null;e||(e=new Xe);var s=(dn.dot(r,i)-n)/o;return dn.scaleAndAdd(e.array,i,a,-s),e._dirty=!0,e},mirrorAgainstPlane:function(t){var e=dn.dot(t.normal.array,this.direction.array);dn.scaleAndAdd(this.direction.array,this.direction.array,t.normal.array,2*-e),this.direction._dirty=!0},distanceToPoint:function(){var t=dn.create();return function(e){dn.sub(t,e,this.origin.array);var r=dn.dot(t,this.direction.array);if(r<0)return dn.distance(this.origin.array,e);var n=dn.lenSquared(t);return Math.sqrt(n-r*r)}}(),intersectSphere:function(){var t=dn.create();return function(e,r,n){var i=this.origin.array,a=this.direction.array;e=e.array,dn.sub(t,e,i);var o=dn.dot(t,a),s=dn.squaredLength(t),u=s-o*o,l=r*r;if(!(u>l)){var c=Math.sqrt(l-u),h=o-c,f=o+c;return n||(n=new Xe),h<0?f<0?null:(dn.scaleAndAdd(n.array,i,a,f),n):(dn.scaleAndAdd(n.array,i,a,h),n)}}}(),intersectBoundingBox:function(t,e){var r,n,i,a,o,s,u=this.direction.array,l=this.origin.array,c=t.min.array,h=t.max.array,f=1/u[0],d=1/u[1],m=1/u[2];if(f>=0?(r=(c[0]-l[0])*f,n=(h[0]-l[0])*f):(n=(c[0]-l[0])*f,r=(h[0]-l[0])*f),d>=0?(i=(c[1]-l[1])*d,a=(h[1]-l[1])*d):(a=(c[1]-l[1])*d,i=(h[1]-l[1])*d),r>a||i>n)return null +;if((i>r||r!==r)&&(r=i),(a=0?(o=(c[2]-l[2])*m,s=(h[2]-l[2])*m):(s=(c[2]-l[2])*m,o=(h[2]-l[2])*m),r>s||o>n)return null;if((o>r||r!==r)&&(r=o),(s=0?r:n;return e||(e=new Xe),dn.scaleAndAdd(e.array,l,u,p),e},intersectTriangle:function(){var t=dn.create(),e=dn.create(),r=dn.create(),n=dn.create();return function(i,a,o,s,u,l){var c=this.direction.array,h=this.origin.array;i=i.array,a=a.array,o=o.array,dn.sub(t,a,i),dn.sub(e,o,i),dn.cross(n,e,c);var f=dn.dot(t,n);if(s){if(f>-1e-5)return null}else if(f>-1e-5&&f<1e-5)return null;dn.sub(r,h,i);var d=dn.dot(n,r)/f;if(d<0||d>1)return null;dn.cross(n,t,r);var m=dn.dot(c,n)/f;if(m<0||m>1||d+m>1)return null;dn.cross(n,t,e);var p=-dn.dot(r,n)/f;return p<0?null:(u||(u=new Xe),l&&Xe.set(l,1-d-m,d,m),dn.scaleAndAdd(u.array,h,c,p),u)}}(),applyTransform:function(t){Xe.add(this.direction,this.direction,this.origin),Xe.transformMat4(this.origin,this.origin,t),Xe.transformMat4(this.direction,this.direction,t),Xe.sub(this.direction,this.direction,this.origin),Xe.normalize(this.direction,this.direction)},copy:function(t){Xe.copy(this.origin,t.origin),Xe.copy(this.direction,t.direction)},clone:function(){var t=new mn;return t.copy(this),t}};var pn=pe.vec3,_n=pe.vec4,gn=$r.extend(function(){return{projectionMatrix:new ar,invProjectionMatrix:new ar,viewMatrix:new ar,frustum:new fn}},function(){this.update(!0)},{update:function(t){$r.prototype.update.call(this,t),ar.invert(this.viewMatrix,this.worldTransform),this.updateProjectionMatrix(),ar.invert(this.invProjectionMatrix,this.projectionMatrix),this.frustum.setFromProjection(this.projectionMatrix)},setViewMatrix:function(t){ar.copy(this.viewMatrix,t),ar.invert(this.worldTransform,t),this.decomposeWorldTransform()},decomposeProjectionMatrix:function(){},setProjectionMatrix:function(t){ar.copy(this.projectionMatrix,t),ar.invert(this.invProjectionMatrix,t),this.decomposeProjectionMatrix()},updateProjectionMatrix:function(){},castRay:function(){var t=_n.create();return function(e,r){var n=void 0!==r?r:new mn,i=e.array[0],a=e.array[1];return _n.set(t,i,a,-1,1),_n.transformMat4(t,t,this.invProjectionMatrix.array),_n.transformMat4(t,t,this.worldTransform.array),pn.scale(n.origin.array,t,1/t[3]),_n.set(t,i,a,1,1),_n.transformMat4(t,t,this.invProjectionMatrix.array),_n.transformMat4(t,t,this.worldTransform.array),pn.scale(t,t,1/t[3]),pn.sub(n.direction.array,t,n.origin.array),pn.normalize(n.direction.array,n.direction.array),n.direction._dirty=!0,n.origin._dirty=!0,n}}()}),vn={},yn=$r.extend(function(){return{material:null,autoUpdate:!0,opaqueList:[],transparentList:[],lights:[],viewBoundingBoxLastFrame:new tr,shadowUniforms:{},_cameraList:[],_lightUniforms:{},_previousLightNumber:{},_lightNumber:{},_lightProgramKeys:{},_opaqueObjectCount:0,_transparentObjectCount:0,_nodeRepository:{}}},function(){this._scene=this},{addToScene:function(t){t instanceof gn&&(this._cameraList.length>0&&console.warn("Found multiple camera in one scene. Use the fist one."),this._cameraList.push(t)),t.name&&(this._nodeRepository[t.name]=t)},removeFromScene:function(t){if(t instanceof gn){var e=this._cameraList.indexOf(t);e>=0&&this._cameraList.splice(e,1)}t.name&&delete this._nodeRepository[t.name]},getNode:function(t){return this._nodeRepository[t]},cloneNode:function(t){var e=t.clone(),r={},n=function(i,a){i.skeleton&&(a.skeleton=i.skeleton.clone(t,e),a.joints=i.joints.slice()),i.material&&(r[i.material.__uid__]={oldMat:i.material});for(var o=0;o0&&this._updateRenderList(n)}},_updateLightUniforms:function(){var t=this.lights;t.sort($);var e=this._lightUniforms;for(var r in e)for(var n in e[r])e[r][n].value.length=0;for(var i=0;ia[0]&&(a[0]=s),u>a[1]&&(a[1]=u),l>a[2]&&(a[2]=l)}r._dirty=!0,n._dirty=!0}},dirty:function(){for(var t=this.getEnabledAttributes(),e=0;e=0){e||(e=En());var r=this.indices;return e[0]=r[3*t],e[1]=r[3*t+1],e[2]=r[3*t+2],e}},setTriangleIndices:function(t,e){var r=this.indices;r[3*t]=e[0],r[3*t+1]=e[1],r[3*t+2]=e[2]},isUseIndices:function(){return!!this.indices},initIndicesFromArray:function(t){var e,r=this.vertexCount>65535?We.Uint32Array:We.Uint16Array;if(t[0]&&t[0].length){var n=0;e=new r(3*t.length);for(var i=0;i=0&&(e.splice(r,1),delete this.attributes[t],!0)},getAttribute:function(t){return this.attributes[t]},getEnabledAttributes:function(){var t=this._enabledAttributes,e=this._attributeList;if(t)return t;for(var r=[],n=this.vertexCount,i=0;i65535&&(this.indices=new We.Uint32Array(this.indices));for(var t=this.attributes,e=this.indices,r=this.getEnabledAttributes(),n={},i=0;i65535?Uint32Array:Uint16Array,m=this.indices=new d(e*t*6),p=this.radius,_=this.phiStart,g=this.phiLength,v=this.thetaStart,y=this.thetaLength,p=this.radius,x=[],T=[],E=0,b=1/p;for(f=0;f<=t;f++)for(h=0;h<=e;h++)l=h/e,c=f/t,o=-p*Math.cos(_+l*g)*Math.sin(v+c*y),s=p*Math.cos(v+c*y),u=p*Math.sin(_+l*g)*Math.sin(v+c*y),x[0]=o,x[1]=s,x[2]=u,T[0]=l,T[1]=c,r.set(E,x),n.set(E,T),x[0]*=b,x[1]*=b,x[2]*=b,i.set(E,x),E++;var A,S,w,M,C=e+1,N=0;for(f=0;f65535?Uint32Array:Uint16Array,g=(o-1)*(s-1)*6,v=this.indices=new _(g),y=0,f=0;f>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t},Ln.nearestPowerOfTwo=function(t){return Math.pow(2,Math.round(Math.log(t)/Math.LN2))};var Pn=Ln.isPowerOfTwo,Dn=lr.extend(function(){return{image:null,pixels:null,mipmaps:[]}},{textureType:"texture2D",update:function(t){var e=t.gl;e.bindTexture(e.TEXTURE_2D,this._cache.get("webgl_texture")),this.updateCommon(t);var r=this.format,n=this.type;e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,this.getAvailableWrapS()),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,this.getAvailableWrapT()),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,this.getAvailableMagFilter()),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,this.getAvailableMinFilter());var i=t.getGLExtension("EXT_texture_filter_anisotropic");if(i&&this.anisotropic>1&&e.texParameterf(e.TEXTURE_2D,i.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===n){t.getGLExtension("OES_texture_half_float")||(n=He.FLOAT)}if(this.mipmaps.length)for(var a=this.width,o=this.height,s=0;s=lr.COMPRESSED_RGB_S3TC_DXT1_EXT?t.compressedTexImage2D(t.TEXTURE_2D,r,a,n,i,0,e.pixels):t.texImage2D(t.TEXTURE_2D,r,a,n,i,0,a,o,e.pixels)},generateMipmap:function(t){var e=t.gl;this.useMipmap&&!this.NPOT&&(e.bindTexture(e.TEXTURE_2D,this._cache.get("webgl_texture")),e.generateMipmap(e.TEXTURE_2D))},isPowerOfTwo:function(){var t,e;return this.image?(t=this.image.width,e=this.image.height):(t=this.width,e=this.height),Pn(t)&&Pn(e)},isRenderable:function(){return this.image?"CANVAS"===this.image.nodeName||"VIDEO"===this.image.nodeName||this.image.complete:!(!this.width||!this.height)},bind:function(t){t.gl.bindTexture(t.gl.TEXTURE_2D,this.getWebGLTexture(t))},unbind:function(t){t.gl.bindTexture(t.gl.TEXTURE_2D,null)},load:function(t,e){var r=new Image;e&&(r.crossOrigin=e);var n=this;return r.onload=function(){n.dirty(),n.trigger("success",n),r.onload=null},r.onerror=function(){n.trigger("error",n),r.onerror=null},r.src=t,this.image=r,this}});Object.defineProperty(Dn.prototype,"width",{get:function(){return this.image?this.image.width:this._width},set:function(t){this.image?console.warn("Texture from image can't set width"):(this._width!==t&&this.dirty(),this._width=t)}}),Object.defineProperty(Dn.prototype,"height",{get:function(){return this.image?this.image.height:this._height},set:function(t){this.image?console.warn("Texture from image can't set height"):(this._height!==t&&this.dirty(),this._height=t)}});var In=Ln.isPowerOfTwo,On=["px","nx","py","ny","pz","nz"],Bn=lr.extend(function(){return{image:{px:null,nx:null,py:null,ny:null,pz:null,nz:null},pixels:{px:null,nx:null,py:null,ny:null,pz:null,nz:null},mipmaps:[]}},{textureType:"textureCube",update:function(t){var e=t.gl;e.bindTexture(e.TEXTURE_CUBE_MAP,this._cache.get("webgl_texture")),this.updateCommon(t);var r=this.format,n=this.type;e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_S,this.getAvailableWrapS()),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_WRAP_T,this.getAvailableWrapT()),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MAG_FILTER,this.getAvailableMagFilter()),e.texParameteri(e.TEXTURE_CUBE_MAP,e.TEXTURE_MIN_FILTER,this.getAvailableMinFilter());var i=t.getGLExtension("EXT_texture_filter_anisotropic");if(i&&this.anisotropic>1&&e.texParameterf(e.TEXTURE_CUBE_MAP,i.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===n){t.getGLExtension("OES_texture_half_float")||(n=He.FLOAT)}if(this.mipmaps.length)for(var a=this.width,o=this.height,s=0;s0},beforeRender:function(t){},afterRender:function(t,e){},getBoundingBox:function(t,e){return e=$r.prototype.getBoundingBox.call(this,t,e),this.geometry&&this.geometry.boundingBox&&e.union(this.geometry.boundingBox),e},render:function(t,e,r){var n=t.gl;e=e||this.material;var i=e.shader,a=this.geometry,o=this.mode,s=a.vertexCount,u=(a.isUseIndices(),t.getGLExtension("OES_element_index_uint")),l=u&&s>65535,c=l?n.UNSIGNED_INT:n.UNSIGNED_SHORT,h=t.getGLExtension("OES_vertex_array_object"),f=!a.dynamic,d=this._renderInfo;d.vertexCount=s,d.triangleCount=0,d.drawCallCount=0;var m=!1;if(Un=t.__uid__+"-"+a.__uid__+"-"+r.__uid__,Un!==Gn?m=!0:(h&&f||a._cache.isDirty("any"))&&(m=!0),Gn=Un,m){var p=this._drawCache[Un];if(!p){var _=a.getBufferChunks(t);if(!_)return;p=[];for(var g=0;g<_.length;g++){for(var v=_[g],y=v.attributeBuffers,x=v.indicesBuffer,T=[],E=[],b=0;b0)},render:function(t,e,r){var n=t.gl;if(this.skeleton){this.skeleton.update();var i=this.skeleton.getSubSkinMatrices(this.__uid__,this.joints);r.setUniformOfSemantic(n,"SKIN_MATRIX",i)}return Xn.prototype.render.call(this,t,e,r)},getSkinMatricesTexture:function(){return this._skinMatricesTexture=this._skinMatricesTexture||new Dn({type:He.FLOAT,minFilter:He.NEAREST,magFilter:He.NEAREST,useMipmap:!1,flipY:!1}),this._skinMatricesTexture}});jn.POINTS=He.POINTS,jn.LINES=He.LINES,jn.LINE_LOOP=He.LINE_LOOP,jn.LINE_STRIP=He.LINE_STRIP,jn.TRIANGLES=He.TRIANGLES,jn.TRIANGLE_STRIP=He.TRIANGLE_STRIP,jn.TRIANGLE_FAN=He.TRIANGLE_FAN,jn.BACK=He.BACK,jn.FRONT=He.FRONT,jn.FRONT_AND_BACK=He.FRONT_AND_BACK,jn.CW=He.CW,jn.CCW=He.CCW;var qn=gn.extend({fov:50,aspect:1,near:.1,far:2e3},{updateProjectionMatrix:function(){var t=this.fov/180*Math.PI;this.projectionMatrix.perspective(t,this.aspect,this.near,this.far)},decomposeProjectionMatrix:function(){var t=this.projectionMatrix.array,e=2*Math.atan(1/t[5]);this.fov=e/Math.PI*180,this.aspect=t[5]/t[0],this.near=t[14]/(t[10]-1),this.far=t[14]/(t[10]+1)},clone:function(){var t=gn.prototype.clone.call(this);return t.fov=this.fov,t.aspect=this.aspect,t.near=this.near,t.far=this.far,t}}),Yn=gn.extend({left:-1,right:1,near:-1,far:1,top:1,bottom:-1},{updateProjectionMatrix:function(){this.projectionMatrix.ortho(this.left,this.right,this.bottom,this.top,this.near,this.far)},decomposeProjectionMatrix:function(){var t=this.projectionMatrix.array;this.left=(-1-t[12])/t[0],this.right=(1-t[12])/t[0],this.top=(1-t[13])/t[5],this.bottom=(-1-t[13])/t[5],this.near=-(-1-t[14])/t[10],this.far=-(1-t[14])/t[10]},clone:function(){var t=gn.prototype.clone.call(this);return t.left=this.left,t.right=this.right,t.near=this.near,t.far=this.far,t.top=this.top,t.bottom=this.bottom,t}}),Kn={get:ct +},Zn="\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\nvarying vec4 v_Color;\n#endif\nattribute vec3 barycentric;\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\nuniform mat4 viewInverse : VIEWINVERSE;\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\nvarying vec2 v_Texcoord2;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\nvarying vec3 v_Barycentric;\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = 1.0 - roughness;\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /( b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= diffuseTerm;\n outColor.rgb += specularTerm;\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 51.5);\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n #endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end";K.import(Zn);var Jn,Qn=["diffuseMap","normalMap","roughnessMap","metalnessMap","emissiveMap","environmentMap","brdfLookup","ssaoMap","aoMap"],$n=["color","emission","emissionIntensity","alpha","roughness","metalness","uvRepeat","uvOffset","aoIntensity","alphaCutoff"],ti=["linear","encodeRGBM","decodeRGBM","doubleSided","alphaTest","roughnessChannel","metalnessChannel","environmentMapPrefiltered"],ei={roughnessChannel:"ROUGHNESS_CHANNEL",metalnessChannel:"METALNESS_CHANNEL"},ri={linear:"SRGB_DECODE",encodeRGBM:"RGBM_ENCODE",decodeRGBM:"RGBM_DECODE",doubleSided:"DOUBLE_SIDED",alphaTest:"ALPHA_TEST",environmentMapPrefiltered:"ENVIRONMENTMAP_PREFILTER"},ni=vr.extend(function(){return Jn||(Jn=new K(K.source("clay.standard.vertex"),K.source("clay.standard.fragment"))),{shader:Jn}},function(t){Le.extend(this,t),Le.defaults(this,{color:[1,1,1],emission:[0,0,0],emissionIntensity:0,roughness:.5,metalness:0,alpha:1,alphaTest:!1,alphaCutoff:.9,doubleSided:!1,uvRepeat:[1,1],uvOffset:[0,0],aoIntensity:1,environmentMapPrefiltered:!1,linear:!1,encodeRGBM:!1,decodeRGBM:!1,roughnessChannel:0,metalnessChannel:1}),this.define("fragment","USE_METALNESS"),this.define("fragment","USE_ROUGHNESS")},{clone:function(){var t=new ni({name:this.name});return Qn.forEach(function(e){this[e]&&(t[e]=this[e])},this),$n.concat(ti).forEach(function(e){t[e]=this[e]},this),t}});$n.forEach(function(t){Object.defineProperty(ni.prototype,t,{get:function(){return this.get(t)},set:function(e){this.setUniform(t,e)}})}),Qn.forEach(function(t){Object.defineProperty(ni.prototype,t,{get:function(){return this.get(t)},set:function(e){this.setUniform(t,e)}})}),ti.forEach(function(t){var e="_"+t;Object.defineProperty(ni.prototype,t,{get:function(){return this[e]},set:function(r){if(this[e]=r,t in ei){var n=ei[t];this.define("fragment",n,r)}else{var n=ri[t];r?this.define("fragment",n):this.undefine("fragment",n)}}})}),Object.defineProperty(ni.prototype,"environmentBox",{get:function(){var t=this._environmentBox;return t&&(t.min.setArray(this.get("environmentBoxMin")),t.max.setArray(this.get("environmentBoxMax"))),t},set:function(t){this._environmentBox=t;var e=this.uniforms=this.uniforms||{};e.environmentBoxMin=e.environmentBoxMin||{value:null},e.environmentBoxMax=e.environmentBoxMax||{value:null},t&&(this.setUniform("environmentBoxMin",t.min.array),this.setUniform("environmentBoxMax",t.max.array)),t?this.define("fragment","PARALLAX_CORRECTED"):this.undefine("fragment","PARALLAX_CORRECTED")}});var ii=Pe.extend({name:"",index:-1,node:null,rootNode:null}),ai=pe.quat,oi=pe.vec3,si=pe.mat4,ui=Pe.extend(function(){return{relativeRootNode:null,name:"",joints:[],_clips:[],_invBindPoseMatricesArray:null,_jointMatricesSubArrays:[],_skinMatricesArray:null,_skinMatricesSubArrays:[],_subSkinMatricesArray:{}}},{addClip:function(t,e){for(var r=0;r0&&this._clips.splice(e,1)},removeClipsAll:function(){this._clips=[]},getClip:function(t){if(this._clips[t])return this._clips[t].clip},getClipNumber:function(){return this._clips.length},updateJointMatrices:function(){var t=si.create();return function(){this._invBindPoseMatricesArray=new Float32Array(16*this.joints.length),this._skinMatricesArray=new Float32Array(16*this.joints.length);for(var e=0;e 0.)\n {\n gl_FragColor.rgb = mix(gl_FragColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (gl_FragColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n gl_FragColor.rgb = ACESToneMapping(gl_FragColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n gl_FragColor = linearTosRGB(gl_FragColor);\n#endif\n gl_FragColor = encodeHDR(gl_FragColor);\n}\n@end"),K.import(Zn),K.import("@export clay.wireframe.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\nattribute vec3 barycentric;\n@import clay.chunk.skinning_header\nvarying vec3 v_Barycentric;\nvoid main()\n{\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0 );\n v_Barycentric = barycentric;\n}\n@end\n@export clay.wireframe.fragment\nuniform vec3 color : [0.0, 0.0, 0.0];\nuniform float alpha : 1.0;\nuniform float lineWidth : 1.0;\nvarying vec3 v_Barycentric;\n@import clay.util.edge_factor\nvoid main()\n{\n gl_FragColor.rgb = color;\n gl_FragColor.a = (1.0-edgeFactor(lineWidth)) * alpha;\n}\n@end"),K.import(hi),K.import(Hr),Hn.template("clay.basic",K.source("clay.basic.vertex"),K.source("clay.basic.fragment")),Hn.template("clay.lambert",K.source("clay.lambert.vertex"),K.source("clay.lambert.fragment")),Hn.template("clay.wireframe",K.source("clay.wireframe.vertex"),K.source("clay.wireframe.fragment")),Hn.template("clay.skybox",K.source("clay.skybox.vertex"),K.source("clay.skybox.fragment")),Hn.template("clay.prez",K.source("clay.prez.vertex"),K.source("clay.prez.fragment")),Hn.template("clay.standard",K.source("clay.standard.vertex"),K.source("clay.standard.fragment")),Hn.template("clay.standardMR",K.source("clay.standardMR.vertex"),K.source("clay.standardMR.fragment")),K.import("@export clay.compositor.coloradjust\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nuniform float contrast : 1.0;\nuniform float exposure : 0.0;\nuniform float gamma : 1.0;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = clamp(tex.rgb + vec3(brightness), 0.0, 1.0);\n color = clamp( (color-vec3(0.5))*contrast+vec3(0.5), 0.0, 1.0);\n color = clamp( color * pow(2.0, exposure), 0.0, 1.0);\n color = clamp( pow(color, vec3(gamma)), 0.0, 1.0);\n float luminance = dot( color, w );\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.brightness\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float brightness : 0.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = tex.rgb + vec3(brightness);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.contrast\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float contrast : 1.0;\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord);\n vec3 color = (tex.rgb-vec3(0.5))*contrast+vec3(0.5);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.exposure\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float exposure : 0.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb * pow(2.0, exposure);\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.gamma\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float gamma : 1.0;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = pow(tex.rgb, vec3(gamma));\n gl_FragColor = vec4(color, tex.a);\n}\n@end\n@export clay.compositor.saturation\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float saturation : 1.0;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n vec3 color = tex.rgb;\n float luminance = dot(color, w);\n color = mix(vec3(luminance), color, saturation);\n gl_FragColor = vec4(color, tex.a);\n}\n@end"),K.import("@export clay.compositor.kernel.gaussian_9\nfloat gaussianKernel[9];\ngaussianKernel[0] = 0.07;\ngaussianKernel[1] = 0.09;\ngaussianKernel[2] = 0.12;\ngaussianKernel[3] = 0.14;\ngaussianKernel[4] = 0.16;\ngaussianKernel[5] = 0.14;\ngaussianKernel[6] = 0.12;\ngaussianKernel[7] = 0.09;\ngaussianKernel[8] = 0.07;\n@end\n@export clay.compositor.kernel.gaussian_13\nfloat gaussianKernel[13];\ngaussianKernel[0] = 0.02;\ngaussianKernel[1] = 0.03;\ngaussianKernel[2] = 0.06;\ngaussianKernel[3] = 0.08;\ngaussianKernel[4] = 0.11;\ngaussianKernel[5] = 0.13;\ngaussianKernel[6] = 0.14;\ngaussianKernel[7] = 0.13;\ngaussianKernel[8] = 0.11;\ngaussianKernel[9] = 0.08;\ngaussianKernel[10] = 0.06;\ngaussianKernel[11] = 0.03;\ngaussianKernel[12] = 0.02;\n@end\n@export clay.compositor.gaussian_blur\n#define SHADER_NAME gaussian_blur\nuniform sampler2D texture;varying vec2 v_Texcoord;\nuniform float blurSize : 2.0;\nuniform vec2 textureSize : [512.0, 512.0];\nuniform float blurDir : 0.0;\n@import clay.util.rgbm\n@import clay.util.clamp_sample\nvoid main (void)\n{\n @import clay.compositor.kernel.gaussian_9\n vec2 off = blurSize / textureSize;\n off *= vec2(1.0 - blurDir, blurDir);\n vec4 sum = vec4(0.0);\n float weightAll = 0.0;\n for (int i = 0; i < 9; i++) {\n float w = gaussianKernel[i];\n vec4 texel = decodeHDR(clampSample(texture, v_Texcoord + float(i - 4) * off));\n sum += texel * w;\n weightAll += w;\n }\n gl_FragColor = encodeHDR(sum / max(weightAll, 0.01));\n}\n@end\n"),K.import("@export clay.compositor.hdr.log_lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = decodeHDR(texture2D(texture, v_Texcoord));\n float luminance = dot(tex.rgb, w);\n luminance = log(luminance + 0.001);\n gl_FragColor = encodeHDR(vec4(vec3(luminance), 1.0));\n}\n@end\n@export clay.compositor.hdr.lum_adaption\nvarying vec2 v_Texcoord;\nuniform sampler2D adaptedLum;\nuniform sampler2D currentLum;\nuniform float frameTime : 0.02;\n@import clay.util.rgbm\nvoid main()\n{\n float fAdaptedLum = decodeHDR(texture2D(adaptedLum, vec2(0.5, 0.5))).r;\n float fCurrentLum = exp(encodeHDR(texture2D(currentLum, vec2(0.5, 0.5))).r);\n fAdaptedLum += (fCurrentLum - fAdaptedLum) * (1.0 - pow(0.98, 30.0 * frameTime));\n gl_FragColor = encodeHDR(vec4(vec3(fAdaptedLum), 1.0));\n}\n@end\n@export clay.compositor.lum\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nconst vec3 w = vec3(0.2125, 0.7154, 0.0721);\nvoid main()\n{\n vec4 tex = texture2D( texture, v_Texcoord );\n float luminance = dot(tex.rgb, w);\n gl_FragColor = vec4(vec3(luminance), 1.0);\n}\n@end"),K.import("\n@export clay.compositor.lut\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform sampler2D lookup;\nvoid main()\n{\n vec4 tex = texture2D(texture, v_Texcoord);\n float blueColor = tex.b * 63.0;\n vec2 quad1;\n quad1.y = floor(floor(blueColor) / 8.0);\n quad1.x = floor(blueColor) - (quad1.y * 8.0);\n vec2 quad2;\n quad2.y = floor(ceil(blueColor) / 8.0);\n quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n vec2 texPos1;\n texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.r);\n texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.g);\n vec2 texPos2;\n texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.r);\n texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * tex.g);\n vec4 newColor1 = texture2D(lookup, texPos1);\n vec4 newColor2 = texture2D(lookup, texPos2);\n vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n gl_FragColor = vec4(newColor.rgb, tex.w);\n}\n@end"),K.import("@export clay.compositor.vignette\n#define OUTPUT_ALPHA\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\nuniform float darkness: 1;\nuniform float offset: 1;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 texel = decodeHDR(texture2D(texture, v_Texcoord));\n gl_FragColor.rgb = texel.rgb;\n vec2 uv = (v_Texcoord - vec2(0.5)) * vec2(offset);\n gl_FragColor = encodeHDR(vec4(mix(texel.rgb, vec3(1.0 - darkness), dot(uv, uv)), texel.a));\n}\n@end"),K.import("@export clay.compositor.output\n#define OUTPUT_ALPHA\nvarying vec2 v_Texcoord;\nuniform sampler2D texture;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = decodeHDR(texture2D(texture, v_Texcoord));\n gl_FragColor.rgb = tex.rgb;\n#ifdef OUTPUT_ALPHA\n gl_FragColor.a = tex.a;\n#else\n gl_FragColor.a = 1.0;\n#endif\n gl_FragColor = encodeHDR(gl_FragColor);\n#ifdef PREMULTIPLY_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n}\n@end"),K.import("@export clay.compositor.bright\nuniform sampler2D texture;\nuniform float threshold : 1;\nuniform float scale : 1.0;\nuniform vec2 textureSize: [512, 512];\nvarying vec2 v_Texcoord;\nconst vec3 lumWeight = vec3(0.2125, 0.7154, 0.0721);\n@import clay.util.rgbm\nvec4 median(vec4 a, vec4 b, vec4 c)\n{\n return a + b + c - min(min(a, b), c) - max(max(a, b), c);\n}\nvoid main()\n{\n vec4 texel = decodeHDR(texture2D(texture, v_Texcoord));\n#ifdef ANTI_FLICKER\n vec3 d = 1.0 / textureSize.xyx * vec3(1.0, 1.0, 0.0);\n vec4 s1 = decodeHDR(texture2D(texture, v_Texcoord - d.xz));\n vec4 s2 = decodeHDR(texture2D(texture, v_Texcoord + d.xz));\n vec4 s3 = decodeHDR(texture2D(texture, v_Texcoord - d.zy));\n vec4 s4 = decodeHDR(texture2D(texture, v_Texcoord + d.zy));\n texel = median(median(texel, s1, s2), s3, s4);\n#endif\n float lum = dot(texel.rgb , lumWeight);\n vec4 color;\n if (lum > threshold && texel.a > 0.0)\n {\n color = vec4(texel.rgb * scale, texel.a * scale);\n }\n else\n {\n color = vec4(0.0);\n }\n gl_FragColor = encodeHDR(color);\n}\n@end\n"),K.import("@export clay.compositor.downsample\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nfloat brightness(vec3 c)\n{\n return max(max(c.r, c.g), c.b);\n}\n@import clay.util.clamp_sample\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n#ifdef ANTI_FLICKER\n vec3 s1 = decodeHDR(clampSample(texture, v_Texcoord + d.xy)).rgb;\n vec3 s2 = decodeHDR(clampSample(texture, v_Texcoord + d.zy)).rgb;\n vec3 s3 = decodeHDR(clampSample(texture, v_Texcoord + d.xw)).rgb;\n vec3 s4 = decodeHDR(clampSample(texture, v_Texcoord + d.zw)).rgb;\n float s1w = 1.0 / (brightness(s1) + 1.0);\n float s2w = 1.0 / (brightness(s2) + 1.0);\n float s3w = 1.0 / (brightness(s3) + 1.0);\n float s4w = 1.0 / (brightness(s4) + 1.0);\n float oneDivideSum = 1.0 / (s1w + s2w + s3w + s4w);\n vec4 color = vec4(\n (s1 * s1w + s2 * s2w + s3 * s3w + s4 * s4w) * oneDivideSum,\n 1.0\n );\n#else\n vec4 color = decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.xw));\n color += decodeHDR(clampSample(texture, v_Texcoord + d.zw));\n color *= 0.25;\n#endif\n gl_FragColor = encodeHDR(color);\n}\n@end"),K.import("\n@export clay.compositor.upsample\n#define HIGH_QUALITY\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nuniform float sampleScale: 0.5;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.clamp_sample\nvoid main()\n{\n#ifdef HIGH_QUALITY\n vec4 d = vec4(1.0, 1.0, -1.0, 0.0) / textureSize.xyxy * sampleScale;\n vec4 s;\n s = decodeHDR(clampSample(texture, v_Texcoord - d.xy));\n s += decodeHDR(clampSample(texture, v_Texcoord - d.wy)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord - d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zw)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord )) * 4.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xw)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.wy)) * 2.0;\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n gl_FragColor = encodeHDR(s / 16.0);\n#else\n vec4 d = vec4(-1.0, -1.0, +1.0, +1.0) / textureSize.xyxy;\n vec4 s;\n s = decodeHDR(clampSample(texture, v_Texcoord + d.xy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zy));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.xw));\n s += decodeHDR(clampSample(texture, v_Texcoord + d.zw));\n gl_FragColor = encodeHDR(s / 4.0);\n#endif\n}\n@end"),K.import("@export clay.compositor.hdr.composite\nuniform sampler2D texture;\n#ifdef BLOOM_ENABLED\nuniform sampler2D bloom;\n#endif\n#ifdef LENSFLARE_ENABLED\nuniform sampler2D lensflare;\nuniform sampler2D lensdirt;\n#endif\n#ifdef LUM_ENABLED\nuniform sampler2D lum;\n#endif\n#ifdef LUT_ENABLED\nuniform sampler2D lut;\n#endif\n#ifdef COLOR_CORRECTION\nuniform float brightness : 0.0;\nuniform float contrast : 1.0;\nuniform float saturation : 1.0;\n#endif\n#ifdef VIGNETTE\nuniform float vignetteDarkness: 1.0;\nuniform float vignetteOffset: 1.0;\n#endif\nuniform float exposure : 1.0;\nuniform float bloomIntensity : 0.25;\nuniform float lensflareIntensity : 1;\nvarying vec2 v_Texcoord;\n@import clay.util.srgb\nvec3 ACESToneMapping(vec3 color)\n{\n const float A = 2.51;\n const float B = 0.03;\n const float C = 2.43;\n const float D = 0.59;\n const float E = 0.14;\n return (color * (A * color + B)) / (color * (C * color + D) + E);\n}\nfloat eyeAdaption(float fLum)\n{\n return mix(0.2, fLum, 0.5);\n}\n#ifdef LUT_ENABLED\nvec3 lutTransform(vec3 color) {\n float blueColor = color.b * 63.0;\n vec2 quad1;\n quad1.y = floor(floor(blueColor) / 8.0);\n quad1.x = floor(blueColor) - (quad1.y * 8.0);\n vec2 quad2;\n quad2.y = floor(ceil(blueColor) / 8.0);\n quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n vec2 texPos1;\n texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);\n texPos1.y = (quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);\n vec2 texPos2;\n texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.r);\n texPos2.y = (quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * color.g);\n vec4 newColor1 = texture2D(lut, texPos1);\n vec4 newColor2 = texture2D(lut, texPos2);\n vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n return newColor.rgb;\n}\n#endif\n@import clay.util.rgbm\nvoid main()\n{\n vec4 texel = vec4(0.0);\n vec4 originalTexel = vec4(0.0);\n#ifdef TEXTURE_ENABLED\n texel = decodeHDR(texture2D(texture, v_Texcoord));\n originalTexel = texel;\n#endif\n#ifdef BLOOM_ENABLED\n vec4 bloomTexel = decodeHDR(texture2D(bloom, v_Texcoord));\n texel.rgb += bloomTexel.rgb * bloomIntensity;\n texel.a += bloomTexel.a * bloomIntensity;\n#endif\n#ifdef LENSFLARE_ENABLED\n texel += decodeHDR(texture2D(lensflare, v_Texcoord)) * texture2D(lensdirt, v_Texcoord) * lensflareIntensity;\n#endif\n texel.a = min(texel.a, 1.0);\n#ifdef LUM_ENABLED\n float fLum = texture2D(lum, vec2(0.5, 0.5)).r;\n float adaptedLumDest = 3.0 / (max(0.1, 1.0 + 10.0*eyeAdaption(fLum)));\n float exposureBias = adaptedLumDest * exposure;\n#else\n float exposureBias = exposure;\n#endif\n texel.rgb *= exposureBias;\n texel.rgb = ACESToneMapping(texel.rgb);\n texel = linearTosRGB(texel);\n#ifdef LUT_ENABLED\n texel.rgb = lutTransform(clamp(texel.rgb,vec3(0.0),vec3(1.0)));\n#endif\n#ifdef COLOR_CORRECTION\n texel.rgb = clamp(texel.rgb + vec3(brightness), 0.0, 1.0);\n texel.rgb = clamp((texel.rgb - vec3(0.5))*contrast+vec3(0.5), 0.0, 1.0);\n float lum = dot(texel.rgb, vec3(0.2125, 0.7154, 0.0721));\n texel.rgb = mix(vec3(lum), texel.rgb, saturation);\n#endif\n#ifdef VIGNETTE\n vec2 uv = (v_Texcoord - vec2(0.5)) * vec2(vignetteOffset);\n texel.rgb = mix(texel.rgb, vec3(1.0 - vignetteDarkness), dot(uv, uv));\n#endif\n gl_FragColor = encodeHDR(texel);\n#ifdef DEBUG\n #if DEBUG == 1\n gl_FragColor = encodeHDR(decodeHDR(texture2D(texture, v_Texcoord)));\n #elif DEBUG == 2\n gl_FragColor = encodeHDR(decodeHDR(texture2D(bloom, v_Texcoord)) * bloomIntensity);\n #elif DEBUG == 3\n gl_FragColor = encodeHDR(decodeHDR(texture2D(lensflare, v_Texcoord) * lensflareIntensity));\n #endif\n#endif\n if (originalTexel.a <= 0.01 && gl_FragColor.a > 1e-5) {\n gl_FragColor.a = dot(gl_FragColor.rgb, vec3(0.2125, 0.7154, 0.0721));\n }\n#ifdef PREMULTIPLY_ALPHA\n gl_FragColor.rgb *= gl_FragColor.a;\n#endif\n}\n@end"), +K.import("@export clay.compositor.dof.coc\nuniform sampler2D depth;\nuniform float zNear: 0.1;\nuniform float zFar: 2000;\nuniform float focalDist: 3;\nuniform float focalRange: 1;\nuniform float focalLength: 30;\nuniform float fstop: 2.8;\nvarying vec2 v_Texcoord;\n@import clay.util.encode_float\nvoid main()\n{\n float z = texture2D(depth, v_Texcoord).r * 2.0 - 1.0;\n float dist = 2.0 * zNear * zFar / (zFar + zNear - z * (zFar - zNear));\n float aperture = focalLength / fstop;\n float coc;\n float uppper = focalDist + focalRange;\n float lower = focalDist - focalRange;\n if (dist <= uppper && dist >= lower) {\n coc = 0.5;\n }\n else {\n float focalAdjusted = dist > uppper ? uppper : lower;\n coc = abs(aperture * (focalLength * (dist - focalAdjusted)) / (dist * (focalAdjusted - focalLength)));\n coc = clamp(coc, 0.0, 0.4) / 0.4000001;\n if (dist < lower) {\n coc = -coc;\n }\n coc = coc * 0.5 + 0.5;\n }\n gl_FragColor = encodeFloat(coc);\n}\n@end\n@export clay.compositor.dof.premultiply\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.decode_float\nvoid main() {\n float fCoc = max(abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0), 0.1);\n gl_FragColor = encodeHDR(\n vec4(decodeHDR(texture2D(texture, v_Texcoord)).rgb * fCoc, 1.0)\n );\n}\n@end\n@export clay.compositor.dof.min_coc\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.float\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n fCoc = min(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zy)));\n fCoc = min(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.xw)));\n fCoc = min(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zw)));\n gl_FragColor = encodeFloat(fCoc);\n}\n@end\n@export clay.compositor.dof.max_coc\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.float\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n fCoc = max(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zy)));\n fCoc = max(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.xw)));\n fCoc = max(fCoc, decodeFloat(texture2D(coc, v_Texcoord + d.zw)));\n gl_FragColor = encodeFloat(fCoc);\n}\n@end\n@export clay.compositor.dof.coc_upsample\n#define HIGH_QUALITY\nuniform sampler2D coc;\nuniform vec2 textureSize : [512, 512];\nuniform float sampleScale: 0.5;\nvarying vec2 v_Texcoord;\n@import clay.util.float\nvoid main()\n{\n#ifdef HIGH_QUALITY\n vec4 d = vec4(1.0, 1.0, -1.0, 0.0) / textureSize.xyxy * sampleScale;\n float s;\n s = decodeFloat(texture2D(coc, v_Texcoord - d.xy));\n s += decodeFloat(texture2D(coc, v_Texcoord - d.wy)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord - d.zy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zw)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord )) * 4.0;\n s += decodeFloat(texture2D(coc, v_Texcoord + d.xw)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.wy)) * 2.0;\n s += decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n gl_FragColor = encodeFloat(s / 16.0);\n#else\n vec4 d = vec4(-1.0, -1.0, +1.0, +1.0) / textureSize.xyxy;\n float s;\n s = decodeFloat(texture2D(coc, v_Texcoord + d.xy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zy));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.xw));\n s += decodeFloat(texture2D(coc, v_Texcoord + d.zw));\n gl_FragColor = encodeFloat(s / 4.0);\n#endif\n}\n@end\n@export clay.compositor.dof.upsample\n#define HIGH_QUALITY\nuniform sampler2D coc;\nuniform sampler2D texture;\nuniform vec2 textureSize : [512, 512];\nuniform float sampleScale: 0.5;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.decode_float\nfloat tap(vec2 uv, inout vec4 color, float baseWeight) {\n float weight = abs(decodeFloat(texture2D(coc, uv)) * 2.0 - 1.0) * baseWeight;\n color += decodeHDR(texture2D(texture, uv)) * weight;\n return weight;\n}\nvoid main()\n{\n#ifdef HIGH_QUALITY\n vec4 d = vec4(1.0, 1.0, -1.0, 0.0) / textureSize.xyxy * sampleScale;\n vec4 color = vec4(0.0);\n float baseWeight = 1.0 / 16.0;\n float w = tap(v_Texcoord - d.xy, color, baseWeight);\n w += tap(v_Texcoord - d.wy, color, baseWeight * 2.0);\n w += tap(v_Texcoord - d.zy, color, baseWeight);\n w += tap(v_Texcoord + d.zw, color, baseWeight * 2.0);\n w += tap(v_Texcoord , color, baseWeight * 4.0);\n w += tap(v_Texcoord + d.xw, color, baseWeight * 2.0);\n w += tap(v_Texcoord + d.zy, color, baseWeight);\n w += tap(v_Texcoord + d.wy, color, baseWeight * 2.0);\n w += tap(v_Texcoord + d.xy, color, baseWeight);\n gl_FragColor = encodeHDR(color / w);\n#else\n vec4 d = vec4(-1.0, -1.0, +1.0, +1.0) / textureSize.xyxy;\n vec4 color = vec4(0.0);\n float baseWeight = 1.0 / 4.0;\n float w = tap(v_Texcoord + d.xy, color, baseWeight);\n w += tap(v_Texcoord + d.zy, color, baseWeight);\n w += tap(v_Texcoord + d.xw, color, baseWeight);\n w += tap(v_Texcoord + d.zw, color, baseWeight);\n gl_FragColor = encodeHDR(color / w);\n#endif\n}\n@end\n@export clay.compositor.dof.downsample\nuniform sampler2D texture;\nuniform sampler2D coc;\nuniform vec2 textureSize : [512, 512];\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.decode_float\nfloat tap(vec2 uv, inout vec4 color) {\n float weight = abs(decodeFloat(texture2D(coc, uv)) * 2.0 - 1.0) * 0.25;\n color += decodeHDR(texture2D(texture, uv)) * weight;\n return weight;\n}\nvoid main()\n{\n vec4 d = vec4(-1.0, -1.0, 1.0, 1.0) / textureSize.xyxy;\n vec4 color = vec4(0.0);\n float weight = tap(v_Texcoord + d.xy, color);\n weight += tap(v_Texcoord + d.zy, color);\n weight += tap(v_Texcoord + d.xw, color);\n weight += tap(v_Texcoord + d.zw, color);\n color /= weight;\n gl_FragColor = encodeHDR(color);\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_frag\n@import clay.util.float\nvec4 doBlur(sampler2D targetTexture, vec2 offset) {\n#ifdef BLUR_COC\n float cocSum = 0.0;\n#else\n vec4 color = vec4(0.0);\n#endif\n float weightSum = 0.0;\n float kernelWeight = 1.0 / float(KERNEL_SIZE);\n for (int i = 0; i < KERNEL_SIZE; i++) {\n vec2 coord = v_Texcoord + offset * float(i);\n float w = kernelWeight;\n#ifdef BLUR_COC\n float fCoc = decodeFloat(texture2D(targetTexture, coord)) * 2.0 - 1.0;\n cocSum += clamp(fCoc, -1.0, 0.0) * w;\n#else\n float fCoc = decodeFloat(texture2D(coc, coord)) * 2.0 - 1.0;\n vec4 texel = texture2D(targetTexture, coord);\n #if !defined(BLUR_NEARFIELD)\n w *= abs(fCoc);\n #endif\n color += decodeHDR(texel) * w;\n#endif\n weightSum += w;\n }\n#ifdef BLUR_COC\n return encodeFloat(clamp(cocSum / weightSum, -1.0, 0.0) * 0.5 + 0.5);\n#else\n return color / weightSum;\n#endif\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_1\n#define KERNEL_SIZE 5\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform float blurSize : 1.0;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.rgbm\n@import clay.compositor.dof.hexagonal_blur_frag\nvoid main()\n{\n vec2 offset = blurSize / textureSize;\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n gl_FragColor = doBlur(texture, vec2(0.0, offset.y));\n#if !defined(BLUR_COC)\n gl_FragColor = encodeHDR(gl_FragColor);\n#endif\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_2\n#define KERNEL_SIZE 5\nuniform sampler2D texture;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform float blurSize : 1.0;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.rgbm\n@import clay.compositor.dof.hexagonal_blur_frag\nvoid main()\n{\n vec2 offset = blurSize / textureSize;\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n offset.y /= 2.0;\n gl_FragColor = doBlur(texture, -offset);\n#if !defined(BLUR_COC)\n gl_FragColor = encodeHDR(gl_FragColor);\n#endif\n}\n@end\n@export clay.compositor.dof.hexagonal_blur_3\n#define KERNEL_SIZE 5\nuniform sampler2D texture1;\nuniform sampler2D texture2;\nuniform sampler2D coc;\nvarying vec2 v_Texcoord;\nuniform float blurSize : 1.0;\nuniform vec2 textureSize : [512.0, 512.0];\n@import clay.util.rgbm\n@import clay.compositor.dof.hexagonal_blur_frag\nvoid main()\n{\n vec2 offset = blurSize / textureSize;\n#if !defined(BLUR_NEARFIELD) && !defined(BLUR_COC)\n offset *= abs(decodeFloat(texture2D(coc, v_Texcoord)) * 2.0 - 1.0);\n#endif\n offset.y /= 2.0;\n vec2 vDownRight = vec2(offset.x, -offset.y);\n vec4 texel1 = doBlur(texture1, -offset);\n vec4 texel2 = doBlur(texture1, vDownRight);\n vec4 texel3 = doBlur(texture2, vDownRight);\n#ifdef BLUR_COC\n float coc1 = decodeFloat(texel1) * 2.0 - 1.0;\n float coc2 = decodeFloat(texel2) * 2.0 - 1.0;\n float coc3 = decodeFloat(texel3) * 2.0 - 1.0;\n gl_FragColor = encodeFloat(\n ((coc1 + coc2 + coc3) / 3.0) * 0.5 + 0.5\n );\n#else\n vec4 color = (texel1 + texel2 + texel3) / 3.0;\n gl_FragColor = encodeHDR(color);\n#endif\n}\n@end\n@export clay.compositor.dof.composite\n#define DEBUG 0\nuniform sampler2D original;\nuniform sampler2D blurred;\nuniform sampler2D nearfield;\nuniform sampler2D coc;\nuniform sampler2D nearcoc;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\n@import clay.util.float\nvoid main()\n{\n vec4 blurredColor = decodeHDR(texture2D(blurred, v_Texcoord));\n vec4 originalColor = decodeHDR(texture2D(original, v_Texcoord));\n float fCoc = decodeFloat(texture2D(coc, v_Texcoord));\n fCoc = abs(fCoc * 2.0 - 1.0);\n float weight = smoothstep(0.0, 1.0, fCoc);\n#ifdef NEARFIELD_ENABLED\n vec4 nearfieldColor = decodeHDR(texture2D(nearfield, v_Texcoord));\n float fNearCoc = decodeFloat(texture2D(nearcoc, v_Texcoord));\n fNearCoc = abs(fNearCoc * 2.0 - 1.0);\n gl_FragColor = encodeHDR(\n mix(\n nearfieldColor, mix(originalColor, blurredColor, weight),\n pow(1.0 - fNearCoc, 4.0)\n )\n );\n#else\n gl_FragColor = encodeHDR(mix(originalColor, blurredColor, weight));\n#endif\n#if DEBUG == 1\n gl_FragColor = vec4(vec3(fCoc), 1.0);\n#elif DEBUG == 2\n gl_FragColor = vec4(vec3(fNearCoc), 1.0);\n#elif DEBUG == 3\n gl_FragColor = encodeHDR(blurredColor);\n#elif DEBUG == 4\n gl_FragColor = encodeHDR(nearfieldColor);\n#endif\n}\n@end"),K.import("@export clay.compositor.lensflare\n#define SAMPLE_NUMBER 8\nuniform sampler2D texture;\nuniform sampler2D lenscolor;\nuniform vec2 textureSize : [512, 512];\nuniform float dispersal : 0.3;\nuniform float haloWidth : 0.4;\nuniform float distortion : 1.0;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nvec4 textureDistorted(\n in vec2 texcoord,\n in vec2 direction,\n in vec3 distortion\n) {\n return vec4(\n decodeHDR(texture2D(texture, texcoord + direction * distortion.r)).r,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.g)).g,\n decodeHDR(texture2D(texture, texcoord + direction * distortion.b)).b,\n 1.0\n );\n}\nvoid main()\n{\n vec2 texcoord = -v_Texcoord + vec2(1.0); vec2 textureOffset = 1.0 / textureSize;\n vec2 ghostVec = (vec2(0.5) - texcoord) * dispersal;\n vec2 haloVec = normalize(ghostVec) * haloWidth;\n vec3 distortion = vec3(-textureOffset.x * distortion, 0.0, textureOffset.x * distortion);\n vec4 result = vec4(0.0);\n for (int i = 0; i < SAMPLE_NUMBER; i++)\n {\n vec2 offset = fract(texcoord + ghostVec * float(i));\n float weight = length(vec2(0.5) - offset) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n }\n result *= texture2D(lenscolor, vec2(length(vec2(0.5) - texcoord)) / length(vec2(0.5)));\n float weight = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));\n weight = pow(1.0 - weight, 10.0);\n vec2 offset = fract(texcoord + haloVec);\n result += textureDistorted(offset, normalize(ghostVec), distortion) * weight;\n gl_FragColor = result;\n}\n@end"),K.import("@export clay.compositor.blend\n#define SHADER_NAME blend\n#ifdef TEXTURE1_ENABLED\nuniform sampler2D texture1;\nuniform float weight1 : 1.0;\n#endif\n#ifdef TEXTURE2_ENABLED\nuniform sampler2D texture2;\nuniform float weight2 : 1.0;\n#endif\n#ifdef TEXTURE3_ENABLED\nuniform sampler2D texture3;\nuniform float weight3 : 1.0;\n#endif\n#ifdef TEXTURE4_ENABLED\nuniform sampler2D texture4;\nuniform float weight4 : 1.0;\n#endif\n#ifdef TEXTURE5_ENABLED\nuniform sampler2D texture5;\nuniform float weight5 : 1.0;\n#endif\n#ifdef TEXTURE6_ENABLED\nuniform sampler2D texture6;\nuniform float weight6 : 1.0;\n#endif\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nvoid main()\n{\n vec4 tex = vec4(0.0);\n#ifdef TEXTURE1_ENABLED\n tex += decodeHDR(texture2D(texture1, v_Texcoord)) * weight1;\n#endif\n#ifdef TEXTURE2_ENABLED\n tex += decodeHDR(texture2D(texture2, v_Texcoord)) * weight2;\n#endif\n#ifdef TEXTURE3_ENABLED\n tex += decodeHDR(texture2D(texture3, v_Texcoord)) * weight3;\n#endif\n#ifdef TEXTURE4_ENABLED\n tex += decodeHDR(texture2D(texture4, v_Texcoord)) * weight4;\n#endif\n#ifdef TEXTURE5_ENABLED\n tex += decodeHDR(texture2D(texture5, v_Texcoord)) * weight5;\n#endif\n#ifdef TEXTURE6_ENABLED\n tex += decodeHDR(texture2D(texture6, v_Texcoord)) * weight6;\n#endif\n gl_FragColor = encodeHDR(tex);\n}\n@end"),K.import("@export clay.compositor.fxaa\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nvarying vec2 v_Texcoord;\n#define FXAA_REDUCE_MIN (1.0/128.0)\n#define FXAA_REDUCE_MUL (1.0/8.0)\n#define FXAA_SPAN_MAX 8.0\n@import clay.util.rgbm\nvoid main()\n{\n vec2 resolution = 1.0 / viewport.zw;\n vec3 rgbNW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbNE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ) ).xyz;\n vec4 rgbaM = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution ) );\n vec3 rgbM = rgbaM.xyz;\n float opacity = rgbaM.w;\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float lumaNW = dot( rgbNW, luma );\n float lumaNE = dot( rgbNE, luma );\n float lumaSW = dot( rgbSW, luma );\n float lumaSE = dot( rgbSE, luma );\n float lumaM = dot( rgbM, luma );\n float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\n float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\n float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\n dir = min( vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * resolution;\n vec3 rgbA = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA *= 0.5;\n vec3 rgbB = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * -0.5 ) ).xyz;\n rgbB += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * 0.5 ) ).xyz;\n rgbB *= 0.25;\n rgbB += rgbA * 0.5;\n float lumaB = dot( rgbB, luma );\n if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) )\n {\n gl_FragColor = vec4( rgbA, opacity );\n }\n else {\n gl_FragColor = vec4( rgbB, opacity );\n }\n}\n@end"),K.import("@export clay.compositor.fxaa3\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nuniform float subpixel: 0.75;\nuniform float edgeThreshold: 0.125;\nuniform float edgeThresholdMin: 0.0625;\nvarying vec2 v_Texcoord;\n@import clay.util.rgbm\nfloat FxaaLuma(vec4 rgba) { return rgba.y; }\nvec4 FxaaPixelShader(\n vec2 pos\n ,sampler2D tex\n ,vec2 fxaaQualityRcpFrame\n ,float fxaaQualitySubpix\n ,float fxaaQualityEdgeThreshold\n ,float fxaaQualityEdgeThresholdMin\n) {\n vec2 posM;\n posM.x = pos.x;\n posM.y = pos.y;\n vec4 rgbyM = decodeHDR(texture2D(texture, posM, 0.0));\n float lumaS = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 0.0, 1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaE = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 1.0, 0.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaN = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 0.0,-1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaW = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2(-1.0, 0.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float maxSM = max(lumaS, rgbyM.y);\n float minSM = min(lumaS, rgbyM.y);\n float maxESM = max(lumaE, maxSM);\n float minESM = min(lumaE, minSM);\n float maxWN = max(lumaN, lumaW);\n float minWN = min(lumaN, lumaW);\n float rangeMax = max(maxWN, maxESM);\n float rangeMin = min(minWN, minESM);\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\n float range = rangeMax - rangeMin;\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\n bool earlyExit = range < rangeMaxClamped;\n if(earlyExit) return rgbyM;\n float lumaNW = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2(-1.0,-1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaSE = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 1.0, 1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaNE = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2( 1.0,-1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaSW = FxaaLuma(decodeHDR(texture2D(texture, posM + (vec2(-1.0, 1.0) * fxaaQualityRcpFrame.xy), 0.0)));\n float lumaNS = lumaN + lumaS;\n float lumaWE = lumaW + lumaE;\n float subpixRcpRange = 1.0/range;\n float subpixNSWE = lumaNS + lumaWE;\n float edgeHorz1 = (-2.0 * rgbyM.y) + lumaNS;\n float edgeVert1 = (-2.0 * rgbyM.y) + lumaWE;\n float lumaNESE = lumaNE + lumaSE;\n float lumaNWNE = lumaNW + lumaNE;\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\n float lumaNWSW = lumaNW + lumaSW;\n float lumaSWSE = lumaSW + lumaSE;\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\n float edgeVert = abs(edgeVert3) + edgeVert4;\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\n float lengthSign = fxaaQualityRcpFrame.x;\n bool horzSpan = edgeHorz >= edgeVert;\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\n if(!horzSpan) lumaN = lumaW;\n if(!horzSpan) lumaS = lumaE;\n if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\n float subpixB = (subpixA * (1.0/12.0)) - rgbyM.y;\n float gradientN = lumaN - rgbyM.y;\n float gradientS = lumaS - rgbyM.y;\n float lumaNN = lumaN + rgbyM.y;\n float lumaSS = lumaS + rgbyM.y;\n bool pairN = abs(gradientN) >= abs(gradientS);\n float gradient = max(abs(gradientN), abs(gradientS));\n if(pairN) lengthSign = -lengthSign;\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\n vec2 posB;\n posB.x = posM.x;\n posB.y = posM.y;\n vec2 offNP;\n offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n if(!horzSpan) posB.x += lengthSign * 0.5;\n if( horzSpan) posB.y += lengthSign * 0.5;\n vec2 posN;\n posN.x = posB.x - offNP.x * 1.0;\n posN.y = posB.y - offNP.y * 1.0;\n vec2 posP;\n posP.x = posB.x + offNP.x * 1.0;\n posP.y = posB.y + offNP.y * 1.0;\n float subpixD = ((-2.0)*subpixC) + 3.0;\n float lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN, 0.0)));\n float subpixE = subpixC * subpixC;\n float lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP, 0.0)));\n if(!pairN) lumaNN = lumaSS;\n float gradientScaled = gradient * 1.0/4.0;\n float lumaMM = rgbyM.y - lumaNN * 0.5;\n float subpixF = subpixD * subpixE;\n bool lumaMLTZero = lumaMM < 0.0;\n lumaEndN -= lumaNN * 0.5;\n lumaEndP -= lumaNN * 0.5;\n bool doneN = abs(lumaEndN) >= gradientScaled;\n bool doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 1.5;\n if(!doneN) posN.y -= offNP.y * 1.5;\n bool doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 1.5;\n if(!doneP) posP.y += offNP.y * 1.5;\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN.xy, 0.0)));\n if(!doneP) lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP.xy, 0.0)));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 2.0;\n if(!doneN) posN.y -= offNP.y * 2.0;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 2.0;\n if(!doneP) posP.y += offNP.y * 2.0;\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN.xy, 0.0)));\n if(!doneP) lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP.xy, 0.0)));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 4.0;\n if(!doneN) posN.y -= offNP.y * 4.0;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 4.0;\n if(!doneP) posP.y += offNP.y * 4.0;\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(decodeHDR(texture2D(texture, posN.xy, 0.0)));\n if(!doneP) lumaEndP = FxaaLuma(decodeHDR(texture2D(texture, posP.xy, 0.0)));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * 12.0;\n if(!doneN) posN.y -= offNP.y * 12.0;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * 12.0;\n if(!doneP) posP.y += offNP.y * 12.0;\n }\n }\n }\n float dstN = posM.x - posN.x;\n float dstP = posP.x - posM.x;\n if(!horzSpan) dstN = posM.y - posN.y;\n if(!horzSpan) dstP = posP.y - posM.y;\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\n float spanLength = (dstP + dstN);\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\n float spanLengthRcp = 1.0/spanLength;\n bool directionN = dstN < dstP;\n float dst = min(dstN, dstP);\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\n float subpixG = subpixF * subpixF;\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\n float subpixH = subpixG * fxaaQualitySubpix;\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\n if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\n if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\n return vec4(decodeHDR(texture2D(texture, posM, 0.0)).xyz, rgbyM.y);\n}\nvoid main()\n{\n vec4 color = FxaaPixelShader(\n v_Texcoord,\n texture,\n vec2(1.0) / viewport.zw,\n subpixel,\n edgeThreshold,\n edgeThresholdMin\n );\n gl_FragColor = vec4(color.rgb, 1.0);\n}\n@end");var fi={NORMAL:"normal",POSITION:"position",TEXCOORD_0:"texcoord0",TEXCOORD_1:"texcoord1",WEIGHTS_0:"weight",JOINTS_0:"joint",COLOR_0:"color"},di={5120:We.Int8Array,5121:We.Uint8Array,5122:We.Int16Array,5123:We.Uint16Array,5125:We.Uint32Array,5126:We.Float32Array},mi={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},pi=Pe.extend({rootNode:null,rootPath:null,textureRootPath:null,bufferRootPath:null,shader:"clay.standard",useStandardMaterial:!1,includeCamera:!0,includeAnimation:!0,includeMesh:!0,includeTexture:!0,crossOrigin:"",textureFlipY:!1,shaderLibrary:null},function(){this.shaderLibrary||(this.shaderLibrary=Hn.createLibrary())},{load:function(t){var e=this,r=t.endsWith(".glb");null==this.rootPath&&(this.rootPath=t.slice(0,t.lastIndexOf("/"))),Kn.get({url:t,onprogress:function(t,r,n){e.trigger("progress",t,r,n)},onerror:function(t){e.trigger("error",t)},responseType:r?"arraybuffer":"text",onload:function(t){r?e.parseBinary(t):e.parse(JSON.parse(t))}})},parseBinary:function(t){var e=new Uint32Array(t,0,4);if(1179937895!==e[0])return void this.trigger("error","Invalid glTF binary format: Invalid header");if(e[0]<2)return void this.trigger("error","Only glTF2.0 is supported.");for(var r,n=new DataView(t,12),i=[],a=0;a=r.COLOR_ATTACHMENT0&&a<=r.COLOR_ATTACHMENT0+8&&i.push(a);n.drawBuffersEXT(i)}}this.trigger("beforerender",this,t);var o=this.clearDepth?r.DEPTH_BUFFER_BIT:0;if(r.depthMask(!0),this.clearColor){o|=r.COLOR_BUFFER_BIT,r.colorMask(!0,!0,!0,!0);var s=this.clearColor;Array.isArray(s)&&r.clearColor(s[0],s[1],s[2],s[3])}r.clear(o),this.blendWithPrevious?(r.enable(r.BLEND),this.material.transparent=!0):(r.disable(r.BLEND),this.material.transparent=!1),this.renderQuad(t),this.trigger("afterrender",this,t),e&&this.unbind(t,e)},renderQuad:function(t){wi.material=this.material,t.renderPass([wi],Mi)},dispose:function(t){}});K.import(hi);var Ni=jn.extend(function(){var t=new K({vertex:K.source("clay.skybox.vertex"),fragment:K.source("clay.skybox.fragment")}),e=new vr({shader:t,depthMask:!1});return{scene:null,geometry:new Cn,material:e,environmentMap:null,culling:!1}},function(){var t=this.scene;t&&this.attachScene(t),this.environmentMap&&this.setEnvironmentMap(this.environmentMap)},{attachScene:function(t){this.scene&&this.detachScene(),t.skybox=this,this.scene=t,t.on("beforerender",this._beforeRenderScene,this)},detachScene:function(){this.scene&&(this.scene.off("beforerender",this._beforeRenderScene),this.scene.skybox=null),this.scene=null},dispose:function(t){this.detachScene(),this.geometry.dispose(t)},setEnvironmentMap:function(t){this.material.set("environmentMap",t)},getEnvironmentMap:function(){return this.material.get("environmentMap")},_beforeRenderScene:function(t,e,r){this.renderSkybox(t,r)},renderSkybox:function(t,e){this.position.copy(e.getWorldPosition()),this.update(),t.gl.disable(t.gl.BLEND),this.material.get("lod")>0?this.material.define("fragment","LOD"):this.material.undefine("fragment","LOD"),t.renderPass([this],e)}}),Ri=["px","nx","py","ny","pz","nz"],Li=Pe.extend(function(){var t={position:new Xe,far:1e3,near:.1,texture:null,shadowMapPass:null},e=t._cameras={px:new qn({fov:90}),nx:new qn({fov:90}),py:new qn({fov:90}),ny:new qn({fov:90}),pz:new qn({fov:90}),nz:new qn({fov:90})};return e.px.lookAt(Xe.POSITIVE_X,Xe.NEGATIVE_Y),e.nx.lookAt(Xe.NEGATIVE_X,Xe.NEGATIVE_Y),e.py.lookAt(Xe.POSITIVE_Y,Xe.POSITIVE_Z),e.ny.lookAt(Xe.NEGATIVE_Y,Xe.NEGATIVE_Z),e.pz.lookAt(Xe.POSITIVE_Z,Xe.NEGATIVE_Y),e.nz.lookAt(Xe.NEGATIVE_Z,Xe.NEGATIVE_Y),t._frameBuffer=new Ai,t},{getCamera:function(t){return this._cameras[t]},render:function(t,e,r){var n=t.gl;r||e.update();for(var i=this.texture.width,a=2*Math.atan(i/(i-.5))/Math.PI*180,o=0;o<6;o++){var s=Ri[o],u=this._cameras[s];if(Xe.copy(u.position,this.position),u.far=this.far,u.near=this.near,u.fov=a,this.shadowMapPass){u.update();var l=e.getBoundingBox();l.applyTransform(u.viewMatrix),e.viewBoundingBoxLastFrame.copy(l),this.shadowMapPass.render(t,e,u,!0)}this._frameBuffer.attach(this.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_CUBE_MAP_POSITIVE_X+o),this._frameBuffer.bind(t),t.render(e,u,!0),this._frameBuffer.unbind(t)}},dispose:function(t){this._frameBuffer.dispose(t)}});K.import(ci);var Pi=jn.extend(function(){var t=new K(K.source("clay.basic.vertex"),K.source("clay.basic.fragment")),e=new vr({shader:t,depthMask:!1});return e.enableTexture("diffuseMap"),{scene:null,geometry:new Nn({widthSegments:30,heightSegments:30}),material:e,environmentMap:null,culling:!1}},function(){var t=this.scene;t&&this.attachScene(t),this.environmentMap&&this.setEnvironmentMap(this.environmentMap)},{attachScene:function(t){this.scene&&this.detachScene(),t.skydome=this,this.scene=t,t.on("beforerender",this._beforeRenderScene,this)},detachScene:function(){this.scene&&(this.scene.off("beforerender",this._beforeRenderScene),this.scene.skydome=null),this.scene=null},_beforeRenderScene:function(t,e,r){this.position.copy(r.getWorldPosition()),this.update(),t.renderPass([this],r)},setEnvironmentMap:function(t){this.material.set("diffuseMap",t)},getEnvironmentMap:function(){return this.material.get("diffuseMap")},dispose:function(t){this.detachScene(),this.geometry.dispose(t)}}),Di=ft("DXT1"),Ii=ft("DXT3"),Oi=ft("DXT5"),Bi={parse:function(t,e){var r=new Int32Array(t,0,31);if(542327876!==r[0])return null;if(4&!r(20))return null;var n,i,a=r(21),o=r[4],s=r[3],u=512&r[28],l=131072&r[2];switch(a){case Di:n=8,i=lr.COMPRESSED_RGB_S3TC_DXT1_EXT;break;case Ii:n=16,i=lr.COMPRESSED_RGBA_S3TC_DXT3_EXT;break;case Oi:n=16,i=lr.COMPRESSED_RGBA_S3TC_DXT5_EXT;break;default:return null}var c=r[1]+4,h=u?6:1,f=1;l&&(f=Math.max(1,r[7]));for(var d=[],m=0;m=i)){a+=2;for(var o="";a20)return console.warn("Given image is not a height map"),t}var f,d,m,p;u%(4*n)==0?(f=o.data[u],m=o.data[u+4]):u%(4*n)==4*(n-1)?(f=o.data[u-4],m=o.data[u]):(f=o.data[u-4],m=o.data[u+4]),u<4*n?(d=o.data[u],p=o.data[u+4*n]):u>n*(i-1)*4?(d=o.data[u-4*n],p=o.data[u]):(d=o.data[u-4*n],p=o.data[u+4*n]),s.data[u]=f-m+127,s.data[u+1]=d-p+127,s.data[u+2]=255,s.data[u+3]=255}return a.putImageData(s,0,0),r},isHeightImage:function(t,e,r){if(!t||!t.width||!t.height)return!1;var n=document.createElement("canvas"),i=n.getContext("2d"),a=e||32;r=r||20,n.width=n.height=a,i.drawImage(t,0,0,a,a);for(var o=i.getImageData(0,0,a,a),s=0;sr)return!1}return!0},_fetchTexture:function(t,e,r){Kn.get({url:t,responseType:"arraybuffer",onload:e,onerror:r})},createChessboard:function(t,e,r,n){t=t||512,e=e||64,r=r||"black",n=n||"white";var i=Math.ceil(t/e),a=document.createElement("canvas");a.width=t,a.height=t;var o=a.getContext("2d");o.fillStyle=n,o.fillRect(0,0,t,t),o.fillStyle=r;for(var s=0;s 0.0) {\n prefilteredColor += decodeHDR(textureCube(environmentMap, L)).rgb * NoL;\n totalWeight += NoL;\n }\n }\n gl_FragColor = encodeHDR(vec4(prefilteredColor / totalWeight, 1.0));\n}\n"})});h.set("normalDistribution",n),r.encodeRGBM&&h.define("fragment","RGBM_ENCODE"),r.decodeRGBM&&h.define("fragment","RGBM_DECODE");var f,d=new yn;if("texture2D"===e.textureType){var m=new Bn({width:a,height:o,type:s===lr.FLOAT?lr.HALF_FLOAT:s});Gi.panoramaToCubeMap(t,e,m,{encodeRGBM:r.decodeRGBM}),e=m}f=new Ni({scene:d,material:h}),f.material.set("environmentMap",e);var p=new Li({texture:u});r.encodeRGBM&&(s=u.type=lr.UNSIGNED_BYTE);for(var _=new Dn({width:a,height:o,type:s}),g=new Ai({depthBuffer:!1}),v=We[s===lr.UNSIGNED_BYTE?"Uint8Array":"Float32Array"],y=0;y 0.0) {\n float G = G_Smith(roughness, NoV, NoL);\n float G_Vis = G * VoH / (NoH * NoV);\n float Fc = pow(1.0 - VoH, 5.0);\n A += (1.0 - Fc) * G_Vis;\n B += Fc * G_Vis;\n }\n }\n gl_FragColor = vec4(vec2(A, B) / fSampleNumber, 0.0, 1.0);\n}\n"}),i=new Dn({width:512,height:256,type:lr.HALF_FLOAT,minFilter:lr.NEAREST,magFilter:lr.NEAREST,useMipmap:!1});return n.setUniform("normalDistribution",e),n.setUniform("viewportSize",[512,256]),n.attachOutput(i),n.render(t,r),r.dispose(t),i},Vi.generateNormalDistribution=function(t,e){for(var t=t||256,e=e||1024,r=new Dn({width:t,height:e,type:lr.FLOAT,minFilter:lr.NEAREST,magFilter:lr.NEAREST,useMipmap:!1}),n=new Float32Array(e*t*4),i=0;i>>16)>>>0;o=((1431655765&o)<<1|(2863311530&o)>>>1)>>>0,o=((858993459&o)<<2|(3435973836&o)>>>2)>>>0,o=((252645135&o)<<4|(4042322160&o)>>>4)>>>0,o=(((16711935&o)<<8|(4278255360&o)>>>8)>>>0)/4294967296;for(var s=0;s= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end");var Ji=Pe.extend(function(){return{softShadow:Ji.PCF,shadowBlur:1,lightFrustumBias:"auto",kernelPCF:new Float32Array([1,0,1,1,-1,1,0,1,-1,0,-1,-1,1,-1,0,-1]),precision:"mediump",_lastRenderNotCastShadow:!1,_frameBuffer:new Ai,_textures:{},_shadowMapNumber:{POINT_LIGHT:0,DIRECTIONAL_LIGHT:0,SPOT_LIGHT:0},_depthMaterials:{},_distanceMaterials:{},_opaqueCasters:[],_receivers:[],_lightsCastShadow:[],_lightCameras:{},_lightMaterials:{},_texturePool:new ji}},function(){this._gaussianPassH=new Ci({fragment:K.source("clay.compositor.gaussian_blur")}),this._gaussianPassV=new Ci({fragment:K.source("clay.compositor.gaussian_blur")}),this._gaussianPassH.setUniform("blurSize",this.shadowBlur),this._gaussianPassH.setUniform("blurDir",0),this._gaussianPassV.setUniform("blurSize",this.shadowBlur),this._gaussianPassV.setUniform("blurDir",1),this._outputDepthPass=new Ci({fragment:K.source("clay.sm.debug_depth")})},{render:function(t,e,r,n){r||(r=e.getMainCamera()),this.trigger("beforerender",this,t,e,r),this._renderShadowPass(t,e,r,n),this.trigger("afterrender",this,t,e,r)},renderDebug:function(t,e){t.saveClear();var r=t.viewport,n=0,i=e||r.width/4,a=i;this.softShadow===Ji.VSM?this._outputDepthPass.material.define("fragment","USE_VSM"):this._outputDepthPass.material.undefine("fragment","USE_VSM");for(var o in this._textures){var s=this._textures[o];t.setViewport(n,0,i*s.width/s.height,a),this._outputDepthPass.setUniform("depthMap",s),this._outputDepthPass.render(t),n+=i*s.width/s.height}t.setViewport(r),t.restoreClear()},_updateCasterAndReceiver:function(t,e){if(e.castShadow&&this._opaqueCasters.push(e),e.receiveShadow?(this._receivers.push(e),e.material.set("shadowEnabled",1),e.material.set("pcfKernel",this.kernelPCF)):e.material.set("shadowEnabled",0),!e.material.shader&&e.material.updateShader&&e.material.updateShader(t),this.softShadow===Ji.VSM)e.material.define("fragment","USE_VSM"),e.material.undefine("fragment","PCF_KERNEL_SIZE");else{e.material.undefine("fragment","USE_VSM");var r=this.kernelPCF;r&&r.length?e.material.define("fragment","PCF_KERNEL_SIZE",r.length/2):e.material.undefine("fragment","PCF_KERNEL_SIZE")}},_update:function(t,e){for(var r=0;r4){console.warn("Support at most 4 cascade");continue}p.shadowCascade>1&&(s=p.shadowCascade),this.renderDirectionalLightShadow(t,e,r,p,this._opaqueCasters,f,h,c)}else"SPOT_LIGHT"===p.type?this.renderSpotLightShadow(t,e,p,this._opaqueCasters,l,u):"POINT_LIGHT"===p.type&&this.renderPointLightShadow(t,e,p,this._opaqueCasters,d);this._shadowMapNumber[p.type]++}for(var _ in this._shadowMapNumber)for(var g=this._shadowMapNumber[_],v=_+"_SHADOWMAP_COUNT",m=0;m0?x.define("fragment",v,g):x.isDefined("fragment",v)&&x.undefine("fragment",v))}for(var m=0;m0){var E=c.map(i);if(T.directionalLightShadowMaps={value:c,type:"tv"},T.directionalLightMatrices={value:h,type:"m4v"},T.directionalLightShadowMapSizes={value:E,type:"1fv"},s){var b=f.slice(),A=f.slice();b.pop(),A.shift(),b.reverse(),A.reverse(),h.reverse(),T.shadowCascadeClipsNear={value:b,type:"1fv"},T.shadowCascadeClipsFar={value:A,type:"1fv"}}}if(u.length>0){var S=u.map(i),T=e.shadowUniforms;T.spotLightShadowMaps={value:u,type:"tv"},T.spotLightMatrices={value:l,type:"m4v"},T.spotLightShadowMapSizes={value:S,type:"1fv"}}d.length>0&&(T.pointLightShadowMaps={value:d,type:"tv"})}},renderDirectionalLightShadow:function(){var t=new fn,e=new ar,r=new tr,n=new ar,i=new ar,a=new ar,o=new ar;return function(s,u,l,c,h,f,d,m){var p=this._getDepthMaterial(c),_={getMaterial:function(t){return t.shadowDepthMaterial||p},sortCompare:Xr.opaqueSortCompare};if(!u.viewBoundingBoxLastFrame.isFinite()){var g=u.getBoundingBox();u.viewBoundingBoxLastFrame.copy(g).applyTransform(l.viewMatrix)}var v=Math.min(-u.viewBoundingBoxLastFrame.min.z,l.far),y=Math.max(-u.viewBoundingBoxLastFrame.max.z,l.near),x=this._getDirectionalLightCamera(c,u,l),T=a.array;o.copy(x.projectionMatrix),Ki.invert(i.array,x.worldTransform.array),Ki.multiply(i.array,i.array,l.worldTransform.array),Ki.multiply(T,o.array,i.array);for(var E=[],b=l instanceof qn,A=(l.near+l.far)/(l.near-l.far),S=2*l.near*l.far/(l.near-l.far),w=0;w<=c.shadowCascade;w++){var M=y*Math.pow(v/y,w/c.shadowCascade),C=y+(v-y)*w/c.shadowCascade,N=M*c.cascadeSplitLogFactor+C*(1-c.cascadeSplitLogFactor);E.push(N),f.push(-(-N*A+S)/-N)}var R=this._getTexture(c,c.shadowCascade);m.push(R);var L=s.viewport,P=s.gl;this._frameBuffer.attach(R),this._frameBuffer.bind(s),P.clear(P.COLOR_BUFFER_BIT|P.DEPTH_BUFFER_BIT);for(var w=0;w=0&&x[v]>1e-4&&(Qi.transformMat4(b,y,_[T[v]]),Qi.scaleAndAdd(E,E,b,x[v]));A.set(g,E)}}for(var g=0;g 0.0;\n#endif\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n #ifdef FIRST_PASS\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n if (hasTangent) {\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n }\n #endif\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n#ifdef FIRST_PASS\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n if (hasTangent) {\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n }\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n#endif\n}\n@end\n@export clay.deferred.gbuffer1.fragment\nuniform mat4 viewInverse : VIEWINVERSE;\nuniform float glossiness;\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nuniform sampler2D normalMap;\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\nuniform sampler2D roughGlossMap;\nuniform bool useRoughGlossMap;\nuniform bool useRoughness;\nuniform bool doubleSided;\nuniform int roughGlossChannel: 0;\nfloat indexingTexel(in vec4 texel, in int idx) {\n if (idx == 3) return texel.a;\n else if (idx == 1) return texel.g;\n else if (idx == 2) return texel.b;\n else return texel.r;\n}\nvoid main()\n{\n vec3 N = v_Normal;\n if (doubleSided) {\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = eyePos - v_WorldPosition;\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n }\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, v_Texcoord).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = normalTexel * 2.0 - 1.0;\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n N = normalize(tbn * N);\n }\n }\n gl_FragColor.rgb = (N + 1.0) * 0.5;\n float g = glossiness;\n if (useRoughGlossMap) {\n float g2 = indexingTexel(texture2D(roughGlossMap, v_Texcoord), roughGlossChannel);\n if (useRoughness) {\n g2 = 1.0 - g2;\n }\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n }\n gl_FragColor.a = g + 0.005;\n}\n@end\n@export clay.deferred.gbuffer2.fragment\nuniform sampler2D diffuseMap;\nuniform sampler2D metalnessMap;\nuniform vec3 color;\nuniform float metalness;\nuniform bool useMetalnessMap;\nuniform bool linear;\nvarying vec2 v_Texcoord;\n@import clay.util.srgb\nvoid main ()\n{\n float m = metalness;\n if (useMetalnessMap) {\n vec4 metalnessTexel = texture2D(metalnessMap, v_Texcoord);\n m = clamp(metalnessTexel.r + (m * 2.0 - 1.0), 0.0, 1.0);\n }\n vec4 texel = texture2D(diffuseMap, v_Texcoord);\n if (linear) {\n texel = sRGBToLinear(texel);\n }\n gl_FragColor.rgb = texel.rgb * color;\n gl_FragColor.a = m + 0.005;\n}\n@end\n@export clay.deferred.gbuffer.debug\n@import clay.deferred.chunk.light_head\nuniform int debug: 0;\nvoid main ()\n{\n @import clay.deferred.chunk.gbuffer_read\n if (debug == 0) {\n gl_FragColor = vec4(N, 1.0);\n }\n else if (debug == 1) {\n gl_FragColor = vec4(vec3(z), 1.0);\n }\n else if (debug == 2) {\n gl_FragColor = vec4(position, 1.0);\n }\n else if (debug == 3) {\n gl_FragColor = vec4(vec3(glossiness), 1.0);\n }\n else if (debug == 4) {\n gl_FragColor = vec4(vec3(metalness), 1.0);\n }\n else {\n gl_FragColor = vec4(albedo, 1.0);\n }\n}\n@end"), +K.import("@export clay.deferred.chunk.light_head\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture2;\nuniform sampler2D gBufferTexture3;\nuniform vec2 windowSize: WINDOW_SIZE;\nuniform vec4 viewport: VIEWPORT;\nuniform mat4 viewProjectionInv;\n#ifdef DEPTH_ENCODED\n@import clay.util.decode_float\n#endif\n@end\n@export clay.deferred.chunk.gbuffer_read\n vec2 uv = gl_FragCoord.xy / windowSize;\n vec2 uv2 = (gl_FragCoord.xy - viewport.xy) / viewport.zw;\n vec4 texel1 = texture2D(gBufferTexture1, uv);\n vec4 texel3 = texture2D(gBufferTexture3, uv);\n if (dot(texel1.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n float glossiness = texel1.a;\n float metalness = texel3.a;\n vec3 N = texel1.rgb * 2.0 - 1.0;\n float z = texture2D(gBufferTexture2, uv).r * 2.0 - 1.0;\n vec2 xy = uv2 * 2.0 - 1.0;\n vec4 projectedPos = vec4(xy, z, 1.0);\n vec4 p4 = viewProjectionInv * projectedPos;\n vec3 position = p4.xyz / p4.w;\n vec3 albedo = texel3.rgb;\n vec3 diffuseColor = albedo * (1.0 - metalness);\n vec3 specularColor = mix(vec3(0.04), albedo, metalness);\n@end\n@export clay.deferred.chunk.light_equation\nfloat D_Phong(in float g, in float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(in float g, in float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (3.1415926 * tmp * tmp);\n}\nvec3 F_Schlick(in float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nvec3 lightEquation(\n in vec3 lightColor, in vec3 diffuseColor, in vec3 specularColor,\n in float ndl, in float ndh, in float ndv, in float g\n)\n{\n return ndl * lightColor\n * (diffuseColor + D_Phong(g, ndh) * F_Schlick(ndv, specularColor));\n}\n@end");var ia=Pe.extend(function(){return{enableTargetTexture1:!0,enableTargetTexture2:!0,enableTargetTexture3:!0,renderTransparent:!1,_renderList:[],_gBufferTex1:new Dn({minFilter:lr.NEAREST,magFilter:lr.NEAREST,type:lr.HALF_FLOAT}),_gBufferTex2:new Dn({minFilter:lr.NEAREST,magFilter:lr.NEAREST,format:lr.DEPTH_STENCIL,type:lr.UNSIGNED_INT_24_8_WEBGL}),_gBufferTex3:new Dn({minFilter:lr.NEAREST,magFilter:lr.NEAREST}),_defaultNormalMap:new Dn({image:Tt("#000")}),_defaultRoughnessMap:new Dn({image:Tt("#fff")}),_defaultMetalnessMap:new Dn({image:Tt("#fff")}),_defaultDiffuseMap:new Dn({image:Tt("#fff")}),_frameBuffer:new Ai,_gBufferMaterial1:new vr({shader:new K(K.source("clay.deferred.gbuffer.vertex"),K.source("clay.deferred.gbuffer1.fragment")),vertexDefines:{FIRST_PASS:null},fragmentDefines:{FIRST_PASS:null}}),_gBufferMaterial2:new vr({shader:new K(K.source("clay.deferred.gbuffer.vertex"),K.source("clay.deferred.gbuffer2.fragment"))}),_debugPass:new Ci({fragment:K.source("clay.deferred.gbuffer.debug")})}},{resize:function(t,e){this._gBufferTex1.width===t&&this._gBufferTex1.height===e||(this._gBufferTex1.width=t,this._gBufferTex1.height=e,this._gBufferTex2.width=t,this._gBufferTex2.height=e,this._gBufferTex3.width=t,this._gBufferTex3.height=e)},setViewport:function(t,e,r,n,i){var a;a="object"==typeof t?t:{x:t,y:e,width:r,height:n,devicePixelRatio:i||1},this._frameBuffer.viewport=a},getViewport:function(){return this._frameBuffer.viewport?this._frameBuffer.viewport:{x:0,y:0,width:this._gBufferTex1.width,height:this._gBufferTex1.height,devicePixelRatio:1}},update:function(t,e,r){for(var n=t.gl,i=this._frameBuffer,a=i.viewport,o=e.opaqueList,s=e.transparentList,u=0,l=this._renderList,c=0;c= shadowCascadeClipsNear[_idx_] &&\n z <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n lightShadowMap, lightMatrices[_idx_], position, lightShadowMapSize,\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n }\n }}\n gl_FragColor.rgb *= shadowContrib;\n#endif\n gl_FragColor.a = 1.0;\n}\n@end\n"),K.import("@export clay.deferred.ambient_light\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture3;\nuniform vec3 lightColor;\nuniform vec2 windowSize: WINDOW_SIZE;\nvoid main()\n{\n vec2 uv = gl_FragCoord.xy / windowSize;\n vec4 texel1 = texture2D(gBufferTexture1, uv);\n if (dot(texel1.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n vec3 albedo = texture2D(gBufferTexture3, uv).rgb;\n gl_FragColor.rgb = lightColor * albedo;\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.ambient_sh_light\nuniform sampler2D gBufferTexture1;\nuniform sampler2D gBufferTexture3;\nuniform vec3 lightColor;\nuniform vec3 lightCoefficients[9];\nuniform vec2 windowSize: WINDOW_SIZE;\nvec3 calcAmbientSHLight(vec3 N) {\n return lightCoefficients[0]\n + lightCoefficients[1] * N.x\n + lightCoefficients[2] * N.y\n + lightCoefficients[3] * N.z\n + lightCoefficients[4] * N.x * N.z\n + lightCoefficients[5] * N.z * N.y\n + lightCoefficients[6] * N.y * N.x\n + lightCoefficients[7] * (3.0 * N.z * N.z - 1.0)\n + lightCoefficients[8] * (N.x * N.x - N.y * N.y);\n}\nvoid main()\n{\n vec2 uv = gl_FragCoord.xy / windowSize;\n vec4 texel1 = texture2D(gBufferTexture1, uv);\n if (dot(texel1.rgb, vec3(1.0)) == 0.0) {\n discard;\n }\n vec3 N = texel1.rgb * 2.0 - 1.0;\n vec3 albedo = texture2D(gBufferTexture3, uv).rgb;\n gl_FragColor.rgb = lightColor * albedo * calcAmbientSHLight(N);\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.ambient_cubemap_light\n@import clay.deferred.chunk.light_head\nuniform vec3 lightColor;\nuniform samplerCube lightCubemap;\nuniform sampler2D brdfLookup;\nuniform vec3 eyePosition;\n@import clay.util.rgbm\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 V = normalize(eyePosition - position);\n vec3 L = reflect(-V, N);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float rough = clamp(1.0 - glossiness, 0.0, 1.0);\n float bias = rough * 5.0;\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n vec3 envWeight = specularColor * brdfParam.x + brdfParam.y;\n vec3 envTexel = RGBMDecode(textureCubeLodEXT(lightCubemap, L, bias), 51.5);\n gl_FragColor.rgb = lightColor * envTexel * envWeight;\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.point_light\n@import clay.deferred.chunk.light_head\n@import clay.util.calculate_attenuation\n@import clay.deferred.chunk.light_equation\nuniform vec3 lightPosition;\nuniform vec3 lightColor;\nuniform float lightRange;\nuniform vec3 eyePosition;\n#ifdef SHADOWMAP_ENABLED\nuniform samplerCube lightShadowMap;\nuniform float lightShadowMapSize;\n#endif\nvarying vec3 v_Position;\n@import clay.plugin.shadow_map_common\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 L = lightPosition - position;\n vec3 V = normalize(eyePosition - position);\n float dist = length(L);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float attenuation = lightAttenuation(dist, lightRange);\n gl_FragColor.rgb = attenuation * lightEquation(\n lightColor, diffuseColor, specularColor, ndl, ndh, ndv, glossiness\n );\n#ifdef SHADOWMAP_ENABLED\n float shadowContrib = computeShadowContribOmni(\n lightShadowMap, -L * dist, lightRange\n );\n gl_FragColor.rgb *= clamp(shadowContrib, 0.0, 1.0);\n#endif\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.sphere_light\n@import clay.deferred.chunk.light_head\n@import clay.util.calculate_attenuation\n@import clay.deferred.chunk.light_equation\nuniform vec3 lightPosition;\nuniform vec3 lightColor;\nuniform float lightRange;\nuniform float lightRadius;\nuniform vec3 eyePosition;\nvarying vec3 v_Position;\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 L = lightPosition - position;\n vec3 V = normalize(eyePosition - position);\n float dist = length(L);\n vec3 R = reflect(V, N);\n float tmp = dot(L, R);\n vec3 cToR = tmp * R - L;\n float d = length(cToR);\n L = L + cToR * clamp(lightRadius / d, 0.0, 1.0);\n L = normalize(L);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n float attenuation = lightAttenuation(dist, lightRange);\n gl_FragColor.rgb = lightColor * ndl * attenuation;\n glossiness = clamp(glossiness - lightRadius / 2.0 / dist, 0.0, 1.0);\n gl_FragColor.rgb = attenuation * lightEquation(\n lightColor, diffuseColor, specularColor, ndl, ndh, ndv, glossiness\n );\n gl_FragColor.a = 1.0;\n}\n@end"),K.import("@export clay.deferred.tube_light\n@import clay.deferred.chunk.light_head\n@import clay.util.calculate_attenuation\n@import clay.deferred.chunk.light_equation\nuniform vec3 lightPosition;\nuniform vec3 lightColor;\nuniform float lightRange;\nuniform vec3 lightExtend;\nuniform vec3 eyePosition;\nvarying vec3 v_Position;\nvoid main()\n{\n @import clay.deferred.chunk.gbuffer_read\n vec3 L = lightPosition - position;\n vec3 V = normalize(eyePosition - position);\n vec3 R = reflect(V, N);\n vec3 L0 = lightPosition - lightExtend - position;\n vec3 L1 = lightPosition + lightExtend - position;\n vec3 LD = L1 - L0;\n float len0 = length(L0);\n float len1 = length(L1);\n float irra = 2.0 * clamp(dot(N, L0) / (2.0 * len0) + dot(N, L1) / (2.0 * len1), 0.0, 1.0);\n float LDDotR = dot(R, LD);\n float t = (LDDotR * dot(R, L0) - dot(L0, LD)) / (dot(LD, LD) - LDDotR * LDDotR);\n t = clamp(t, 0.0, 1.0);\n L = L0 + t * LD;\n float dist = length(L);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n glossiness = clamp(glossiness - 0.0 / 2.0 / dist, 0.0, 1.0);\n gl_FragColor.rgb = lightColor * irra * lightAttenuation(dist, lightRange)\n * (diffuseColor + D_Phong(glossiness, ndh) * F_Schlick(ndv, specularColor));\n gl_FragColor.a = 1.0;\n}\n@end"),K.import(Hr);var aa=Pe.extend(function(){var t=K.source("clay.compositor.vertex"),e=K.source("clay.deferred.light_volume.vertex"),r=new K(t,K.source("clay.deferred.directional_light")),n=function(t){t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE)},i=function(t){return new vr({shader:t,blend:n,transparent:!0,depthMask:!1})},a=function(t){return new K(e,K.source("clay.deferred."+t))},o=new ra({capSegments:10}),s=new ar;s.rotateX(Math.PI/2).translate(new Xe(0,-1,0)),o.applyTransform(s);var u=new na({capSegments:10});return s.identity().rotateZ(Math.PI/2),u.applyTransform(s),{shadowMapPass:null,autoResize:!0,_createLightPassMat:i,_gBuffer:new ia,_lightAccumFrameBuffer:new Ai({depthBuffer:!1}),_lightAccumTex:new Dn({type:lr.HALF_FLOAT,minFilter:lr.NEAREST,magFilter:lr.NEAREST}),_fullQuadPass:new Ci({blendWithPrevious:!0}),_directionalLightMat:i(r),_ambientMat:i(new K(t,K.source("clay.deferred.ambient_light"))),_ambientSHMat:i(new K(t,K.source("clay.deferred.ambient_sh_light"))),_ambientCubemapMat:i(new K(t,K.source("clay.deferred.ambient_cubemap_light"))),_spotLightShader:a("spot_light"),_pointLightShader:a("point_light"),_sphereLightShader:a("sphere_light"),_tubeLightShader:a("tube_light"),_lightSphereGeo:new Nn({widthSegments:10,heightSegements:10}),_lightConeGeo:o,_lightCylinderGeo:u,_outputPass:new Ci({fragment:K.source("clay.compositor.output")})}},{render:function(t,e,r,n){n=n||{},n.renderToTarget=n.renderToTarget||!1,n.notUpdateShadow=n.notUpdateShadow||!1,n.notUpdateScene=n.notUpdateScene||!1,n.notUpdateScene||e.update(!1,!0),r.update(!0);var i=t.getDevicePixelRatio();!this.autoResize||t.getWidth()*i===this._lightAccumTex.width&&t.getHeight()*i===this._lightAccumTex.height||this.resize(t.getWidth()*i,t.getHeight()*i),this._gBuffer.update(t,e,r),this._accumulateLightBuffer(t,e,r,!n.notUpdateShadow),n.renderToTarget||(this._outputPass.setUniform("texture",this._lightAccumTex),this._outputPass.render(t))},getTargetTexture:function(){return this._lightAccumTex},getTargetFrameBuffer:function(){return this._lightAccumFrameBuffer},getGBuffer:function(){return this._gBuffer},setViewport:function(t,e,r,n,i){this._gBuffer.setViewport(t,e,r,n,i),this._lightAccumFrameBuffer.viewport=this._gBuffer.getViewport()},resize:function(t,e){this._lightAccumTex.width=t,this._lightAccumTex.height=e,this._gBuffer.resize(t,e)},_accumulateLightBuffer:function(t,e,r,n){for(var i=t.gl,a=this._lightAccumTex,o=this._lightAccumFrameBuffer,s=r.getWorldPosition().array,u=0;u=0){var l="touchend"!=u?i.targetTouches[0]:i.changedTouches[0];"touchstart"===u?u="mousedown":"touchend"===u?u="mouseup":"touchmove"===u&&(u="mousemove"),a=l.clientX-s.left,o=l.clientY-s.top}else a=i.clientX-s.left,o=i.clientY-s.top;var c,h=t.pick(a,o);if("DOMMouseScroll"!==u&&"mousewheel"!==u||(c=i.wheelDelta?i.wheelDelta/120:-(i.detail||0)/3),h){if(h.target.silent)return;if("mousemove"===u){var f=h.target!==r;f&&r&&Pt(r,Lt("mouseout",{target:r},a,o)),Pt(h.target,Lt("mousemove",h,a,o)),f&&Pt(h.target,Lt("mouseover",h,a,o))}else Pt(h.target,Lt(u,h,a,o,c));r=h.target}else r&&(Pt(r,Lt("mouseout",{target:r},a,o)),r=null)}})},this)},Mt.prototype._updateGraphicOptions=function(t,e,r){for(var n,i=!!t.tonemapping,a=!!t.linear,o=0;o0,l=e.color;e.depth=0,u&&ya.set(l,0,0,0,0);for(var c=!0,h=1/n,f=0;f-g&&m-g&&p-g&&_0){var _=f[0],b=(_[0]+1)*u,A=(1-_[1])*l;e.fillStyle=p,"rectangle"===T?e.fillRect(b-E,A-E,x,x):"circle"===T&&(e.beginPath(),e.arc(b,A,E,0,2*Math.PI),e.fill())}}}e.restore()},dispose:function(){this._triangles.clear(),this._lines.clear(),this._points.clear(),this._primitives=[],this.ctx=null,this.canvas=null}}),ba=Pe.extend(function(){return{name:"",inputLinks:{},outputLinks:{},_prevOutputTextures:{},_outputTextures:{},_outputReferences:{},_rendering:!1,_rendered:!1,_compositor:null}},{updateParameter:function(t,e){var r=this.outputs[t],n=r.parameters,i=r._parametersCopy;if(i||(i=r._parametersCopy={}),n)for(var a in n)"width"!==a&&"height"!==a&&(i[a]=n[a]);var o,s;return o=n.width instanceof Function?n.width.call(this,e):n.width,s=n.height instanceof Function?n.height.call(this,e):n.height,i.width===o&&i.height===s||this._outputTextures[t]&&this._outputTextures[t].dispose(e.gl),i.width=o,i.height=s,i},setParameter:function(t,e){},getParameter:function(t){},setParameters:function(t){for(var e in t)this.setParameter(e,t[e])},render:function(){},getOutput:function(t,e){if(null==e)return e=t,this._outputTextures[e];var r=this.outputs[e];if(r)return this._rendered?r.outputLastFrame?this._prevOutputTextures[e]:this._outputTextures[e]:this._rendering?(this._prevOutputTextures[e]||(this._prevOutputTextures[e]=this._compositor.allocateTexture(r.parameters||{})),this._prevOutputTextures[e]):(this.render(t),this._outputTextures[e])},removeReference:function(t){if(0===--this._outputReferences[t]){this.outputs[t].keepLastFrame?(this._prevOutputTextures[t]&&this._compositor.releaseTexture(this._prevOutputTextures[t]),this._prevOutputTextures[t]=this._outputTextures[t]):this._compositor.releaseTexture(this._outputTextures[t])}},link:function(t,e,r){this.inputLinks[t]={node:e,pin:r},e.outputLinks[r]||(e.outputLinks[r]=[]),e.outputLinks[r].push({node:this,pin:t}),this.pass.material.enableTexture(t)},clear:function(){this.inputLinks={},this.outputLinks={}},updateReference:function(t){if(!this._rendering){this._rendering=!0;for(var e in this.inputLinks){var r=this.inputLinks[e];r.node.updateReference(r.pin)}this._rendering=!1}t&&this._outputReferences[t]++},beforeFrame:function(){this._rendered=!1;for(var t in this.outputLinks)this._outputReferences[t]=0},afterFrame:function(){for(var t in this.outputLinks)if(this._outputReferences[t]>0){var e=this.outputs[t];e.keepLastFrame?(this._prevOutputTextures[t]&&this._compositor.releaseTexture(this._prevOutputTextures[t]),this._prevOutputTextures[t]=this._outputTextures[t]):this._compositor.releaseTexture(this._outputTextures[t])}}}),Aa=Pe.extend(function(){return{nodes:[]}},{dirty:function(){this._dirty=!0},addNode:function(t){this.nodes.indexOf(t)>=0||(this.nodes.push(t),this._dirty=!0)},removeNode:function(t){"string"==typeof t&&(t=this.getNodeByName(t));var e=this.nodes.indexOf(t);e>=0&&(this.nodes.splice(e,1),this._dirty=!0)},getNodeByName:function(t){for(var e=0;e=e.COLOR_ATTACHMENT0&&u<=e.COLOR_ATTACHMENT0+8&&c.push(u);l.drawBuffersEXT(c)}t.saveClear(),t.clearBit=He.DEPTH_BUFFER_BIT|He.COLOR_BUFFER_BIT,r=t.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ),t.restoreClear(),n.unbind(t)}else r=t.render(this.scene,this.camera,!this.autoUpdateScene,this.preZ);this.trigger("afterrender",r),this._rendering=!1,this._rendered=!0}}),Ma=ba.extend(function(){return{texture:null,outputs:{color:{}}}},function(){},{getOutput:function(t,e){return this.texture},beforeFrame:function(){},afterFrame:function(){}}),Ca=ba.extend(function(){return{name:"",inputs:{},outputs:null,shader:"",inputLinks:{},outputLinks:{},pass:null,_prevOutputTextures:{},_outputTextures:{},_outputReferences:{},_rendering:!1,_rendered:!1,_compositor:null}},function(){var t=new Ci({fragment:this.shader});this.pass=t},{render:function(t,e){this.trigger("beforerender",t),this._rendering=!0;var r=t.gl;for(var n in this.inputLinks){var i=this.inputLinks[n],a=i.node.getOutput(t,i.pin);this.pass.setUniform(n,a)}if(this.outputs){this.pass.outputs={};var o={};for(var s in this.outputs){var u=this.updateParameter(s,t);isNaN(u.width)&&this.updateParameter(s,t);var l=this.outputs[s],c=this._compositor.allocateTexture(u);this._outputTextures[s]=c;var h=l.attachment||r.COLOR_ATTACHMENT0;"string"==typeof h&&(h=r[h]),o[h]=c}this._compositor.getFrameBuffer().bind(t);for(var h in o)this._compositor.getFrameBuffer().attach(o[h],h);this.pass.render(t),this._compositor.getFrameBuffer().updateMipmap(t.gl)}else this.pass.outputs=null,this._compositor.getFrameBuffer().unbind(t),this.pass.render(t,e);for(var n in this.inputLinks){var i=this.inputLinks[n];i.node.removeReference(i.pin)}this._rendering=!1,this._rendered=!0,this.trigger("afterrender",t)},updateParameter:function(t,e){var r=this.outputs[t],n=r.parameters,i=r._parametersCopy;if(i||(i=r._parametersCopy={}),n)for(var a in n)"width"!==a&&"height"!==a&&(i[a]=n[a]);var o,s;return o=n.width instanceof Function?n.width.call(this,e):n.width,s=n.height instanceof Function?n.height.call(this,e):n.height,i.width===o&&i.height===s||this._outputTextures[t]&&this._outputTextures[t].dispose(e),i.width=o,i.height=s,i},setParameter:function(t,e){this.pass.setUniform(t,e)},getParameter:function(t){return this.pass.getUniform(t)},setParameters:function(t){for(var e in t)this.setParameter(e,t[e])},define:function(t,e){this.pass.material.define("fragment",t,e)},undefine:function(t){this.pass.material.undefine("fragment",t)},removeReference:function(t){if(0===--this._outputReferences[t]){this.outputs[t].keepLastFrame?(this._prevOutputTextures[t]&&this._compositor.releaseTexture(this._prevOutputTextures[t]),this._prevOutputTextures[t]=this._outputTextures[t]):this._compositor.releaseTexture(this._outputTextures[t])}},clear:function(){ba.prototype.clear.call(this),this.pass.material.disableTexturesAll()}}),Na=/^#source\((.*?)\)/,Ra=tn.extend({range:100,radius:5},{type:"SPHERE_LIGHT",uniformTemplates:{sphereLightPosition:{type:"3f",value:function(t){return t.getWorldPosition().array}},sphereLightRange:{type:"1f",value:function(t){return t.range}},sphereLightRadius:{type:"1f",value:function(t){return t.radius}},sphereLightColor:{type:"3f",value:function(t){var e=t.color,r=t.intensity;return[e[0]*r,e[1]*r,e[2]*r]}}}}),La=tn.extend({range:100,length:10},{type:"TUBE_LIGHT",uniformTemplates:{tubeLightPosition:{type:"3f",value:function(t){return t.getWorldPosition().array}},tubeLightExtend:{type:"3f",value:function(){var t=new Xe;return function(e){return t.copy(e.worldTransform.x).normalize().scale(e.length/2).array}}()},tubeLightRange:{type:"1f",value:function(t){return t.range}},tubeLightColor:{type:"3f",value:function(t){var e=t.color,r=t.intensity;return[e[0]*r,e[1]*r,e[2]*r]}}}}),Pa=Pe.extend({rootPath:"",textureRootPath:"",shaderRootPath:"",scene:null,camera:null},{load:function(t){var e=this;this.rootPath||(this.rootPath=t.slice(0,t.lastIndexOf("/"))),Kn.get({url:t,onprogress:function(t,r,n){e.trigger("progress",t,r,n)},onerror:function(t){e.trigger("error",t)},responseType:"text",onload:function(t){qt(JSON.parse(t),{textureRootPath:this.textureRootPath||this.rootPath,camera:this.camera,scene:this.scene})}})}}),Da=pe.mat2,Ia=function(){this.array=Da.create(),this._dirty=!0};Ia.prototype={constructor:Ia,setArray:function(t){for(var e=0;e0&&$a.scaleAndAdd(t.array,t.array,this.force.array,n/r)}});K.import("@export clay.particle.vertex\nuniform mat4 worldView : WORLDVIEW;\nuniform mat4 projection : PROJECTION;\nattribute vec3 position : POSITION;\nattribute vec3 normal : NORMAL;\n#ifdef UV_ANIMATION\nattribute vec2 texcoord0 : TEXCOORD_0;\nattribute vec2 texcoord1 : TEXCOORD_1;\nvarying vec2 v_Uv0;\nvarying vec2 v_Uv1;\n#endif\nvarying float v_Age;\nvoid main() {\n v_Age = normal.x;\n float rotation = normal.y;\n vec4 worldViewPosition = worldView * vec4(position, 1.0);\n gl_Position = projection * worldViewPosition;\n float w = gl_Position.w;\n gl_PointSize = normal.z * projection[0].x / w;\n #ifdef UV_ANIMATION\n v_Uv0 = texcoord0;\n v_Uv1 = texcoord1;\n #endif\n}\n@end\n@export clay.particle.fragment\nuniform sampler2D sprite;\nuniform sampler2D gradient;\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\nvarying float v_Age;\n#ifdef UV_ANIMATION\nvarying vec2 v_Uv0;\nvarying vec2 v_Uv1;\n#endif\nvoid main() {\n vec4 color = vec4(color, alpha);\n #ifdef SPRITE_ENABLED\n #ifdef UV_ANIMATION\n color *= texture2D(sprite, mix(v_Uv0, v_Uv1, gl_PointCoord));\n #else\n color *= texture2D(sprite, gl_PointCoord);\n #endif\n #endif\n #ifdef GRADIENT_ENABLED\n color *= texture2D(gradient, vec2(v_Age, 0.5));\n #endif\n gl_FragColor = color;\n}\n@end");var eo=new K(K.source("clay.particle.vertex"),K.source("clay.particle.fragment")),ro=Xn.extend({loop:!0,oneshot:!1,duration:1,spriteAnimationTileX:1,spriteAnimationTileY:1,spriteAnimationRepeat:0,mode:Xn.POINTS,ignorePicking:!0,_elapsedTime:0,_emitting:!0},function(){this.geometry=new Sn({dynamic:!0}),this.material||(this.material=new vr({shader:eo,transparent:!0,depthMask:!1}),this.material.enableTexture("sprite")),this._particles=[],this._fields=[],this._emitters=[]},{culling:!1,frustumCulling:!1,castShadow:!1,receiveShadow:!1,addEmitter:function(t){this._emitters.push(t)},removeEmitter:function(t){this._emitters.splice(this._emitters.indexOf(t),1)},addField:function(t){this._fields.push(t)},removeField:function(t){this._fields.splice(this._fields.indexOf(t),1)},reset:function(){for(var t=0;t=i.life?(i.emitter.kill(i),e[r]=e[n-1],e.pop(),n--):r++}for(var r=0;r0)for(var a=0;a1,o=t.attributes.position.value,s=t.attributes.normal.value,u=t.attributes.texcoord0.value,l=t.attributes.texcoord1.value,c=this._particles.length;o&&o.length===3*c||(o=t.attributes.position.value=new Float32Array(3*c),s=t.attributes.normal.value=new Float32Array(3*c),a&&(u=t.attributes.texcoord0.value=new Float32Array(2*c),l=t.attributes.texcoord1.value=new Float32Array(2*c)));for(var h=1/e,f=0;fthis.duration&&!this.loop},dispose:function(t){for(var e=0;e1&&n&&n.length>1){var a=re(n)/re(i);!isFinite(a)&&(a=1),e.pinchScale=a;var o=ne(n);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:t[0].target,event:e}}}}},so=[[0,0],[0,1],[1,1],[1,0]],uo=[0,1,2,2,3,0],lo=jn.extend({camera:null,plane:null,maxGrid:0,frustumCulling:!1},function(){var t=this.geometry=new Sn({dynamic:!0});t.attributes.position.init(6),t.attributes.normal.init(6),t.attributes.texcoord0.init(6),t.indices=new Uint16Array(6),this.plane=new an},{updateGeometry:function(){var t=this._unProjectGrid();if(t){for(var e=this.geometry.attributes.position,r=this.geometry.attributes.normal,n=this.geometry.attributes.texcoord0,i=this.geometry.indices,a=0;a<6;a++){var o=uo[a];e.set(a,t[o].array),r.set(a,this.plane.normal.array),n.set(a,so[o]),i[a]=a}this.geometry.dirty()}},_unProjectGrid:function(){for(var t=new an,e=[0,1,0,2,1,3,2,3,4,5,4,6,5,7,6,7,0,4,1,5,2,6,3,7],r=new Xe,n=new Xe,i=[],a=[],o=0;o<4;o++)a[o]=new Xe(0,0);var s=new mn;return function(){t.copy(this.plane),t.applyTransform(this.camera.viewMatrix);for(var o=this.camera.frustum.vertices,u=0,l=0;l<12;l++){r.array=o[e[2*l]],n.array=o[e[2*l+1]];var c=t.intersectLine(r,n,i[u]);c&&(i[u]||(i[u]=c),u++)}if(0!==u){for(var l=0;l0},update:function(t){if(t=t||16,this._rotating){var e=("cw"===this.autoRotateDirection?1:-1)*this.autoRotateSpeed/180*Math.PI;this._phi-=e*t/1e3,this._needsUpdate=!0}else this._rotateVelocity.len()>0&&(this._needsUpdate=!0);(Math.abs(this._zoomSpeed)>.01||this._panVelocity.len()>0)&&(this._needsUpdate=!0),this._needsUpdate&&(this._updateDistance(Math.min(t,50)),this._updatePan(Math.min(t,50)),this._updateRotate(Math.min(t,50)),this._updateTransform(),this.target.update(),this.trigger("update"),this._needsUpdate=!1)},_updateRotate:function(t){var e=this._rotateVelocity;this._phi=e.y*t/20+this._phi,this._theta=e.x*t/20+this._theta,this.setAlpha(this.getAlpha()),this.setBeta(this.getBeta()),this._vectorDamping(e,this.damping)},_updateDistance:function(t){this._setDistance(this._distance+this._zoomSpeed*t/20),this._zoomSpeed*=this.damping},_setDistance:function(t){this._distance=Math.max(Math.min(t,this.maxDistance),this.minDistance)},_updatePan:function(t){var e=this._panVelocity,r=this._distance,n=this.target,i=n.worldTransform.y,a=n.worldTransform.x;this._center.scaleAndAdd(a,-e.x*r/200).scaleAndAdd(i,-e.y*r/200),this._vectorDamping(e,0)},_updateTransform:function(){var t=this.target,e=new Xe,r=this._theta+Math.PI/2,n=this._phi+Math.PI/2,i=Math.sin(r);e.x=i*Math.cos(n),e.y=-Math.cos(r),e.z=i*Math.sin(n),t.position.copy(this._center).scaleAndAdd(e,this._distance),t.rotation.identity().rotateY(-this._phi).rotateX(-this._theta)},_startCountingStill:function(){clearTimeout(this._stillTimeout);var t=this.autoRotateAfterStill,e=this;!isNaN(t)&&t>0&&(this._stillTimeout=setTimeout(function(){e._rotating=!0},1e3*t))},_vectorDamping:function(t,e){var r=t.len();r*=e,r<1e-4&&(r=0),t.normalize().scale(r)},decomposeTransform:function(){if(this.target){this.target.updateWorldTransform();var t=this.target.worldTransform.z,e=Math.asin(t.y),r=Math.atan2(t.x,t.z);this._theta=e,this._phi=-r,this.setBeta(this.getBeta()),this.setAlpha(this.getAlpha()),this._setDistance(this.target.position.dist(this._center))}},_mouseDownHandler:function(t){if(!this._isAnimating()){var e=t.clientX,r=t.clientY;if(t.targetTouches){var n=t.targetTouches[0];e=n.clientX,r=n.clientY,this._mode="rotate",this._processGesture(t,"start")}var i=this.domElement;i.addEventListener("touchmove",this._mouseMoveHandler),i.addEventListener("touchend",this._mouseUpHandler),i.addEventListener("mousemove",this._mouseMoveHandler),i.addEventListener("mouseup",this._mouseUpHandler),0===t.button?this._mode="rotate":1===t.button&&(this._mode="pan"),this._rotateVelocity.set(0,0),this._rotating=!1,this.autoRotate&&this._startCountingStill(),this._mouseX=e,this._mouseY=r}},_mouseMoveHandler:function(t){if(!this._isAnimating()){var e,r=t.clientX,n=t.clientY;if(t.targetTouches){var i=t.targetTouches[0];r=i.clientX,n=i.clientY,e=this._processGesture(t,"change")}var a=ie(this.panSensitivity),o=ie(this.rotateSensitivity);e||("rotate"===this._mode?(this._rotateVelocity.y=(r-this._mouseX)/this.domElement.clientHeight*2*o[0],this._rotateVelocity.x=(n-this._mouseY)/this.domElement.clientWidth*2*o[1]):"pan"===this._mode&&(this._panVelocity.x=(r-this._mouseX)/this.domElement.clientWidth*a[0]*400,this._panVelocity.y=(-n+this._mouseY)/this.domElement.clientHeight*a[1]*400)),this._mouseX=r,this._mouseY=n,t.preventDefault()}},_mouseWheelHandler:function(t){if(!this._isAnimating()){var e=t.wheelDelta||-t.detail;0!==e&&this._zoomHandler(t,e>0?-1:1)}},_pinchHandler:function(t){this._isAnimating()||this._zoomHandler(t,t.pinchScale>1?-.4:.4)},_zoomHandler:function(t,e){var r=Math.max(Math.min(this._distance-this.minDistance,this.maxDistance-this._distance));this._zoomSpeed=e*Math.max(r/40*this.zoomSensitivity,.2),this._rotating=!1,this.autoRotate&&"rotate"===this._mode&&this._startCountingStill(),t.preventDefault()},_mouseUpHandler:function(t){var e=this.domElement;e.removeEventListener("touchmove",this._mouseMoveHandler),e.removeEventListener("touchend",this._mouseUpHandler),e.removeEventListener("mousemove",this._mouseMoveHandler),e.removeEventListener("mouseup",this._mouseUpHandler),this._processGesture(t,"end")},_addAnimator:function(t){var e=this._animators;return e.push(t),t.done(function(){var r=e.indexOf(t);r>=0&&e.splice(r,1)}),t},_processGesture:function(t,e){var r=this._gestureMgr;"start"===e&&r.clear();var n=r.recognize(t,null,this.domElement);if("end"===e&&r.clear(),n){var i=n.type;t.gestureEvent=i,this._pinchHandler(n.event)}return n}});Object.defineProperty(co.prototype,"autoRotate",{get:function(){return this._autoRotate},set:function(t){this._autoRotate=t,this._rotating=t}}),Object.defineProperty(co.prototype,"target",{get:function(){return this._target},set:function(t){t&&t.target&&this.setCenter(t.target.toArray()),this._target=t,this.decomposeTransform()}});var ho=Sn.extend({dynamic:!1}),fo=pe.mat4,mo=pe.vec3,po={merge:function(t,e){if(t.length){var r=t[0],n=r.geometry,i=r.material,a=new Sn({dynamic:!1});a.boundingBox=new tr;for(var o=n.getEnabledAttributes(),s=0;s=65535?new Uint32Array(3*f):new Uint16Array(3*f);for(var _=0,g=0,v=n.isUseIndices(),y=0;y0;){for(var _=[],g=[],v=[],y=0,f=0;f=0&&-1===g[S]&&(y65535?new Uint32Array(3*R.triangles.length):new Uint16Array(3*R.triangles.length);var G=0;O=0;for(var f=0;f=0?L[S]:-1}O++}D.indices[G++]=C[b]}D.updateBoundingBox(),w.add(I)}for(var j=t.children(),f=0;f0&&(r.indices=oe(t.indices,e),n.push(r.indices.buffer)),r.attributes={};for(var i in t.attributes)if(t.attributes.hasOwnProperty(i)){var a=t.attributes[i];a&&a.value&&a.value.length>0&&(a=r.attributes[i]=ae(a,e),n.push(a.value.buffer))}return{data:r,buffers:n}},toGeometry:function(t){if(!t)return null;if(t.data&&t.buffers)return go.toGeometry(t.data);if(!t.metadata||t.metadata.generator!==_o.generator)throw new Error("[util.transferable.toGeometry] the object is not generated by util.transferable.");var e={dynamic:t.dynamic,indices:t.indices};if(t.boundingBox){var r=(new Xe).setArray(t.boundingBox.min),n=(new Xe).setArray(t.boundingBox.max);e.boundingBox=new tr(r,n)}const i=new Sn(e);for(var a in t.attributes)if(t.attributes.hasOwnProperty(a)){var o=t.attributes[a];i.attributes[a]=new Sn.Attribute(o.name,o.type,o.size,o.semantic),i.attributes[a].value=o.value}return i}};K.import("@export clay.vr.disorter.output.vertex\nattribute vec2 texcoord: TEXCOORD_0;\nattribute vec3 position: POSITION;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n v_Texcoord = texcoord;\n gl_Position = vec4(position.xy, 0.5, 1.0);\n}\n@end\n@export clay.vr.disorter.output.fragment\nuniform sampler2D texture;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n gl_FragColor = texture2D(texture, v_Texcoord);\n}\n@end");var vo=Pe.extend(function(){return{clearColor:[0,0,0,1],_mesh:new jn({geometry:new Sn({dynamic:!0}),culling:!1,material:new vr({depthTest:!1,shader:new K({vertex:K.source("clay.vr.disorter.output.vertex"),fragment:K.source("clay.vr.disorter.output.fragment")})})}),_fakeCamera:new qn}},{render:function(t,e){var r=this.clearColor,n=t.gl;n.clearColor(r[0],r[1],r[2],r[3]),n.clear(n.COLOR_BUFFER_BIT),n.disable(n.BLEND),this._mesh.material.set("texture",e),t.saveViewport(),t.setViewport(0,0,t.getWidth(),t.getHeight()),t.renderPass([this._mesh],this._fakeCamera),t.restoreViewport()},updateFromVRDisplay:function(t){t.deviceInfo_?this._updateMesh(20,20,t.deviceInfo_):console.warn("Cant get vrDisplay.deviceInfo_, seems code changed")},_updateMesh:function(t,e,r){var n=this._mesh.geometry.attributes.position,i=this._mesh.geometry.attributes.texcoord0;n.init(2*t*e),i.init(2*t*e);for(var a=r.getLeftEyeVisibleTanAngles(),o=r.getLeftEyeNoLensTanAngles(),s=r.getLeftEyeVisibleScreenRect(o),u=0,l=[],c=[],h=0;h<2;h++){for(var f=0;f