<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>33416</bug_id>
          
          <creation_ts>2010-01-08 19:18:22 -0800</creation_ts>
          <short_desc>Hook up WebGLContextAttributes to OpenGL context creation code</short_desc>
          <delta_ts>2010-06-18 12:01:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>31169</dependson>
          <blocked>36908</blocked>
    
    <blocked>38560</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>178926</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-01-08 19:18:22 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=31169 adds the plumbing to pass a JavaScript object down to the creation of the WebGLRenderingContext and associated GraphicsContext3D. We need to pay attention to these flags when creating the OpenGL context and associated framebuffer objects. This is a moderately sized chunk of work so it is being split off as a separate task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198344</commentid>
    <comment_count>1</comment_count>
      <attachid>50438</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-10 14:24:10 -0800</bug_when>
    <thetext>Created attachment 50438
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198353</commentid>
    <comment_count>2</comment_count>
      <attachid>50441</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-10 14:42:30 -0800</bug_when>
    <thetext>Created attachment 50441
modified patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198356</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-10 14:48:27 -0800</bug_when>
    <thetext>Attachment 50441 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp:230:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp:230:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/GraphicsContext3D.cpp:725:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/src/GraphicsContext3D.cpp:732:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 4 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198361</commentid>
    <comment_count>4</comment_count>
      <attachid>50442</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-10 14:57:36 -0800</bug_when>
    <thetext>Created attachment 50442
fixed style problems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198376</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-10 15:19:44 -0800</bug_when>
    <thetext>You should really try to avoid making insignificant changes in your patches. Almost half of this patch is deleting extra spaces and other changes which make it really hard to understand what is really being changed. I suggest you resubmit the patch without the insignificant changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198379</commentid>
    <comment_count>6</comment_count>
      <attachid>50442</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-10 15:22:07 -0800</bug_when>
    <thetext>Comment on attachment 50442
fixed style problems

r- based on Chris&apos;s comment, which I agree with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198435</commentid>
    <comment_count>7</comment_count>
      <attachid>50458</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-10 17:46:43 -0800</bug_when>
    <thetext>Created attachment 50458
removed the whitespace modifications</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198578</commentid>
    <comment_count>8</comment_count>
      <attachid>50458</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-11 06:08:24 -0800</bug_when>
    <thetext>Comment on attachment 50458
removed the whitespace modifications


&gt; +function getWebGL(canvasName, contextAttribs, clearColor, clearDepth, clearStencil)
&gt; +{
&gt; +    var canvas = document.getElementById(canvasName);
&gt; +    var gl = canvas.getContext(&quot;experimental-webgl&quot;, contextAttribs);
&gt; +    if (!gl) {
&gt; +        alert(&quot;No WebGL context found&quot;);
&gt; +        return null;
&gt; +    }
&gt; +    var actualContextAttribs = gl.getContextAttributes();
&gt; +    
&gt; +    // Add a console
&gt; +    gl.console = (&quot;console&quot; in window) ? window.console : { log: function() { } };
&gt; +
&gt; +    // create our shaders
&gt; +    var vertexShader = loadShader(gl, &quot;vshader&quot;);
&gt; +    var fragmentShader = loadShader(gl, &quot;fshader&quot;);
&gt; +
&gt; +    if (!vertexShader || !fragmentShader)
&gt; +        return null;
&gt; +
&gt; +    // Create the program object
&gt; +    gl.program = gl.createProgram();
&gt; +
&gt; +    if (!gl.program)
&gt; +        return null;
&gt; +
&gt; +    // Attach our two shaders to the program
&gt; +    gl.attachShader(gl.program, vertexShader);
&gt; +    gl.attachShader(gl.program, fragmentShader);
&gt; +
&gt; +    // Bind attributes
&gt; +    var attribs = [ &quot;pos&quot;, &quot;colorIn&quot; ];
&gt; +    for (var i in attribs)
&gt; +        gl.bindAttribLocation(gl.program, i, attribs[i]);
&gt; +
&gt; +    // Link the program
&gt; +    gl.linkProgram(gl.program);
&gt; +
&gt; +    // Check the link status
&gt; +    var linked = gl.getProgramParameter(gl.program, gl.LINK_STATUS);
&gt; +    if (!linked) {
&gt; +        // something went wrong with the link
&gt; +        var error = gl.getProgramInfoLog (gl.program);
&gt; +        gl.console.log(&quot;Error in program linking:&quot;+error);
&gt; +
&gt; +        gl.deleteProgram(gl.program);
&gt; +        gl.deleteProgram(fragmentShader);
&gt; +        gl.deleteProgram(vertexShader);
&gt; +
&gt; +        return null;
&gt; +    }
&gt; +
&gt; +    gl.useProgram(gl.program);
&gt; +
&gt; +    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
&gt; +    gl.clearDepth(clearDepth);
&gt; +    gl.clearStencil(clearStencil);
&gt; +    gl.enable(gl.DEPTH_TEST);
&gt; +    gl.enable(gl.STENCIL_TEST);
&gt; +    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
&gt; +
&gt; +    return gl;
&gt; +}
&gt; +
&gt; +function drawAndReadPixel(gl, vertices, colors, x, y)
&gt; +{
&gt; +    var colorOffset = vertices.byteLength;
&gt; +
&gt; +    var vbo = gl.createBuffer();
&gt; +    gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
&gt; +    gl.bufferData(gl.ARRAY_BUFFER, colorOffset + colors.byteLength, gl.STATIC_DRAW);
&gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, 0, vertices);
&gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, colorOffset, colors);
&gt; +
&gt; +    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
&gt; +    gl.enableVertexAttribArray(0);
&gt; +    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, true, 0, colorOffset);
&gt; +    gl.enableVertexAttribArray(1);
&gt; +
&gt; +    gl.drawArrays(gl.TRIANGLES, 0, vertices.length / 3);
&gt; +
&gt; +    return gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE);
&gt; +}

Don&apos;t we have some common code to do this? If not we should. We will eventually have many tests using this technique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198579</commentid>
    <comment_count>9</comment_count>
      <attachid>50458</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-11 06:08:51 -0800</bug_when>
    <thetext>Comment on attachment 50458
removed the whitespace modifications


&gt; +function getWebGL(canvasName, contextAttribs, clearColor, clearDepth, clearStencil)
&gt; +{
&gt; +    var canvas = document.getElementById(canvasName);
&gt; +    var gl = canvas.getContext(&quot;experimental-webgl&quot;, contextAttribs);
&gt; +    if (!gl) {
&gt; +        alert(&quot;No WebGL context found&quot;);
&gt; +        return null;
&gt; +    }
&gt; +    var actualContextAttribs = gl.getContextAttributes();
&gt; +    
&gt; +    // Add a console
&gt; +    gl.console = (&quot;console&quot; in window) ? window.console : { log: function() { } };
&gt; +
&gt; +    // create our shaders
&gt; +    var vertexShader = loadShader(gl, &quot;vshader&quot;);
&gt; +    var fragmentShader = loadShader(gl, &quot;fshader&quot;);
&gt; +
&gt; +    if (!vertexShader || !fragmentShader)
&gt; +        return null;
&gt; +
&gt; +    // Create the program object
&gt; +    gl.program = gl.createProgram();
&gt; +
&gt; +    if (!gl.program)
&gt; +        return null;
&gt; +
&gt; +    // Attach our two shaders to the program
&gt; +    gl.attachShader(gl.program, vertexShader);
&gt; +    gl.attachShader(gl.program, fragmentShader);
&gt; +
&gt; +    // Bind attributes
&gt; +    var attribs = [ &quot;pos&quot;, &quot;colorIn&quot; ];
&gt; +    for (var i in attribs)
&gt; +        gl.bindAttribLocation(gl.program, i, attribs[i]);
&gt; +
&gt; +    // Link the program
&gt; +    gl.linkProgram(gl.program);
&gt; +
&gt; +    // Check the link status
&gt; +    var linked = gl.getProgramParameter(gl.program, gl.LINK_STATUS);
&gt; +    if (!linked) {
&gt; +        // something went wrong with the link
&gt; +        var error = gl.getProgramInfoLog (gl.program);
&gt; +        gl.console.log(&quot;Error in program linking:&quot;+error);
&gt; +
&gt; +        gl.deleteProgram(gl.program);
&gt; +        gl.deleteProgram(fragmentShader);
&gt; +        gl.deleteProgram(vertexShader);
&gt; +
&gt; +        return null;
&gt; +    }
&gt; +
&gt; +    gl.useProgram(gl.program);
&gt; +
&gt; +    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
&gt; +    gl.clearDepth(clearDepth);
&gt; +    gl.clearStencil(clearStencil);
&gt; +    gl.enable(gl.DEPTH_TEST);
&gt; +    gl.enable(gl.STENCIL_TEST);
&gt; +    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
&gt; +
&gt; +    return gl;
&gt; +}
&gt; +
&gt; +function drawAndReadPixel(gl, vertices, colors, x, y)
&gt; +{
&gt; +    var colorOffset = vertices.byteLength;
&gt; +
&gt; +    var vbo = gl.createBuffer();
&gt; +    gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
&gt; +    gl.bufferData(gl.ARRAY_BUFFER, colorOffset + colors.byteLength, gl.STATIC_DRAW);
&gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, 0, vertices);
&gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, colorOffset, colors);
&gt; +
&gt; +    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
&gt; +    gl.enableVertexAttribArray(0);
&gt; +    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, true, 0, colorOffset);
&gt; +    gl.enableVertexAttribArray(1);
&gt; +
&gt; +    gl.drawArrays(gl.TRIANGLES, 0, vertices.length / 3);
&gt; +
&gt; +    return gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE);
&gt; +}

Don&apos;t we have some common code to do this? If not we should. We will eventually have many tests using this technique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198580</commentid>
    <comment_count>10</comment_count>
      <attachid>50458</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-11 06:08:58 -0800</bug_when>
    <thetext>Comment on attachment 50458
removed the whitespace modifications


&gt; +function getWebGL(canvasName, contextAttribs, clearColor, clearDepth, clearStencil)
&gt; +{
&gt; +    var canvas = document.getElementById(canvasName);
&gt; +    var gl = canvas.getContext(&quot;experimental-webgl&quot;, contextAttribs);
&gt; +    if (!gl) {
&gt; +        alert(&quot;No WebGL context found&quot;);
&gt; +        return null;
&gt; +    }
&gt; +    var actualContextAttribs = gl.getContextAttributes();
&gt; +    
&gt; +    // Add a console
&gt; +    gl.console = (&quot;console&quot; in window) ? window.console : { log: function() { } };
&gt; +
&gt; +    // create our shaders
&gt; +    var vertexShader = loadShader(gl, &quot;vshader&quot;);
&gt; +    var fragmentShader = loadShader(gl, &quot;fshader&quot;);
&gt; +
&gt; +    if (!vertexShader || !fragmentShader)
&gt; +        return null;
&gt; +
&gt; +    // Create the program object
&gt; +    gl.program = gl.createProgram();
&gt; +
&gt; +    if (!gl.program)
&gt; +        return null;
&gt; +
&gt; +    // Attach our two shaders to the program
&gt; +    gl.attachShader(gl.program, vertexShader);
&gt; +    gl.attachShader(gl.program, fragmentShader);
&gt; +
&gt; +    // Bind attributes
&gt; +    var attribs = [ &quot;pos&quot;, &quot;colorIn&quot; ];
&gt; +    for (var i in attribs)
&gt; +        gl.bindAttribLocation(gl.program, i, attribs[i]);
&gt; +
&gt; +    // Link the program
&gt; +    gl.linkProgram(gl.program);
&gt; +
&gt; +    // Check the link status
&gt; +    var linked = gl.getProgramParameter(gl.program, gl.LINK_STATUS);
&gt; +    if (!linked) {
&gt; +        // something went wrong with the link
&gt; +        var error = gl.getProgramInfoLog (gl.program);
&gt; +        gl.console.log(&quot;Error in program linking:&quot;+error);
&gt; +
&gt; +        gl.deleteProgram(gl.program);
&gt; +        gl.deleteProgram(fragmentShader);
&gt; +        gl.deleteProgram(vertexShader);
&gt; +
&gt; +        return null;
&gt; +    }
&gt; +
&gt; +    gl.useProgram(gl.program);
&gt; +
&gt; +    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
&gt; +    gl.clearDepth(clearDepth);
&gt; +    gl.clearStencil(clearStencil);
&gt; +    gl.enable(gl.DEPTH_TEST);
&gt; +    gl.enable(gl.STENCIL_TEST);
&gt; +    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
&gt; +
&gt; +    return gl;
&gt; +}
&gt; +
&gt; +function drawAndReadPixel(gl, vertices, colors, x, y)
&gt; +{
&gt; +    var colorOffset = vertices.byteLength;
&gt; +
&gt; +    var vbo = gl.createBuffer();
&gt; +    gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
&gt; +    gl.bufferData(gl.ARRAY_BUFFER, colorOffset + colors.byteLength, gl.STATIC_DRAW);
&gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, 0, vertices);
&gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, colorOffset, colors);
&gt; +
&gt; +    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
&gt; +    gl.enableVertexAttribArray(0);
&gt; +    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, true, 0, colorOffset);
&gt; +    gl.enableVertexAttribArray(1);
&gt; +
&gt; +    gl.drawArrays(gl.TRIANGLES, 0, vertices.length / 3);
&gt; +
&gt; +    return gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE);
&gt; +}

Don&apos;t we have some common code to do this? If not we should. We will eventually have many tests using this technique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198657</commentid>
    <comment_count>11</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-11 09:33:20 -0800</bug_when>
    <thetext>Are you talking about the getWebGL or drawAndReadPixel?

If getWebGL, we can modify the existing code to include a parameter for setting context attributes.  Then almost all the tests need to be modified (although tiny modification).

I think we should open a new bug for this.

(In reply to comment #8)
&gt; (From update of attachment 50458 [details])
&gt; &gt; +function getWebGL(canvasName, contextAttribs, clearColor, clearDepth, clearStencil)
&gt; &gt; +{
&gt; &gt; +    var canvas = document.getElementById(canvasName);
&gt; &gt; +    var gl = canvas.getContext(&quot;experimental-webgl&quot;, contextAttribs);
&gt; &gt; +    if (!gl) {
&gt; &gt; +        alert(&quot;No WebGL context found&quot;);
&gt; &gt; +        return null;
&gt; &gt; +    }
&gt; &gt; +    var actualContextAttribs = gl.getContextAttributes();
&gt; &gt; +    
&gt; &gt; +    // Add a console
&gt; &gt; +    gl.console = (&quot;console&quot; in window) ? window.console : { log: function() { } };
&gt; &gt; +
&gt; &gt; +    // create our shaders
&gt; &gt; +    var vertexShader = loadShader(gl, &quot;vshader&quot;);
&gt; &gt; +    var fragmentShader = loadShader(gl, &quot;fshader&quot;);
&gt; &gt; +
&gt; &gt; +    if (!vertexShader || !fragmentShader)
&gt; &gt; +        return null;
&gt; &gt; +
&gt; &gt; +    // Create the program object
&gt; &gt; +    gl.program = gl.createProgram();
&gt; &gt; +
&gt; &gt; +    if (!gl.program)
&gt; &gt; +        return null;
&gt; &gt; +
&gt; &gt; +    // Attach our two shaders to the program
&gt; &gt; +    gl.attachShader(gl.program, vertexShader);
&gt; &gt; +    gl.attachShader(gl.program, fragmentShader);
&gt; &gt; +
&gt; &gt; +    // Bind attributes
&gt; &gt; +    var attribs = [ &quot;pos&quot;, &quot;colorIn&quot; ];
&gt; &gt; +    for (var i in attribs)
&gt; &gt; +        gl.bindAttribLocation(gl.program, i, attribs[i]);
&gt; &gt; +
&gt; &gt; +    // Link the program
&gt; &gt; +    gl.linkProgram(gl.program);
&gt; &gt; +
&gt; &gt; +    // Check the link status
&gt; &gt; +    var linked = gl.getProgramParameter(gl.program, gl.LINK_STATUS);
&gt; &gt; +    if (!linked) {
&gt; &gt; +        // something went wrong with the link
&gt; &gt; +        var error = gl.getProgramInfoLog (gl.program);
&gt; &gt; +        gl.console.log(&quot;Error in program linking:&quot;+error);
&gt; &gt; +
&gt; &gt; +        gl.deleteProgram(gl.program);
&gt; &gt; +        gl.deleteProgram(fragmentShader);
&gt; &gt; +        gl.deleteProgram(vertexShader);
&gt; &gt; +
&gt; &gt; +        return null;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    gl.useProgram(gl.program);
&gt; &gt; +
&gt; &gt; +    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
&gt; &gt; +    gl.clearDepth(clearDepth);
&gt; &gt; +    gl.clearStencil(clearStencil);
&gt; &gt; +    gl.enable(gl.DEPTH_TEST);
&gt; &gt; +    gl.enable(gl.STENCIL_TEST);
&gt; &gt; +    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
&gt; &gt; +
&gt; &gt; +    return gl;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +function drawAndReadPixel(gl, vertices, colors, x, y)
&gt; &gt; +{
&gt; &gt; +    var colorOffset = vertices.byteLength;
&gt; &gt; +
&gt; &gt; +    var vbo = gl.createBuffer();
&gt; &gt; +    gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
&gt; &gt; +    gl.bufferData(gl.ARRAY_BUFFER, colorOffset + colors.byteLength, gl.STATIC_DRAW);
&gt; &gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, 0, vertices);
&gt; &gt; +    gl.bufferSubData(gl.ARRAY_BUFFER, colorOffset, colors);
&gt; &gt; +
&gt; &gt; +    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
&gt; &gt; +    gl.enableVertexAttribArray(0);
&gt; &gt; +    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, true, 0, colorOffset);
&gt; &gt; +    gl.enableVertexAttribArray(1);
&gt; &gt; +
&gt; &gt; +    gl.drawArrays(gl.TRIANGLES, 0, vertices.length / 3);
&gt; &gt; +
&gt; &gt; +    return gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE);
&gt; &gt; +}
&gt; Don&apos;t we have some common code to do this? If not we should. We will eventually
&gt; have many tests using this technique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198672</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-03-11 10:31:02 -0800</bug_when>
    <thetext>Sorry for all the noise. The browser screwed up my review, which had a lot more stuff in it, and I was trying to recover. But yes, those are the functions I was referring to, and yes, I think it&apos;s reasonable to have a new bug on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198777</commentid>
    <comment_count>13</comment_count>
      <attachid>50458</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-11 14:32:06 -0800</bug_when>
    <thetext>Comment on attachment 50458
removed the whitespace modifications

Generally looks good. One issue needs to be fixed in GraphicsContext3DMac.cpp.

&gt; Index: WebCore/platform/graphics/mac/Canvas3DLayer.mm
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/mac/Canvas3DLayer.mm	(revision 55815)
&gt; +++ WebCore/platform/graphics/mac/Canvas3DLayer.mm	(working copy)
&gt; @@ -70,8 +71,8 @@ -(CGLContextObj)copyCGLContextForPixelFo
&gt;  
&gt;  -(void)drawInCGLContext:(CGLContextObj)glContext pixelFormat:(CGLPixelFormatObj)pixelFormat forLayerTime:(CFTimeInterval)timeInterval displayTime:(const CVTimeStamp *)timeStamp
&gt;  {
&gt; -    CGLSetCurrentContext(m_contextObj);
&gt; -    glFinish();
&gt; +    m_context-&gt;prepareTexture();

See comment below in GraphicsContext3DMac.cpp.

&gt; Index: WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp	(revision 55820)
&gt; +++ WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp	(working copy)
&gt; @@ -205,25 +215,81 @@ void GraphicsContext3D::reshape(int widt
&gt;      m_currentHeight = height;
&gt;      
&gt;      CGLSetCurrentContext(m_contextObj);
&gt; -    
&gt; +
&gt; +    GLuint internalColorFormat, colorFormat, internalDepthStencilFormat;
&gt; +    if (m_attrs.alpha) {
&gt; +        internalColorFormat = GL_RGBA8;
&gt; +        colorFormat = GL_RGBA;
&gt; +    } else {
&gt; +        internalColorFormat = GL_RGB8;
&gt; +        colorFormat = GL_RGB;
&gt; +    }
&gt; +    if (m_attrs.stencil || m_attrs.depth) {
&gt; +        // We don&apos;t allow the logic where stencil is requires and depth is not.

requires -&gt; required

&gt; @@ -243,6 +309,18 @@ void GraphicsContext3D::activeTexture(un
&gt;      ::glActiveTexture(texture);
&gt;  }
&gt;  
&gt; +void GraphicsContext3D::prepareTexture()
&gt; +{
&gt; +    if (m_attrs.antialias) {
&gt; +        ensureContext(m_contextObj);
&gt; +        ::glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_multisampleFBO);
&gt; +        ::glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, m_fbo);
&gt; +        ::glBlitFramebufferEXT(0, 0, m_currentWidth, m_currentHeight, 0, 0, m_currentWidth, m_currentHeight, GL_COLOR_BUFFER_BIT, GL_LINEAR);
&gt; +        ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_multisampleFBO);

We need to be careful here. When we leave this routine, if the user has bound their own FBO via bindFramebuffer, that is the one we need to restore at the end, not m_multisampleFBO. Also, the logic in bindFramebuffer needs to be updated to bind either m_multisampleFBO or m_fbo when a null framebuffer is passed in. More tracking logic is needed in bindFramebuffer.

&gt; @@ -675,9 +753,25 @@ PassRefPtr&lt;WebGLArray&gt; GraphicsContext3D
&gt;      // FIXME: Also, we should throw when an unacceptable value is passed
&gt;      if (type != GL_UNSIGNED_BYTE || format != GL_RGBA)
&gt;          return 0;
&gt; -        
&gt; +
&gt; +    if (m_attrs.antialias) {
&gt; +        ::glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_multisampleFBO);
&gt; +        ::glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, m_fbo);
&gt; +        ::glBlitFramebufferEXT(x, y, x + width, y + height, x, y, x + width, y + height, GL_COLOR_BUFFER_BIT, GL_LINEAR);
&gt; +        ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
&gt; +    }
&gt;      RefPtr&lt;WebGLUnsignedByteArray&gt; array = WebGLUnsignedByteArray::create(width * height * 4);
&gt;      ::glReadPixels(x, y, width, height, format, type, (GLvoid*) array-&gt;data());
&gt; +    if (m_attrs.antialias)
&gt; +        ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_multisampleFBO);

This has the same problem as prepareTexture(). First, it isn&apos;t guaranteed that the user intended to read from the default frame buffer. If they bound another FBO via bindFramebuffer, then we shouldn&apos;t do the blit and binding. Second, we may need to restore to a different FBO than m_multisampleFBO at the end.

&gt; Index: WebKit/chromium/src/GraphicsContext3D.cpp
&gt; ===================================================================
&gt; --- WebKit/chromium/src/GraphicsContext3D.cpp	(revision 55799)
&gt; +++ WebKit/chromium/src/GraphicsContext3D.cpp	(working copy)
&gt; @@ -124,16 +124,23 @@ public:
&gt;                               unsigned long stride, unsigned long offset);
&gt;      void viewportImpl(long x, long y, unsigned long width, unsigned long height);
&gt;  
&gt; +    void readPixels(long x, long y, unsigned long width, unsigned long height, unsigned long format, unsigned long type, void* buffer);
&gt; +
&gt;      void synthesizeGLError(unsigned long error);
&gt;  
&gt;  private:
&gt;      GraphicsContext3D::Attributes m_attrs;
&gt; -
&gt; +    
&gt;      unsigned int m_texture;
&gt;      unsigned int m_fbo;
&gt; -    unsigned int m_depthBuffer;
&gt; +    unsigned int m_depthStencilBuffer;
&gt;      unsigned int m_cachedWidth, m_cachedHeight;
&gt;  
&gt; +    // For multisampling
&gt; +    unsigned int m_multisampleFBO;
&gt; +    unsigned int m_multisampleDepthStencilBuffer;
&gt; +    unsigned int m_multisampleColorBuffer;
&gt; +
&gt;      // For tracking which FBO is bound
&gt;      unsigned int m_boundFBO;
&gt;  
&gt; @@ -351,7 +358,10 @@ GraphicsContext3DInternal::GraphicsConte
&gt;      : m_attrs(attrs)
&gt;      , m_texture(0)
&gt;      , m_fbo(0)
&gt; -    , m_depthBuffer(0)
&gt; +    , m_depthStencilBuffer(0)
&gt; +    , m_multisampleFBO(0)
&gt; +    , m_multisampleDepthStencilBuffer(0)
&gt; +    , m_multisampleColorBuffer(0)
&gt;      , m_boundFBO(0)
&gt;  #ifdef FLIP_FRAMEBUFFER_VERTICALLY
&gt;      , m_scanline(0)
&gt; @@ -375,14 +385,21 @@ GraphicsContext3DInternal::GraphicsConte
&gt;  #error Must port to your platform
&gt;  #endif
&gt;  {
&gt; -    // FIXME: we need to take into account the user&apos;s requested
&gt; -    // context creation attributes, in particular stencil and
&gt; -    // antialias, and determine which could and could not be honored
&gt; -    // based on the capabilities of the OpenGL implementation.
&gt; -    m_attrs.alpha = true;
&gt; -    m_attrs.depth = true;
&gt; -    m_attrs.stencil = false;
&gt; -    m_attrs.antialias = false;
&gt; +    // Take into account the user&apos;s requested context creation attributes, in
&gt; +    // particular stencil and antialias, and determine which could and could
&gt; +    // not be honored based on the capabilities of the OpenGL implementation.
&gt; +    if (m_attrs.stencil) {
&gt; +        if (GLEW_EXT_packed_depth_stencil) {
&gt; +            if (!m_attrs.depth)
&gt; +                m_attrs.depth = true;
&gt; +        } else {
&gt; +            m_attrs.stencil = false;
&gt; +        }
&gt; +    }
&gt; +    if (m_attrs.antialias &amp;&amp; !GLEW_EXT_framebuffer_multisample)
&gt; +        m_attrs.antialias = false;
&gt; +    // FIXME: instead of enforcing premultipliedAlpha = true, implement the
&gt; +    // correct behavior when premultipliedAlpha = false is requested.
&gt;      m_attrs.premultipliedAlpha = true;
&gt;  
&gt;  #if OS(WINDOWS)
&gt; @@ -572,7 +589,15 @@ GraphicsContext3DInternal::~GraphicsCont
&gt;  {
&gt;      makeContextCurrent();
&gt;  #ifndef RENDER_TO_DEBUGGING_WINDOW
&gt; -    glDeleteRenderbuffersEXT(1, &amp;m_depthBuffer);
&gt; +    if (m_attrs.antialias) {
&gt; +        glDeleteRenderbuffersEXT(1, &amp;m_multisampleColorBuffer);
&gt; +        if (m_attrs.depth || m_attrs.stencil)
&gt; +            glDeleteRenderbuffersEXT(1, &amp;m_multisampleDepthStencilBuffer);
&gt; +        glDeleteFramebuffersEXT(1, &amp;m_multisampleFBO);
&gt; +    } else {
&gt; +        if (m_attrs.depth || m_attrs.stencil)
&gt; +            glDeleteRenderbuffersEXT(1, &amp;m_depthStencilBuffer);
&gt; +    }
&gt;      glDeleteTextures(1, &amp;m_texture);
&gt;  #ifdef FLIP_FRAMEBUFFER_VERTICALLY
&gt;      if (m_scanline)
&gt; @@ -669,23 +694,86 @@ void GraphicsContext3DInternal::reshape(
&gt;          m_texture = createTextureObject(target);
&gt;          // Generate the framebuffer object
&gt;          glGenFramebuffersEXT(1, &amp;m_fbo);
&gt; -        // Generate the depth buffer
&gt; -        glGenRenderbuffersEXT(1, &amp;m_depthBuffer);
&gt; +        if (m_attrs.antialias) {
&gt; +            // Generate the multisample framebuffer object
&gt; +            glGenFramebuffersEXT(1, &amp;m_multisampleFBO);
&gt; +            // Generate the multisample color buffer
&gt; +            glGenRenderbuffersEXT(1, &amp;m_multisampleColorBuffer);
&gt; +            if (m_attrs.depth || m_attrs.stencil) {
&gt; +                // Generate the multisample depth/stencil buffer
&gt; +                glGenRenderbuffersEXT(1, &amp;m_multisampleDepthStencilBuffer);
&gt; +            }
&gt; +        } else {
&gt; +            if (m_attrs.depth || m_attrs.stencil) {
&gt; +                // Generate the depth/stencil buffer
&gt; +                glGenRenderbuffersEXT(1, &amp;m_depthStencilBuffer);
&gt; +            }
&gt; +        }
&gt;      }
&gt;  
&gt; -    // Reallocate the color and depth buffers
&gt; +    GLint internalColorFormat, colorFormat, internalDepthStencilFormat;
&gt; +    if (m_attrs.alpha) {
&gt; +        internalColorFormat = GL_RGBA8;
&gt; +        colorFormat = GL_RGBA;
&gt; +    } else {
&gt; +        internalColorFormat = GL_RGB8;
&gt; +        colorFormat = GL_RGB;
&gt; +    }
&gt; +    if (m_attrs.stencil || m_attrs.depth) {
&gt; +        // We don&apos;t allow the logic where stencil is required and depth is not.
&gt; +        // See GraphicsContext3DInternal constructor.
&gt; +        if (m_attrs.stencil &amp;&amp; m_attrs.depth)
&gt; +            internalDepthStencilFormat = GL_DEPTH24_STENCIL8_EXT;
&gt; +        else
&gt; +            internalDepthStencilFormat = GL_DEPTH_COMPONENT;
&gt; +    }
&gt; +
&gt; +    // Setup multisampling FBO
&gt; +    if (m_attrs.antialias) {
&gt; +        GLint sampleCount = 8;
&gt; +        GLint maxSampleCount;
&gt; +        glGetIntegerv(GL_MAX_SAMPLES_EXT, &amp;maxSampleCount);
&gt; +        if (sampleCount &gt; maxSampleCount)
&gt; +            sampleCount = maxSampleCount;

Use &quot;sampleCount = std::min(sampleCount, maxSampleCount);&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198892</commentid>
    <comment_count>14</comment_count>
      <attachid>50570</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-11 18:40:25 -0800</bug_when>
    <thetext>Created attachment 50570
modified acording to Ken Russell review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198896</commentid>
    <comment_count>15</comment_count>
      <attachid>50570</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-11 18:57:35 -0800</bug_when>
    <thetext>Comment on attachment 50570
modified acording to Ken Russell review 

Looks very good. Hopefully we can get this r+&apos;d quickly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198908</commentid>
    <comment_count>16</comment_count>
      <attachid>50570</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-11 19:17:02 -0800</bug_when>
    <thetext>Comment on attachment 50570
modified acording to Ken Russell review 

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199094</commentid>
    <comment_count>17</comment_count>
      <attachid>50570</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-12 09:14:22 -0800</bug_when>
    <thetext>Comment on attachment 50570
modified acording to Ken Russell review 

Rejecting patch 50570 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/build-webkit&apos;, &apos;--release&apos;]&quot; exit_code: 1
Last 500 characters of output:
lement.cpp -o /Users/eseidel/Projects/CommitQueue/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/i386/HTMLAudioElement.o
** BUILD FAILED **

The following build commands failed:
WebCore:
	Distributed-CompileC /Users/eseidel/Projects/CommitQueue/WebKitBuild/WebCore.build/Release/WebCore.build/Objects-normal/i386/GraphicsContext3DMac.o /Users/eseidel/Projects/CommitQueue/WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp normal i386 c++ com.apple.compilers.gcc.4_2
(1 failure)


Full output: http://webkit-commit-queue.appspot.com/results/662022</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199099</commentid>
    <comment_count>18</comment_count>
      <attachid>50603</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-12 09:34:34 -0800</bug_when>
    <thetext>Created attachment 50603
fix a warning that my compiler fails to catch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199890</commentid>
    <comment_count>19</comment_count>
      <attachid>50570</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-15 15:55:32 -0700</bug_when>
    <thetext>Comment on attachment 50570
modified acording to Ken Russell review 

Cleared Oliver Hunt&apos;s review+ from obsolete attachment 50570 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199930</commentid>
    <comment_count>20</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-15 17:25:19 -0700</bug_when>
    <thetext>Could we please get a review of the last patch? The only change is the fix of the uninitialized variable warning. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200305</commentid>
    <comment_count>21</comment_count>
      <attachid>50603</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-16 11:08:25 -0700</bug_when>
    <thetext>Comment on attachment 50603
fix a warning that my compiler fails to catch

R=me based on Oliver&apos;s previous review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200339</commentid>
    <comment_count>22</comment_count>
      <attachid>50603</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-16 11:53:56 -0700</bug_when>
    <thetext>Comment on attachment 50603
fix a warning that my compiler fails to catch

Clearing flags on attachment: 50603

Committed r56074: &lt;http://trac.webkit.org/changeset/56074&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200341</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-16 11:54:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200908</commentid>
    <comment_count>24</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-17 12:51:03 -0700</bug_when>
    <thetext>This patch uncovered some OpenGL driver bugs on the build bots and after much discussion it is being reverted. It will be re-applied via the commit queue once heuristics have been developed that can detect the driver bugs and (likely) disable antialiasing / multisampling. See the following bugs:

https://bugs.webkit.org/show_bug.cgi?id=36189
https://bugs.webkit.org/show_bug.cgi?id=36194
https://bugs.webkit.org/show_bug.cgi?id=36200
https://bugs.webkit.org/show_bug.cgi?id=36233</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203173</commentid>
    <comment_count>25</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-23 13:39:27 -0700</bug_when>
    <thetext>Last patch was canceled so now reopen this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203309</commentid>
    <comment_count>26</comment_count>
      <attachid>51472</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-23 19:20:32 -0700</bug_when>
    <thetext>Created attachment 51472
patch after Ken Russell&apos;s refac

Added code so that in Mac anti-alias is only on for NVIDIA cards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206253</commentid>
    <comment_count>27</comment_count>
      <attachid>51472</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-30 16:35:11 -0700</bug_when>
    <thetext>Comment on attachment 51472
patch after Ken Russell&apos;s refac

Looks good. Thanks for postponing this checkin and sorry for taking so long to look at the updated patch. Only one comment needing fixing; also two tiny typos.

&gt; Index: WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp	(revision 56398)
&gt; +++ WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp	(working copy)
&gt; @@ -174,14 +175,46 @@ GraphicsContext3D::~GraphicsContext3D()
&gt;  {
&gt;      if (m_contextObj) {
&gt;          CGLSetCurrentContext(m_contextObj);
&gt; -        ::glDeleteRenderbuffersEXT(1, &amp; m_depthBuffer);
&gt;          ::glDeleteTextures(1, &amp;m_texture);
&gt; +        if (m_attrs.antialias) {
&gt; +            ::glDeleteRenderbuffersEXT(1, &amp;m_multisampleColorBuffer);
&gt; +            if (m_attrs.stencil || m_attrs.depth)
&gt; +                ::glDeleteRenderbuffersEXT(1, &amp;m_multisampleDepthStencilBuffer);
&gt; +            ::glDeleteFramebuffersEXT(1, &amp;m_multisampleFBO);
&gt; +        } else {
&gt; +            if (m_attrs.stencil || m_attrs.depth)
&gt; +                ::glDeleteRenderbuffersEXT(1, &amp;m_depthStencilBuffer);
&gt; +        }
&gt;          ::glDeleteFramebuffersEXT(1, &amp;m_fbo);
&gt;          CGLSetCurrentContext(0);
&gt;          CGLDestroyContext(m_contextObj);
&gt;      }
&gt;  }
&gt;  
&gt; +void GraphicsContext3D::validateAttributes()
&gt; +{
&gt; +    const char* extensions = reinterpret_cast&lt;const char*&gt;(::glGetString(GL_EXTENSIONS));
&gt; +    if (m_attrs.stencil) {
&gt; +        if (std::strstr(extensions, &quot;GL_EXT_packed_depth_stencil&quot;)) {
&gt; +            if (!m_attrs.depth)
&gt; +                m_attrs.depth = true;
&gt; +        } else
&gt; +            m_attrs.stencil = false;
&gt; +    }
&gt; +    if (m_attrs.antialias) {
&gt; +        bool isValidVendor = true;
&gt; +        // Currentky in Mac we only turn on antialias if vendor is NVIDIA.

Currentky -&gt; Currently

&gt; Index: WebKit/chromium/src/GraphicsContext3D.cpp
&gt; ===================================================================
&gt; --- WebKit/chromium/src/GraphicsContext3D.cpp	(revision 56398)
&gt; +++ WebKit/chromium/src/GraphicsContext3D.cpp	(working copy)
&gt; @@ -812,6 +812,17 @@ PassRefPtr&lt;WebGLArray&gt; GraphicsContext3D
&gt;      // FIXME: take into account pack alignment.
&gt;      RefPtr&lt;WebGLUnsignedByteArray&gt; array = WebGLUnsignedByteArray::create(width * height * 4);
&gt;      m_impl-&gt;readPixels(x, y, width, height, format, type, array-&gt;baseAddress());
&gt; +#if PLATFORM(CG)
&gt; +    WebKit::WebGraphicsContext3D::Attributes webAttributes = m_impl-&gt;getContextAttributes();
&gt; +    if (!webAttributes.alpha) {
&gt; +        // If alpha is off, by default glReadPixels should set the alpha to 255 instead of 0.
&gt; +        // This is a hack until glReadPixels fixes its behavior.
&gt; +        GLubyte* data = reinterpret_cast&lt;GLubyte*&gt;(array-&gt;baseAddress());
&gt; +        unsigned byteLength = array-&gt;byteLength();
&gt; +        for (unsigned i = 3; i &lt; byteLength; i += 4)
&gt; +            data[i] = 255;
&gt; +    }
&gt; +#endif
&gt;      return array;
&gt;  }
&gt;  

Could you move this logic to WebGraphicsContext3DDefaultImpl::readPixels? We are going to want to implement this differently in the command buffer implementation of WebGraphicsContext3D. Note that you will need to expand out the macro currently used to define readPixels in WebGraphicsContext3DDefaultImpl.cpp.

&gt; Index: WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp
&gt; ===================================================================
&gt; --- WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp	(revision 56398)
&gt; +++ WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp	(working copy)
&gt; @@ -374,10 +375,40 @@ bool WebGraphicsContext3DDefaultImpl::in
&gt;          s_initializedGLEW = true;
&gt;      }
&gt;  
&gt; +    m_attributes = attributes;
&gt; +    validateAttributes();
&gt; +
&gt;      m_initialized = true;
&gt;      return true;
&gt;  }
&gt;  
&gt; +void WebGraphicsContext3DDefaultImpl::validateAttributes()
&gt; +{
&gt; +    const char* extensions = reinterpret_cast&lt;const char*&gt;(glGetString(GL_EXTENSIONS));
&gt; +
&gt; +    if (m_attributes.stencil) {
&gt; +        if (std::strstr(extensions, &quot;GL_EXT_packed_depth_stencil&quot;)) {
&gt; +            if (!m_attributes.depth)
&gt; +                m_attributes.depth = true;
&gt; +        } else
&gt; +            m_attributes.stencil = false;
&gt; +    }
&gt; +    if (m_attributes.antialias) {
&gt; +        bool isValidVendor = true;
&gt; +#if PLATFORM(CG)
&gt; +        // Currentky in Mac we only turn on antialias if vendor is NVIDIA.

Same typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206302</commentid>
    <comment_count>28</comment_count>
      <attachid>52111</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-30 18:12:19 -0700</bug_when>
    <thetext>Created attachment 52111
revised patch : responding to Ken Russell&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206307</commentid>
    <comment_count>29</comment_count>
      <attachid>52111</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-30 18:18:45 -0700</bug_when>
    <thetext>Comment on attachment 52111
revised patch : responding to Ken Russell&apos;s review

Could you please regenerate the ChangeLogs to reflect the current state of the code? WebKit/chromium/src/GraphicsContext3D.cpp still shows up as modified, even though the patch no longer touches it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206315</commentid>
    <comment_count>30</comment_count>
      <attachid>52114</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-30 18:29:19 -0700</bug_when>
    <thetext>Created attachment 52114
revised patch : fixed the changeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206321</commentid>
    <comment_count>31</comment_count>
      <attachid>52114</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-30 18:52:34 -0700</bug_when>
    <thetext>Comment on attachment 52114
revised patch : fixed the changeLog

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206365</commentid>
    <comment_count>32</comment_count>
      <attachid>52114</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-30 22:38:43 -0700</bug_when>
    <thetext>Comment on attachment 52114
revised patch : fixed the changeLog

&gt; Index: WebKit/chromium/public/WebGraphicsContext3D.h
...
&gt;      // This destructor needs to be public so that using classes can destroy instances if initialization fails.
&gt; -    virtual ~WebGraphicsContext3D() {}
&gt; +    virtual ~WebGraphicsContext3D();
...
&gt; Index: WebKit/chromium/src/WebGraphicsContext3D.cpp
...
&gt; +WebGraphicsContext3D::~WebGraphicsContext3D()
&gt; +{
&gt; +}

why this change?  please note that if this destructor needs to be exported
from WebKit that we&apos;ll need to add WEBKIT_API to its declaration, but I
think it would be better to leave it implemented inline in the header file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206405</commentid>
    <comment_count>33</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-31 01:19:43 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 52114 [details])
&gt; &gt; Index: WebKit/chromium/public/WebGraphicsContext3D.h
&gt; ...
&gt; &gt;      // This destructor needs to be public so that using classes can destroy instances if initialization fails.
&gt; &gt; -    virtual ~WebGraphicsContext3D() {}
&gt; &gt; +    virtual ~WebGraphicsContext3D();
&gt; ...
&gt; &gt; Index: WebKit/chromium/src/WebGraphicsContext3D.cpp
&gt; ...
&gt; &gt; +WebGraphicsContext3D::~WebGraphicsContext3D()
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; why this change?  please note that if this destructor needs to be exported
&gt; from WebKit that we&apos;ll need to add WEBKIT_API to its declaration, but I
&gt; think it would be better to leave it implemented inline in the header file.

With Mo&apos;s changes we saw bizarre linker errors claiming that the vtbl of WebGraphicsContext3D was undefined. As far as I know the rule is that the translation unit containing the definition of the first virtual function for a class is the one into which the vtbl is emitted. Because this destructor was both virtual and inline I think that was breaking the compiler&apos;s heuristics about where to emit the vtbl. Moving the body to the .cpp file solved this error.

It is possible that the error was triggered due to another bug in the code at the time. Mo, can you try moving the body of the destructor back into the header and see whether it compiles and links properly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206505</commentid>
    <comment_count>34</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-31 07:54:34 -0700</bug_when>
    <thetext>I&apos;d be shocked if the destructor being inlined caused problems since we have so many other virtual and inline destructors in the codebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206585</commentid>
    <comment_count>35</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-31 11:01:37 -0700</bug_when>
    <thetext>Moved the destructor inline and it linked fine.  I guess the original linking problem was caused by something else.  Will revise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206587</commentid>
    <comment_count>36</comment_count>
      <attachid>52187</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-31 11:03:40 -0700</bug_when>
    <thetext>Created attachment 52187
revised patch: responding to Darin Fisher&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206601</commentid>
    <comment_count>37</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-31 11:18:40 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; Created an attachment (id=52187) [details]
&gt; revised patch: responding to Darin Fisher&apos;s review.

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206754</commentid>
    <comment_count>38</comment_count>
      <attachid>52187</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-31 15:15:11 -0700</bug_when>
    <thetext>Comment on attachment 52187
revised patch: responding to Darin Fisher&apos;s review.

Clearing flags on attachment: 52187

Committed r56872: &lt;http://trac.webkit.org/changeset/56872&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206755</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-31 15:15:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206844</commentid>
    <comment_count>40</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-31 17:34:02 -0700</bug_when>
    <thetext>This introduced 3 failures on Snow Leopard:
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r56872%20(7489)/results.html

This would have been automatically rolled out if Snow Leopard was a core builder, but since it isn&apos;t you&apos;re getting this manual warning from me. :)

Please fix or I&apos;ll roll this out later this evening/tomorrow morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206849</commentid>
    <comment_count>41</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-31 17:47:19 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; This introduced 3 failures on Snow Leopard:
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r56872%20(7489)/results.html
&gt; 
&gt; This would have been automatically rolled out if Snow Leopard was a core
&gt; builder, but since it isn&apos;t you&apos;re getting this manual warning from me. :)
&gt; 
&gt; Please fix or I&apos;ll roll this out later this evening/tomorrow morning.

We&apos;re working on fixing these test failures right now. See bug 36910. The tests are actually incorrect; the new code is working. Please don&apos;t roll this out -- we&apos;ve been trying to get it landed for a couple of weeks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206852</commentid>
    <comment_count>42</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-31 17:50:21 -0700</bug_when>
    <thetext>Sorry, my comment sounded way more like a &quot;threat&quot; than it should have. :)  I have no intention of rolling it out since someone is working on it!  I just wanted to assure the rest of webkit.org that since the commit was under my name I would take responsibility for making sure the bots got un-broke.  Glad to hear you&apos;re on it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232016</commentid>
    <comment_count>43</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-28 17:03:33 -0700</bug_when>
    <thetext>This cause a bad performance and flickering regression on my hardware: bug 38560.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50438</attachid>
            <date>2010-03-10 14:24:10 -0800</date>
            <delta_ts>2010-03-10 14:42:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>attrs.patch</filename>
            <type>text/plain</type>
            <size>68028</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTgwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE3ICsxLDE4IEBACi0yMDEwLTAzLTEwICBDaGFybGVzIFdlaSAgPGNoYXJsZXMud2VpQHRv
cmNobW9iaWxlLmNvbS5jbj4KKzIwMTAtMDMtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNv
bT4KIAotICAgICAgICBSZXZpZXdlZCBieSBHZW9yZ2UgU3RhaWtvcy4KKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKLSAgICAgICAgRml4IGh0dHBzOi8vYnVncy53ZWJraWcu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNTIwNwotICAgICAgICBXaGVuIFhIVE1MTVAgaXMgZW5hYmxl
ZCwgYWxsIHhodG1sIGRvY3VtZW50cyBmYWlsIHRvIHJlbmRlciBmb3Igd2Via2l0IHBvcnRpbmdz
IHdpY2ggdXNlIGxpYnhtbDIgdG9rZW5pemVyLgorICAgICAgICBIb29rIHVwIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKIAotICAgICAgICBObyBu
ZXcgdGVzdHMgYXMgYWxsIHRoZSB4aHRtbCB0ZXN0IGNhc2VzIGluIExheW91dFRlc3RzL2RvbS94
aHRtbCBmYWlscyB3aXRob3V0IHRoaXMgZml4IHdoZW4gWEhUTUxNUCBpcyBlbmFibGVkLgorICAg
ICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVw
dGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAogCi0gICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoK
LSAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojppc1hIVE1MTVBEb2N1bWVudCk6Ci0gICAgICAg
ICogZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwOgotICAgICAgICAoV2ViQ29yZTo6WE1MVG9r
ZW5pemVyOjppbnRlcm5hbFN1YnNldCk6Ci0gICAgICAgIChXZWJDb3JlOjpleHRlcm5hbFN1YnNl
dEhhbmRsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcDogRml4IGFuIGluZGV4IGJ1Zy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBBZGQgbWVtYmVycy9mdW5jdGlvbnMgZm9yIG11bHRp
c2FtcGxpbmcvc3RlbmNpbCBidWZmZXIgcHVycG9zZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ2FudmFzM0RMYXllci5oOiBBZGQgR3JhcGhpY3NDb250ZXh0M0QgYXMgYSBtZW1i
ZXIgb2YgQ2FudmFzM0RMYXllci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2Fu
dmFzM0RMYXllci5tbTogQWRkIG11bHRpc2FtcGxpbmcgc3VwcG9ydC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOiBIb29rIHVwIFdlYkdM
Q29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgTWFj
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW06IEFk
anVzdCB0byBtb2RpZmllZCBDYW52YXMzRExheWVyIGluaXQgY2FsbC4KIAogMjAxMC0wMy0xMCAg
R2FycmV0IEtlbGx5ICA8Z2RrQGNocm9taXVtLm9yZz4KIApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDU1Nzk5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZhc0VsZW1lbgogICAgIGlmIChjb250ZXh0SWQg
PT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgY29udGV4dElkID09ICJ3ZWJraXQtM2QiKSB7CiAg
ICAgICAgIGF0dHJzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCk7CiAgICAgICAg
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqIHdlYkdMQXR0cnMgPSBzdGF0aWNfY2FzdDxXZWJHTENv
bnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMuZ2V0KCkpOwotICAgICAgICBpZiAoYXJncy5MZW5ndGgo
KSA+IDEgJiYgYXJnc1swXS0+SXNPYmplY3QoKSkgeworICAgICAgICBpZiAoYXJncy5MZW5ndGgo
KSA+IDEgJiYgYXJnc1sxXS0+SXNPYmplY3QoKSkgewogICAgICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBqc0F0dHJzID0gYXJnc1sxXS0+VG9PYmplY3QoKTsKICAgICAgICAgICAgIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gYWxwaGEgPSB2ODo6U3RyaW5nOjpOZXcoImFscGhhIik7CiAg
ICAgICAgICAgICBpZiAoanNBdHRycy0+SGFzKGFscGhhKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDU1Nzk5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgR3Jh
cGhpY3NDb250ZXh0M0RfaApAQCAtMzg5LDcgKzM4OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgIE1BWF9SRU5ERVJCVUZGRVJfU0laRSA9IDB4ODRFOCwKICAgICAgICAgICAg
IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OID0gMHgwNTA2CiAgICAgICAgIH07Ci0gICAg
ICAgIAorCiAgICAgICAgIC8vIENvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcy4KICAgICAgICAg
c3RydWN0IEF0dHJpYnV0ZXMgewogICAgICAgICAgICAgQXR0cmlidXRlcygpCkBAIC00MjUsNyAr
NDI1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCBw
bGF0Zm9ybVRleHR1cmUoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm0zRE9iamVjdDsgfQog
I2VuZGlmCiAgICAgICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgIAorCisj
aWYgUExBVEZPUk0oTUFDKQorICAgICAgICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQg
ZnJvbSBtdWx0aXNhbXBsZUZCTyB0byByZWd1bGFyIEZCTy4KKyAgICAgICAgdm9pZCBwcmVwYXJl
VGV4dHVyZSgpOworI2VuZGlmCisKICAgICAgICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6
ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcwogICAgICAgICAvLyBsaWtlIEdMX0ZMT0FU
LCBHTF9JTlQsIGV0Yy4KICAgICAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKQEAgLTQ5
OSwxMCArNTA0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhclN0
ZW5jaWwobG9uZyBzKTsKICAgICAgICAgdm9pZCBjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3Jl
ZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CiAgICAgICAgIHZvaWQgY29tcGlsZVNoYWRlcihX
ZWJHTFNoYWRlciopOwotICAgICAgICAKKwogICAgICAgICAvL3ZvaWQgY29tcHJlc3NlZFRleElt
YWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50
ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBs
b25nIGJvcmRlciwgdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwog
ICAgICAgICAvL3ZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKLSAgICAgICAgCisKICAgICAg
ICAgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CiAgICAgICAgIHZv
aWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxv
bmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgICAgICB2b2lkIGN1bGxGYWNlKHVuc2ln
bmVkIGxvbmcgbW9kZSk7CkBAIC01ODQsOSArNTg5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwogICAgICAgICB2b2lkIHBp
eGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOwogICAgICAgICB2b2lk
IHBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKTsKLSAgICAgICAgCisK
ICAgICAgICAgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9u
ZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQg
cmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiAgICAgICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFn
ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgICAgICB2b2lkIHNh
bXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOwpAQCAtNjQ3LDcgKzY1Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCiAgICAg
ICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgICAgICAKKwogICAg
ICAgICAvLyBIZWxwZXJzIGZvciBub3RpZmljYXRpb24gYWJvdXQgcGFpbnQgZXZlbnRzCiAgICAg
ICAgIHZvaWQgYmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOwogICAg
ICAgICB2b2lkIGVuZFBhaW50KCk7CkBAIC02NTksMTQgKzY2NCwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHVuc2lnbmVkIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogICAgICAgICB1
bnNpZ25lZCBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyk7CiAgICAgICAgIHVuc2lnbmVkIGNy
ZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBkZWxldGVCdWZmZXIodW5z
aWduZWQpOwogICAgICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkKTsKICAgICAg
ICAgdm9pZCBkZWxldGVQcm9ncmFtKHVuc2lnbmVkKTsKICAgICAgICAgdm9pZCBkZWxldGVSZW5k
ZXJidWZmZXIodW5zaWduZWQpOwogICAgICAgICB2b2lkIGRlbGV0ZVNoYWRlcih1bnNpZ25lZCk7
Ci0gICAgICAgIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCk7ICAgICAgICAKLSAgICAgICAg
CisgICAgICAgIHZvaWQgZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCk7CisKICAgICAgICAgLy8gU3lu
dGhlc2l6ZXMgYW4gT3BlbkdMIGVycm9yIHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBhCiAg
ICAgICAgIC8vIGxhdGVyIGNhbGwgdG8gZ2V0RXJyb3IuIFRoaXMgaXMgdXNlZCB0byBlbXVsYXRl
IE9wZW5HTCBFUwogICAgICAgICAvLyAyLjAgYmVoYXZpb3Igb24gdGhlIGRlc2t0b3AgYW5kIHRv
IGVuZm9yY2UgYWRkaXRpb25hbCBlcnJvcgpAQCAtNjc3LDcgKzY4Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgLy8gZ2V0RXJyb3IgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRl
ZC4KICAgICAgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKTsK
IAotICAgIHByaXZhdGU6ICAgICAgICAKKyAgICBwcml2YXRlOgogICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzKTsKIAogICAgICAgICAvLyBIZWxwZXJzIGZvciB0ZXh0
dXJlIHVwbG9hZGluZy4KQEAgLTcwOSwxOCArNzE0LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBmb3JtYXQpOwogCiAgICAg
ICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0OwotICAgICAgICAKKwogI2lm
IFBMQVRGT1JNKE1BQykKICAgICAgICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgICAgICBWZWN0
b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7Ci0gICAgICAgIAorCiAgICAgICAgIENH
TENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgICAgICBHTHVpbnQgbV90ZXh0dXJlOwogICAg
ICAgICBHTHVpbnQgbV9mYm87Ci0gICAgICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOworICAgICAg
ICBHTHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAgICAgICAgLy8gRm9yIG11bHRpc2Ft
cGxpbmcKKyAgICAgICAgR0x1aW50IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIEdMdWludCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOworICAgICAgICBHTHVpbnQgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyOworCiAgICAgICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6
ZUdMRXJyb3IoKS4KICAgICAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0
aWNFcnJvcnM7Ci0jZW5kaWYgICAgICAgIAorI2VuZGlmCiAKICAgICAgICAgLy8gRklYTUU6IGlk
ZWFsbHkgdGhpcyB3b3VsZCBiZSB1c2VkIG9uIGFsbCBwbGF0Zm9ybXMuCiAjaWYgUExBVEZPUk0o
Q0hST01JVU0pIHx8IFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ2FudmFzM0RMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDE2ICszMiwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NM
YXllcjsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIH0KIAogQGludGVyZmFjZSBDYW52
YXMzRExheWVyIDogQ0FPcGVuR0xMYXllciAKIHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiBtX2xheWVyT3duZXI7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4
dDsKICAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsKICAgICBHTHVpbnQgbV90ZXh0dXJl
OwogfQogCi0tIChpZClpbml0V2l0aENvbnRleHQ6KENHTENvbnRleHRPYmopY29udGV4dCB0ZXh0
dXJlOihHTHVpbnQpdGV4dHVyZTsKKy0gKGlkKWluaXRXaXRoQ29udGV4dDooV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0QqKWNvbnRleHQ7CiAKIC0gKENHSW1hZ2VSZWYpY29weUltYWdlU25hcHNo
b3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2U7CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQkocmV2aXNp
b24gNTU3OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkNhbnZhczNE
TGF5ZXIuaCIKIAorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbXBvcnQgIkdyYXBo
aWNzTGF5ZXIuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8
T3BlbkdML09wZW5HTC5oPgpAQCAtNDEsMTAgKzQyLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBAaW1wbGVtZW50YXRpb24gQ2FudmFzM0RMYXllcgogCi0tKGlkKWluaXRXaXRoQ29u
dGV4dDooQ0dMQ29udGV4dE9iailjb250ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJlCistKGlk
KWluaXRXaXRoQ29udGV4dDooR3JhcGhpY3NDb250ZXh0M0QqKWNvbnRleHQKIHsKLSAgICBtX2Nv
bnRleHRPYmogPSBjb250ZXh0OwotICAgIG1fdGV4dHVyZSA9IHRleHR1cmU7CisJbV9jb250ZXh0
ID0gY29udGV4dDsKKyAgICBtX2NvbnRleHRPYmogPSBzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2Jq
Pihjb250ZXh0LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIG1fdGV4dHVyZSA9
IHN0YXRpY19jYXN0PEdMdWludD4oY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCkpOwogICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC03MCwyMCArNzIsMjAg
QEAgLShDR0xDb250ZXh0T2JqKWNvcHlDR0xDb250ZXh0Rm9yUGl4ZWxGbwogCiAtKHZvaWQpZHJh
d0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailnbENvbnRleHQgcGl4ZWxGb3JtYXQ6KENHTFBp
eGVsRm9ybWF0T2JqKXBpeGVsRm9ybWF0IGZvckxheWVyVGltZTooQ0ZUaW1lSW50ZXJ2YWwpdGlt
ZUludGVydmFsIGRpc3BsYXlUaW1lOihjb25zdCBDVlRpbWVTdGFtcCAqKXRpbWVTdGFtcAogewot
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgZ2xGaW5pc2goKTsK
KwltX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CisKICAgICBDR0xTZXRDdXJyZW50Q29udGV4
dChnbENvbnRleHQpOwogCiAgICAgQ0dSZWN0IGZyYW1lID0gW3NlbGYgZnJhbWVdOwotICAgICAg
ICAKLSAgICAvLyBkcmF3IHRoZSBGQk8gaW50byB0aGUgbGF5ZXIKKworCS8vIGRyYXcgdGhlIEZC
TyBpbnRvIHRoZSBsYXllcgogICAgIGdsVmlld3BvcnQoMCwgMCwgZnJhbWUuc2l6ZS53aWR0aCwg
ZnJhbWUuc2l6ZS5oZWlnaHQpOwogICAgIGdsTWF0cml4TW9kZShHTF9QUk9KRUNUSU9OKTsKICAg
ICBnbExvYWRJZGVudGl0eSgpOwogICAgIGdsT3J0aG8oLTEsIDEsIC0xLCAxLCAtMSwgMSk7CiAg
ICAgZ2xNYXRyaXhNb2RlKEdMX01PREVMVklFVyk7CiAgICAgZ2xMb2FkSWRlbnRpdHkoKTsKLQor
CQogICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpOwogICAgIGdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV90ZXh0dXJlKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHJldmlzaW9uIDU1
Nzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RN
YWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTUzLDI1ICs1MywyNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBzdGF0aWMgdm9pZCBzZXRQaXhlbEZvcm1hdChWZWN0b3I8Q0dMUGl4ZWxGb3Jt
YXRBdHRyaWJ1dGU+JiBhdHRyaWJzLCBpbnQgY29sb3JCaXRzLCBpbnQgZGVwdGhCaXRzLCBib29s
IGFjY2VsZXJhdGVkLCBib29sIHN1cGVyc2FtcGxlLCBib29sIGNsb3Nlc3QpCiB7CiAgICAgYXR0
cmlicy5jbGVhcigpOwotICAgIAorCiAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUNvbG9yU2l6
ZSk7CiAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGU+KGNvbG9yQml0cykpOwogICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFEZXB0aFNpemUpOwog
ICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRlPihk
ZXB0aEJpdHMpKTsKLSAgICAKKwogICAgIGlmIChhY2NlbGVyYXRlZCkKICAgICAgICAgYXR0cmli
cy5hcHBlbmQoa0NHTFBGQUFjY2VsZXJhdGVkKTsKICAgICBlbHNlIHsKICAgICAgICAgYXR0cmli
cy5hcHBlbmQoa0NHTFBGQVJlbmRlcmVySUQpOwogICAgICAgICBhdHRyaWJzLmFwcGVuZChzdGF0
aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oa0NHTFJlbmRlcmVyR2VuZXJpY0Zsb2F0
SUQpKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgaWYgKHN1cGVyc2FtcGxlKQogICAgICAgICBh
dHRyaWJzLmFwcGVuZChrQ0dMUEZBU3VwZXJzYW1wbGUpOwotICAgICAgICAKKwogICAgIGlmIChj
bG9zZXN0KQogICAgICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBQ2xvc2VzdFBvbGljeSk7Ci0g
ICAgICAgIAorCiAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGljX2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRB
dHRyaWJ1dGU+KDApKTsKIH0KIApAQCAtODYsMjIgKzg2LDI0IEBAIEdyYXBoaWNzQ29udGV4dDNE
OjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICAsIG1fY29udGV4dE9iaigwKQogICAgICwgbV90
ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQotewotICAg
IC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVz
dGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLCBpbiBwYXJ0aWN1bGFyIHN0
ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIGFu
ZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMg
b2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAgICBtX2F0dHJzLmFscGhhID0gdHJ1ZTsK
LSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsK
LSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQorewor
ICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3Jl
YXRpb24gYXR0cmlidXRlcywgaW4KKyAgICAvLyBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlh
bGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQgY291bGQKKyAgICAvLyBub3QgYmUg
aG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50
YXRpb24uCisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCAmJiAhbV9hdHRycy5kZXB0aCkKKyAgICAg
ICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAgLy8gRklYTUU6IGluc3RlYWQgb2YgZW5mb3Jj
aW5nIHByZW11bHRpcGxpZWRBbHBoYSA9IHRydWUsIGltcGxlbWVudCB0aGUKKyAgICAvLyBjb3Jy
ZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2UgaXMgcmVxdWVzdGVk
LgogICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKIAogICAgIFZlY3RvcjxD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBw
aXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKLSAgICAK
KwogICAgIC8vIFdlIHdpbGwgdHJ5OgogICAgIC8vCiAgICAgLy8gIDEpIDMyIGJpdCBSR0JBLzMy
IGJpdCBkZXB0aC9hY2NlbGVyYXRlZC9zdXBlcnNhbXBsZWQKQEAgLTExMCwyMSArMTEyLDIxIEBA
IEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICAvLyAgNCkgY2xv
c2VzdCB0byAzMiBiaXQgUkdCQS8xNiBiaXQgZGVwdGgvc29mdHdhcmUgcmVuZGVyZXIKICAgICAv
LwogICAgIC8vICBJZiBub25lIG9mIHRoYXQgd29ya3MsIHdlIHNpbXBseSBmYWlsIGFuZCBzZXQg
bV9jb250ZXh0T2JqIHRvIDAuCi0gICAgCisKICAgICBzZXRQaXhlbEZvcm1hdChhdHRyaWJzLCAz
MiwgMzIsIHRydWUsIHRydWUsIGZhbHNlKTsKICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRy
aWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKICAgICBpZiAo
bnVtUGl4ZWxGb3JtYXRzID09IDApIHsKICAgICAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywg
MzIsIDMyLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1h
dChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKLSAg
ICAgICAgCisKICAgICAgICAgaWYgKG51bVBpeGVsRm9ybWF0cyA9PSAwKSB7CiAgICAgICAgICAg
ICBzZXRQaXhlbEZvcm1hdChhdHRyaWJzLCAzMiwgMTYsIHRydWUsIGZhbHNlLCBmYWxzZSk7CiAg
ICAgICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9y
bWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKLSAgICAgICAgCisKICAgICAgICAgICAgIGlmIChu
dW1QaXhlbEZvcm1hdHMgPT0gMCkgewogICAgICAgICAgICAgICAgIHNldFBpeGVsRm9ybWF0KGF0
dHJpYnMsIDMyLCAxNiwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICBDR0xD
aG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLmRhdGEoKSwgJnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4
ZWxGb3JtYXRzKTsKLSAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAobnVtUGl4ZWxGb3Jt
YXRzID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQ291bGQgbm90IGZpbmQgYW4gYWNj
ZXB0YWJsZSByZW5kZXJlciAtIGZhaWwKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTMyLDEwICsxMzQsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQ0dMRXJyb3Ig
ZXJyID0gQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdE9iaiwgMCwgJm1fY29udGV4dE9iaik7
CiAgICAgQ0dMRGVzdHJveVBpeGVsRm9ybWF0KHBpeGVsRm9ybWF0T2JqKTsKLSAgICAKKwogICAg
IGlmIChlcnIgIT0ga0NHTE5vRXJyb3IgfHwgIW1fY29udGV4dE9iaikgewogICAgICAgICAvLyBD
b3VsZCBub3QgY3JlYXRlIHRoZSBjb250ZXh0IC0gZmFpbAogICAgICAgICBtX2NvbnRleHRPYmog
PSAwOwpAQCAtMTQ0LDcgKzE0Niw3IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRl
eHQzRChHcmEKIAogICAgIC8vIFNldCB0aGUgY3VycmVudCBjb250ZXh0IHRvIHRoZSBvbmUgZ2l2
ZW4gdG8gdXMuCiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICAK
KwogICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8KICAgICA6OmdsR2VuVGV4
dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZSk7CkBAIC0xNTIsMjEgKzE1NCwyMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhCiAgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwogICAgIDo6Z2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUCk7CiAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QKTsK
LSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBOCwgMSwgMSwgMCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOwotICAgIAorCisgICAgLy8gY3JlYXRlIGFuIG11bHRpc2FtcGxlIEZCTwor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJz
RVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJz
RVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKICAgICAv
LyBjcmVhdGUgYW4gRkJPCiAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwot
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0g
ICAgCi0gICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOwotICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZm
ZXIpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IEdMX0RFUFRIX0NPTVBPTkVOVCwgMSwgMSk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgCi0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICAKKyAgICBpZiAoIW1fYXR0cnMuYW50
aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpCisgICAgICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisKICAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIH0KIApAQCAtMTc0LDggKzE3NiwxNiBAQCBHcmFw
aGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKICAgICBpZiAobV9jb250ZXh0
T2JqKSB7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAg
ICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICYgbV9kZXB0aEJ1ZmZlcik7CiAgICAg
ICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAgICAgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgx
LCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
ICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CiAgICAgICAgIDo6Z2xEZWxldGVGcmFt
ZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7
CiAgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7CkBAIC0yMDAsMzAgKzIx
MCw4NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiB7CiAgICAg
aWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQg
fHwgIW1fY29udGV4dE9iaikKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbV9jdXJyZW50
V2lkdGggPSB3aWR0aDsKICAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgCisKICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgIAorCisgICAgR0x1aW50
IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9y
bWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29s
b3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9h
dHRycy5kZXB0aCkgeworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsICYmIG1fYXR0cnMuZGVw
dGgpIHsKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgy
NF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIH0gZWxzZSB7ICAvLyAhbV9hdHRycy5zdGVuY2lsICYm
IG1fYXR0cnMuZGVwdGgKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3
aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVzIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgICAgICAv
LyBTZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCisgICAgICAgICAgICBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIHJlc2V0IHRleHR1cmUKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBH
TF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwog
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICAKKworICAgIC8vIHJl
c2V0IG11bHRpc2FtcGxlIEZCTworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAg
ICBHTGludCBzYW1wbGVDb3VudCA9IDg7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50Owor
ICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfRVhULCAmbWF4U2FtcGxlQ291
bnQpOworICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1wbGVDb3VudCkKKyAgICAgICAg
ICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxDb2xvckZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0
cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
CisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9h
dHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0K
KyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7
CisgICAgICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJf
RVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBjbGVhbnVwLgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIHJlc2V0IHJlZ3VsYXIgRkJPCiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQs
IHdpZHRoLCBoZWlnaHQpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIDApOwotICAgIAogICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgR0xlbnVtIHN0YXR1cyA9IDo6Z2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKLSAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAg
ICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5k
ZXB0aCkpIHsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIDApOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAg
ICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
U1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZG
RVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgLy8gRklY
TUU6IGNsZWFudXAuCiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgfQogCi0gICAgOjpn
bENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOworCisgICAgR0xlbnVtIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9C
SVQ7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBU
SF9CVUZGRVJfQklUOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgIGNsZWFyTWFz
ayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CiAg
ICAgOjpnbEZsdXNoKCk7CiB9CiAKQEAgLTIzMSw3ICsyOTgsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgZW5zdXJlQ29udGV4dChDR0xDb250CiB7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAorCiAgICAgQ0dMQ29udGV4dE9iaiBjdXJyZW50Q29udGV4dCA9IENH
TEdldEN1cnJlbnRDb250ZXh0KCk7CiAgICAgaWYgKGN1cnJlbnRDb250ZXh0ICE9IGNvbnRleHQp
CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQpOwpAQCAtMjQzLDYgKzMxMCwx
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuCiAgICAgOjpnbEFj
dGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBh
cmVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZW5z
dXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAg
ICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0NPTE9S
X0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEZpbmlz
aCgpOworICAgIH0KK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7CkBAIC0yNjQsNyArMzQzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZEJ1ZmZlcih1bnNpZwogICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyID8gKEdMdWlu
dCkgYnVmZmVyLT5vYmplY3QoKSA6IDApOwogfQogCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciog
YnVmZmVyKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKQEAgLTMwNyw3ICsz
ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmModW5zaWduCiB7CiAgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3Rvciwg
ZGZhY3Rvcik7Ci19ICAgICAgIAorfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1
bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVu
c2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpCiB7CkBAIC0zMjQs
NyArNDAyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZwogewog
ICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIDo6Z2xCdWZmZXJEYXRh
KHRhcmdldCwgYXJyYXktPmJ5dGVMZW5ndGgoKSwgYXJyYXktPmJhc2VBZGRyZXNzKCksIHVzYWdl
KTsKIH0KQEAgLTMzMyw3ICs0MTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJT
dWJEYXRhKHVuCiB7CiAgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAg
OjpnbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFy
cmF5LT5iYXNlQWRkcmVzcygpKTsKIH0KQEAgLTUxOCw3ICs1OTYsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoCiAgICAgaW5mby5zaXplID0gc2l6ZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFwcm9ncmFtLT5vYmplY3QoKSkgewpAQCAtNTQ1LDcg
KzYyMyw3IEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24KIHsKICAg
ICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKLSAgICAKKwogICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKICAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKChH
THVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtNTg0
LDcgKzY2Miw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFdlYkdMQnUKIHsK
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgZW5z
dXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIHJldHVybiA6OmdsSXNCdWZmZXIoKEdMdWlu
dCkgYnVmZmVyLT5vYmplY3QoKSk7CiB9CkBAIC01OTksNyArNjc3LDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihXZQogewogICAgIGlmICghZnJhbWVidWZmZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKICAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoKEdMdWludCkgZnJhbWVidWZm
ZXItPm9iamVjdCgpKTsKIH0KQEAgLTYwOCw3ICs2ODYsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc1Byb2dyYW0oV2ViR0xQCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAg
cmV0dXJuIDo6Z2xJc1Byb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOwogfQpAQCAt
NjE3LDcgKzY5NSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFcK
IHsKICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIHJldHVybiA6OmdsSXNSZW5k
ZXJidWZmZXJFWFQoKEdMdWludCkgcmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7CiB9CkBAIC02MjYs
NyArNzA0LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoV2ViR0xTaAogewog
ICAgIGlmICghc2hhZGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBlbnN1
cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcigoR0x1aW50
KSBzaGFkZXItPm9iamVjdCgpKTsKIH0KQEAgLTYzNSw3ICs3MTMsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjppc1RleHR1cmUoV2ViR0xUCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CiAgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUoKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkpOwog
fQpAQCAtNjY4LDE3ICs3NDYsMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9m
ZnNldChkbwogUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBp
eGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7CiAgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIAorCiAgICAgLy8gRklYTUU6IEZvciBu
b3cgd2Ugb25seSBhY2NlcHQgR0xfVU5TSUdORURfQllURS9HTF9SR0JBLiBJbiByZWFsaXR5IE9w
ZW5HTCBFUyAyLjAgYWNjZXB0cyB0aGF0IHBhaXIgYW5kIG9uZSBvdGhlcgogICAgIC8vIGFzIHNw
ZWNpZmllZCBieSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCBhbmQgR0xfSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFLiBCdXQgZm9yIG5vdyB3ZSB3aWxsCiAgICAgLy8g
bm90IGFjY2VwdCB0aG9zZS4KICAgICAvLyBGSVhNRTogQWxzbywgd2Ugc2hvdWxkIHRocm93IHdo
ZW4gYW4gdW5hY2NlcHRhYmxlIHZhbHVlIGlzIHBhc3NlZAogICAgIGlmICh0eXBlICE9IEdMX1VO
U0lHTkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdMX1JHQkEpCiAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAKKworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwg
bV9mYm8pOworICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwg
eSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJf
QklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KICAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVB
cnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWln
aHQgKiA0KTsKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIChHTHZvaWQqKSBhcnJheS0+ZGF0YSgpKTsKLSAgICByZXR1cm4gYXJyYXk7ICAgIAor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgIGlmICghbV9hdHRy
cy5hbHBoYSkgeworICAgICAgICAvLyBJZiBhbHBoYSBpcyBvZmYsIGJ5IGRlZmF1bHQgZ2xSZWFk
UGl4ZWxzIHNob3VsZCBzZXQgdGhlIGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCisgICAgICAg
IC8vIFRoaXMgaXMgYSBoYWNrIHVudGlsIDo6Z2xSZWFkUGl4ZWxzIGZpeGVzIGl0cyBiZWhhdmlv
ci4KKyAgICAgICAgR0x1Ynl0ZSogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KGFy
cmF5LT5kYXRhKCkpOworICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVM
ZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkg
Kz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAyNTU7CisgICAgfQorICAgIHJldHVybiBhcnJh
eTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkK
QEAgLTcwOSwxMSArODAzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IobG9u
ZyB4LCAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciog
c2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAg
ICAKKwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICBjb25zdCBDU3RyaW5n
JiBjcyA9IHN0cmluZy51dGY4KCk7CiAgICAgY29uc3QgY2hhciogcyA9IGNzLmRhdGEoKTsKLSAg
ICAKKwogICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgOjpnbFNoYWRlclNv
dXJjZSgoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCAxLCAmcywgJmxlbmd0aCk7CiB9CkBAIC04
OTIsNyArOTg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdgog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0p
CiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOwogICAgIDo6Z2xVc2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
KTsKIH0KQEAgLTkwMCw3ICs5OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9n
cmFtKFdlYkdMCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICAKKwogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsVmFsaWRhdGVQcm9ncmFtKChHTHVp
bnQpIHByb2dyYW0tPm9iamVjdCgpKTsKIH0KQEAgLTEwMDQsMTEgKzEwOTgsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYgogU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0pCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwog
ICAgIEdMaW50IGxlbmd0aDsKICAgICA6OmdsR2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0t
Pm9iamVjdCgpLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIAorCiAgICAgR0xz
aXplaSBzaXplOwogICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0
aCk7CiAgICAgaWYgKCFpbmZvKQpAQCAtMTAyOSw3ICsxMTIzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyaXYoV2ViR0xTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1
ZSkKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKICAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3Qo
KSwgcG5hbWUsIHZhbHVlKTsKIH0KQEAgLTEwMzcsMTYgKzExMzEsMTYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoV2ViRwogU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRl
cik7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgR0xpbnQg
bGVuZ3RoOwogICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBH
TF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotICAgIAorCiAgICAgR0xzaXplaSBzaXplOwog
ICAgIEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CiAgICAgaWYg
KCFpbmZvKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIAorCiAgICAgOjpnbEdldFNoYWRl
ckluZm9Mb2coKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7
CiAgICAgU3RyaW5nIHMoaW5mbyk7CiAgICAgZmFzdEZyZWUoaW5mbyk7CkBAIC0xMDYwLDEyICsx
MTU0LDEyIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmMKICAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgR0xpbnQgbGVuZ3RoOwogICAgIDo6Z2xH
ZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHTF9TSEFERVJfU09VUkNFX0xF
TkdUSCwgJmxlbmd0aCk7Ci0gICAgCisKICAgICBHTHNpemVpIHNpemU7CiAgICAgR0xjaGFyKiBp
bmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKICAgICBpZiAoIWluZm8pCiAgICAg
ICAgIHJldHVybiAiIjsKLSAgICAgICAgCisKICAgICA6OmdsR2V0U2hhZGVyU291cmNlKChHTHVp
bnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOwogICAgIFN0cmluZyBz
KGluZm8pOwogICAgIGZhc3RGcmVlKGluZm8pOwpAQCAtMTEwMCw3ICsxMTk0LDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFdlYgogbG9uZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKICAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbigoR0x1
aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTExMjAs
NyArMTIxNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmkKIGxv
bmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25n
IGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKLSAgICAKKwogICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgOjpnbEdldFZlcnRleEF0
dHJpYlBvaW50ZXJ2KGluZGV4LCBwbmFtZSwgJnBvaW50ZXIpOwogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGxvbmc+KHBvaW50ZXIpOwpAQCAtMTE0Myw3ICsxMjM3LDcgQEAgaW50IEdyYXBo
aWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbgogICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgp
LCAwLCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGltYWdlRGF0YS5kYXRhKCkpOwogICAgIHJl
dHVybiAwOwogfQotICAgIAorCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQg
eW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1
bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVl
ZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2Ug
YnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCShyZXZpc2lv
biA1NTc5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJD
QS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTcxNiw3ICsxNzE2LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ0E6OnNldENvbnRlbnRzVG9HcmFwaAogCiAgICAgaWYgKG1fcGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCAhPSBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCAmJiBtX3BsYXRmb3JtVGV4
dHVyZSAhPSBOdWxsUGxhdGZvcm0zRE9iamVjdCkgewogICAgICAgICAvLyBjcmVhdGUgdGhlIGlu
bmVyIDNkIGxheWVyCi0gICAgICAgIG1fY29udGVudHNMYXllci5hZG9wdE5TKFtbQ2FudmFzM0RM
YXllciBhbGxvY10gaW5pdFdpdGhDb250ZXh0OnN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KG1f
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCkgdGV4dHVyZTpzdGF0aWNfY2FzdDxHTHVpbnQ+KG1f
cGxhdGZvcm1UZXh0dXJlKV0pOworICAgICAgICBtX2NvbnRlbnRzTGF5ZXIuYWRvcHROUyhbW0Nh
bnZhczNETGF5ZXIgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpjb25zdF9jYXN0PEdyYXBoaWNzQ29u
dGV4dDNEKj4oZ3JhcGhpY3NDb250ZXh0M0QpXSk7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBb
bV9jb250ZW50c0xheWVyLmdldCgpIHNldE5hbWU6QCIzRCBMYXllciJdOwogI2VuZGlmCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1ODA1KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwxOSArMSwxMyBAQAotMjAxMC0wMy0xMCAgSm9obiBBYmQt
RWwtTWFsZWsgIDxqYW1AY2hyb21pdW0ub3JnPgorMjAxMC0wMy0xMCAgWmhlbnlhbyBNbyAgPHpt
b0Bnb29nbGUuY29tPgogCi0gICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKLSAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1OTUyCi0gICAgICAgIFByb3BhZ2F0ZSBtb3VzZSB3
aGVlbCBldmVudHMgdG8gUGVwcGVyIHBsdWdpbnMuCisgICAgICAgIEhvb2sgdXAgV2ViR0xDb250
ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNgogCi0gICAgICAgICog
c3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmNwcDoKLSAgICAgICAgKFdlYktpdDo6V2ViTW91
c2VXaGVlbEV2ZW50QnVpbGRlcjo6V2ViTW91c2VXaGVlbEV2ZW50QnVpbGRlcik6Ci0gICAgICAg
ICogc3JjL1dlYklucHV0RXZlbnRDb252ZXJzaW9uLmg6Ci0gICAgICAgICogc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuY3BwOgotICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJ
bXBsOjpoYW5kbGVFdmVudCk6Ci0gICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lcklt
cGw6OmhhbmRsZU1vdXNlRXZlbnQpOgotICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOjpoYW5kbGVXaGVlbEV2ZW50KToKLSAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29u
dGFpbmVySW1wbDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6Ci0gICAgICAgICogc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuaDoKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4
dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwKKworICAgICAg
ICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmli
dXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2RlIGZvciBXaW5kb3dzLgogCiAyMDEw
LTAzLTEwICBHYXJyZXQgS2VsbHkgIDxnZGtAY2hyb21pdW0ub3JnPgogCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDE2ICsxMjQsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwogICAgIHZvaWQg
dmlld3BvcnRJbXBsKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCk7CiAKKyAgICB2b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBidWZmZXIpOworCiAgICAgdm9pZCBzeW50
aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVycm9yKTsKIAogcHJpdmF0ZToKICAgICBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJzOwotCisgICAgCiAgICAgdW5zaWduZWQg
aW50IG1fdGV4dHVyZTsKICAgICB1bnNpZ25lZCBpbnQgbV9mYm87Ci0gICAgdW5zaWduZWQgaW50
IG1fZGVwdGhCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwog
ICAgIHVuc2lnbmVkIGludCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodDsKIAorICAgIC8v
IEZvciBtdWx0aXNhbXBsaW5nCisgICAgdW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVGQk87Cisg
ICAgdW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgdW5z
aWduZWQgaW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcjsKKwogICAgIC8vIEZvciB0cmFja2lu
ZyB3aGljaCBGQk8gaXMgYm91bmQKICAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEZCTzsKIApAQCAt
MzUxLDcgKzM1OCwxMCBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRl
CiAgICAgOiBtX2F0dHJzKGF0dHJzKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2Zibygw
KQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkK
KyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogICAgICwgbV9i
b3VuZEZCTygwKQogI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogICAgICwgbV9z
Y2FubGluZSgwKQpAQCAtMzc1LDE0ICszODUsMjEgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6R3JhcGhpY3NDb250ZQogI2Vycm9yIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5k
aWYKIHsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNl
cidzIHJlcXVlc3RlZAotICAgIC8vIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFy
dGljdWxhciBzdGVuY2lsIGFuZAotICAgIC8vIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBhbmQgY291bGQgbm90IGJlIGhvbm9yZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2Fw
YWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBo
YSA9IHRydWU7Ci0gICAgbV9hdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2ls
ID0gZmFsc2U7Ci0gICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAvLyBUYWtlIGlu
dG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0
ZXMsIGluCisgICAgLy8gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRl
cm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkCisgICAgLy8gbm90IGJlIGhvbm9yZWQgYmFzZWQg
b24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgorICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKEdMRVdfRVhUX3BhY2tlZF9kZXB0aF9z
dGVuY2lsKSB7CisgICAgICAgICAgICBpZiAoIW1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAg
ICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgIUdMRVdfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlKQorICAgICAg
ICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVu
Zm9yY2luZyBwcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCisgICAgLy8g
Y29ycmVjdCBiZWhhdmlvciB3aGVuIHByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVl
c3RlZC4KICAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7CiAKICNpZiBPUyhX
SU5ET1dTKQpAQCAtNTcyLDcgKzU4OSwxNSBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+
R3JhcGhpY3NDb250CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAjaWZuZGVmIFJFTkRF
Ul9UT19ERUJVR0dJTkdfV0lORE9XCi0gICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZt
X2RlcHRoQnVmZmVyKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAg
ICAgICBpZiAobV9hdHRycy5kZXB0aCB8fCBtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICBn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGggfHwgbV9hdHRycy5z
dGVuY2lsKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7CisgICAgfQogICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7CiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCiAgICAgaWYgKG1fc2Nhbmxp
bmUpCkBAIC02NjksMjMgKzY5NCw4NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnJlc2hhcGUoCiAgICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmVPYmplY3QodGFyZ2V0
KTsKICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdAogICAgICAgICBn
bEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUg
ZGVwdGggYnVmZmVyCi0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1
ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICAgICAgLy8g
R2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGZyYW1lYnVmZmVyIG9iamVjdAorICAgICAgICAgICAg
Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAg
Ly8gR2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlcgorICAgICAgICAgICAgZ2xH
ZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAg
ICAgICAgaWYgKG1fYXR0cnMuZGVwdGggfHwgbV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgICAg
ICAgICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGRlcHRoL3N0ZW5jaWwgYnVmZmVyCisg
ICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChtX2F0dHJzLmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICAg
ICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0aC9zdGVuY2lsIGJ1ZmZlcgorICAgICAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29s
b3IgYW5kIGRlcHRoIGJ1ZmZlcnMKKyAgICBHTGludCBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xv
ckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgaWYgKG1fYXR0cnMuYWxw
aGEpIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBj
b2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xv
ckZvcm1hdCA9IEdMX1JHQjg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0K
KyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCAmJiBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICB9
IGVsc2UgeyAvLyAhbV9hdHRycy5zdGVuY2lsICYmIG1fYXR0cnMuZGVwdGgKKyAgICAgICAgICAg
IC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFu
ZCBkZXB0aCBpcyBub3QuCisgICAgICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
ID0gR0xfREVQVEhfQ09NUE9ORU5UOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzKSB7ICAvLyBTZXR1cCBtdWx0aXNhbXBsaW5nIEZCTworICAgICAgICBHTGlu
dCBzYW1wbGVDb3VudCA9IDg7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAg
ICBnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAg
ICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCisgICAgICAgICAgICBzYW1w
bGVDb3VudCA9IG1heFNhbXBsZUNvdW50OworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRSZW5k
ZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKKyAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAg
ICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lM
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAg
ICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBH
TF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgR0xlbnVtIHN0YXR1cyA9
IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOworICAgICAg
ICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAg
ICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogbXVsdGlzYW1wbGluZyBmcmFtZWJ1ZmZlciB3
YXMgaW5jb21wbGV0ZVxuIik7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAg
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJl
YWxsb2NhdGUgdGhlIGNvbG9yIGFuZCBkZXB0aC9zdGVuY2lsIGJ1ZmZlcnMKICAgICBnbEJpbmRU
ZXh0dXJlKHRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBH
TF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
CisgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIGdsQmlu
ZFRleHR1cmUodGFyZ2V0LCAwKTsKIAogICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKLSAgICBnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAg
Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NP
TVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIDApOwotCiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgdGFyZ2V0LCBtX3RleHR1
cmUsIDApOwotICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0
aEJ1ZmZlcik7CisKKyAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5j
aWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKKyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQor
ICAgICAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAg
ICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQ
VEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICB9CisKICAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7CiAgICAgaWYgKHN0YXR1cyAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURV9FWFQpIHsKICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDog
ZnJhbWVidWZmZXIgd2FzIGluY29tcGxldGVcbiIpOwpAQCAtNjkzLDYgKzc4MSwxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoCiAgICAgICAgIC8vIEZJWE1FOiBj
bGVhbnVwLgogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIH0KKworICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0
aXNhbXBsZUZCTzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87Cisg
ICAgfQogI2VuZGlmICAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwogCiAjaWZkZWYgRkxJ
UF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCkBAIC03MDMsNyArNzk4LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSgKICAgICBtX3NjYW5saW5lID0gbmV3IHVuc2ln
bmVkIGNoYXJbd2lkdGggKiA0XTsKICNlbmRpZiAgLy8gRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNB
TExZCiAKLSAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworICAgIEdMYml0ZmllbGQg
Y2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAobV9hdHRycy5zdGVuY2ls
KQorICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIGlmICht
X2F0dHJzLmRlcHRoKQorICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsK
KyAgICBnbENsZWFyKGNsZWFyTWFzayk7CiAKICNpZiBQTEFURk9STShDRykKICAgICAvLyBOZWVk
IHRvIHJlYWxsb2NhdGUgdGhlIGNsaWVudC1zaWRlIGJhY2tpbmcgc3RvcmUuCkBAIC03NTgsOSAr
ODU4LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAgICBI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKICAgICB1bnNpZ25lZCBjaGFy
KiBwaXhlbHMgPSAwOwotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSAobV9ib3VuZEZCTyAhPSBt
X2Zibyk7Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk87
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAg
ICAgICAgZ2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRI
ZWlnaHQsIDAsIDAsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9DT0xPUl9CVUZG
RVJfQklULCBHTF9MSU5FQVIpOwogICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAg
IH0gZWxzZSB7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gKG1fYm91bmRGQk8gIT0gbV9mYm8p
OworICAgICAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CiAjaWYgUExBVEZPUk0o
U0tJQSkKICAgICBjb25zdCBTa0JpdG1hcCogY2FudmFzQml0bWFwID0gaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpOwogICAgIGNvbnN0IFNrQml0bWFw
KiByZWFkYmFja0JpdG1hcCA9IDA7CkBAIC04NjUsNiArOTc0LDIzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICNlbmRpZiAgLy8gUkVOREVSX1RPX0RFQlVHR0lO
R19XSU5ET1cKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZWFkUGl4ZWxz
KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogYnVmZmVy
KQoreworI2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIGdsQmxpdEZyYW1l
YnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5
ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICBnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CisjZW5k
aWYKKyAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBi
dWZmZXIpOworI2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBtX2JvdW5kRkJPKTsKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewogICAgIC8v
IEZJWE1FOiBxdWVyeSBudW1iZXIgb2YgdGV4dHVyZXMgYXZhaWxhYmxlLgpAQCAtODkyLDcgKzEw
MTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRGcmFtCiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgR0x1aW50IGlkID0gRVhUUkFDVChmcmFtZWJ1ZmZlcik7
CiAgICAgaWYgKCFpZCkKLSAgICAgICAgaWQgPSBtX2ZibzsKKyAgICAgICAgaWQgPSAobV9hdHRy
cy5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwogICAgIGdsQmluZEZyYW1l
YnVmZmVyRVhUKHRhcmdldCwgaWQpOwogICAgIG1fYm91bmRGQk8gPSBpZDsKIH0KQEAgLTE4MDks
NyArMTkzNSwxOCBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNECiAK
ICAgICAvLyBGSVhNRTogdGFrZSBpbnRvIGFjY291bnQgcGFjayBhbGlnbm1lbnQuCiAgICAgUmVm
UHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOworICAgIG1f
aW50ZXJuYWwtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBh
cnJheS0+YmFzZUFkZHJlc3MoKSk7CisjaWYgT1MoREFSV0lOKQorICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzID0gbV9pbnRlcm5hbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KTsKKyAgICBpZiAoIWF0dHJzLmFscGhhKSB7CisgICAgICAgIC8vIElmIGFscGhhIGlzIG9mZiwg
YnkgZGVmYXVsdCBnbFJlYWRQaXhlbHMgc2hvdWxkIHNldCB0aGUgYWxwaGEgdG8gMjU1IGluc3Rl
YWQgb2YgMC4KKyAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdW50aWwgOjpnbFJlYWRQaXhlbHMg
Zml4ZXMgaXRzIGJlaGF2aW9yLgorICAgICAgICBHTHVieXRlKiBkYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxHTHVieXRlKj4oYXJyYXktPmJhc2VBZGRyZXNzKCkpOworICAgICAgICB1bnNpZ25lZCBi
eXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAyNTU7
CisgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIGFycmF5OwogfQogCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA1NTgwNikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwy
MiArMSwxNiBAQAotMjAxMC0wMy0xMCAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQu
b3JnPgotCi0gICAgICAgIFRoZSB0ZXN0IHdhcyBpbnRyb2R1Y2VkIGluIHI1NTc5NiwgaXQgaGFz
IGJlZW4gZmFpbGluZyBpbiBHdGsgYm90cyBzaW5jZSB0aGVuLgotCi0gICAgICAgIEZpbGVkIGJ1
ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU5ODQuCisyMDEwLTAz
LTEwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKLSAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvU2tpcHBlZDogZmFzdC9ldmVudHMvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtaWZyYW1lLXdp
dGgtb2Zmc2NyZWVuLWZvY3VzYWJsZS1lbGVtZW50Lmh0bWwgc2tpcHBlZCB1bnRpbCBmaXguCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCi0yMDEwLTAzLTEwICBSb2JlcnQg
SG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KLQotICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBI
YXVzbWFubi4KKyAgICAgICAgSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5H
TCBjb250ZXh0IGNyZWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMzNDE2CiAKLSAgICAgICAgW1F0XSBBZGQgU3VwcG9ydCBmb3IgV2Vi
S2l0RW5hYmxlQ2FyZXRCcm93c2luZyB0byBRdCBEUlQKLQotICAgICAgICBVbnNraXAgdGVzdCBm
YXN0L2V2ZW50cy9tdWx0aWxpbmUtbGluay1hcnJvdy1uYXZpZ2F0aW9uLmh0bWwKLQotICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU1OTMKLQotICAgICAg
ICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29u
dGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4
dDogQWRkZWQuIAorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRl
cy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0OiBXZWJHTCBj
b250ZXh0IGF0dHJpYnV0ZXMgYmVoYXZpb3IgY2hhbmdlZCB3aXRoIHRoaXMgZml4LgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy5odG1sOiBEaXR0by4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0OiBTdGVu
Y2lsIGJ1ZmZlciBpcyBlbmFibGVkLCB0aHVzIFN0ZW5jaWwgQml0cyBpcyBubyBsb25nZXIgMC4K
KyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbDogRGl0dG8uCiAK
IDIwMTAtMDMtMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVw
dGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVu
Y2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1h
bnRpYWxpYXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisgICAg
ICAgCitWZXJpZnkgV2ViR0xDb250ZXh0QXR0cmlidXRlcyBhcmUgd29ya2luZyBhcyBzcGVjaWZp
ZWQsIGluY2x1ZGluZyBhbHBoYSwgZGVwdGgsIHN0ZW5jaWwsIGFudGlhbGlhcywgYnV0IG5vdCBw
cmVtdWx0aXBsaWVkQWxwaGEKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitSZWdyZXNz
aW9uIHRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQx
NiA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVh
dGlvbiBjb2RlCitUZXN0aW5nIGFscGhhID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdh
bHBoYU9uJywgeyBhbHBoYTogdHJ1ZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50
aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNT
IGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVs
bC4KK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmli
cy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQ
QVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmli
cy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IK
K1Rlc3RpbmcgYWxwaGEgPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9mZics
IHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6
IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4
dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFT
UyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0
aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVt
dWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3Rp
bmcgZGVwdGggPSB0cnVlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT24nLCB7IHN0ZW5j
aWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBu
b24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRl
cygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNT
IGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNp
bCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1Mg
Y29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMg
Y29ycmVjdENvbG9yCitUZXN0aW5nIGRlcHRoID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBnZXRXZWJH
TCgnZGVwdGhPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczog
ZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0
QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNT
IGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhh
IGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250
ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVs
dGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5n
IHN0ZW5jaWwgPSB0cnVlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxPbicsIHsgZGVw
dGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwg
MSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRD
b250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0
aCBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBjb250
ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBp
cyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQor
UEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3Rpbmcgc3RlbmNpbCA9IGZhbHNlCitQQVNT
IHdlYkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDog
ZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1u
dWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkg
aXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEg
aXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29u
dGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29y
cmVjdENvbG9yCitUZXN0aW5nIGFudGlhbGlhcyA9IHRydWUKK1BBU1Mgd2ViR0wgPSBnZXRXZWJH
TCgnYW50aWFsaWFzT24nLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBm
YWxzZSwgYW50aWFsaWFzOiB0cnVlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVs
bC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlz
IG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250
ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlz
IGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyB0cnVlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsWzBdID09IDI1
NSB8fCBwaXhlbFswXSA9PSAwIGlzIGZhbHNlCitUZXN0aW5nIGFudGlhbGlhcyA9IGZhbHNlCitQ
QVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVu
Y2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwg
MSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRD
b250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0
aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLmFscGhhIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlh
cyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1
ZQorUEFTUyBwaXhlbFswXSA9PSAyNTUgfHwgcGl4ZWxbMF0gPT0gMCBpcyB0cnVlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0
ZW5jaWwtYW50aWFsaWFzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFz
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250
ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy91dGlsczNkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZzaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWMzIHBvczsKK2F0dHJpYnV0
ZSB2ZWM0IGNvbG9ySW47Cit2YXJ5aW5nIHZlYzQgY29sb3I7CisKK3ZvaWQgbWFpbigpCit7Cisg
ICAgY29sb3IgPSBjb2xvckluOworICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MueHl6LCAxLjAp
OworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gt
ZnJhZ21lbnQiPgordmFyeWluZyB2ZWM0IGNvbG9yOworCit2b2lkIG1haW4oKQoreworICAgIGds
X0ZyYWdDb2xvciA9IGNvbG9yOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+Cit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gZmFsc2U7CisKKy8vIFRoZXNlIGZvdXIgZGVjbGFyYXRpb25zIG5lZWQg
dG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCit2YXIgd2ViR0wgPSBudWxs
OwordmFyIGNvbnRleHRBdHRyaWJzID0gbnVsbDsKK3ZhciBwaXhlbCA9IFswLCAwLCAwLCAxXTsK
K3ZhciBjb3JyZWN0Q29sb3IgPSBudWxsOworCitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgZGVzY3JpcHRpb24oJ1Zl
cmlmeSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGFyZSB3b3JraW5nIGFzIHNwZWNpZmllZCwgaW5j
bHVkaW5nIGFscGhhLCBkZXB0aCwgc3RlbmNpbCwgYW50aWFsaWFzLCBidXQgbm90IHByZW11bHRp
cGxpZWRBbHBoYScpOworCisgICAgZGVidWcoJ1JlZ3Jlc3Npb24gdGVzdCBmb3IgPGEgaHJlZj0i
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNDE2Ij5odHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTY8L2E+IDogPGNvZGU+SG9vayB1cCBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGU8L2Nv
ZGU+Jyk7CisgICAgCisgICAgcnVuVGVzdCgpOworfQorCitmdW5jdGlvbiBnZXRXZWJHTChjYW52
YXNOYW1lLCBjb250ZXh0QXR0cmlicywgY2xlYXJDb2xvciwgY2xlYXJEZXB0aCwgY2xlYXJTdGVu
Y2lsKQoreworICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNO
YW1lKTsKKyAgICB2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmds
IiwgY29udGV4dEF0dHJpYnMpOworICAgIGlmICghZ2wpIHsKKyAgICAgICAgYWxlcnQoIk5vIFdl
YkdMIGNvbnRleHQgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZh
ciBhY3R1YWxDb250ZXh0QXR0cmlicyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAg
CisgICAgLy8gQWRkIGEgY29uc29sZQorICAgIGdsLmNvbnNvbGUgPSAoImNvbnNvbGUiIGluIHdp
bmRvdykgPyB3aW5kb3cuY29uc29sZSA6IHsgbG9nOiBmdW5jdGlvbigpIHsgfSB9OworCisgICAg
Ly8gY3JlYXRlIG91ciBzaGFkZXJzCisgICAgdmFyIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIo
Z2wsICJ2c2hhZGVyIik7CisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihnbCwg
ImZzaGFkZXIiKTsKKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlcikK
KyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAvLyBDcmVhdGUgdGhlIHByb2dyYW0gb2JqZWN0
CisgICAgZ2wucHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKworICAgIGlmICghZ2wucHJv
Z3JhbSkKKyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAvLyBBdHRhY2ggb3VyIHR3byBzaGFk
ZXJzIHRvIHRoZSBwcm9ncmFtCisgICAgZ2wuYXR0YWNoU2hhZGVyKGdsLnByb2dyYW0sIHZlcnRl
eFNoYWRlcik7CisgICAgZ2wuYXR0YWNoU2hhZGVyKGdsLnByb2dyYW0sIGZyYWdtZW50U2hhZGVy
KTsKKworICAgIC8vIEJpbmQgYXR0cmlidXRlcworICAgIHZhciBhdHRyaWJzID0gWyAicG9zIiwg
ImNvbG9ySW4iIF07CisgICAgZm9yICh2YXIgaSBpbiBhdHRyaWJzKQorICAgICAgICBnbC5iaW5k
QXR0cmliTG9jYXRpb24oZ2wucHJvZ3JhbSwgaSwgYXR0cmlic1tpXSk7CisKKyAgICAvLyBMaW5r
IHRoZSBwcm9ncmFtCisgICAgZ2wubGlua1Byb2dyYW0oZ2wucHJvZ3JhbSk7CisKKyAgICAvLyBD
aGVjayB0aGUgbGluayBzdGF0dXMKKyAgICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihnbC5wcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyk7CisgICAgaWYgKCFsaW5rZWQpIHsKKyAg
ICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgbGluaworICAgICAgICB2YXIg
ZXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyAoZ2wucHJvZ3JhbSk7CisgICAgICAgIGdsLmNv
bnNvbGUubG9nKCJFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6IitlcnJvcik7CisKKyAgICAgICAg
Z2wuZGVsZXRlUHJvZ3JhbShnbC5wcm9ncmFtKTsKKyAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShm
cmFnbWVudFNoYWRlcik7CisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0odmVydGV4U2hhZGVyKTsK
KworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBnbC51c2VQcm9ncmFtKGdsLnBy
b2dyYW0pOworCisgICAgZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFd
LCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICBnbC5jbGVhckRlcHRoKGNsZWFy
RGVwdGgpOworICAgIGdsLmNsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOworICAgIGdsLmVuYWJs
ZShnbC5ERVBUSF9URVNUKTsKKyAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTsKKyAgICBn
bC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCB8IGdsLlNU
RU5DSUxfQlVGRkVSX0JJVCk7CisKKyAgICByZXR1cm4gZ2w7Cit9CisKK2Z1bmN0aW9uIGRyYXdB
bmRSZWFkUGl4ZWwoZ2wsIHZlcnRpY2VzLCBjb2xvcnMsIHgsIHkpCit7CisgICAgdmFyIGNvbG9y
T2Zmc2V0ID0gdmVydGljZXMuYnl0ZUxlbmd0aDsKKworICAgIHZhciB2Ym8gPSBnbC5jcmVhdGVC
dWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBn
bC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgY29sb3JPZmZzZXQgKyBjb2xvcnMuYnl0ZUxl
bmd0aCwgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVG
RkVSLCAwLCB2ZXJ0aWNlcyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIs
IGNvbG9yT2Zmc2V0LCBjb2xvcnMpOworCisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAz
LCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KDApOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgNCwgZ2wuVU5TSUdORURfQllURSwg
dHJ1ZSwgMCwgY29sb3JPZmZzZXQpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDEp
OworCisgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIHZlcnRpY2VzLmxlbmd0aCAv
IDMpOworCisgICAgcmV0dXJuIGdsLnJlYWRQaXhlbHMoeCwgeSwgMSwgMSwgZ2wuUkdCQSwgZ2wu
VU5TSUdORURfQllURSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBbHBoYShhbHBoYSkKK3sKKyAgICBk
ZWJ1ZygiVGVzdGluZyBhbHBoYSA9ICIgKyBhbHBoYSk7CisgICAgaWYgKGFscGhhKQorICAgICAg
ICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FscGhhT24nLCB7IGFscGhhOiB0
cnVlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsg
MCwgMCwgMCwgMCBdLCAxLCAwKSIpOworICAgIGVsc2UKKyAgICAgICAgc2hvdWxkQmVOb25OdWxs
KCJ3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9mZicsIHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFs
c2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAx
LCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRD
b250ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFscGhh
IiwgKGFscGhhID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0
cmlicy5kZXB0aCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5zdGVu
Y2lsIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIs
ICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxw
aGEiLCAidHJ1ZSIpOworCisgICAgdmFyIGJ1ZiA9IHdlYkdMLnJlYWRQaXhlbHMoMCwgMCwgMSwg
MSwgd2ViR0wuUkdCQSwgd2ViR0wuVU5TSUdORURfQllURSk7CisgICAgcGl4ZWxbMF0gPSBidWZb
MF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07CisgICAgcGl4ZWxbMl0gPSBidWZbMl07CisgICAg
cGl4ZWxbM10gPSBidWZbM107CisgICAgY29ycmVjdENvbG9yID0gKGFscGhhID8gWzAsIDAsIDAs
IDBdIDogWzAsIDAsIDAsIDI1NV0pOworICAgIHNob3VsZEJlKCJwaXhlbCIsICJjb3JyZWN0Q29s
b3IiKTsKK30KKworZnVuY3Rpb24gdGVzdERlcHRoKGRlcHRoKQoreworICAgIGRlYnVnKCJUZXN0
aW5nIGRlcHRoID0gIiArIGRlcHRoKTsKKyAgICBpZiAoZGVwdGgpCisgICAgICAgIHNob3VsZEJl
Tm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnZGVwdGhPbicsIHsgc3RlbmNpbDogZmFsc2UsIGFu
dGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgZWxzZQorICAg
ICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT2ZmJywgeyBkZXB0
aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwg
MSBdLCAxLCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSB3ZWJH
TC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJz
LmRlcHRoIiwgKGRlcHRoID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250
ZXh0QXR0cmlicy5hbHBoYSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJz
LnN0ZW5jaWwiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFs
aWFzIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxp
ZWRBbHBoYSIsICJ0cnVlIik7CisKKyAgICB3ZWJHTC5kZXB0aEZ1bmMod2ViR0wuTkVWRVIpOwor
CisgICAgdmFyIHZlcnRpY2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAs
ICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4w
LCAwLjAsCisgICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4w
LAorICAgICAgICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFdlYkdM
VW5zaWduZWRCeXRlQXJyYXkoWworICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1
LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAs
IDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7
CisKKyAgICB2YXIgYnVmID0gZHJhd0FuZFJlYWRQaXhlbCh3ZWJHTCwgdmVydGljZXMsIGNvbG9y
cywgMCwgMCk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07
CisgICAgcGl4ZWxbMl0gPSBidWZbMl07CisgICAgcGl4ZWxbM10gPSBidWZbM107CisgICAgY29y
cmVjdENvbG9yID0gKGRlcHRoID8gWzAsIDAsIDAsIDI1NV0gOiBbMjU1LCAwLCAwLCAyNTVdKTsK
KyAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9yIik7Cit9CisKK2Z1bmN0aW9uIHRl
c3RTdGVuY2lsKHN0ZW5jaWwpCit7CisgICAgZGVidWcoIlRlc3Rpbmcgc3RlbmNpbCA9ICIgKyBz
dGVuY2lsKTsKKyAgICBpZiAoc3RlbmNpbCkKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJH
TCA9IGdldFdlYkdMKCdzdGVuY2lsT24nLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSwg
YW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisg
ICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9mZicsIHsg
ZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAs
IDAsIDEgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0g
d2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0
cmlicy5kZXB0aCIsIChzdGVuY2lsID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJl
KCJjb250ZXh0QXR0cmlicy5zdGVuY2lsIiwgKHN0ZW5jaWwgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7
CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFscGhhIiwgInRydWUiKTsKKyAgICBzaG91
bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUo
ImNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKKyAgICB3ZWJH
TC5kZXB0aEZ1bmMod2ViR0wuQUxXQVlTKTsKKworICAgIHdlYkdMLnN0ZW5jaWxGdW5jKHdlYkdM
Lk5FVkVSLCAxLCAxKTsKKyAgICB3ZWJHTC5zdGVuY2lsT3Aod2ViR0wuS0VFUCwgd2ViR0wuS0VF
UCwgd2ViR0wuS0VFUCk7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5
KFsKKyAgICAgICAgIDEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIDEuMCwgMC4wLAorICAg
ICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsIDEuMCwgMC4wLAorICAgICAgICAt
MS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xv
cnMgPSBuZXcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1
LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAg
ICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1
LCAwLCAwLCAyNTVdKTsKKworICAgIHZhciBidWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdMLCB2
ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAgICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICBwaXhl
bFsxXSA9IGJ1ZlsxXTsKKyAgICBwaXhlbFsyXSA9IGJ1ZlsyXTsKKyAgICBwaXhlbFszXSA9IGJ1
ZlszXTsKKyAgICBjb3JyZWN0Q29sb3IgPSAoc3RlbmNpbCA/IFswLCAwLCAwLCAyNTVdIDogWzI1
NSwgMCwgMCwgMjU1XSk7CisgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOwor
fQorCitmdW5jdGlvbiB0ZXN0QW50aWFsaWFzKGFudGlhbGlhcykKK3sKKyAgICBkZWJ1ZygiVGVz
dGluZyBhbnRpYWxpYXMgPSAiICsgYW50aWFsaWFzKTsKKyAgICBpZiAoYW50aWFsaWFzKQorICAg
ICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09uJywgeyBk
ZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1
ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJl
Tm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnYW50aWFsaWFzT2ZmJywgeyBkZXB0aDogZmFsc2Us
IHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAw
LCAwLCAxIF0sIDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9
IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0
dHJpYnMuZGVwdGgiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3Rl
bmNpbCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsICJm
YWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiLCAoYW50aWFs
aWFzID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5w
cmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IFdl
YkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAx
LjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFyIGNvbG9ycyA9IG5l
dyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAg
ICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOworICAgIHZhciBi
dWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdMLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAg
ICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICBzaG91bGRCZSgicGl4ZWxbMF0gPT0gMjU1IHx8IHBp
eGVsWzBdID09IDAiLCAoYW50aWFsaWFzID8gImZhbHNlIiA6ICJ0cnVlIikpOworfQorCitmdW5j
dGlvbiBydW5UZXN0KCkKK3sKKworICAgIHRlc3RBbHBoYSh0cnVlKTsKKyAgICB0ZXN0QWxwaGEo
ZmFsc2UpOworICAgIHRlc3REZXB0aCh0cnVlKTsKKyAgICB0ZXN0RGVwdGgoZmFsc2UpOworICAg
IHRlc3RTdGVuY2lsKHRydWUpOworICAgIHRlc3RTdGVuY2lsKGZhbHNlKTsKKyAgICB0ZXN0QW50
aWFsaWFzKHRydWUpOworICAgIHRlc3RBbnRpYWxpYXMoZmFsc2UpOworCisgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzY3JpcHQiKTsKKyAgICBlcGlsb2d1ZS5vbmxvYWQgPSBmaW5pc2g7CisgICAgZXBpbG9n
dWUuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiOworICAgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworfQorCitmdW5jdGlvbiBmaW5pc2goKSB7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+Cis8Y2FudmFzIGlkPSJhbHBoYU9uIiB3aWR0aD0iMXB4
IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJhbHBoYU9mZiIgd2lkdGg9IjFw
eCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iZGVwdGhPbiIgd2lkdGg9IjFw
eCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iZGVwdGhPZmYiIHdpZHRoPSIx
cHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9InN0ZW5jaWxPbiIgd2lkdGg9
IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0ic3RlbmNpbE9mZiIgd2lk
dGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iYW50aWFsaWFzT24i
IHdpZHRoPSIycHgiIGhlaWdodD0iMnB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFudGlhbGlh
c09mZiIgd2lkdGg9IjJweCIgaGVpZ2h0PSIycHgiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3Jp
cHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2NvbnRleHQtYXR0cmlidXRlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU1Nzk5KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDggQEAgUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RD
b250ZXh0KCkgaXMgbm9uLQogUEFTUyBhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmli
dXRlcygpIGlzIG5vbi1udWxsLgogUEFTUyBhdHRyaWJzLmRlcHRoIGlzIHRydWUKIFBBU1MgYXR0
cmlicy5hbHBoYSBpcyB0cnVlCi1QQVNTIChhdHRyaWJzLnN0ZW5jaWwgPT0gdHJ1ZSB8fCBhdHRy
aWJzLnN0ZW5jaWwgPT0gZmFsc2UpIGlzIHRydWUKLVBBU1MgKGF0dHJpYnMuYW50aWFsaWFzID09
IHRydWUgfHwgYXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UpIGlzIHRydWUKK1BBU1MgYXR0cmli
cy5zdGVuY2lsIGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbnRpYWxpYXMgaXMgdHJ1ZQogUEFTUyBh
dHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCiBUZXN0IGN1c3RvbWl6ZWQgdmFsdWVz
CiBQQVNTIGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFs
aWFzOiBmYWxzZSB9KSBpcyBub24tbnVsbC4KQEAgLTE4LDYgKzE4LDIyIEBAIFBBU1MgYXR0cmli
cy5hbHBoYSBpcyB0cnVlCiBQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQogUEFTUyBhdHRy
aWJzLmFudGlhbGlhcyBpcyBmYWxzZQogUEFTUyBhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBp
cyB0cnVlCitUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzCitQQVNTIGNvbnRleHQgPSBjcmVhdGUzRENv
bnRleHQoeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IHRydWUgfSkgaXMgbm9uLW51bGwuCitQQVNT
IGF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQ
QVNTIGF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFscGhhIGlzIHRydWUKK1BB
U1MgYXR0cmlicy5zdGVuY2lsIGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbnRpYWxpYXMgaXMgdHJ1
ZQorUEFTUyBhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitUZXN0IGN1c3RvbWl6
ZWQgdmFsdWVzCitQQVNTIGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBwcmVtdWx0aXBsaWVk
QWxwaGE6IGZhbHNlIH0pIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzID0gY29udGV4dC5nZXRD
b250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzLmRlcHRoIGlzIHRy
dWUKK1BBU1MgYXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyB0
cnVlCitQQVNTIGF0dHJpYnMuYW50aWFsaWFzIGlzIHRydWUKK1BBU1MgYXR0cmlicy5wcmVtdWx0
aXBsaWVkQWxwaGEgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0
LWF0dHJpYnV0ZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRtbAkocmV2aXNpb24gNTU3OTkpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMTgsOSArMTgsOCBAQCBzaG91bGRCZU5vbk51bGwoImNvbnRleHQgPSBjcmVhdGUz
RENvbnRlCiBzaG91bGRCZU5vbk51bGwoImF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRy
aWJ1dGVzKCkiKTsKIHNob3VsZEJlKCJhdHRyaWJzLmRlcHRoIiwgInRydWUiKTsKIHNob3VsZEJl
KCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsKLS8vIFRoZSBmb2xsb3dpbmcgdHdvIGRlcGVuZCBv
biB3aGV0aGVyIHRoZSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSBzdXBwb3J0cyB0aGVtCi1zaG91
bGRCZSgiKGF0dHJpYnMuc3RlbmNpbCA9PSB0cnVlIHx8IGF0dHJpYnMuc3RlbmNpbCA9PSBmYWxz
ZSkiLCAidHJ1ZSIpOwotc2hvdWxkQmUoIihhdHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGF0
dHJpYnMuYW50aWFsaWFzID09IGZhbHNlKSIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5z
dGVuY2lsIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJ0cnVlIik7
CiBzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOwogCiBkZWJ1
ZyAoIlRlc3QgY3VzdG9taXplZCB2YWx1ZXMiKTsKQEAgLTMyLDYgKzMxLDI2IEBAIHNob3VsZEJl
KCJhdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlh
cyIsICJmYWxzZSIpOwogc2hvdWxkQmUoImF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRy
dWUiKTsKIAorZGVidWcoIlRlc3QgY3VzdG9taXplZCB2YWx1ZXMiKTsKKy8vIChzdGVuY2lsID09
IHRydWUgJiYgZGVwdGggPT0gZmFsc2UpIGlzIG5vdCBzdXBwb3J0ZWQsIGRlZmF1bHQgZGVwdGgg
dG8gdHJ1ZQorc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgZGVw
dGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlIH0pIik7CitzaG91bGRCZU5vbk51bGwoImF0dHJpYnMg
PSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmRl
cHRoIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsKK3Nob3Vs
ZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYW50aWFs
aWFzIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0
cnVlIik7CisKK2RlYnVnKCJUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzIik7CisvLyAocHJlbXVsdGlw
bGllZEFscGhhID09IGZhbHNlKSBpcyBub3Qgc3VwcG9ydGVkLCBkZWZhdWx0IHRvIHRydWUKK3No
b3VsZEJlTm9uTnVsbCgiY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IHByZW11bHRpcGxpZWRB
bHBoYTogZmFsc2UgfSkiKTsKK3Nob3VsZEJlTm9uTnVsbCgiYXR0cmlicyA9IGNvbnRleHQuZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworc2hvdWxkQmUoImF0dHJpYnMuZGVwdGgiLCAidHJ1ZSIp
Oworc2hvdWxkQmUoImF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMu
c3RlbmNpbCIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAidHJ1ZSIp
Oworc2hvdWxkQmUoImF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKwogc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgogCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDU1Nzk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0
LWNhbGxzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBQQVNT
IGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJCiBQQVNTIGNvbnRleHQuZ2V0UGFy
YW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCkgaXMgY29udGV4dC5L
RUVQCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfUEFTUykgaXMgY29udGV4dC5LRUVQCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNv
bnRleHQuU1RFTkNJTF9CQUNLX1JFRikgaXMgMAotUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihj
b250ZXh0LlNURU5DSUxfQklUUykgaXMgMAorUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250
ZXh0LlNURU5DSUxfQklUUykgPiAwIGlzIHRydWUKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIo
Y29udGV4dC5TVEVOQ0lMX0NMRUFSX1ZBTFVFKSBpcyAwCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1l
dGVyKGNvbnRleHQuU1RFTkNJTF9GQUlMKSBpcyBjb250ZXh0LktFRVAKIFBBU1MgY29udGV4dC5n
ZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0ZVTkMpIGlzIGNvbnRleHQuQUxXQVlTCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAko
cmV2aXNpb24gNTU3OTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQt
Y2FsbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBlbHNlIHsKICAgICAv
LyBGSVhNRTogQ3VycmVudCBXZWJLaXQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgd3Jvbmcg
dmFsdWUgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg0MikKICAg
ICAvL3Nob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19W
QUxVRV9NQVNLKScsICcweEZGRkZGRkZGJyk7CiAgICAgLy9zaG91bGRCZSgnY29udGV4dC5nZXRQ
YXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLKScsICcweEZGRkZGRkZGJyk7
Ci0gICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CSVRT
KScsICcwJyk7CisgICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RF
TkNJTF9CSVRTKSA+IDAnLCAndHJ1ZScpOwogICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFt
ZXRlcihjb250ZXh0LlNURU5DSUxfQ0xFQVJfVkFMVUUpJywgJzAnKTsKICAgICBzaG91bGRCZSgn
Y29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0ZBSUwpJywgJ2NvbnRleHQuS0VF
UCcpOwogICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxf
RlVOQyknLCAnY29udGV4dC5BTFdBWVMnKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50441</attachid>
            <date>2010-03-10 14:42:30 -0800</date>
            <delta_ts>2010-03-10 14:57:36 -0800</delta_ts>
            <desc>modified patch</desc>
            <filename>attrs.patch</filename>
            <type>text/plain</type>
            <size>66241</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTgwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDMtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6IEFkZCBtZW1iZXJz
L2Z1bmN0aW9ucyBmb3IgbXVsdGlzYW1wbGluZy9zdGVuY2lsIGJ1ZmZlciBwdXJwb3NlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmg6IEFkZCBHcmFwaGlj
c0NvbnRleHQzRCBhcyBhIG1lbWJlciBvZiBDYW52YXMzRExheWVyLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tOiBBZGQgbXVsdGlzYW1wbGluZyBzdXBw
b3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5jcHA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBj
cmVhdGlvbiBjb2RlIGZvciBNYWMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENhbnZhczNETGF5ZXIgaW5pdCBj
YWxsLgorCiAyMDEwLTAzLTEwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGxvaXNsby1tYWNi
b29rcHJvLmxvY2FsPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAg
ICAgaWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0g
IndlYmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpj
cmVhdGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0
YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgp
OwogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6
Ok5ldygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2
aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRF9oCkBAIC0zODksNyArMzg5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gMHg4
NEU4LAogICAgICAgICAgICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gPSAweDA1MDYK
ICAgICAgICAgfTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQ29udGV4dCBjcmVhdGlvbiBhdHRy
aWJ1dGVzLgogICAgICAgICBzdHJ1Y3QgQXR0cmlidXRlcyB7CiAgICAgICAgICAgICBBdHRyaWJ1
dGVzKCkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQ
bGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIE51bGxQbGF0
Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIC8vIFdpdGggbXVsdGlz
YW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgorICAg
ICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAgICAgICAvLyBIZWxwZXIg
dG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCiAgICAgICAg
IC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBpbnQgc2l6ZUluQnl0ZXMo
aW50IHR5cGUpOwpAQCAtNDk5LDEwICs1MDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGNsZWFyU3RlbmNpbChsb25nIHMpOwogICAgICAgICB2b2lkIGNvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKICAgICAgICAgdm9p
ZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLCB1bnNpZ25lZCBsb25nIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSk7CiAgICAgICAgIC8vdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZz
ZXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBs
b25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwot
ICAgICAgICAKKwogICAgICAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9y
ZGVyKTsKICAgICAgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAgICAgICAgIHZv
aWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKQEAgLTU4NCw5ICs1ODksOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7
CiAgICAgICAgIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJh
bSk7CiAgICAgICAgIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5p
dHMpOwotICAgICAgICAKKwogICAgICAgICBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHJlYWRQaXhl
bHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKTsKLSAgICAgICAg
CisKICAgICAgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICAgICAgdm9pZCBy
ZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7
CiAgICAgICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7
CkBAIC02NDcsNyArNjUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHZp
ZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCk7CiAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7
Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBw
YWludCBldmVudHMKICAgICAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCk7CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKQEAgLTY1OSwxNCArNjY0LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgY3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CiAgICAgICAgIHVuc2lnbmVkIGNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nKTsKICAg
ICAgICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOwotICAgICAgICAKKwogICAgICAgICB2b2lk
IGRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCk7CiAgICAgICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIo
dW5zaWduZWQpOwogICAgICAgICB2b2lkIGRlbGV0ZVByb2dyYW0odW5zaWduZWQpOwogICAgICAg
ICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCk7CiAgICAgICAgIHZvaWQgZGVsZXRl
U2hhZGVyKHVuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsg
ICAgICAgIAotICAgICAgICAKKyAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsK
KwogICAgICAgICAvLyBTeW50aGVzaXplcyBhbiBPcGVuR0wgZXJyb3Igd2hpY2ggd2lsbCBiZSBy
ZXR1cm5lZCBmcm9tIGEKICAgICAgICAgLy8gbGF0ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBp
cyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCiAgICAgICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0
aGUgZGVza3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCkBAIC02NzcsNyArNjgy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBnZXRFcnJvciBpbiB0aGUgb3Jk
ZXIgdGhleSB3ZXJlIGFkZGVkLgogICAgICAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2ln
bmVkIGxvbmcgZXJyb3IpOwogCi0gICAgcHJpdmF0ZTogICAgICAgIAorICAgIHByaXZhdGU6CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0cnMpOwogCiAgICAgICAgIC8v
IEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nLgpAQCAtNzA5LDE4ICs3MTQsMjQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQq
IGZvcm1hdCk7CiAKICAgICAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7
Ci0gICAgICAgIAorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBBdHRyaWJ1dGVzIG1fYXR0
cnM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKLSAgICAg
ICAgCisKICAgICAgICAgQ0dMQ29udGV4dE9iaiBtX2NvbnRleHRPYmo7CiAgICAgICAgIEdMdWlu
dCBtX3RleHR1cmU7CiAgICAgICAgIEdMdWludCBtX2ZibzsKLSAgICAgICAgR0x1aW50IG1fZGVw
dGhCdWZmZXI7CisgICAgICAgIEdMdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKKworICAgICAg
ICAvLyBGb3IgbXVsdGlzYW1wbGluZworICAgICAgICBHTHVpbnQgbV9tdWx0aXNhbXBsZUZCTzsK
KyAgICAgICAgR0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAg
IEdMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisKICAgICAgICAgLy8gRXJyb3JzIHJh
aXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25l
ZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9yczsKLSNlbmRpZiAgICAgICAgCisjZW5kaWYKIAogICAg
ICAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jt
cy4KICNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCShyZXZpc2lvbiA1NTc5
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTYgKzMyLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBHcmFwaGljc0xheWVyOworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogfQog
CiBAaW50ZXJmYWNlIENhbnZhczNETGF5ZXIgOiBDQU9wZW5HTExheWVyIAogewogICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRCogbV9jb250ZXh0OwogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAg
IEdMdWludCBtX3RleHR1cmU7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooQ0dMQ29udGV4
dE9iailjb250ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJlOworLSAoaWQpaW5pdFdpdGhDb250
ZXh0OihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKIAogLSAoQ0dJbWFnZVJl
Ziljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JT
cGFjZTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXll
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMz
RExheWVyLm1tCShyZXZpc2lvbiA1NTc5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NhbnZhczNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2ltcG9ydCAiQ2FudmFzM0RMYXllci5oIgogCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CiAjaW1wb3J0IDxPcGVuR0wvT3BlbkdMLmg+CkBAIC00MSwxMCArNDIsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBDYW52YXMzRExheWVyCiAK
LS0oaWQpaW5pdFdpdGhDb250ZXh0OihDR0xDb250ZXh0T2JqKWNvbnRleHQgdGV4dHVyZTooR0x1
aW50KXRleHR1cmUKKy0oaWQpaW5pdFdpdGhDb250ZXh0OihHcmFwaGljc0NvbnRleHQzRCopY29u
dGV4dAogewotICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7Ci0gICAgbV90ZXh0dXJlID0gdGV4
dHVyZTsKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY29udGV4dE9iaiA9IHN0YXRp
Y19jYXN0PENHTENvbnRleHRPYmo+KGNvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
KSk7CisgICAgbV90ZXh0dXJlID0gc3RhdGljX2Nhc3Q8R0x1aW50Pihjb250ZXh0LT5wbGF0Zm9y
bVRleHR1cmUoKSk7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICByZXR1cm4gc2VsZjsK
IH0KQEAgLTcwLDEyICs3MiwxMiBAQCAtKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQ
aXhlbEZvCiAKIC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWdsQ29udGV4
dCBwaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1l
OihDRlRpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6KGNvbnN0IENWVGltZVN0
YW1wICopdGltZVN0YW1wCiB7Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2Jq
KTsKLSAgICBnbEZpbmlzaCgpOworICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKwog
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGdsQ29udGV4dCk7CiAKICAgICBDR1JlY3QgZnJhbWUg
PSBbc2VsZiBmcmFtZV07Ci0gICAgICAgIAorCiAgICAgLy8gZHJhdyB0aGUgRkJPIGludG8gdGhl
IGxheWVyCiAgICAgZ2xWaWV3cG9ydCgwLCAwLCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXpl
LmhlaWdodCk7CiAgICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOwpAQCAtOTcsNyArOTks
NyBAQCAtKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailnCiAgICAgICAgIGds
VGV4Q29vcmQyZigwLCAxKTsKICAgICAgICAgZ2xWZXJ0ZXgyZigtMSwgMSk7CiAgICAgZ2xFbmQo
KTsKLSAgICAKKwogICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgZ2xE
aXNhYmxlKEdMX1RFWFRVUkVfMkQpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1NTc5
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC01MywyNSArNTMsMjUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlPiYgYXR0cmlicywgaW50IGNvbG9yQml0cywgaW50IGRlcHRoQml0cywgYm9vbCBh
Y2NlbGVyYXRlZCwgYm9vbCBzdXBlcnNhbXBsZSwgYm9vbCBjbG9zZXN0KQogewogICAgIGF0dHJp
YnMuY2xlYXIoKTsKLSAgICAKKwogICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFDb2xvclNpemUp
OwogICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
Pihjb2xvckJpdHMpKTsKICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBRGVwdGhTaXplKTsKICAg
ICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oZGVw
dGhCaXRzKSk7Ci0gICAgCisKICAgICBpZiAoYWNjZWxlcmF0ZWQpCiAgICAgICAgIGF0dHJpYnMu
YXBwZW5kKGtDR0xQRkFBY2NlbGVyYXRlZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGF0dHJpYnMu
YXBwZW5kKGtDR0xQRkFSZW5kZXJlcklEKTsKICAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGtDR0xSZW5kZXJlckdlbmVyaWNGbG9hdElE
KSk7CiAgICAgfQotICAgICAgICAKKwogICAgIGlmIChzdXBlcnNhbXBsZSkKICAgICAgICAgYXR0
cmlicy5hcHBlbmQoa0NHTFBGQVN1cGVyc2FtcGxlKTsKLSAgICAgICAgCisKICAgICBpZiAoY2xv
c2VzdCkKICAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUNsb3Nlc3RQb2xpY3kpOwotICAg
ICAgICAKKwogICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0
cmlidXRlPigwKSk7CiB9CiAKQEAgLTg2LDIyICs4NiwyNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX2NvbnRleHRPYmooMCkKICAgICAsIG1fdGV4
dHVyZSgwKQogICAgICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhCdWZmZXIoMCkKLXsKLSAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3Rl
ZAotICAgIC8vIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVu
Y2lsIGFuZAotICAgIC8vIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQg
Y291bGQgbm90IGJlIGhvbm9yZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9m
IHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBoYSA9IHRydWU7Ci0g
ICAgbV9hdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0g
ICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKK3sKKyAg
ICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0
aW9uIGF0dHJpYnV0ZXMsIGluCisgICAgLy8gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxp
YXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkCisgICAgLy8gbm90IGJlIGhv
bm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0
aW9uLgorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgJiYgIW1fYXR0cnMuZGVwdGgpCisgICAgICAg
IG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9yY2lu
ZyBwcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCisgICAgLy8gY29ycmVj
dCBiZWhhdmlvciB3aGVuIHByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3RlZC4K
ICAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7CiAKICAgICBWZWN0b3I8Q0dM
UGl4ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7CiAgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4
ZWxGb3JtYXRPYmogPSAwOwogICAgIEdMaW50IG51bVBpeGVsRm9ybWF0cyA9IDA7Ci0gICAgCisK
ICAgICAvLyBXZSB3aWxsIHRyeToKICAgICAvLwogICAgIC8vICAxKSAzMiBiaXQgUkdCQS8zMiBi
aXQgZGVwdGgvYWNjZWxlcmF0ZWQvc3VwZXJzYW1wbGVkCkBAIC0xMTAsMjEgKzExMiwyMSBAQCBH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLy8gIDQpIGNsb3Nl
c3QgdG8gMzIgYml0IFJHQkEvMTYgYml0IGRlcHRoL3NvZnR3YXJlIHJlbmRlcmVyCiAgICAgLy8K
ICAgICAvLyAgSWYgbm9uZSBvZiB0aGF0IHdvcmtzLCB3ZSBzaW1wbHkgZmFpbCBhbmQgc2V0IG1f
Y29udGV4dE9iaiB0byAwLgotICAgIAorCiAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIs
IDMyLCB0cnVlLCB0cnVlLCBmYWxzZSk7CiAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmli
cy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CiAgICAgaWYgKG51
bVBpeGVsRm9ybWF0cyA9PSAwKSB7CiAgICAgICAgIHNldFBpeGVsRm9ybWF0KGF0dHJpYnMsIDMy
LCAzMiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQo
YXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0gICAg
ICAgIAorCiAgICAgICAgIGlmIChudW1QaXhlbEZvcm1hdHMgPT0gMCkgewogICAgICAgICAgICAg
c2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDE2LCB0cnVlLCBmYWxzZSwgZmFsc2UpOwogICAg
ICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1h
dE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpZiAobnVt
UGl4ZWxGb3JtYXRzID09IDApIHsKICAgICAgICAgICAgICAgICBzZXRQaXhlbEZvcm1hdChhdHRy
aWJzLCAzMiwgMTYsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgQ0dMQ2hv
b3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVs
Rm9ybWF0cyk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKG51bVBpeGVsRm9ybWF0
cyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENvdWxkIG5vdCBmaW5kIGFuIGFjY2Vw
dGFibGUgcmVuZGVyZXIgLSBmYWlsCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEz
MiwxMCArMTM0LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIENHTEVycm9yIGVy
ciA9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXRPYmosIDAsICZtX2NvbnRleHRPYmopOwog
ICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChwaXhlbEZvcm1hdE9iaik7Ci0gICAgCisKICAgICBp
ZiAoZXJyICE9IGtDR0xOb0Vycm9yIHx8ICFtX2NvbnRleHRPYmopIHsKICAgICAgICAgLy8gQ291
bGQgbm90IGNyZWF0ZSB0aGUgY29udGV4dCAtIGZhaWwKICAgICAgICAgbV9jb250ZXh0T2JqID0g
MDsKQEAgLTE0NCw3ICsxNDYsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAKICAgICAvLyBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCB0byB0aGUgb25lIGdpdmVu
IHRvIHVzLgogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCisK
ICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCiAgICAgOjpnbEdlblRleHR1
cmVzKDEsICZtX3RleHR1cmUpOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X3RleHR1cmUpOwpAQCAtMTUyLDIxICsxNTQsMjEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKEdyYQogICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAgICA6OmdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwogICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7Ci0g
ICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQTgsIDEsIDEsIDAsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKLSAgICAKKworICAgIC8vIGNyZWF0ZSBhbiBtdWx0aXNhbXBsZSBGQk8KKyAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorCiAgICAgLy8g
Y3JlYXRlIGFuIEZCTwogICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAg
IAotICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVy
KTsKLSAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBH
TF9ERVBUSF9DT01QT05FTlQsIDEsIDEpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIDApOwotICAgIAotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUy
REVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVY
VFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgCisgICAgaWYgKCFtX2F0dHJzLmFudGlh
bGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICA6Omds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworCiAgICAgOjpn
bENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CiAKQEAgLTE3NCw4ICsxNzYsMTYgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7CiAgICAgaWYgKG1fY29udGV4dE9i
aikgewogICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAg
ICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmIG1fZGVwdGhCdWZmZXIpOwogICAgICAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcykgeworICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwg
Jm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAg
ICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMu
ZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQogICAgICAgICA6OmdsRGVsZXRlRnJhbWVi
dWZmZXJzRVhUKDEsICZtX2Zibyk7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwog
ICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwpAQCAtMjAwLDMwICsyMTAs
ODcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdAogewogICAgIGlm
ICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0IHx8
ICFtX2NvbnRleHRPYmopCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIG1fY3VycmVudFdp
ZHRoID0gd2lkdGg7CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgIAorCiAgICAg
Q0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICAKKworICAgIEdMdWludCBp
bnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQ7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1h
dCA9IEdMX1JHQkE4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7CisgICAgICAgIGNvbG9y
Rm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpIHsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCAmJiBtX2F0dHJzLmRlcHRo
KSB7CisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIMjRf
U1RFTkNJTDhfRVhUOworICAgICAgICB9IGVsc2UgeyAgLy8gIW1fYXR0cnMuc3RlbmNpbCAmJiBt
X2F0dHJzLmRlcHRoCisgICAgICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hl
cmUgc3RlbmNpbCBpcyByZXF1aXJlcyBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAgICAgLy8g
U2VlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyByZXNldCB0ZXh0dXJlCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xf
UkdCQTgsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwor
ICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgCisKKyAgICAvLyByZXNl
dCBtdWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAg
R0xpbnQgc2FtcGxlQ291bnQgPSA4OworICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50
KTsKKyAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCisgICAgICAgICAg
ICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OworICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7CisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsQ29sb3JGb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQor
ICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0
cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9Cisg
ICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwor
ICAgICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogY2xlYW51cC4KKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyByZXNldCByZWd1bGFyIEZCTwogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3
aWR0aCwgaGVpZ2h0KTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCAwKTsKLSAgICAKICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1f
dGV4dHVyZSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhCdWZmZXIpOwotICAgIEdMZW51bSBzdGF0dXMgPSA6OmdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOwotICAgIGlmIChzdGF0dXMgIT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisgICAg
aWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVw
dGgpKSB7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCAwKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAg
IDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NU
RU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRB
Q0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgIH0KKyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIC8vIEZJWE1F
OiBjbGVhbnVwLgogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIH0KIAotICAgIDo6Z2xD
bGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlRkJPKTsKKworICAgIEdMZW51bSBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklU
OworICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhf
QlVGRkVSX0JJVDsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICBjbGVhck1hc2sg
fD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwogICAg
IDo6Z2xGbHVzaCgpOwogfQogCkBAIC0yMzEsNyArMjk4LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGVuc3VyZUNvbnRleHQoQ0dMQ29udAogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKKwogICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xH
ZXRDdXJyZW50Q29udGV4dCgpOwogICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBjb250ZXh0KQog
ICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChjb250ZXh0KTsKQEAgLTI0Myw2ICszMTAsMTgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bgogICAgIDo6Z2xBY3Rp
dmVUZXh0dXJlKHRleHR1cmUpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJl
VGV4dHVyZSgpCit7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAg
ICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9C
VUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xGaW5pc2go
KTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwpAQCAtMjY0LDcgKzM0Myw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRC
dWZmZXIodW5zaWcKICAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQp
IGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKIH0KIAotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1
ZmZlcikKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CkBAIC0zMDcsNyArMzg1
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKHVuc2lnbgogewogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRm
YWN0b3IpOwotfSAgICAgICAKK30KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5j
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNp
Z25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQogewpAQCAtMzI0LDcg
KzQwMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWcKIHsKICAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
KwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsQnVmZmVyRGF0YSh0
YXJnZXQsIGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7
CiB9CkBAIC0zMzMsNyArNDExLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3Vi
RGF0YSh1bgogewogICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIDo6
Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJh
eS0+YmFzZUFkZHJlc3MoKSk7CiB9CkBAIC01MTgsNyArNTk2LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKAogICAgIGluZm8uc2l6ZSA9IHNpemU7CiAgICAgcmV0
dXJuIHRydWU7CiB9Ci0gICAgCisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVu
aWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJ
bmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpIHsKQEAgLTU0NSw3ICs2
MjMsNyBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uCiB7CiAgICAg
aWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgCisKICAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CiAgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbigoR0x1
aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTU4NCw3
ICs2NjIsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihXZWJHTEJ1CiB7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICByZXR1cm4gOjpnbElzQnVmZmVyKChHTHVpbnQp
IGJ1ZmZlci0+b2JqZWN0KCkpOwogfQpAQCAtNTk5LDcgKzY3Nyw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2UKIHsKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7CiAgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKChHTHVpbnQpIGZyYW1lYnVmZmVy
LT5vYmplY3QoKSk7CiB9CkBAIC02MDgsNyArNjg2LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNQcm9ncmFtKFdlYkdMUAogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIHJl
dHVybiA6OmdsSXNQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKIH0KQEAgLTYx
Nyw3ICs2OTUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihXCiB7
CiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwog
ICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICByZXR1cm4gOjpnbElzUmVuZGVy
YnVmZmVyRVhUKChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwogfQpAQCAtNjI2LDcg
KzcwNCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdlYkdMU2gKIHsKICAg
ICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOwogICAgIHJldHVybiA6OmdsSXNTaGFkZXIoKEdMdWludCkg
c2hhZGVyLT5vYmplY3QoKSk7CiB9CkBAIC02MzUsNyArNzEzLDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6aXNUZXh0dXJlKFdlYkdMVAogewogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwog
ICAgIHJldHVybiA6OmdsSXNUZXh0dXJlKChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpKTsKIH0K
QEAgLTY2OCwxNyArNzQ2LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZz
ZXQoZG8KIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhl
bHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQogewogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICAKKwogICAgIC8vIEZJWE1FOiBGb3Igbm93
IHdlIG9ubHkgYWNjZXB0IEdMX1VOU0lHTkVEX0JZVEUvR0xfUkdCQS4gSW4gcmVhbGl0eSBPcGVu
R0wgRVMgMi4wIGFjY2VwdHMgdGhhdCBwYWlyIGFuZCBvbmUgb3RoZXIKICAgICAvLyBhcyBzcGVj
aWZpZWQgYnkgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgYW5kIEdMX0lNUExF
TUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRS4gQnV0IGZvciBub3cgd2Ugd2lsbAogICAgIC8vIG5v
dCBhY2NlcHQgdGhvc2UuCiAgICAgLy8gRklYTUU6IEFsc28sIHdlIHNob3VsZCB0aHJvdyB3aGVu
IGFuIHVuYWNjZXB0YWJsZSB2YWx1ZSBpcyBwYXNzZWQKICAgICBpZiAodHlwZSAhPSBHTF9VTlNJ
R05FRF9CWVRFIHx8IGZvcm1hdCAhPSBHTF9SR0JBKQogICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgCisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1f
ZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkg
KyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJ
VCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CiAgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJy
YXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0
ICogNCk7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7Ci0gICAgcmV0dXJuIGFycmF5OyAgICAKKyAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICBpZiAoIW1fYXR0cnMu
YWxwaGEpIHsKKyAgICAgICAgLy8gSWYgYWxwaGEgaXMgb2ZmLCBieSBkZWZhdWx0IGdsUmVhZFBp
eGVscyBzaG91bGQgc2V0IHRoZSBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgICAgICAv
LyBUaGlzIGlzIGEgaGFjayB1bnRpbCA6OmdsUmVhZFBpeGVscyBmaXhlcyBpdHMgYmVoYXZpb3Iu
CisgICAgICAgIEdMdWJ5dGUqIGRhdGEgPSByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihhcnJh
eS0+ZGF0YSgpKTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVu
Z3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDM7IGkgPCBieXRlTGVuZ3RoOyBpICs9
IDQpCisgICAgICAgICAgICBkYXRhW2ldID0gMjU1OworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCkBA
IC03MDksMTEgKzgwMywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxvbmcg
eCwgCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNo
YWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
CisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgY29uc3QgQ1N0cmluZyYg
Y3MgPSBzdHJpbmcudXRmOCgpOwogICAgIGNvbnN0IGNoYXIqIHMgPSBjcy5kYXRhKCk7Ci0gICAg
CisKICAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIDo6Z2xTaGFkZXJTb3Vy
Y2UoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOwogfQpAQCAtODky
LDcgKzk4Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQog
ewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRleHQobV9jb250
ZXh0T2JqKTsKICAgICA6OmdsVXNlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7
CiB9CkBAIC05MDAsNyArOTk0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3Jh
bShXZWJHTAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgCisKICAgICBlbnN1
cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbSgoR0x1aW50
KSBwcm9ncmFtLT5vYmplY3QoKSk7CiB9CkBAIC0xMDA0LDExICsxMDk4LDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihXZWIKIFN0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewogICAgIEFTU0VS
VChwcm9ncmFtKTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAg
ICBHTGludCBsZW5ndGg7CiAgICAgOjpnbEdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5v
YmplY3QoKSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICAKKwogICAgIEdMc2l6
ZWkgc2l6ZTsKICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgp
OwogICAgIGlmICghaW5mbykKQEAgLTEwMjksNyArMTEyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRl
cml2KFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7CiAgICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IHBuYW1lLCB2YWx1ZSk7CiB9CkBAIC0xMDM3LDE2ICsxMTMxLDE2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlcml2KFdlYkcKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIp
OwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIEdMaW50IGxl
bmd0aDsKICAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICAKKwogICAgIEdMc2l6ZWkgc2l6ZTsKICAg
ICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwogICAgIGlmICgh
aW5mbykKICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAKKwogICAgIDo6Z2xHZXRTaGFkZXJJ
bmZvTG9nKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOwog
ICAgIFN0cmluZyBzKGluZm8pOwogICAgIGZhc3RGcmVlKGluZm8pOwpAQCAtMTA2MCwxMiArMTE1
NCwxMiBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjCiAgICAgZW5z
dXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIEdMaW50IGxlbmd0aDsKICAgICA6OmdsR2V0
U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgR0xfU0hBREVSX1NPVVJDRV9MRU5H
VEgsICZsZW5ndGgpOwotICAgIAorCiAgICAgR0xzaXplaSBzaXplOwogICAgIEdMY2hhciogaW5m
byA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CiAgICAgaWYgKCFpbmZvKQogICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgICAgIAorCiAgICAgOjpnbEdldFNoYWRlclNvdXJjZSgoR0x1aW50
KSBzaGFkZXItPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKICAgICBTdHJpbmcgcyhp
bmZvKTsKICAgICBmYXN0RnJlZShpbmZvKTsKQEAgLTExMDAsNyArMTE5NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihXZWIKIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7CiAgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24oKEdMdWlu
dCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC0xMTIwLDcg
KzEyMTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpCiBsb25n
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBp
bmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4
dE9iaik7Ci0gICAgCisKICAgICB2b2lkKiBwb2ludGVyOwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxsb25nPihwb2ludGVyKTsKQEAgLTExNDMsNyArMTIzNyw3IEBAIGludCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ24KICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKICAgICByZXR1
cm4gMDsKIH0KLSAgICAKKwogaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlv
ZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5z
aWduZWQgdHlwZSwgdm9pZCogcGl4ZWxzKQogewogICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQg
dG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1
ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQkocmV2aXNpb24g
NTU3OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MTYsNyArMTcxNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
ckNBOjpzZXRDb250ZW50c1RvR3JhcGgKIAogICAgIGlmIChtX3BsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgIT0gTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgJiYgbV9wbGF0Zm9ybVRleHR1
cmUgIT0gTnVsbFBsYXRmb3JtM0RPYmplY3QpIHsKICAgICAgICAgLy8gY3JlYXRlIHRoZSBpbm5l
ciAzZCBsYXllcgotICAgICAgICBtX2NvbnRlbnRzTGF5ZXIuYWRvcHROUyhbW0NhbnZhczNETGF5
ZXIgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX3Bs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QpIHRleHR1cmU6c3RhdGljX2Nhc3Q8R0x1aW50PihtX3Bs
YXRmb3JtVGV4dHVyZSldKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLmFkb3B0TlMoW1tDYW52
YXMzRExheWVyIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6Y29uc3RfY2FzdDxHcmFwaGljc0NvbnRl
eHQzRCo+KGdyYXBoaWNzQ29udGV4dDNEKV0pOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgW21f
Y29udGVudHNMYXllci5nZXQoKSBzZXROYW1lOkAiM0QgTGF5ZXIiXTsKICNlbmRpZgpJbmRleDog
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCShyZXZpc2lvbiA1NTgwOCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wMy0xMCAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4
dCBjcmVhdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMzQxNgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQt
YXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCisKKyAgICAgICAg
KiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOiBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgV2luZG93cy4KKwogMjAxMC0w
My0xMCAgRXZhbiBTdGFkZSAgPGVzdGFkZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNELmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDE2ICsxMjQsMjMgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwg
dW5zaWduZWQgbG9uZyBvZmZzZXQpOwogICAgIHZvaWQgdmlld3BvcnRJbXBsKGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKKyAgICB2
b2lkIHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBl
LCB2b2lkKiBidWZmZXIpOworCiAgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBs
b25nIGVycm9yKTsKIAogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBtX2F0dHJzOwotCisgICAgCiAgICAgdW5zaWduZWQgaW50IG1fdGV4dHVyZTsKICAgICB1bnNp
Z25lZCBpbnQgbV9mYm87Ci0gICAgdW5zaWduZWQgaW50IG1fZGVwdGhCdWZmZXI7CisgICAgdW5z
aWduZWQgaW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwogICAgIHVuc2lnbmVkIGludCBtX2NhY2hl
ZFdpZHRoLCBtX2NhY2hlZEhlaWdodDsKIAorICAgIC8vIEZvciBtdWx0aXNhbXBsaW5nCisgICAg
dW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVGQk87CisgICAgdW5zaWduZWQgaW50IG1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcjsKKwogICAgIC8vIEZvciB0cmFja2luZyB3aGljaCBGQk8gaXMgYm91bmQKICAg
ICB1bnNpZ25lZCBpbnQgbV9ib3VuZEZCTzsKIApAQCAtMzUxLDcgKzM1OCwxMCBAQCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRlCiAgICAgOiBtX2F0dHJzKGF0dHJzKQog
ICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigw
KQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8o
MCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogICAgICwgbV9ib3VuZEZCTygwKQogI2lmZGVmIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQogICAgICwgbV9zY2FubGluZSgwKQpAQCAtMzc1LDE0ICsz
ODUsMjEgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZQogI2Vycm9y
IE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKIHsKLSAgICAvLyBGSVhNRTogd2Ug
bmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZAotICAgIC8vIGNv
bnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZAotICAg
IC8vIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQgY291bGQgbm90IGJl
IGhvbm9yZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wg
aW1wbGVtZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBoYSA9IHRydWU7Ci0gICAgbV9hdHRycy5k
ZXB0aCA9IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgbV9hdHRycy5h
bnRpYWxpYXMgPSBmYWxzZTsKKyAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJl
cXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsIGluCisgICAgLy8gcGFydGljdWxh
ciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNv
dWxkCisgICAgLy8gbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0
aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAg
ICAgICAgaWYgKEdMRVdfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsKSB7CisgICAgICAgICAgICBp
ZiAoIW1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgIUdMRVdfRVhU
X2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlKQorICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZh
bHNlOworICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9yY2luZyBwcmVtdWx0aXBsaWVkQWxw
aGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCisgICAgLy8gY29ycmVjdCBiZWhhdmlvciB3aGVuIHBy
ZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3RlZC4KICAgICBtX2F0dHJzLnByZW11
bHRpcGxpZWRBbHBoYSA9IHRydWU7CiAKICNpZiBPUyhXSU5ET1dTKQpAQCAtNTcyLDcgKzU4OSwx
NSBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250CiB7CiAgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0g
ICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEs
ICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCB8
fCBtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBnbERlbGV0ZUZy
YW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKG1fYXR0cnMuZGVwdGggfHwgbV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQog
ICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWZkZWYgRkxJUF9GUkFNRUJV
RkZFUl9WRVJUSUNBTExZCiAgICAgaWYgKG1fc2NhbmxpbmUpCkBAIC02NjksMjMgKzY5NCw4NiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoCiAgICAgICAgIG1fdGV4
dHVyZSA9IGNyZWF0ZVRleHR1cmVPYmplY3QodGFyZ2V0KTsKICAgICAgICAgLy8gR2VuZXJhdGUg
dGhlIGZyYW1lYnVmZmVyIG9iamVjdAogICAgICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAm
bV9mYm8pOwotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVwdGggYnVmZmVyCi0gICAgICAgIGds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgeworICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2FtcGxl
IGZyYW1lYnVmZmVyIG9iamVjdAorICAgICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwg
Jm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2Ft
cGxlIGNvbG9yIGJ1ZmZlcgorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgg
fHwgbV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIG11
bHRpc2FtcGxlIGRlcHRoL3N0ZW5jaWwgYnVmZmVyCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRo
IHx8IG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBk
ZXB0aC9zdGVuY2lsIGJ1ZmZlcgorICAgICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQogCi0gICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMKKyAg
ICBHTGludCBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0
ZW5jaWxGb3JtYXQ7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgaW50ZXJuYWxD
b2xvckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7CisgICAg
ICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCAmJiBtX2F0
dHJzLmRlcHRoKSB7CisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdM
X0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICB9IGVsc2UgeyAvLyAhbV9hdHRycy5zdGVu
Y2lsICYmIG1fYXR0cnMuZGVwdGgKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBs
b2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAg
ICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjb25zdHJ1Y3Rvci4KKyAgICAg
ICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7ICAvLyBTZXR1
cCBtdWx0aXNhbXBsaW5nIEZCTworICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IDg7CisgICAg
ICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICBnbEdldEludGVnZXJ2KEdMX01BWF9T
QU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4g
bWF4U2FtcGxlQ291bnQpCisgICAgICAgICAgICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50
OworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVG
RkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQs
IGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVO
VDBfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwor
ICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAg
ICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBpZiAobV9h
dHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwg
R0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1
c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOworICAgICAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRl
eHQzRDogbXVsdGlzYW1wbGluZyBmcmFtZWJ1ZmZlciB3YXMgaW5jb21wbGV0ZVxuIik7CisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJlYWxsb2NhdGUgdGhlIGNvbG9yIGFuZCBk
ZXB0aC9zdGVuY2lsIGJ1ZmZlcnMKICAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgbV90ZXh0dXJl
KTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwg
MCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisgICAgZ2xUZXhJbWFnZTJEKHRhcmdl
dCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCAwKTsKIAog
ICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAg
IG1fYm91bmRGQk8gPSBtX2ZibzsKLSAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwotCiAg
ICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9S
X0FUVEFDSE1FTlQwX0VYVCwgdGFyZ2V0LCBtX3RleHR1cmUsIDApOwotICAgIGdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5U
X0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CisKKyAgICBpZiAoIW1f
YXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsK
KyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDAp
OworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVO
VF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisKICAgICBHTGVu
dW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCk7CiAgICAgaWYgKHN0YXR1cyAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKICAg
ICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogZnJhbWVidWZmZXIgd2FzIGluY29tcGxl
dGVcbiIpOwpAQCAtNjkzLDYgKzc4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnJlc2hhcGUoCiAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgogICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogICAgIH0KKworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAg
ICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICB9IGVsc2Ug
eworICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87CisgICAgfQogI2VuZGlmICAvLyBSRU5ERVJf
VE9fREVCVUdHSU5HX1dJTkRPVwogCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZ
CkBAIC03MDMsNyArNzk4LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVz
aGFwZSgKICAgICBtX3NjYW5saW5lID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKICNl
bmRpZiAgLy8gRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCiAKLSAgICBnbENsZWFyKEdMX0NP
TE9SX0JVRkZFUl9CSVQpOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVG
RkVSX0JJVDsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICBjbGVhck1hc2sgfD0g
R0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICBj
bGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKKyAgICBnbENsZWFyKGNsZWFyTWFzayk7
CiAKICNpZiBQTEFURk9STShDRykKICAgICAvLyBOZWVkIHRvIHJlYWxsb2NhdGUgdGhlIGNsaWVu
dC1zaWRlIGJhY2tpbmcgc3RvcmUuCkBAIC03NTgsOSArODU4LDE4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2Fu
dmFzLT5idWZmZXIoKTsKICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSAwOwotICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSAobV9ib3VuZEZCTyAhPSBtX2Zibyk7Ci0gICAgaWYgKG11c3RSZXN0
b3JlRkJPKQorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk87CisgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgZ2xCbGl0RnJhbWVidWZmZXJF
WFQoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIDAsIDAsIG1fY2FjaGVkV2lk
dGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAg
ICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIG11c3RS
ZXN0b3JlRkJPID0gKG1fYm91bmRGQk8gIT0gbV9mYm8pOworICAgICAgICBpZiAobXVzdFJlc3Rv
cmVGQk8pCisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICB9CiAjaWYgUExBVEZPUk0oU0tJQSkKICAgICBjb25zdCBTa0JpdG1h
cCogY2FudmFzQml0bWFwID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmJpdG1hcCgpOwogICAgIGNvbnN0IFNrQml0bWFwKiByZWFkYmFja0JpdG1hcCA9IDA7CkBA
IC04NjUsNiArOTc0LDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5Q
YWkKICNlbmRpZiAgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQs
IHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogYnVmZmVyKQoreworI2lmbmRlZiBSRU5ERVJfVE9f
REVCVUdHSU5HX1dJTkRPVworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7CisgICAgICAgIGdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0
aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZG
RVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CisjZW5kaWYKKyAgICBnbFJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBidWZmZXIpOworI2lmbmRlZiBSRU5ERVJf
VE9fREVCVUdHSU5HX1dJTkRPVworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykKKyAgICAgICAg
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyNl
bmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmFjdGl2ZVRleHR1cmUo
dW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewogICAgIC8vIEZJWE1FOiBxdWVyeSBudW1iZXIgb2Yg
dGV4dHVyZXMgYXZhaWxhYmxlLgpAQCAtODkyLDcgKzEwMTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmJpbmRGcmFtCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAg
R0x1aW50IGlkID0gRVhUUkFDVChmcmFtZWJ1ZmZlcik7CiAgICAgaWYgKCFpZCkKLSAgICAgICAg
aWQgPSBtX2ZibzsKKyAgICAgICAgaWQgPSAobV9hdHRycy5hbnRpYWxpYXMgPyBtX211bHRpc2Ft
cGxlRkJPIDogbV9mYm8pOwogICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgaWQpOwog
ICAgIG1fYm91bmRGQk8gPSBpZDsKIH0KQEAgLTE4MDksNyArMTkzNSwxOCBAQCBQYXNzUmVmUHRy
PFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNECiAKICAgICAvLyBGSVhNRTogdGFrZSBpbnRv
IGFjY291bnQgcGFjayBhbGlnbm1lbnQuCiAgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJy
YXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0
ICogNCk7Ci0gICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOworICAgIG1faW50ZXJuYWwtPnJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7Cisj
aWYgT1MoREFSV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzID0g
bV9pbnRlcm5hbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWF0dHJzLmFscGhh
KSB7CisgICAgICAgIC8vIElmIGFscGhhIGlzIG9mZiwgYnkgZGVmYXVsdCBnbFJlYWRQaXhlbHMg
c2hvdWxkIHNldCB0aGUgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAgICAgICAgLy8gVGhp
cyBpcyBhIGhhY2sgdW50aWwgOjpnbFJlYWRQaXhlbHMgZml4ZXMgaXRzIGJlaGF2aW9yLgorICAg
ICAgICBHTHVieXRlKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4oYXJyYXktPmJh
c2VBZGRyZXNzKCkpOworICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVM
ZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkg
Kz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAyNTU7CisgICAgfQorI2VuZGlmCiAgICAgcmV0
dXJuIGFycmF5OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NTgwOCkKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAzLTEwICBa
aGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9w
ZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMzNDE2CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9j
b250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4gCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1
dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6IFdlYkdM
IGNvbnRleHQgYXR0cmlidXRlcyBiZWhhdmlvciBjaGFuZ2VkIHdpdGggdGhpcyBmaXguCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWw6IERpdHRvLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQ6IFN0
ZW5jaWwgYnVmZmVyIGlzIGVuYWJsZWQsIHRodXMgU3RlbmNpbCBCaXRzIGlzIG5vIGxvbmdlciAw
LgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy5odG1sOiBEaXR0by4K
KwogMjAxMC0wMy0xMCAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIFRoZSB0ZXN0IHdhcyBpbnRyb2R1Y2VkIGluIHI1NTc5NiwgaXQgaGFzIGJlZW4gZmFp
bGluZyBpbiBHdGsgYm90cyBzaW5jZSB0aGVuLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29u
dGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorICAgICAgIAorVmVyaWZ5IFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMgYXJlIHdvcmtpbmcgYXMgc3BlY2lmaWVkLCBpbmNsdWRpbmcgYWxwaGEs
IGRlcHRoLCBzdGVuY2lsLCBhbnRpYWxpYXMsIGJ1dCBub3QgcHJlbXVsdGlwbGllZEFscGhhCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYgOiBIb29rIHVwIFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQorVGVzdGluZyBh
bHBoYSA9IHRydWUKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPbicsIHsgYWxwaGE6IHRy
dWUsIGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAw
LCAwLCAwLCAwIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdl
YkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRy
aWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BB
U1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5h
bnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhh
IGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGFscGhhID0gZmFs
c2UKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPZmYnLCB7IGFscGhhOiBmYWxzZSwgZGVw
dGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAs
IDAgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuYWxw
aGEgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29u
dGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxp
YXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRy
dWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGRlcHRoID0gdHJ1ZQorUEFT
UyB3ZWJHTCA9IGdldFdlYkdMKCdkZXB0aE9uJywgeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFz
OiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRl
eHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BB
U1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBo
YSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29u
dGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11
bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGlu
ZyBkZXB0aCA9IGZhbHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT2ZmJywgeyBkZXB0
aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwg
MSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRD
b250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0
aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFz
IGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVl
CitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBzdGVuY2lsID0gdHJ1ZQorUEFT
UyB3ZWJHTCA9IGdldFdlYkdMKCdzdGVuY2lsT24nLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDog
dHJ1ZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51
bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBp
cyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBjb250
ZXh0QXR0cmlicy5zdGVuY2lsIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMg
dHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4
dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVj
dENvbG9yCitUZXN0aW5nIHN0ZW5jaWwgPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdz
dGVuY2lsT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZh
bHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0
dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBj
b250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2ls
IGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4
dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRp
cGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBh
bnRpYWxpYXMgPSB0cnVlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09uJywgeyBk
ZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1
ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRy
aWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29u
dGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBp
cyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyBmYWxzZQorUEFTUyBjb250ZXh0
QXR0cmlicy5hbnRpYWxpYXMgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBs
aWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbFswXSA9PSAyNTUgfHwgcGl4ZWxbMF0gPT0gMCBp
cyBmYWxzZQorVGVzdGluZyBhbnRpYWxpYXMgPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdM
KCdhbnRpYWxpYXNPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBm
YWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51
bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBp
cyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29u
dGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBp
cyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29u
dGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWxbMF0gPT0g
MjU1IHx8IHBpeGVsWzBdID09IDAgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0
cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhh
LWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzA3
IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbHMz
ZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZl
cnRleCI+CithdHRyaWJ1dGUgdmVjMyBwb3M7CithdHRyaWJ1dGUgdmVjNCBjb2xvckluOwordmFy
eWluZyB2ZWM0IGNvbG9yOworCit2b2lkIG1haW4oKQoreworICAgIGNvbG9yID0gY29sb3JJbjsK
KyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLnh5eiwgMS4wKTsKK30KKzwvc2NyaXB0PgorCis8
c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3Zhcnlpbmcg
dmVjNCBjb2xvcjsKKwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsK
K30KKzwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNl
OworCisvLyBUaGVzZSBmb3VyIGRlY2xhcmF0aW9ucyBuZWVkIHRvIGJlIGdsb2JhbCBmb3IgInNo
b3VsZEJlIiB0byBzZWUgdGhlbQordmFyIHdlYkdMID0gbnVsbDsKK3ZhciBjb250ZXh0QXR0cmli
cyA9IG51bGw7Cit2YXIgcGl4ZWwgPSBbMCwgMCwgMCwgMV07Cit2YXIgY29ycmVjdENvbG9yID0g
bnVsbDsKKworZnVuY3Rpb24gaW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVu
Y2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKworICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyBhcmUgd29ya2luZyBhcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBhbHBoYSwgZGVwdGgs
IHN0ZW5jaWwsIGFudGlhbGlhcywgYnV0IG5vdCBwcmVtdWx0aXBsaWVkQWxwaGEnKTsKKworICAg
IGRlYnVnKCdSZWdyZXNzaW9uIHRlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNiI+aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMzNDE2PC9hPiA6IDxjb2RlPkhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRl
cyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2RlPC9jb2RlPicpOworICAgIAorICAgIHJ1
blRlc3QoKTsKK30KKworZnVuY3Rpb24gZ2V0V2ViR0woY2FudmFzTmFtZSwgY29udGV4dEF0dHJp
YnMsIGNsZWFyQ29sb3IsIGNsZWFyRGVwdGgsIGNsZWFyU3RlbmNpbCkKK3sKKyAgICB2YXIgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FudmFzTmFtZSk7CisgICAgdmFyIGdsID0g
Y2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsIGNvbnRleHRBdHRyaWJzKTsK
KyAgICBpZiAoIWdsKSB7CisgICAgICAgIGFsZXJ0KCJObyBXZWJHTCBjb250ZXh0IGZvdW5kIik7
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2YXIgYWN0dWFsQ29udGV4dEF0dHJp
YnMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIEFkZCBhIGNvbnNv
bGUKKyAgICBnbC5jb25zb2xlID0gKCJjb25zb2xlIiBpbiB3aW5kb3cpID8gd2luZG93LmNvbnNv
bGUgOiB7IGxvZzogZnVuY3Rpb24oKSB7IH0gfTsKKworICAgIC8vIGNyZWF0ZSBvdXIgc2hhZGVy
cworICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCAidnNoYWRlciIpOworICAg
IHZhciBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsICJmc2hhZGVyIik7CisKKyAgICBp
ZiAoIXZlcnRleFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHJldHVybiBudWxs
OworCisgICAgLy8gQ3JlYXRlIHRoZSBwcm9ncmFtIG9iamVjdAorICAgIGdsLnByb2dyYW0gPSBn
bC5jcmVhdGVQcm9ncmFtKCk7CisKKyAgICBpZiAoIWdsLnByb2dyYW0pCisgICAgICAgIHJldHVy
biBudWxsOworCisgICAgLy8gQXR0YWNoIG91ciB0d28gc2hhZGVycyB0byB0aGUgcHJvZ3JhbQor
ICAgIGdsLmF0dGFjaFNoYWRlcihnbC5wcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0
dGFjaFNoYWRlcihnbC5wcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisKKyAgICAvLyBCaW5kIGF0
dHJpYnV0ZXMKKyAgICB2YXIgYXR0cmlicyA9IFsgInBvcyIsICJjb2xvckluIiBdOworICAgIGZv
ciAodmFyIGkgaW4gYXR0cmlicykKKyAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKGdsLnBy
b2dyYW0sIGksIGF0dHJpYnNbaV0pOworCisgICAgLy8gTGluayB0aGUgcHJvZ3JhbQorICAgIGds
LmxpbmtQcm9ncmFtKGdsLnByb2dyYW0pOworCisgICAgLy8gQ2hlY2sgdGhlIGxpbmsgc3RhdHVz
CisgICAgdmFyIGxpbmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoZ2wucHJvZ3JhbSwgZ2wu
TElOS19TVEFUVVMpOworICAgIGlmICghbGlua2VkKSB7CisgICAgICAgIC8vIHNvbWV0aGluZyB3
ZW50IHdyb25nIHdpdGggdGhlIGxpbmsKKyAgICAgICAgdmFyIGVycm9yID0gZ2wuZ2V0UHJvZ3Jh
bUluZm9Mb2cgKGdsLnByb2dyYW0pOworICAgICAgICBnbC5jb25zb2xlLmxvZygiRXJyb3IgaW4g
cHJvZ3JhbSBsaW5raW5nOiIrZXJyb3IpOworCisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0oZ2wu
cHJvZ3JhbSk7CisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0oZnJhZ21lbnRTaGFkZXIpOworICAg
ICAgICBnbC5kZWxldGVQcm9ncmFtKHZlcnRleFNoYWRlcik7CisKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorCisgICAgZ2wudXNlUHJvZ3JhbShnbC5wcm9ncmFtKTsKKworICAgIGdsLmNs
ZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xl
YXJDb2xvclszXSk7CisgICAgZ2wuY2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICBnbC5jbGVh
clN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKKyAgICBnbC5lbmFibGUoZ2wuREVQVEhfVEVTVCk7Cisg
ICAgZ2wuZW5hYmxlKGdsLlNURU5DSUxfVEVTVCk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVG
RkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOwor
CisgICAgcmV0dXJuIGdsOworfQorCitmdW5jdGlvbiBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0
aWNlcywgY29sb3JzLCB4LCB5KQoreworICAgIHZhciBjb2xvck9mZnNldCA9IHZlcnRpY2VzLmJ5
dGVMZW5ndGg7CisKKyAgICB2YXIgdmJvID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmlu
ZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJB
WV9CVUZGRVIsIGNvbG9yT2Zmc2V0ICsgY29sb3JzLmJ5dGVMZW5ndGgsIGdsLlNUQVRJQ19EUkFX
KTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOwor
ICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCwgY29sb3Jz
KTsKKworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAw
LCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhB
dHRyaWJQb2ludGVyKDEsIDQsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAsIGNvbG9yT2Zmc2V0
KTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKworICAgIGdsLmRyYXdBcnJh
eXMoZ2wuVFJJQU5HTEVTLCAwLCB2ZXJ0aWNlcy5sZW5ndGggLyAzKTsKKworICAgIHJldHVybiBn
bC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUpOworfQor
CitmdW5jdGlvbiB0ZXN0QWxwaGEoYWxwaGEpCit7CisgICAgZGVidWcoIlRlc3RpbmcgYWxwaGEg
PSAiICsgYWxwaGEpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3
ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9uJywgeyBhbHBoYTogdHJ1ZSwgZGVwdGg6IGZhbHNlLCBz
dGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCki
KTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgn
YWxwaGFPZmYnLCB7IGFscGhhOiBmYWxzZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwg
YW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRC
ZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIp
OworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsIChhbHBoYSA/ICJ0cnVlIiA6
ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAiZmFsc2Ui
KTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIsICJmYWxzZSIpOworICAg
IHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsKKyAgICBzaG91
bGRCZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKworICAg
IHZhciBidWYgPSB3ZWJHTC5yZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIHdlYkdMLlJHQkEsIHdlYkdM
LlVOU0lHTkVEX0JZVEUpOworICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAgIHBpeGVsWzFdID0g
YnVmWzFdOworICAgIHBpeGVsWzJdID0gYnVmWzJdOworICAgIHBpeGVsWzNdID0gYnVmWzNdOwor
ICAgIGNvcnJlY3RDb2xvciA9IChhbHBoYSA/IFswLCAwLCAwLCAwXSA6IFswLCAwLCAwLCAyNTVd
KTsKKyAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9yIik7Cit9CisKK2Z1bmN0aW9u
IHRlc3REZXB0aChkZXB0aCkKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBkZXB0aCA9ICIgKyBkZXB0
aCk7CisgICAgaWYgKGRlcHRoKQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0
V2ViR0woJ2RlcHRoT24nLCB7IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsg
MCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIGVsc2UKKyAgICAgICAgc2hvdWxkQmVOb25OdWxs
KCJ3ZWJHTCA9IGdldFdlYkdMKCdkZXB0aE9mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBm
YWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBz
aG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0
ZXMoKSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0aCIsIChkZXB0aCA/ICJ0
cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAi
dHJ1ZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5zdGVuY2lsIiwgImZhbHNlIik7
CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOworICAg
IHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOwor
CisgICAgd2ViR0wuZGVwdGhGdW5jKHdlYkdMLk5FVkVSKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9
IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAg
IC0xLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4w
LCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEu
MCwgMC4wXSk7CisgICAgdmFyIGNvbG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsK
KyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAg
ICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwg
MCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOworCisgICAgdmFyIGJ1ZiA9IGRy
YXdBbmRSZWFkUGl4ZWwod2ViR0wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOworICAgIHBpeGVs
WzBdID0gYnVmWzBdOworICAgIHBpeGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVsWzJdID0gYnVm
WzJdOworICAgIHBpeGVsWzNdID0gYnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9IChkZXB0aCA/
IFswLCAwLCAwLCAyNTVdIDogWzI1NSwgMCwgMCwgMjU1XSk7CisgICAgc2hvdWxkQmUoInBpeGVs
IiwgImNvcnJlY3RDb2xvciIpOworfQorCitmdW5jdGlvbiB0ZXN0U3RlbmNpbChzdGVuY2lsKQor
eworICAgIGRlYnVnKCJUZXN0aW5nIHN0ZW5jaWwgPSAiICsgc3RlbmNpbCk7CisgICAgaWYgKHN0
ZW5jaWwpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNp
bE9uJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IHRydWUsIGFudGlhbGlhczogZmFsc2UgfSwg
WyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZU5vbk51
bGwoIndlYkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNp
bDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7Cisg
ICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRy
aWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAoc3RlbmNp
bCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3Rl
bmNpbCIsIChzdGVuY2lsID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250
ZXh0QXR0cmlicy5hbHBoYSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJz
LmFudGlhbGlhcyIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVt
dWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCisgICAgd2ViR0wuZGVwdGhGdW5jKHdlYkdMLkFM
V0FZUyk7CisKKyAgICB3ZWJHTC5zdGVuY2lsRnVuYyh3ZWJHTC5ORVZFUiwgMSwgMSk7CisgICAg
d2ViR0wuc3RlbmNpbE9wKHdlYkdMLktFRVAsIHdlYkdMLktFRVAsIHdlYkdMLktFRVApOworCisg
ICAgdmFyIHZlcnRpY2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsIDEu
MCwgMC4wLAorICAgICAgICAtMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4w
LAorICAgICAgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAg
ICAgICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXkoWworICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwK
KyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisKKyAg
ICB2YXIgYnVmID0gZHJhd0FuZFJlYWRQaXhlbCh3ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwg
MCk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07CisgICAg
cGl4ZWxbMl0gPSBidWZbMl07CisgICAgcGl4ZWxbM10gPSBidWZbM107CisgICAgY29ycmVjdENv
bG9yID0gKHN0ZW5jaWwgPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOworICAg
IHNob3VsZEJlKCJwaXhlbCIsICJjb3JyZWN0Q29sb3IiKTsKK30KKworZnVuY3Rpb24gdGVzdEFu
dGlhbGlhcyhhbnRpYWxpYXMpCit7CisgICAgZGVidWcoIlRlc3RpbmcgYW50aWFsaWFzID0gIiAr
IGFudGlhbGlhcyk7CisgICAgaWYgKGFudGlhbGlhcykKKyAgICAgICAgc2hvdWxkQmVOb25OdWxs
KCJ3ZWJHTCA9IGdldFdlYkdMKCdhbnRpYWxpYXNPbicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2ls
OiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IHRydWUgfSwgWyAwLCAwLCAwLCAxIF0s
IDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0
V2ViR0woJ2FudGlhbGlhc09mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxw
aGE6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOwor
ICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0
cmlidXRlcygpIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmRlcHRoIiwgImZhbHNl
Iik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2UiKTsKKyAg
ICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRC
ZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIiwgKGFudGlhbGlhcyA/ICJ0cnVlIiA6ICJmYWxz
ZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwg
InRydWUiKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAg
ICAgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0x
LjAsIC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xvcnMgPSBuZXcgV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwK
KyAgICAgICAgMjU1LCAwLCAwLCAyNTVdKTsKKyAgICB2YXIgYnVmID0gZHJhd0FuZFJlYWRQaXhl
bCh3ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07
CisgICAgc2hvdWxkQmUoInBpeGVsWzBdID09IDI1NSB8fCBwaXhlbFswXSA9PSAwIiwgKGFudGlh
bGlhcyA/ICJmYWxzZSIgOiAidHJ1ZSIpKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisK
KyAgICB0ZXN0QWxwaGEodHJ1ZSk7CisgICAgdGVzdEFscGhhKGZhbHNlKTsKKyAgICB0ZXN0RGVw
dGgodHJ1ZSk7CisgICAgdGVzdERlcHRoKGZhbHNlKTsKKyAgICB0ZXN0U3RlbmNpbCh0cnVlKTsK
KyAgICB0ZXN0U3RlbmNpbChmYWxzZSk7CisgICAgdGVzdEFudGlhbGlhcyh0cnVlKTsKKyAgICB0
ZXN0QW50aWFsaWFzKGZhbHNlKTsKKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cisg
ICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAg
ZXBpbG9ndWUub25sb2FkID0gZmluaXNoOworICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGVwaWxvZ3VlKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgeworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0
KCkiPgorPGNhbnZhcyBpZD0iYWxwaGFPbiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2Fu
dmFzPgorPGNhbnZhcyBpZD0iYWxwaGFPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2Nh
bnZhcz4KKzxjYW52YXMgaWQ9ImRlcHRoT24iIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2Nh
bnZhcz4KKzxjYW52YXMgaWQ9ImRlcHRoT2ZmIiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9j
YW52YXM+Cis8Y2FudmFzIGlkPSJzdGVuY2lsT24iIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48
L2NhbnZhcz4KKzxjYW52YXMgaWQ9InN0ZW5jaWxPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4
Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFudGlhbGlhc09uIiB3aWR0aD0iMnB4IiBoZWlnaHQ9
IjJweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJhbnRpYWxpYXNPZmYiIHdpZHRoPSIycHgiIGhl
aWdodD0iMnB4Ij48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NTc5OSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTcsOCArNyw4IEBAIFBBU1MgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCgpIGlzIG5vbi0KIFBB
U1MgYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4K
IFBBU1MgYXR0cmlicy5kZXB0aCBpcyB0cnVlCiBQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQot
UEFTUyAoYXR0cmlicy5zdGVuY2lsID09IHRydWUgfHwgYXR0cmlicy5zdGVuY2lsID09IGZhbHNl
KSBpcyB0cnVlCi1QQVNTIChhdHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGF0dHJpYnMuYW50
aWFsaWFzID09IGZhbHNlKSBpcyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQ
QVNTIGF0dHJpYnMuYW50aWFsaWFzIGlzIHRydWUKIFBBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVk
QWxwaGEgaXMgdHJ1ZQogVGVzdCBjdXN0b21pemVkIHZhbHVlcwogUEFTUyBjb250ZXh0ID0gY3Jl
YXRlM0RDb250ZXh0KHsgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSkgaXMgbm9u
LW51bGwuCkBAIC0xOCw2ICsxOCwyMiBAQCBQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQogUEFT
UyBhdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKIFBBU1MgYXR0cmlicy5hbnRpYWxpYXMgaXMgZmFs
c2UKIFBBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorVGVzdCBjdXN0b21p
emVkIHZhbHVlcworUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgZGVwdGg6IGZhbHNl
LCBzdGVuY2lsOiB0cnVlIH0pIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzID0gY29udGV4dC5n
ZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzLmRlcHRoIGlz
IHRydWUKK1BBU1MgYXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBp
cyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFsaWFzIGlzIHRydWUKK1BBU1MgYXR0cmlicy5wcmVt
dWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorVGVzdCBjdXN0b21pemVkIHZhbHVlcworUEFTUyBjb250
ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZSB9KSBpcyBu
b24tbnVsbC4KK1BBU1MgYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBp
cyBub24tbnVsbC4KK1BBU1MgYXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYWxw
aGEgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFu
dGlhbGlhcyBpcyB0cnVlCitQQVNTIGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUK
IFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1
dGVzLmh0bWwJKHJldmlzaW9uIDU1Nzk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDkgKzE4LDgg
QEAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0ID0gY3JlYXRlM0RDb250ZQogc2hvdWxkQmVOb25O
dWxsKCJhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CiBzaG91bGRC
ZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVlIik7CiBzaG91bGRCZSgiYXR0cmlicy5hbHBoYSIsICJ0
cnVlIik7Ci0vLyBUaGUgZm9sbG93aW5nIHR3byBkZXBlbmQgb24gd2hldGhlciB0aGUgaW1wbGVt
ZW50YXRpb24gYWN0dWFsbHkgc3VwcG9ydHMgdGhlbQotc2hvdWxkQmUoIihhdHRyaWJzLnN0ZW5j
aWwgPT0gdHJ1ZSB8fCBhdHRyaWJzLnN0ZW5jaWwgPT0gZmFsc2UpIiwgInRydWUiKTsKLXNob3Vs
ZEJlKCIoYXR0cmlicy5hbnRpYWxpYXMgPT0gdHJ1ZSB8fCBhdHRyaWJzLmFudGlhbGlhcyA9PSBm
YWxzZSkiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuc3RlbmNpbCIsICJ0cnVlIik7Citz
aG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAidHJ1ZSIpOwogc2hvdWxkQmUoImF0dHJpYnMu
cHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKIAogZGVidWcgKCJUZXN0IGN1c3RvbWl6ZWQg
dmFsdWVzIik7CkBAIC0zMiw2ICszMSwyNiBAQCBzaG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwg
ImZhbHNlIik7CiBzaG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsKIHNob3Vs
ZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CiAKK2RlYnVnKCJUZXN0
IGN1c3RvbWl6ZWQgdmFsdWVzIik7CisvLyAoc3RlbmNpbCA9PSB0cnVlICYmIGRlcHRoID09IGZh
bHNlKSBpcyBub3Qgc3VwcG9ydGVkLCBkZWZhdWx0IGRlcHRoIHRvIHRydWUKK3Nob3VsZEJlTm9u
TnVsbCgiY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDog
dHJ1ZSB9KSIpOworc2hvdWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0
QXR0cmlidXRlcygpIik7CitzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVlIik7CitzaG91
bGRCZSgiYXR0cmlicy5hbHBoYSIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5zdGVuY2ls
IiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJ0cnVlIik7CitzaG91
bGRCZSgiYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCitkZWJ1ZygiVGVz
dCBjdXN0b21pemVkIHZhbHVlcyIpOworLy8gKHByZW11bHRpcGxpZWRBbHBoYSA9PSBmYWxzZSkg
aXMgbm90IHN1cHBvcnRlZCwgZGVmYXVsdCB0byB0cnVlCitzaG91bGRCZU5vbk51bGwoImNvbnRl
eHQgPSBjcmVhdGUzRENvbnRleHQoeyBwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNlIH0pIik7Citz
aG91bGRCZU5vbk51bGwoImF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCki
KTsKK3Nob3VsZEJlKCJhdHRyaWJzLmRlcHRoIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJz
LmFscGhhIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAidHJ1ZSIpOwor
c2hvdWxkQmUoImF0dHJpYnMuYW50aWFsaWFzIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJz
LnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CiA8L3NjcmlwdD4KIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
Z2V0LWNhbGxzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NTc5OSkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUEFTUyBjb250ZXh0LmdldFBhcmFtZXRl
cihjb250ZXh0LlNURU5DSQogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwpIGlzIGNvbnRleHQuS0VFUAogUEFTUyBjb250ZXh0Lmdl
dFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MpIGlzIGNvbnRl
eHQuS0VFUAogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19S
RUYpIGlzIDAKLVBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JJVFMp
IGlzIDAKK1BBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JJVFMpID4g
MCBpcyB0cnVlCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9DTEVB
Ul9WQUxVRSkgaXMgMAogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxf
RkFJTCkgaXMgY29udGV4dC5LRUVQCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQu
U1RFTkNJTF9GVU5DKSBpcyBjb250ZXh0LkFMV0FZUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwJKHJldmlzaW9uIDU1Nzk5KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDcgKzgyLDcgQEAgZWxzZSB7CiAgICAgLy8gRklYTUU6IEN1cnJlbnQgV2Vi
S2l0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIChodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NDIpCiAgICAgLy9zaG91bGRCZSgnY29udGV4
dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyknLCAnMHhGRkZG
RkZGRicpOwogICAgIC8vc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RF
TkNJTF9CQUNLX1dSSVRFTUFTSyknLCAnMHhGRkZGRkZGRicpOwotICAgIHNob3VsZEJlKCdjb250
ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQklUUyknLCAnMCcpOworICAgIHNob3Vs
ZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQklUUykgPiAwJywgJ3Ry
dWUnKTsKICAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lM
X0NMRUFSX1ZBTFVFKScsICcwJyk7CiAgICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVy
KGNvbnRleHQuU1RFTkNJTF9GQUlMKScsICdjb250ZXh0LktFRVAnKTsKICAgICBzaG91bGRCZSgn
Y29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0ZVTkMpJywgJ2NvbnRleHQuQUxX
QVlTJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50442</attachid>
            <date>2010-03-10 14:57:36 -0800</date>
            <delta_ts>2010-03-10 17:46:43 -0800</delta_ts>
            <desc>fixed style problems</desc>
            <filename>attrs.patch</filename>
            <type>text/plain</type>
            <size>66120</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTgwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDMtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6IEFkZCBtZW1iZXJz
L2Z1bmN0aW9ucyBmb3IgbXVsdGlzYW1wbGluZy9zdGVuY2lsIGJ1ZmZlciBwdXJwb3NlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmg6IEFkZCBHcmFwaGlj
c0NvbnRleHQzRCBhcyBhIG1lbWJlciBvZiBDYW52YXMzRExheWVyLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tOiBBZGQgbXVsdGlzYW1wbGluZyBzdXBw
b3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5jcHA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBj
cmVhdGlvbiBjb2RlIGZvciBNYWMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENhbnZhczNETGF5ZXIgaW5pdCBj
YWxsLgorCiAyMDEwLTAzLTEwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGxvaXNsby1tYWNi
b29rcHJvLmxvY2FsPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAg
ICAgaWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0g
IndlYmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpj
cmVhdGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0
YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgp
OwogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6
Ok5ldygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2
aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRF9oCkBAIC0zODksNyArMzg5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gMHg4
NEU4LAogICAgICAgICAgICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gPSAweDA1MDYK
ICAgICAgICAgfTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQ29udGV4dCBjcmVhdGlvbiBhdHRy
aWJ1dGVzLgogICAgICAgICBzdHJ1Y3QgQXR0cmlidXRlcyB7CiAgICAgICAgICAgICBBdHRyaWJ1
dGVzKCkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQ
bGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIE51bGxQbGF0
Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIC8vIFdpdGggbXVsdGlz
YW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgorICAg
ICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAgICAgICAvLyBIZWxwZXIg
dG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCiAgICAgICAg
IC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBpbnQgc2l6ZUluQnl0ZXMo
aW50IHR5cGUpOwpAQCAtNDk5LDEwICs1MDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2b2lkIGNsZWFyU3RlbmNpbChsb25nIHMpOwogICAgICAgICB2b2lkIGNvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKICAgICAgICAgdm9p
ZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKik7Ci0gICAgICAgIAorCiAgICAgICAgIC8vdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLCB1bnNpZ25lZCBsb25nIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSk7CiAgICAgICAgIC8vdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZz
ZXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBs
b25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwot
ICAgICAgICAKKwogICAgICAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9y
ZGVyKTsKICAgICAgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAgICAgICAgIHZv
aWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKQEAgLTU4NCw5ICs1ODksOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7
CiAgICAgICAgIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJh
bSk7CiAgICAgICAgIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5p
dHMpOwotICAgICAgICAKKwogICAgICAgICBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHJlYWRQaXhl
bHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKTsKLSAgICAgICAg
CisKICAgICAgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKICAgICAgICAgdm9pZCBy
ZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7
CiAgICAgICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7
CkBAIC02NDcsNyArNjUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHZp
ZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCk7CiAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7
Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBw
YWludCBldmVudHMKICAgICAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCk7CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKQEAgLTY1OSwxNCArNjY0LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQgY3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CiAgICAgICAgIHVuc2lnbmVkIGNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nKTsKICAg
ICAgICAgdW5zaWduZWQgY3JlYXRlVGV4dHVyZSgpOwotICAgICAgICAKKwogICAgICAgICB2b2lk
IGRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCk7CiAgICAgICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIo
dW5zaWduZWQpOwogICAgICAgICB2b2lkIGRlbGV0ZVByb2dyYW0odW5zaWduZWQpOwogICAgICAg
ICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCk7CiAgICAgICAgIHZvaWQgZGVsZXRl
U2hhZGVyKHVuc2lnbmVkKTsKLSAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsg
ICAgICAgIAotICAgICAgICAKKyAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsK
KwogICAgICAgICAvLyBTeW50aGVzaXplcyBhbiBPcGVuR0wgZXJyb3Igd2hpY2ggd2lsbCBiZSBy
ZXR1cm5lZCBmcm9tIGEKICAgICAgICAgLy8gbGF0ZXIgY2FsbCB0byBnZXRFcnJvci4gVGhpcyBp
cyB1c2VkIHRvIGVtdWxhdGUgT3BlbkdMIEVTCiAgICAgICAgIC8vIDIuMCBiZWhhdmlvciBvbiB0
aGUgZGVza3RvcCBhbmQgdG8gZW5mb3JjZSBhZGRpdGlvbmFsIGVycm9yCkBAIC02NzcsNyArNjgy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBnZXRFcnJvciBpbiB0aGUgb3Jk
ZXIgdGhleSB3ZXJlIGFkZGVkLgogICAgICAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKHVuc2ln
bmVkIGxvbmcgZXJyb3IpOwogCi0gICAgcHJpdmF0ZTogICAgICAgIAorICAgIHByaXZhdGU6CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0cnMpOwogCiAgICAgICAgIC8v
IEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nLgpAQCAtNzA5LDE4ICs3MTQsMjQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQq
IGZvcm1hdCk7CiAKICAgICAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7
Ci0gICAgICAgIAorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBBdHRyaWJ1dGVzIG1fYXR0
cnM7CiAgICAgICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKLSAgICAg
ICAgCisKICAgICAgICAgQ0dMQ29udGV4dE9iaiBtX2NvbnRleHRPYmo7CiAgICAgICAgIEdMdWlu
dCBtX3RleHR1cmU7CiAgICAgICAgIEdMdWludCBtX2ZibzsKLSAgICAgICAgR0x1aW50IG1fZGVw
dGhCdWZmZXI7CisgICAgICAgIEdMdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKKworICAgICAg
ICAvLyBGb3IgbXVsdGlzYW1wbGluZworICAgICAgICBHTHVpbnQgbV9tdWx0aXNhbXBsZUZCTzsK
KyAgICAgICAgR0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAg
IEdMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisKICAgICAgICAgLy8gRXJyb3JzIHJh
aXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25l
ZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9yczsKLSNlbmRpZiAgICAgICAgCisjZW5kaWYKIAogICAg
ICAgICAvLyBGSVhNRTogaWRlYWxseSB0aGlzIHdvdWxkIGJlIHVzZWQgb24gYWxsIHBsYXRmb3Jt
cy4KICNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oUVQpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCShyZXZpc2lvbiA1NTc5
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTYgKzMyLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBHcmFwaGljc0xheWVyOworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogfQog
CiBAaW50ZXJmYWNlIENhbnZhczNETGF5ZXIgOiBDQU9wZW5HTExheWVyIAogewogICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRCogbV9jb250ZXh0OwogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAg
IEdMdWludCBtX3RleHR1cmU7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooQ0dMQ29udGV4
dE9iailjb250ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJlOworLSAoaWQpaW5pdFdpdGhDb250
ZXh0OihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKIAogLSAoQ0dJbWFnZVJl
Ziljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JT
cGFjZTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXll
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMz
RExheWVyLm1tCShyZXZpc2lvbiA1NTc5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NhbnZhczNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2ltcG9ydCAiQ2FudmFzM0RMYXllci5oIgogCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CiAjaW1wb3J0IDxPcGVuR0wvT3BlbkdMLmg+CkBAIC00MSwxMCArNDIsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBDYW52YXMzRExheWVyCiAK
LS0oaWQpaW5pdFdpdGhDb250ZXh0OihDR0xDb250ZXh0T2JqKWNvbnRleHQgdGV4dHVyZTooR0x1
aW50KXRleHR1cmUKKy0oaWQpaW5pdFdpdGhDb250ZXh0OihHcmFwaGljc0NvbnRleHQzRCopY29u
dGV4dAogewotICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7Ci0gICAgbV90ZXh0dXJlID0gdGV4
dHVyZTsKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY29udGV4dE9iaiA9IHN0YXRp
Y19jYXN0PENHTENvbnRleHRPYmo+KGNvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
KSk7CisgICAgbV90ZXh0dXJlID0gc3RhdGljX2Nhc3Q8R0x1aW50Pihjb250ZXh0LT5wbGF0Zm9y
bVRleHR1cmUoKSk7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICByZXR1cm4gc2VsZjsK
IH0KQEAgLTcwLDEyICs3MiwxMiBAQCAtKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQ
aXhlbEZvCiAKIC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWdsQ29udGV4
dCBwaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1l
OihDRlRpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6KGNvbnN0IENWVGltZVN0
YW1wICopdGltZVN0YW1wCiB7Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2Jq
KTsKLSAgICBnbEZpbmlzaCgpOworICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKwog
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGdsQ29udGV4dCk7CiAKICAgICBDR1JlY3QgZnJhbWUg
PSBbc2VsZiBmcmFtZV07Ci0gICAgICAgIAorCiAgICAgLy8gZHJhdyB0aGUgRkJPIGludG8gdGhl
IGxheWVyCiAgICAgZ2xWaWV3cG9ydCgwLCAwLCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXpl
LmhlaWdodCk7CiAgICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOwpAQCAtOTcsNyArOTks
NyBAQCAtKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailnCiAgICAgICAgIGds
VGV4Q29vcmQyZigwLCAxKTsKICAgICAgICAgZ2xWZXJ0ZXgyZigtMSwgMSk7CiAgICAgZ2xFbmQo
KTsKLSAgICAKKwogICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgZ2xE
aXNhYmxlKEdMX1RFWFRVUkVfMkQpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1NTc5
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC01MywyNSArNTMsMjUgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogc3RhdGljIHZvaWQgc2V0UGl4ZWxGb3JtYXQoVmVjdG9yPENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlPiYgYXR0cmlicywgaW50IGNvbG9yQml0cywgaW50IGRlcHRoQml0cywgYm9vbCBh
Y2NlbGVyYXRlZCwgYm9vbCBzdXBlcnNhbXBsZSwgYm9vbCBjbG9zZXN0KQogewogICAgIGF0dHJp
YnMuY2xlYXIoKTsKLSAgICAKKwogICAgIGF0dHJpYnMuYXBwZW5kKGtDR0xQRkFDb2xvclNpemUp
OwogICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
Pihjb2xvckJpdHMpKTsKICAgICBhdHRyaWJzLmFwcGVuZChrQ0dMUEZBRGVwdGhTaXplKTsKICAg
ICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oZGVw
dGhCaXRzKSk7Ci0gICAgCisKICAgICBpZiAoYWNjZWxlcmF0ZWQpCiAgICAgICAgIGF0dHJpYnMu
YXBwZW5kKGtDR0xQRkFBY2NlbGVyYXRlZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGF0dHJpYnMu
YXBwZW5kKGtDR0xQRkFSZW5kZXJlcklEKTsKICAgICAgICAgYXR0cmlicy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGU+KGtDR0xSZW5kZXJlckdlbmVyaWNGbG9hdElE
KSk7CiAgICAgfQotICAgICAgICAKKwogICAgIGlmIChzdXBlcnNhbXBsZSkKICAgICAgICAgYXR0
cmlicy5hcHBlbmQoa0NHTFBGQVN1cGVyc2FtcGxlKTsKLSAgICAgICAgCisKICAgICBpZiAoY2xv
c2VzdCkKICAgICAgICAgYXR0cmlicy5hcHBlbmQoa0NHTFBGQUNsb3Nlc3RQb2xpY3kpOwotICAg
ICAgICAKKwogICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBpeGVsRm9ybWF0QXR0
cmlidXRlPigwKSk7CiB9CiAKQEAgLTg2LDIyICs4NiwyNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX2NvbnRleHRPYmooMCkKICAgICAsIG1fdGV4
dHVyZSgwKQogICAgICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhCdWZmZXIoMCkKLXsKLSAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3Rl
ZAotICAgIC8vIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVu
Y2lsIGFuZAotICAgIC8vIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQg
Y291bGQgbm90IGJlIGhvbm9yZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9m
IHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBoYSA9IHRydWU7Ci0g
ICAgbV9hdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0g
ICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKK3sKKyAg
ICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0
aW9uIGF0dHJpYnV0ZXMsIGluCisgICAgLy8gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxp
YXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkCisgICAgLy8gbm90IGJlIGhv
bm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0
aW9uLgorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgJiYgIW1fYXR0cnMuZGVwdGgpCisgICAgICAg
IG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9yY2lu
ZyBwcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCisgICAgLy8gY29ycmVj
dCBiZWhhdmlvciB3aGVuIHByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3RlZC4K
ICAgICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7CiAKICAgICBWZWN0b3I8Q0dM
UGl4ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7CiAgICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4
ZWxGb3JtYXRPYmogPSAwOwogICAgIEdMaW50IG51bVBpeGVsRm9ybWF0cyA9IDA7Ci0gICAgCisK
ICAgICAvLyBXZSB3aWxsIHRyeToKICAgICAvLwogICAgIC8vICAxKSAzMiBiaXQgUkdCQS8zMiBi
aXQgZGVwdGgvYWNjZWxlcmF0ZWQvc3VwZXJzYW1wbGVkCkBAIC0xMTAsMjEgKzExMiwyMSBAQCBH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLy8gIDQpIGNsb3Nl
c3QgdG8gMzIgYml0IFJHQkEvMTYgYml0IGRlcHRoL3NvZnR3YXJlIHJlbmRlcmVyCiAgICAgLy8K
ICAgICAvLyAgSWYgbm9uZSBvZiB0aGF0IHdvcmtzLCB3ZSBzaW1wbHkgZmFpbCBhbmQgc2V0IG1f
Y29udGV4dE9iaiB0byAwLgotICAgIAorCiAgICAgc2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIs
IDMyLCB0cnVlLCB0cnVlLCBmYWxzZSk7CiAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmli
cy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CiAgICAgaWYgKG51
bVBpeGVsRm9ybWF0cyA9PSAwKSB7CiAgICAgICAgIHNldFBpeGVsRm9ybWF0KGF0dHJpYnMsIDMy
LCAzMiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQo
YXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0gICAg
ICAgIAorCiAgICAgICAgIGlmIChudW1QaXhlbEZvcm1hdHMgPT0gMCkgewogICAgICAgICAgICAg
c2V0UGl4ZWxGb3JtYXQoYXR0cmlicywgMzIsIDE2LCB0cnVlLCBmYWxzZSwgZmFsc2UpOwogICAg
ICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1h
dE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICBpZiAobnVt
UGl4ZWxGb3JtYXRzID09IDApIHsKICAgICAgICAgICAgICAgICBzZXRQaXhlbEZvcm1hdChhdHRy
aWJzLCAzMiwgMTYsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgQ0dMQ2hv
b3NlUGl4ZWxGb3JtYXQoYXR0cmlicy5kYXRhKCksICZwaXhlbEZvcm1hdE9iaiwgJm51bVBpeGVs
Rm9ybWF0cyk7Ci0gICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKG51bVBpeGVsRm9ybWF0
cyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENvdWxkIG5vdCBmaW5kIGFuIGFjY2Vw
dGFibGUgcmVuZGVyZXIgLSBmYWlsCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEz
MiwxMCArMTM0LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIENHTEVycm9yIGVy
ciA9IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXRPYmosIDAsICZtX2NvbnRleHRPYmopOwog
ICAgIENHTERlc3Ryb3lQaXhlbEZvcm1hdChwaXhlbEZvcm1hdE9iaik7Ci0gICAgCisKICAgICBp
ZiAoZXJyICE9IGtDR0xOb0Vycm9yIHx8ICFtX2NvbnRleHRPYmopIHsKICAgICAgICAgLy8gQ291
bGQgbm90IGNyZWF0ZSB0aGUgY29udGV4dCAtIGZhaWwKICAgICAgICAgbV9jb250ZXh0T2JqID0g
MDsKQEAgLTE0NCw3ICsxNDYsNyBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAKICAgICAvLyBTZXQgdGhlIGN1cnJlbnQgY29udGV4dCB0byB0aGUgb25lIGdpdmVu
IHRvIHVzLgogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCisK
ICAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCiAgICAgOjpnbEdlblRleHR1
cmVzKDEsICZtX3RleHR1cmUpOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X3RleHR1cmUpOwpAQCAtMTUyLDIxICsxNTQsMjEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKEdyYQogICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKICAgICA6OmdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVApOwogICAgIDo6Z2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7Ci0g
ICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQTgsIDEsIDEsIDAsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKLSAgICAKKworICAgIC8vIGNyZWF0ZSBhbiBtdWx0aXNhbXBsZSBGQk8KKyAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQorCiAgICAgLy8g
Y3JlYXRlIGFuIEZCTwogICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAg
IAotICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVy
KTsKLSAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBH
TF9ERVBUSF9DT01QT05FTlQsIDEsIDEpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIDApOwotICAgIAotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUy
REVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVY
VFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgCisgICAgaWYgKCFtX2F0dHJzLmFudGlh
bGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICA6Omds
R2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworCiAgICAgOjpn
bENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiB9CiAKQEAgLTE3NCw4ICsxNzYsMTYgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiB7CiAgICAgaWYgKG1fY29udGV4dE9i
aikgewogICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAg
ICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmIG1fZGVwdGhCdWZmZXIpOwogICAgICAg
ICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcykgeworICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwg
Jm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1
ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAg
ICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMu
ZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQogICAgICAgICA6OmdsRGVsZXRlRnJhbWVi
dWZmZXJzRVhUKDEsICZtX2Zibyk7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwog
ICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwpAQCAtMjAwLDMwICsyMTAs
ODYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdAogewogICAgIGlm
ICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0IHx8
ICFtX2NvbnRleHRPYmopCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIG1fY3VycmVudFdp
ZHRoID0gd2lkdGg7CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgIAorCiAgICAg
Q0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICAKKworICAgIEdMdWludCBp
bnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQ7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1h
dCA9IEdMX1JHQkE4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7CisgICAgICAgIGNvbG9y
Rm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0
ZW5jaWwgaXMgcmVxdWlyZXMgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAgLy8gU2VlIEdyYXBo
aWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsICYm
IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9
IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICB9CisKKyAg
ICAvLyByZXNldCB0ZXh0dXJlCiAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
dGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQTgs
IHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6
Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgCisKKyAgICAvLyByZXNldCBtdWx0
aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xpbnQg
c2FtcGxlQ291bnQgPSA4OworICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAg
OjpnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAg
ICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCisgICAgICAgICAgICBzYW1w
bGVDb3VudCA9IG1heFNhbXBsZUNvdW50OworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcik7CisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAg
ICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVw
dGgpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAg
ICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogY2xl
YW51cC4KKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyByZXNldCByZWd1bGFyIEZCTwogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCAwKTsKLSAgICAKICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhCdWZmZXIpOwotICAgIEdMZW51bSBzdGF0dXMgPSA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1
c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOwotICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZG
RVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisgICAgaWYgKCFt
X2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKSB7
CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJf
RVhULCAwKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxf
QVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5U
X0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0K
KyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVh
bnVwLgogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIH0KIAotICAgIDo6Z2xDbGVhcihH
TF9DT0xPUl9CVUZGRVJfQklUKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKKworICAgIEdMZW51bSBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAg
IGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVS
X0JJVDsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICBjbGVhck1hc2sgfD0gR0xf
U1RFTkNJTF9CVUZGRVJfQklUOworICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwogICAgIDo6Z2xG
bHVzaCgpOwogfQogCkBAIC0yMzEsNyArMjk3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGVuc3Vy
ZUNvbnRleHQoQ0dMQ29udAogewogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKKwogICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRDdXJy
ZW50Q29udGV4dCgpOwogICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBjb250ZXh0KQogICAgICAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dChjb250ZXh0KTsKQEAgLTI0Myw2ICszMDksMTggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bgogICAgIDo6Z2xBY3RpdmVUZXh0
dXJlKHRleHR1cmUpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVy
ZSgpCit7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFE
X0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpn
bEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0
LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJf
QklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xGaW5pc2goKTsKKyAg
ICB9Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwpAQCAtMjY0LDcgKzM0Miw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIo
dW5zaWcKICAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZl
ci0+b2JqZWN0KCkgOiAwKTsKIH0KIAotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJh
bWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlcikK
IHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CkBAIC0zMDcsNyArMzg0LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jKHVuc2lnbgogewogICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3Ip
OwotfSAgICAgICAKK30KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5jU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBs
b25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQogewpAQCAtMzI0LDcgKzQwMSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWcKIHsKICAgICBpZiAo
IWFycmF5IHx8ICFhcnJheS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQs
IGFycmF5LT5ieXRlTGVuZ3RoKCksIGFycmF5LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CiB9CkBA
IC0zMzMsNyArNDEwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YSh1
bgogewogICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIDo6Z2xCdWZm
ZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+Ynl0ZUxlbmd0aCgpLCBhcnJheS0+YmFz
ZUFkZHJlc3MoKSk7CiB9CkBAIC01MTgsNyArNTk1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QWN0aXZlQXR0cmliKAogICAgIGluZm8uc2l6ZSA9IHNpemU7CiAgICAgcmV0dXJuIHRy
dWU7CiB9Ci0gICAgCisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBp
bmZvKQogewogICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0KCkpIHsKQEAgLTU0NSw3ICs2MjIsNyBA
QCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uCiB7CiAgICAgaWYgKCFw
cm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1f
Y29udGV4dE9iaik7CiAgICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbigoR0x1aW50KSBw
cm9ncmFtLT5vYmplY3QoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KQEAgLTU4NCw3ICs2NjEs
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihXZWJHTEJ1CiB7CiAgICAgaWYg
KCFidWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKICAgICByZXR1cm4gOjpnbElzQnVmZmVyKChHTHVpbnQpIGJ1ZmZl
ci0+b2JqZWN0KCkpOwogfQpAQCAtNTk5LDcgKzY3Niw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzRnJhbWVidWZmZXIoV2UKIHsKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAg
ICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKChHTHVpbnQpIGZyYW1lYnVmZmVyLT5vYmpl
Y3QoKSk7CiB9CkBAIC02MDgsNyArNjg1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNQ
cm9ncmFtKFdlYkdMUAogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIHJldHVybiA6
OmdsSXNQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKIH0KQEAgLTYxNyw3ICs2
OTQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihXCiB7CiAgICAg
aWYgKCFyZW5kZXJidWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwogfQpAQCAtNjI2LDcgKzcwMyw3
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdlYkdMU2gKIHsKICAgICBpZiAo
IXNoYWRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOwogICAgIHJldHVybiA6OmdsSXNTaGFkZXIoKEdMdWludCkgc2hhZGVy
LT5vYmplY3QoKSk7CiB9CkBAIC02MzUsNyArNzEyLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNUZXh0dXJlKFdlYkdMVAogewogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIHJl
dHVybiA6OmdsSXNUZXh0dXJlKChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpKTsKIH0KQEAgLTY2
OCwxNyArNzQ1LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoZG8K
IFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1
bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQogewogICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKLSAgICAKKwogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIG9u
bHkgYWNjZXB0IEdMX1VOU0lHTkVEX0JZVEUvR0xfUkdCQS4gSW4gcmVhbGl0eSBPcGVuR0wgRVMg
Mi4wIGFjY2VwdHMgdGhhdCBwYWlyIGFuZCBvbmUgb3RoZXIKICAgICAvLyBhcyBzcGVjaWZpZWQg
YnkgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgYW5kIEdMX0lNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfVFlQRS4gQnV0IGZvciBub3cgd2Ugd2lsbAogICAgIC8vIG5vdCBhY2Nl
cHQgdGhvc2UuCiAgICAgLy8gRklYTUU6IEFsc28sIHdlIHNob3VsZCB0aHJvdyB3aGVuIGFuIHVu
YWNjZXB0YWJsZSB2YWx1ZSBpcyBwYXNzZWQKICAgICBpZiAodHlwZSAhPSBHTF9VTlNJR05FRF9C
WVRFIHx8IGZvcm1hdCAhPSBHTF9SR0JBKQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisK
KyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsK
KyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWln
aHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xf
TElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICB9CiAgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGFy
cmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7
CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAo
R0x2b2lkKikgYXJyYXktPmRhdGEoKSk7Ci0gICAgcmV0dXJuIGFycmF5OyAgICAKKyAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICBpZiAoIW1fYXR0cnMuYWxwaGEp
IHsKKyAgICAgICAgLy8gSWYgYWxwaGEgaXMgb2ZmLCBieSBkZWZhdWx0IGdsUmVhZFBpeGVscyBz
aG91bGQgc2V0IHRoZSBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgICAgICAvLyBUaGlz
IGlzIGEgaGFjayB1bnRpbCA6OmdsUmVhZFBpeGVscyBmaXhlcyBpdHMgYmVoYXZpb3IuCisgICAg
ICAgIEdMdWJ5dGUqIGRhdGEgPSByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihhcnJheS0+ZGF0
YSgpKTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVuZ3RoKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDM7IGkgPCBieXRlTGVuZ3RoOyBpICs9IDQpCisg
ICAgICAgICAgICBkYXRhW2ldID0gMjU1OworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCkBAIC03MDks
MTEgKzgwMiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxvbmcgeCwgCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgCisKICAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgY29uc3QgQ1N0cmluZyYgY3MgPSBz
dHJpbmcudXRmOCgpOwogICAgIGNvbnN0IGNoYXIqIHMgPSBjcy5kYXRhKCk7Ci0gICAgCisKICAg
ICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIDo6Z2xTaGFkZXJTb3VyY2UoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOwogfQpAQCAtODkyLDcgKzk4
NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewogICAg
IEFTU0VSVChwcm9ncmFtKTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKICAgICA6OmdsVXNlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7CiB9CkBA
IC05MDAsNyArOTkzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShXZWJH
TAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgCisKICAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbSgoR0x1aW50KSBwcm9n
cmFtLT5vYmplY3QoKSk7CiB9CkBAIC0xMDA0LDExICsxMDk3LDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFByb2dyYW1pdihXZWIKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKLSAgICAKKwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICBHTGlu
dCBsZW5ndGg7CiAgICAgOjpnbEdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3Qo
KSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICAKKwogICAgIEdMc2l6ZWkgc2l6
ZTsKICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwogICAg
IGlmICghaW5mbykKQEAgLTEwMjksNyArMTEyMiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFJlbmRlcmJ1ZmZlclAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFdl
YkdMU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCiB7CiAg
ICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7CiAgICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIHBuYW1l
LCB2YWx1ZSk7CiB9CkBAIC0xMDM3LDE2ICsxMTMwLDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlcml2KFdlYkcKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyhXZWJHTFNoYWRlciogc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwotICAg
IAorCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIEdMaW50IGxlbmd0aDsK
ICAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKLSAgICAKKwogICAgIEdMc2l6ZWkgc2l6ZTsKICAgICBHTGNo
YXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwogICAgIGlmICghaW5mbykK
ICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAKKwogICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9n
KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOwogICAgIFN0
cmluZyBzKGluZm8pOwogICAgIGZhc3RGcmVlKGluZm8pOwpAQCAtMTA2MCwxMiArMTE1MywxMiBA
QCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjCiAgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOwogICAgIEdMaW50IGxlbmd0aDsKICAgICA6OmdsR2V0U2hhZGVy
aXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZs
ZW5ndGgpOwotICAgIAorCiAgICAgR0xzaXplaSBzaXplOwogICAgIEdMY2hhciogaW5mbyA9IChH
TGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7CiAgICAgaWYgKCFpbmZvKQogICAgICAgICByZXR1
cm4gIiI7Ci0gICAgICAgIAorCiAgICAgOjpnbEdldFNoYWRlclNvdXJjZSgoR0x1aW50KSBzaGFk
ZXItPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKICAgICBTdHJpbmcgcyhpbmZvKTsK
ICAgICBmYXN0RnJlZShpbmZvKTsKQEAgLTExMDAsNyArMTE5Myw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1pdihXZWIKIGxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkK
IHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgCisKICAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7CiAgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24oKEdMdWludCkgcHJv
Z3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CkBAIC0xMTIwLDcgKzEyMTMs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpCiBsb25nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
Ci0gICAgCisKICAgICB2b2lkKiBwb2ludGVyOwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2lu
dGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxsb25nPihwb2ludGVyKTsKQEAgLTExNDMsNyArMTIzNiw3IEBAIGludCBHcmFwaGljc0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ24KICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9y
bWF0LCBHTF9VTlNJR05FRF9CWVRFLCBpbWFnZURhdGEuZGF0YSgpKTsKICAgICByZXR1cm4gMDsK
IH0KLSAgICAKKwogaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQg
dHlwZSwgdm9pZCogcGl4ZWxzKQogewogICAgIC8vIEZJWE1FOiB3ZSB3aWxsIG5lZWQgdG8gZGVh
bCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGltYWdlIGJ1ZmZlcnMg
dGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQkocmV2aXNpb24gNTU3OTkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE3MTYsNyArMTcxNiw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpz
ZXRDb250ZW50c1RvR3JhcGgKIAogICAgIGlmIChtX3BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
IT0gTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgJiYgbV9wbGF0Zm9ybVRleHR1cmUgIT0g
TnVsbFBsYXRmb3JtM0RPYmplY3QpIHsKICAgICAgICAgLy8gY3JlYXRlIHRoZSBpbm5lciAzZCBs
YXllcgotICAgICAgICBtX2NvbnRlbnRzTGF5ZXIuYWRvcHROUyhbW0NhbnZhczNETGF5ZXIgYWxs
b2NdIGluaXRXaXRoQ29udGV4dDpzdGF0aWNfY2FzdDxDR0xDb250ZXh0T2JqPihtX3BsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QpIHRleHR1cmU6c3RhdGljX2Nhc3Q8R0x1aW50PihtX3BsYXRmb3Jt
VGV4dHVyZSldKTsKKyAgICAgICAgbV9jb250ZW50c0xheWVyLmFkb3B0TlMoW1tDYW52YXMzRExh
eWVyIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6Y29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQzRCo+
KGdyYXBoaWNzQ29udGV4dDNEKV0pOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgW21fY29udGVu
dHNMYXllci5nZXQoKSBzZXROYW1lOkAiM0QgTGF5ZXIiXTsKICNlbmRpZgpJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA1NTgwOCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wMy0xMCAgWmhlbnlhbyBNbyAgPHptb0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVh
dGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMzQxNgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCisKKyAgICAgICAgKiBzcmMv
R3JhcGhpY3NDb250ZXh0M0QuY3BwOiBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8g
T3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgV2luZG93cy4KKwogMjAxMC0wMy0xMCAg
RXZhbiBTdGFkZSAgPGVzdGFkZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGF2aWQgTGV2aW4uCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNE
LmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29u
dGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDE2ICsxMjQsMjMgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwogICAgIHZvaWQgdmlld3BvcnRJbXBsKGxvbmcgeCwgbG9uZyB5LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKKyAgICB2b2lkIHJl
YWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lk
KiBidWZmZXIpOworCiAgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcih1bnNpZ25lZCBsb25nIGVy
cm9yKTsKIAogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0
dHJzOwotCisgICAgCiAgICAgdW5zaWduZWQgaW50IG1fdGV4dHVyZTsKICAgICB1bnNpZ25lZCBp
bnQgbV9mYm87Ci0gICAgdW5zaWduZWQgaW50IG1fZGVwdGhCdWZmZXI7CisgICAgdW5zaWduZWQg
aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwogICAgIHVuc2lnbmVkIGludCBtX2NhY2hlZFdpZHRo
LCBtX2NhY2hlZEhlaWdodDsKIAorICAgIC8vIEZvciBtdWx0aXNhbXBsaW5nCisgICAgdW5zaWdu
ZWQgaW50IG1fbXVsdGlzYW1wbGVGQk87CisgICAgdW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcjsKKwogICAgIC8vIEZvciB0cmFja2luZyB3aGljaCBGQk8gaXMgYm91bmQKICAgICB1bnNp
Z25lZCBpbnQgbV9ib3VuZEZCTzsKIApAQCAtMzUxLDcgKzM1OCwxMCBAQCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpHcmFwaGljc0NvbnRlCiAgICAgOiBtX2F0dHJzKGF0dHJzKQogICAgICwg
bV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAg
ICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAg
ICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQogICAgICwgbV9ib3VuZEZCTygwKQogI2lmZGVmIEZMSVBfRlJBTUVC
VUZGRVJfVkVSVElDQUxMWQogICAgICwgbV9zY2FubGluZSgwKQpAQCAtMzc1LDE0ICszODUsMjEg
QEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZQogI2Vycm9yIE11c3Qg
cG9ydCB0byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKIHsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0
byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZAotICAgIC8vIGNvbnRleHQg
Y3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZAotICAgIC8vIGFu
dGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQgY291bGQgbm90IGJlIGhvbm9y
ZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVt
ZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBoYSA9IHRydWU7Ci0gICAgbV9hdHRycy5kZXB0aCA9
IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgbV9hdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKKyAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3Rl
ZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsIGluCisgICAgLy8gcGFydGljdWxhciBzdGVu
Y2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkCisg
ICAgLy8gbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3Bl
bkdMIGltcGxlbWVudGF0aW9uLgorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAg
aWYgKEdMRVdfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsKSB7CisgICAgICAgICAgICBpZiAoIW1f
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgIUdMRVdfRVhUX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlKQorICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwor
ICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9yY2luZyBwcmVtdWx0aXBsaWVkQWxwaGEgPSB0
cnVlLCBpbXBsZW1lbnQgdGhlCisgICAgLy8gY29ycmVjdCBiZWhhdmlvciB3aGVuIHByZW11bHRp
cGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3RlZC4KICAgICBtX2F0dHJzLnByZW11bHRpcGxp
ZWRBbHBoYSA9IHRydWU7CiAKICNpZiBPUyhXSU5ET1dTKQpAQCAtNTcyLDcgKzU4OSwxNSBAQCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250CiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0gICAgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCB8fCBtX2F0
dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1fYXR0cnMuZGVwdGggfHwgbV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xEZWxldGVS
ZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfQogICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9W
RVJUSUNBTExZCiAgICAgaWYgKG1fc2NhbmxpbmUpCkBAIC02NjksMjMgKzY5NCw4NiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoCiAgICAgICAgIG1fdGV4dHVyZSA9
IGNyZWF0ZVRleHR1cmVPYmplY3QodGFyZ2V0KTsKICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGZy
YW1lYnVmZmVyIG9iamVjdAogICAgICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8p
OwotICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVwdGggYnVmZmVyCi0gICAgICAgIGdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGZyYW1l
YnVmZmVyIG9iamVjdAorICAgICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVs
dGlzYW1wbGVGQk8pOworICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGNv
bG9yIGJ1ZmZlcgorICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGggfHwgbV9h
dHRycy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2Ft
cGxlIGRlcHRoL3N0ZW5jaWwgYnVmZmVyCisgICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZm
ZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoIHx8IG1f
YXR0cnMuc3RlbmNpbCkgeworICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0aC9z
dGVuY2lsIGJ1ZmZlcgorICAgICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQog
Ci0gICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMKKyAgICBHTGlu
dCBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQ7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZv
cm1hdCA9IEdMX1JHQkE4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7CisgICAgICAgIGNv
bG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJl
IHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAgLy8gU2VlIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWwgY29uc3RydWN0b3IuCisgICAgICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwgJiYgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOwor
ICAgIH0KKworICAgIC8vIFNldHVwIG11bHRpc2FtcGxpbmcgRkJPCisgICAgaWYgKG1fYXR0cnMu
YW50aWFsaWFzKSB7CisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gODsKKyAgICAgICAgR0xp
bnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNf
RVhULCAmbWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1w
bGVDb3VudCkKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7CisgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJu
YWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQs
IEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAgICAgZ2xC
aW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhT
dGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwpCisgICAgICAgICAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYg
KG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAg
fQorICAgICAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJf
Q09NUExFVEVfRVhUKSB7CisgICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBt
dWx0aXNhbXBsaW5nIGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRlXG4iKTsKKworICAgICAgICAg
ICAgLy8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29sb3IgYW5kIGRlcHRoL3N0
ZW5jaWwgYnVmZmVycwogICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOwotICAg
IGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIEdMX1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBp
bnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgMCk7CiAgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIDApOwogCiAgICAgZ2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgbV9ib3Vu
ZEZCTyA9IG1fZmJvOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVO
REVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBn
bEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0KICAgICBnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhULCB0YXJnZXQsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBH
TF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKworICAgIGlmICghbV9hdHRycy5h
bnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkgeworICAgICAg
ICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVG
RkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwg
R0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAo
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVG
RkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKwogICAgIEdMZW51bSBzdGF0
dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKICAg
ICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgewogICAgICAgICBw
cmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBmcmFtZWJ1ZmZlciB3YXMgaW5jb21wbGV0ZVxuIik7
CkBAIC02OTMsNiArNzgxLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVz
aGFwZSgKICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCiAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgfQorCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKKyAgICB9CiAjZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJV
R0dJTkdfV0lORE9XCiAKICNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKQEAgLTcw
Myw3ICs3OTgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKAog
ICAgIG1fc2NhbmxpbmUgPSBuZXcgdW5zaWduZWQgY2hhclt3aWR0aCAqIDRdOwogI2VuZGlmICAv
LyBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKIAotICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVG
RkVSX0JJVCk7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklU
OworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQ7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGNsZWFyTWFz
ayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIGdsQ2xlYXIoY2xlYXJNYXNrKTsKIAogI2lm
IFBMQVRGT1JNKENHKQogICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZSB0aGUgY2xpZW50LXNpZGUg
YmFja2luZyBzdG9yZS4KQEAgLTc1OCw5ICs4NTgsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpiZWdpblBhaQogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250
ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1
ZmZlcigpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7Ci0gICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1fZmJvKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
CisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTzsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
KyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZS
QU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAw
LCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9j
YWNoZWRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CiAgICAgICAgIGds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBt
dXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbXVzdFJlc3RvcmVG
Qk8gPSAobV9ib3VuZEZCTyAhPSBtX2Zibyk7CisgICAgICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
KyAgICAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworICAgIH0KICNpZiBQTEFURk9STShTS0lBKQogICAgIGNvbnN0IFNrQml0bWFwKiBjYW52
YXNCaXRtYXAgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0
bWFwKCk7CiAgICAgY29uc3QgU2tCaXRtYXAqIHJlYWRiYWNrQml0bWFwID0gMDsKQEAgLTg2NSw2
ICs5NzQsMjMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaQogI2Vu
ZGlmICAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWdu
ZWQgbG9uZyB0eXBlLCB2b2lkKiBidWZmZXIpCit7CisjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJ
TkdfV0lORE9XCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsK
KyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1f
ZmJvKTsKKyAgICAgICAgZ2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsg
aGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQs
IEdMX0xJTkVBUik7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9mYm8pOworICAgIH0KKyNlbmRpZgorICAgIGdsUmVhZFBpeGVscyh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZmZlcik7CisjaWZuZGVmIFJFTkRFUl9UT19ERUJV
R0dJTkdfV0lORE9XCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICBnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworI2VuZGlmCit9
CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25l
ZCBsb25nIHRleHR1cmUpCiB7CiAgICAgLy8gRklYTUU6IHF1ZXJ5IG51bWJlciBvZiB0ZXh0dXJl
cyBhdmFpbGFibGUuCkBAIC04OTIsNyArMTAxOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6YmluZEZyYW0KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTHVpbnQg
aWQgPSBFWFRSQUNUKGZyYW1lYnVmZmVyKTsKICAgICBpZiAoIWlkKQotICAgICAgICBpZCA9IG1f
ZmJvOworICAgICAgICBpZCA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8g
OiBtX2Zibyk7CiAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBpZCk7CiAgICAgbV9i
b3VuZEZCTyA9IGlkOwogfQpAQCAtMTgwOSw3ICsxOTM1LDE4IEBAIFBhc3NSZWZQdHI8V2ViR0xB
cnJheT4gR3JhcGhpY3NDb250ZXh0M0QKIAogICAgIC8vIEZJWE1FOiB0YWtlIGludG8gYWNjb3Vu
dCBwYWNrIGFsaWdubWVudC4KICAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJy
YXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsK
LSAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJh
eS0+YmFzZUFkZHJlc3MoKSk7CisgICAgbV9pbnRlcm5hbC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKKyNpZiBPUyhE
QVJXSU4pCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMgPSBtX2ludGVy
bmFsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIGlmICghYXR0cnMuYWxwaGEpIHsKKyAg
ICAgICAgLy8gSWYgYWxwaGEgaXMgb2ZmLCBieSBkZWZhdWx0IGdsUmVhZFBpeGVscyBzaG91bGQg
c2V0IHRoZSBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgICAgICAvLyBUaGlzIGlzIGEg
aGFjayB1bnRpbCA6OmdsUmVhZFBpeGVscyBmaXhlcyBpdHMgYmVoYXZpb3IuCisgICAgICAgIEdM
dWJ5dGUqIGRhdGEgPSByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihhcnJheS0+YmFzZUFkZHJl
c3MoKSk7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBhcnJheS0+Ynl0ZUxlbmd0aCgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAzOyBpIDwgYnl0ZUxlbmd0aDsgaSArPSA0KQor
ICAgICAgICAgICAgZGF0YVtpXSA9IDI1NTsKKyAgICB9CisjZW5kaWYKICAgICByZXR1cm4gYXJy
YXk7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1ODA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMTAgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNv
bnRleHQgY3JlYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzM0MTYKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQt
YXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQ6IEFk
ZGVkLiAKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxw
aGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDogV2ViR0wgY29udGV4
dCBhdHRyaWJ1dGVzIGJlaGF2aW9yIGNoYW5nZWQgd2l0aCB0aGlzIGZpeC4KKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRtbDogRGl0dG8uCisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dDogU3RlbmNpbCBi
dWZmZXIgaXMgZW5hYmxlZCwgdGh1cyBTdGVuY2lsIEJpdHMgaXMgbm8gbG9uZ2VyIDAuCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWw6IERpdHRvLgorCiAyMDEw
LTAzLTEwICBBbnRvbmlvIEdvbWVzICA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VGhlIHRlc3Qgd2FzIGludHJvZHVjZWQgaW4gcjU1Nzk2LCBpdCBoYXMgYmVlbiBmYWlsaW5nIGlu
IEd0ayBib3RzIHNpbmNlIHRoZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRl
eHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0
dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisgICAgICAgCitWZXJpZnkgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyBhcmUgd29ya2luZyBhcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBhbHBoYSwgZGVwdGgs
IHN0ZW5jaWwsIGFudGlhbGlhcywgYnV0IG5vdCBwcmVtdWx0aXBsaWVkQWxwaGEKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCitSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNiA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2RlCitUZXN0aW5nIGFscGhhID0g
dHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9uJywgeyBhbHBoYTogdHJ1ZSwgZGVw
dGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAs
IDAgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuYWxw
aGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250
ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlh
cyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1
ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3RpbmcgYWxwaGEgPSBmYWxzZQorUEFT
UyB3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9mZicsIHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFs
c2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAx
LCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0
QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyBm
YWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0
cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBm
YWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFT
UyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3RpbmcgZGVwdGggPSB0cnVlCitQQVNTIHdlYkdM
ID0gZ2V0V2ViR0woJ2RlcHRoT24nLCB7IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNl
IH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJp
YnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250
ZXh0QXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRy
dWUKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0
cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGll
ZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGRlcHRo
ID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnZGVwdGhPZmYnLCB7IGRlcHRoOiBmYWxz
ZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEs
IDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRB
dHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZh
bHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJp
YnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFs
c2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1Mg
cGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHN0ZW5jaWwgPSB0cnVlCitQQVNTIHdlYkdM
ID0gZ2V0V2ViR0woJ3N0ZW5jaWxPbicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlLCBh
bnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BB
U1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1u
dWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRy
aWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQ
QVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmli
cy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IK
K1Rlc3Rpbmcgc3RlbmNpbCA9IGZhbHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxP
ZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwg
WyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9
IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRB
dHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFs
c2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmli
cy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFs
cGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGFudGlhbGlh
cyA9IHRydWUKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYW50aWFsaWFzT24nLCB7IGRlcHRoOiBm
YWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiB0cnVlIH0sIFsg
MCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3
ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0
cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNl
CitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJz
LmFudGlhbGlhcyBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBo
YSBpcyB0cnVlCitQQVNTIHBpeGVsWzBdID09IDI1NSB8fCBwaXhlbFswXSA9PSAwIGlzIGZhbHNl
CitUZXN0aW5nIGFudGlhbGlhcyA9IGZhbHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FudGlh
bGlhc09mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBh
bnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BB
U1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1u
dWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0
cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIGZhbHNl
CitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0
cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbFswXSA9PSAyNTUgfHwg
cGl4ZWxbMF0gPT0gMCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29u
dGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVz
LWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgt
c3RlbmNpbC1hbnRpYWxpYXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDcgQEAKKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmds
LXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy91dGlsczNkLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4K
K2F0dHJpYnV0ZSB2ZWMzIHBvczsKK2F0dHJpYnV0ZSB2ZWM0IGNvbG9ySW47Cit2YXJ5aW5nIHZl
YzQgY29sb3I7CisKK3ZvaWQgbWFpbigpCit7CisgICAgY29sb3IgPSBjb2xvckluOworICAgIGds
X1Bvc2l0aW9uID0gdmVjNChwb3MueHl6LCAxLjApOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQg
aWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgordmFyeWluZyB2ZWM0IGNv
bG9yOworCit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOworfQorPC9z
Y3JpcHQ+CisKKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CisKKy8v
IFRoZXNlIGZvdXIgZGVjbGFyYXRpb25zIG5lZWQgdG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUi
IHRvIHNlZSB0aGVtCit2YXIgd2ViR0wgPSBudWxsOwordmFyIGNvbnRleHRBdHRyaWJzID0gbnVs
bDsKK3ZhciBwaXhlbCA9IFswLCAwLCAwLCAxXTsKK3ZhciBjb3JyZWN0Q29sb3IgPSBudWxsOwor
CitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2Vi
S2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorCisgICAgZGVzY3JpcHRpb24oJ1ZlcmlmeSBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
IGFyZSB3b3JraW5nIGFzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGFscGhhLCBkZXB0aCwgc3RlbmNp
bCwgYW50aWFsaWFzLCBidXQgbm90IHByZW11bHRpcGxpZWRBbHBoYScpOworCisgICAgZGVidWco
J1JlZ3Jlc3Npb24gdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMzNDE2Ij5odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzM0MTY8L2E+IDogPGNvZGU+SG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9w
ZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGU8L2NvZGU+Jyk7CisgICAgCisgICAgcnVuVGVzdCgp
OworfQorCitmdW5jdGlvbiBnZXRXZWJHTChjYW52YXNOYW1lLCBjb250ZXh0QXR0cmlicywgY2xl
YXJDb2xvciwgY2xlYXJEZXB0aCwgY2xlYXJTdGVuY2lsKQoreworICAgIHZhciBjYW52YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNOYW1lKTsKKyAgICB2YXIgZ2wgPSBjYW52YXMu
Z2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIiwgY29udGV4dEF0dHJpYnMpOworICAgIGlm
ICghZ2wpIHsKKyAgICAgICAgYWxlcnQoIk5vIFdlYkdMIGNvbnRleHQgZm91bmQiKTsKKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZhciBhY3R1YWxDb250ZXh0QXR0cmlicyA9IGds
LmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgCisgICAgLy8gQWRkIGEgY29uc29sZQorICAg
IGdsLmNvbnNvbGUgPSAoImNvbnNvbGUiIGluIHdpbmRvdykgPyB3aW5kb3cuY29uc29sZSA6IHsg
bG9nOiBmdW5jdGlvbigpIHsgfSB9OworCisgICAgLy8gY3JlYXRlIG91ciBzaGFkZXJzCisgICAg
dmFyIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsICJ2c2hhZGVyIik7CisgICAgdmFyIGZy
YWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihnbCwgImZzaGFkZXIiKTsKKworICAgIGlmICghdmVy
dGV4U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlcikKKyAgICAgICAgcmV0dXJuIG51bGw7CisKKyAg
ICAvLyBDcmVhdGUgdGhlIHByb2dyYW0gb2JqZWN0CisgICAgZ2wucHJvZ3JhbSA9IGdsLmNyZWF0
ZVByb2dyYW0oKTsKKworICAgIGlmICghZ2wucHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIG51bGw7
CisKKyAgICAvLyBBdHRhY2ggb3VyIHR3byBzaGFkZXJzIHRvIHRoZSBwcm9ncmFtCisgICAgZ2wu
YXR0YWNoU2hhZGVyKGdsLnByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgICAgZ2wuYXR0YWNoU2hh
ZGVyKGdsLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKworICAgIC8vIEJpbmQgYXR0cmlidXRl
cworICAgIHZhciBhdHRyaWJzID0gWyAicG9zIiwgImNvbG9ySW4iIF07CisgICAgZm9yICh2YXIg
aSBpbiBhdHRyaWJzKQorICAgICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24oZ2wucHJvZ3JhbSwg
aSwgYXR0cmlic1tpXSk7CisKKyAgICAvLyBMaW5rIHRoZSBwcm9ncmFtCisgICAgZ2wubGlua1By
b2dyYW0oZ2wucHJvZ3JhbSk7CisKKyAgICAvLyBDaGVjayB0aGUgbGluayBzdGF0dXMKKyAgICB2
YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnbC5wcm9ncmFtLCBnbC5MSU5LX1NU
QVRVUyk7CisgICAgaWYgKCFsaW5rZWQpIHsKKyAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3Jv
bmcgd2l0aCB0aGUgbGluaworICAgICAgICB2YXIgZXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xv
ZyAoZ2wucHJvZ3JhbSk7CisgICAgICAgIGdsLmNvbnNvbGUubG9nKCJFcnJvciBpbiBwcm9ncmFt
IGxpbmtpbmc6IitlcnJvcik7CisKKyAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShnbC5wcm9ncmFt
KTsKKyAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShmcmFnbWVudFNoYWRlcik7CisgICAgICAgIGds
LmRlbGV0ZVByb2dyYW0odmVydGV4U2hhZGVyKTsKKworICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9CisKKyAgICBnbC51c2VQcm9ncmFtKGdsLnByb2dyYW0pOworCisgICAgZ2wuY2xlYXJDb2xv
cihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9y
WzNdKTsKKyAgICBnbC5jbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgIGdsLmNsZWFyU3RlbmNp
bChjbGVhclN0ZW5jaWwpOworICAgIGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTsKKyAgICBnbC5l
bmFibGUoZ2wuU1RFTkNJTF9URVNUKTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklU
IHwgZ2wuREVQVEhfQlVGRkVSX0JJVCB8IGdsLlNURU5DSUxfQlVGRkVSX0JJVCk7CisKKyAgICBy
ZXR1cm4gZ2w7Cit9CisKK2Z1bmN0aW9uIGRyYXdBbmRSZWFkUGl4ZWwoZ2wsIHZlcnRpY2VzLCBj
b2xvcnMsIHgsIHkpCit7CisgICAgdmFyIGNvbG9yT2Zmc2V0ID0gdmVydGljZXMuYnl0ZUxlbmd0
aDsKKworICAgIHZhciB2Ym8gPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVy
KGdsLkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZF
UiwgY29sb3JPZmZzZXQgKyBjb2xvcnMuYnl0ZUxlbmd0aCwgZ2wuU1RBVElDX0RSQVcpOworICAg
IGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB2ZXJ0aWNlcyk7CisgICAgZ2wu
YnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zmc2V0LCBjb2xvcnMpOworCisg
ICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOwor
ICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLnZlcnRleEF0dHJpYlBv
aW50ZXIoMSwgNCwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgMCwgY29sb3JPZmZzZXQpOworICAg
IGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDEpOworCisgICAgZ2wuZHJhd0FycmF5cyhnbC5U
UklBTkdMRVMsIDAsIHZlcnRpY2VzLmxlbmd0aCAvIDMpOworCisgICAgcmV0dXJuIGdsLnJlYWRQ
aXhlbHMoeCwgeSwgMSwgMSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RBbHBoYShhbHBoYSkKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBhbHBoYSA9ICIgKyBh
bHBoYSk7CisgICAgaWYgKGFscGhhKQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0g
Z2V0V2ViR0woJ2FscGhhT24nLCB7IGFscGhhOiB0cnVlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6
IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSIpOworICAg
IGVsc2UKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9m
ZicsIHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxp
YXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVs
bCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisgICAg
c2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFscGhhIiwgKGFscGhhID8gInRydWUiIDogImZhbHNl
IikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0aCIsICJmYWxzZSIpOworICAg
IHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5zdGVuY2lsIiwgImZhbHNlIik7CisgICAgc2hvdWxk
QmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJj
b250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCisgICAgdmFyIGJ1
ZiA9IHdlYkdMLnJlYWRQaXhlbHMoMCwgMCwgMSwgMSwgd2ViR0wuUkdCQSwgd2ViR0wuVU5TSUdO
RURfQllURSk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07
CisgICAgcGl4ZWxbMl0gPSBidWZbMl07CisgICAgcGl4ZWxbM10gPSBidWZbM107CisgICAgY29y
cmVjdENvbG9yID0gKGFscGhhID8gWzAsIDAsIDAsIDBdIDogWzAsIDAsIDAsIDI1NV0pOworICAg
IHNob3VsZEJlKCJwaXhlbCIsICJjb3JyZWN0Q29sb3IiKTsKK30KKworZnVuY3Rpb24gdGVzdERl
cHRoKGRlcHRoKQoreworICAgIGRlYnVnKCJUZXN0aW5nIGRlcHRoID0gIiArIGRlcHRoKTsKKyAg
ICBpZiAoZGVwdGgpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgn
ZGVwdGhPbicsIHsgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAw
LCAxIF0sIDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdM
ID0gZ2V0V2ViR0woJ2RlcHRoT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBh
bnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIHNob3VsZEJl
Tm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7
CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmRlcHRoIiwgKGRlcHRoID8gInRydWUiIDog
ImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsICJ0cnVlIik7
CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2UiKTsKKyAgICBz
aG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIiwgImZhbHNlIik7CisgICAgc2hvdWxk
QmUoImNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKKyAgICB3
ZWJHTC5kZXB0aEZ1bmMod2ViR0wuTkVWRVIpOworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IFdl
YkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwg
IDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsICAxLjAs
IDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAtMS4wLCAwLjBd
KTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoWworICAgICAg
ICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwg
MCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAy
NTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisKKyAgICB2YXIgYnVmID0gZHJhd0FuZFJl
YWRQaXhlbCh3ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0gPSBi
dWZbMF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07CisgICAgcGl4ZWxbMl0gPSBidWZbMl07Cisg
ICAgcGl4ZWxbM10gPSBidWZbM107CisgICAgY29ycmVjdENvbG9yID0gKGRlcHRoID8gWzAsIDAs
IDAsIDI1NV0gOiBbMjU1LCAwLCAwLCAyNTVdKTsKKyAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29y
cmVjdENvbG9yIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTdGVuY2lsKHN0ZW5jaWwpCit7CisgICAg
ZGVidWcoIlRlc3Rpbmcgc3RlbmNpbCA9ICIgKyBzdGVuY2lsKTsKKyAgICBpZiAoc3RlbmNpbCkK
KyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdzdGVuY2lsT24nLCB7
IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAs
IDAsIDEgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2Vi
R0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxz
ZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBzaG91
bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMo
KSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0aCIsIChzdGVuY2lsID8gInRy
dWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5zdGVuY2lsIiwg
KHN0ZW5jaWwgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRy
aWJzLmFscGhhIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFs
aWFzIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxp
ZWRBbHBoYSIsICJ0cnVlIik7CisKKyAgICB3ZWJHTC5kZXB0aEZ1bmMod2ViR0wuQUxXQVlTKTsK
KworICAgIHdlYkdMLnN0ZW5jaWxGdW5jKHdlYkdMLk5FVkVSLCAxLCAxKTsKKyAgICB3ZWJHTC5z
dGVuY2lsT3Aod2ViR0wuS0VFUCwgd2ViR0wuS0VFUCwgd2ViR0wuS0VFUCk7CisKKyAgICB2YXIg
dmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAgIDEuMCwgMS4wLCAwLjAs
CisgICAgICAgIC0xLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAg
ICAgICAxLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAx
LjAsIC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xvcnMgPSBuZXcgV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwK
KyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAg
ICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTVdKTsKKworICAgIHZhciBi
dWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdMLCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAg
ICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICBwaXhlbFsxXSA9IGJ1ZlsxXTsKKyAgICBwaXhlbFsy
XSA9IGJ1ZlsyXTsKKyAgICBwaXhlbFszXSA9IGJ1ZlszXTsKKyAgICBjb3JyZWN0Q29sb3IgPSAo
c3RlbmNpbCA/IFswLCAwLCAwLCAyNTVdIDogWzI1NSwgMCwgMCwgMjU1XSk7CisgICAgc2hvdWxk
QmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOworfQorCitmdW5jdGlvbiB0ZXN0QW50aWFsaWFz
KGFudGlhbGlhcykKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBhbnRpYWxpYXMgPSAiICsgYW50aWFs
aWFzKTsKKyAgICBpZiAoYW50aWFsaWFzKQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdM
ID0gZ2V0V2ViR0woJ2FudGlhbGlhc09uJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNl
LCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCki
KTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgn
YW50aWFsaWFzT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFs
c2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgc2hv
dWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVz
KCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAiZmFsc2UiKTsKKyAg
ICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIsICJmYWxzZSIpOworICAgIHNob3Vs
ZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250
ZXh0QXR0cmlicy5hbnRpYWxpYXMiLCAoYW50aWFsaWFzID8gInRydWUiIDogImZhbHNlIikpOwor
ICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIp
OworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgICAx
LjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEu
MCwgMC4wXSk7CisgICAgdmFyIGNvbG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsK
KyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAg
ICAyNTUsIDAsIDAsIDI1NV0pOworICAgIHZhciBidWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdM
LCB2ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAgICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICBz
aG91bGRCZSgicGl4ZWxbMF0gPT0gMjU1IHx8IHBpeGVsWzBdID09IDAiLCAoYW50aWFsaWFzID8g
ImZhbHNlIiA6ICJ0cnVlIikpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKworICAgIHRl
c3RBbHBoYSh0cnVlKTsKKyAgICB0ZXN0QWxwaGEoZmFsc2UpOworICAgIHRlc3REZXB0aCh0cnVl
KTsKKyAgICB0ZXN0RGVwdGgoZmFsc2UpOworICAgIHRlc3RTdGVuY2lsKHRydWUpOworICAgIHRl
c3RTdGVuY2lsKGZhbHNlKTsKKyAgICB0ZXN0QW50aWFsaWFzKHRydWUpOworICAgIHRlc3RBbnRp
YWxpYXMoZmFsc2UpOworCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICB2YXIg
ZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgICBlcGlsb2d1
ZS5vbmxvYWQgPSBmaW5pc2g7CisgICAgZXBpbG9ndWUuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9n
dWUpOworfQorCitmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+Cis8
Y2FudmFzIGlkPSJhbHBoYU9uIiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8
Y2FudmFzIGlkPSJhbHBoYU9mZiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgor
PGNhbnZhcyBpZD0iZGVwdGhPbiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgor
PGNhbnZhcyBpZD0iZGVwdGhPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4K
KzxjYW52YXMgaWQ9InN0ZW5jaWxPbiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFz
PgorPGNhbnZhcyBpZD0ic3RlbmNpbE9mZiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2Fu
dmFzPgorPGNhbnZhcyBpZD0iYW50aWFsaWFzT24iIHdpZHRoPSIycHgiIGhlaWdodD0iMnB4Ij48
L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFudGlhbGlhc09mZiIgd2lkdGg9IjJweCIgaGVpZ2h0PSIy
cHgiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDU1Nzk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Y29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3
LDggQEAgUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLQogUEFTUyBhdHRy
aWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgogUEFTUyBh
dHRyaWJzLmRlcHRoIGlzIHRydWUKIFBBU1MgYXR0cmlicy5hbHBoYSBpcyB0cnVlCi1QQVNTIChh
dHRyaWJzLnN0ZW5jaWwgPT0gdHJ1ZSB8fCBhdHRyaWJzLnN0ZW5jaWwgPT0gZmFsc2UpIGlzIHRy
dWUKLVBBU1MgKGF0dHJpYnMuYW50aWFsaWFzID09IHRydWUgfHwgYXR0cmlicy5hbnRpYWxpYXMg
PT0gZmFsc2UpIGlzIHRydWUKK1BBU1MgYXR0cmlicy5zdGVuY2lsIGlzIHRydWUKK1BBU1MgYXR0
cmlicy5hbnRpYWxpYXMgaXMgdHJ1ZQogUEFTUyBhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBp
cyB0cnVlCiBUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzCiBQQVNTIGNvbnRleHQgPSBjcmVhdGUzRENv
bnRleHQoeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9KSBpcyBub24tbnVsbC4K
QEAgLTE4LDYgKzE4LDIyIEBAIFBBU1MgYXR0cmlicy5hbHBoYSBpcyB0cnVlCiBQQVNTIGF0dHJp
YnMuc3RlbmNpbCBpcyBmYWxzZQogUEFTUyBhdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQogUEFT
UyBhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitUZXN0IGN1c3RvbWl6ZWQgdmFs
dWVzCitQQVNTIGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBkZXB0aDogZmFsc2UsIHN0ZW5j
aWw6IHRydWUgfSkgaXMgbm9uLW51bGwuCitQQVNTIGF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRl
eHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGF0dHJpYnMuZGVwdGggaXMgdHJ1ZQor
UEFTUyBhdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgYXR0cmlicy5zdGVuY2lsIGlzIHRydWUK
K1BBU1MgYXR0cmlicy5hbnRpYWxpYXMgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLnByZW11bHRpcGxp
ZWRBbHBoYSBpcyB0cnVlCitUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzCitQQVNTIGNvbnRleHQgPSBj
cmVhdGUzRENvbnRleHQoeyBwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNlIH0pIGlzIG5vbi1udWxs
LgorUEFTUyBhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1u
dWxsLgorUEFTUyBhdHRyaWJzLmRlcHRoIGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbHBoYSBpcyB0
cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFsaWFz
IGlzIHRydWUKK1BBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRt
bAkocmV2aXNpb24gNTU3OTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250
ZXh0LWF0dHJpYnV0ZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTgsOSArMTgsOCBAQCBzaG91
bGRCZU5vbk51bGwoImNvbnRleHQgPSBjcmVhdGUzRENvbnRlCiBzaG91bGRCZU5vbk51bGwoImF0
dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKIHNob3VsZEJlKCJhdHRy
aWJzLmRlcHRoIiwgInRydWUiKTsKIHNob3VsZEJlKCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsK
LS8vIFRoZSBmb2xsb3dpbmcgdHdvIGRlcGVuZCBvbiB3aGV0aGVyIHRoZSBpbXBsZW1lbnRhdGlv
biBhY3R1YWxseSBzdXBwb3J0cyB0aGVtCi1zaG91bGRCZSgiKGF0dHJpYnMuc3RlbmNpbCA9PSB0
cnVlIHx8IGF0dHJpYnMuc3RlbmNpbCA9PSBmYWxzZSkiLCAidHJ1ZSIpOwotc2hvdWxkQmUoIihh
dHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGF0dHJpYnMuYW50aWFsaWFzID09IGZhbHNlKSIs
ICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwgInRydWUiKTsKK3Nob3VsZEJl
KCJhdHRyaWJzLmFudGlhbGlhcyIsICJ0cnVlIik7CiBzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0
aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOwogCiBkZWJ1ZyAoIlRlc3QgY3VzdG9taXplZCB2YWx1ZXMi
KTsKQEAgLTMyLDYgKzMxLDI2IEBAIHNob3VsZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2Ui
KTsKIHNob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOwogc2hvdWxkQmUoImF0
dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKIAorZGVidWcoIlRlc3QgY3VzdG9t
aXplZCB2YWx1ZXMiKTsKKy8vIChzdGVuY2lsID09IHRydWUgJiYgZGVwdGggPT0gZmFsc2UpIGlz
IG5vdCBzdXBwb3J0ZWQsIGRlZmF1bHQgZGVwdGggdG8gdHJ1ZQorc2hvdWxkQmVOb25OdWxsKCJj
b250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlIH0p
Iik7CitzaG91bGRCZU5vbk51bGwoImF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1
dGVzKCkiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmRlcHRoIiwgInRydWUiKTsKK3Nob3VsZEJlKCJh
dHRyaWJzLmFscGhhIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAidHJ1
ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYW50aWFsaWFzIiwgInRydWUiKTsKK3Nob3VsZEJlKCJh
dHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKK2RlYnVnKCJUZXN0IGN1c3Rv
bWl6ZWQgdmFsdWVzIik7CisvLyAocHJlbXVsdGlwbGllZEFscGhhID09IGZhbHNlKSBpcyBub3Qg
c3VwcG9ydGVkLCBkZWZhdWx0IHRvIHRydWUKK3Nob3VsZEJlTm9uTnVsbCgiY29udGV4dCA9IGNy
ZWF0ZTNEQ29udGV4dCh7IHByZW11bHRpcGxpZWRBbHBoYTogZmFsc2UgfSkiKTsKK3Nob3VsZEJl
Tm9uTnVsbCgiYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworc2hv
dWxkQmUoImF0dHJpYnMuZGVwdGgiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYWxwaGEi
LCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuc3RlbmNpbCIsICJ0cnVlIik7CitzaG91bGRC
ZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMucHJlbXVs
dGlwbGllZEFscGhhIiwgInRydWUiKTsKKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwv
c2NyaXB0PgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2Fs
bHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU1Nzk5KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRl
eHQuU1RFTkNJCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfRkFJTCkgaXMgY29udGV4dC5LRUVQCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1l
dGVyKGNvbnRleHQuU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUykgaXMgY29udGV4dC5LRUVQ
CiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNLX1JFRikgaXMg
MAotUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQklUUykgaXMgMAor
UEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQklUUykgPiAwIGlzIHRy
dWUKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0NMRUFSX1ZBTFVF
KSBpcyAwCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9GQUlMKSBp
cyBjb250ZXh0LktFRVAKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lM
X0ZVTkMpIGlzIGNvbnRleHQuQUxXQVlTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAkocmV2aXNpb24gNTU3OTkpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtODIsNyArODIsNyBAQCBlbHNlIHsKICAgICAvLyBGSVhNRTogQ3VycmVudCBXZWJLaXQgaW1w
bGVtZW50YXRpb24gcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgKGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg0MikKICAgICAvL3Nob3VsZEJlKCdjb250ZXh0LmdldFBh
cmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19WQUxVRV9NQVNLKScsICcweEZGRkZGRkZGJyk7
CiAgICAgLy9zaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JB
Q0tfV1JJVEVNQVNLKScsICcweEZGRkZGRkZGJyk7Ci0gICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0
UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CSVRTKScsICcwJyk7CisgICAgc2hvdWxkQmUoJ2Nv
bnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CSVRTKSA+IDAnLCAndHJ1ZScpOwog
ICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQ0xFQVJf
VkFMVUUpJywgJzAnKTsKICAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4
dC5TVEVOQ0lMX0ZBSUwpJywgJ2NvbnRleHQuS0VFUCcpOwogICAgIHNob3VsZEJlKCdjb250ZXh0
LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRlVOQyknLCAnY29udGV4dC5BTFdBWVMnKTsK
</data>
<flag name="review"
          id="33591"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50458</attachid>
            <date>2010-03-10 17:46:43 -0800</date>
            <delta_ts>2010-03-11 18:40:25 -0800</delta_ts>
            <desc>removed the whitespace modifications</desc>
            <filename>attrs.patch</filename>
            <type>text/plain</type>
            <size>51101</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTgwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDMtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6IEFkZCBtZW1iZXJz
L2Z1bmN0aW9ucyBmb3IgbXVsdGlzYW1wbGluZy9zdGVuY2lsIGJ1ZmZlciBwdXJwb3NlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmg6IEFkZCBHcmFwaGlj
c0NvbnRleHQzRCBhcyBhIG1lbWJlciBvZiBDYW52YXMzRExheWVyLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tOiBBZGQgbXVsdGlzYW1wbGluZyBzdXBw
b3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5jcHA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBj
cmVhdGlvbiBjb2RlIGZvciBNYWMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENhbnZhczNETGF5ZXIgaW5pdCBj
YWxsLgorCiAyMDEwLTAzLTEwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGxvaXNsby1tYWNi
b29rcHJvLmxvY2FsPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAg
ICAgaWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0g
IndlYmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpj
cmVhdGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0
YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgp
OwogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6
Ok5ldygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2
aXNpb24gNTU4MTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsg
cmV0dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAg
IC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJl
Z3VsYXIgRkJPLgorICAgICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAg
ICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRh
IHR5cGVzCiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBp
bnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOwpAQCAtNzE3LDcgKzcyMiwxMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgICAgICBH
THVpbnQgbV90ZXh0dXJlOwogICAgICAgICBHTHVpbnQgbV9mYm87Ci0gICAgICAgIEdMdWludCBt
X2RlcHRoQnVmZmVyOworICAgICAgICBHTHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAg
ICAgICAgLy8gRm9yIG11bHRpc2FtcGxpbmcKKyAgICAgICAgR0x1aW50IG1fbXVsdGlzYW1wbGVG
Qk87CisgICAgICAgIEdMdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOworICAg
ICAgICBHTHVpbnQgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOworCiAgICAgICAgIC8vIEVycm9y
cyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KICAgICAgICAgTGlzdEhhc2hTZXQ8dW5z
aWduZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CiAjZW5kaWYgICAgICAgIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAkocmV2aXNpb24g
NTU3OTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDE2ICszMiwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgR3JhcGhpY3NMYXllcjsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
IH0KIAogQGludGVyZmFjZSBDYW52YXMzRExheWVyIDogQ0FPcGVuR0xMYXllciAKIHsKICAgICBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2xheWVyT3duZXI7CisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKICAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsK
ICAgICBHTHVpbnQgbV90ZXh0dXJlOwogfQogCi0tIChpZClpbml0V2l0aENvbnRleHQ6KENHTENv
bnRleHRPYmopY29udGV4dCB0ZXh0dXJlOihHTHVpbnQpdGV4dHVyZTsKKy0gKGlkKWluaXRXaXRo
Q29udGV4dDooV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqKWNvbnRleHQ7CiAKIC0gKENHSW1h
Z2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNv
bG9yU3BhY2U7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNE
TGF5ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2Fu
dmFzM0RMYXllci5tbQkocmV2aXNpb24gNTU4MTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9DYW52YXMzRExheWVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTEg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBDYW52YXMzRExh
eWVyCiAKLS0oaWQpaW5pdFdpdGhDb250ZXh0OihDR0xDb250ZXh0T2JqKWNvbnRleHQgdGV4dHVy
ZTooR0x1aW50KXRleHR1cmUKKy0oaWQpaW5pdFdpdGhDb250ZXh0OihHcmFwaGljc0NvbnRleHQz
RCopY29udGV4dAogewotICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7Ci0gICAgbV90ZXh0dXJl
ID0gdGV4dHVyZTsKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY29udGV4dE9iaiA9
IHN0YXRpY19jYXN0PENHTENvbnRleHRPYmo+KGNvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKSk7CisgICAgbV90ZXh0dXJlID0gc3RhdGljX2Nhc3Q8R0x1aW50Pihjb250ZXh0LT5w
bGF0Zm9ybVRleHR1cmUoKSk7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICByZXR1cm4g
c2VsZjsKIH0KQEAgLTcwLDggKzcxLDggQEAgLShDR0xDb250ZXh0T2JqKWNvcHlDR0xDb250ZXh0
Rm9yUGl4ZWxGbwogCiAtKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailnbENv
bnRleHQgcGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVsRm9ybWF0IGZvckxheWVy
VGltZTooQ0ZUaW1lSW50ZXJ2YWwpdGltZUludGVydmFsIGRpc3BsYXlUaW1lOihjb25zdCBDVlRp
bWVTdGFtcCAqKXRpbWVTdGFtcAogewotICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4
dE9iaik7Ci0gICAgZ2xGaW5pc2goKTsKKyAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7
CisKICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChnbENvbnRleHQpOwogCiAgICAgQ0dSZWN0IGZy
YW1lID0gW3NlbGYgZnJhbWVdOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gNTU4MjApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDE2ICs4NiwxOCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3Jh
cGhpY3NDb250ZXh0M0QoR3JhCiAgICAgLCBtX2NvbnRleHRPYmooMCkKICAgICAsIG1fdGV4dHVy
ZSgwKQogICAgICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhCdWZmZXIoMCkKLXsKLSAgICAvLyBG
SVhNRTogd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZAot
ICAgIC8vIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVuY2ls
IGFuZAotICAgIC8vIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQgY291
bGQgbm90IGJlIGhvbm9yZWQKLSAgICAvLyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRo
ZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCi0gICAgbV9hdHRycy5hbHBoYSA9IHRydWU7Ci0gICAg
bV9hdHRycy5kZXB0aCA9IHRydWU7Ci0gICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Ci0gICAg
bV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDAp
CisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKK3sKKyAgICAv
LyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9u
IGF0dHJpYnV0ZXMsIGluCisgICAgLy8gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMs
IGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkCisgICAgLy8gbm90IGJlIGhvbm9y
ZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9u
LgorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgJiYgIW1fYXR0cnMuZGVwdGgpCisgICAgICAgIG1f
YXR0cnMuZGVwdGggPSB0cnVlOworICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9yY2luZyBw
cmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCisgICAgLy8gY29ycmVjdCBi
ZWhhdmlvciB3aGVuIHByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3RlZC4KICAg
ICBtX2F0dHJzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7CiAKICAgICBWZWN0b3I8Q0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGU+IGF0dHJpYnM7CkBAIC0xNTIsMjEgKzE1NCwyMSBAQCBHcmFwaGlj
c0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgOjpnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwogICAgIDo6
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFN
UCk7CiAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9S
R0JBOCwgMSwgMSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIAorCisgICAgLy8gY3JlYXRlIGFuIG11
bHRpc2FtcGxlIEZCTworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6Omds
R2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEdl
blJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xH
ZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICB9CisKICAgICAvLyBjcmVhdGUgYW4gRkJPCiAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9mYm8pOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7Ci0gICAgCi0gICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVw
dGhCdWZmZXIpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgMSwgMSk7Ci0gICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgCi0gICAgOjpnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIDo6Z2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1F
TlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICAKKyAgICBp
ZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkpCisgICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIH0KIApAQCAtMTc0LDgg
KzE3NiwxNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKICAg
ICBpZiAobV9jb250ZXh0T2JqKSB7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29u
dGV4dE9iaik7Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICYgbV9kZXB0
aEJ1ZmZlcik7CiAgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKyAg
ICAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CiAgICAgICAg
IDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICAgICAgQ0dMU2V0Q3Vy
cmVudENvbnRleHQoMCk7CiAgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7
CkBAIC0yMDUsMjUgKzIxNSw4MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGlu
dCB3aWR0CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogICAgIAogICAgIENHTFNldEN1
cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCisKKyAgICBHTHVpbnQgaW50ZXJuYWxD
b2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0OworICAg
IGlmIChtX2F0dHJzLmFscGhhKSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9S
R0JBODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OworICAgICAgICBjb2xvckZvcm1hdCA9
IEdMX1JHQjsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRo
KSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlz
IHJlcXVpcmVzIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRl
eHQzRCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCAmJiBtX2F0dHJz
LmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBU
SDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgfQorCisgICAgLy8gcmVz
ZXQgdGV4dHVyZQogICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4LCB3aWR0aCwg
aGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICA6OmdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIAorCisgICAgLy8gcmVzZXQgbXVsdGlzYW1wbGUg
RkJPCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIEdMaW50IHNhbXBsZUNv
dW50ID0gODsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIDo6Z2xHZXRJ
bnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIGlm
IChzYW1wbGVDb3VudCA+IG1heFNhbXBsZUNvdW50KQorICAgICAgICAgICAgc2FtcGxlQ291bnQg
PSBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwor
ICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAg
ICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAg
ICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAg
ICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgaWYgKGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCisg
ICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
cmVzZXQgcmVndWxhciBGQk8KICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0g
ICAgCiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwot
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVy
KTsKLSAgICBHTGVudW0gc3RhdHVzID0gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xf
RlJBTUVCVUZGRVJfRVhUKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFX0VYVCkgewotICAgICAgICAvLyBGSVhNRTogY2xlYW51cAorICAgIGlmICghbV9hdHRycy5h
bnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkgeworICAgICAg
ICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7
CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1F
TlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdM
X1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9CisgICAgaWYg
KGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KICAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKLSAgICA6OmdsQ2xlYXIoR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisK
KyAgICBHTGVudW0gY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAobV9h
dHRycy5kZXB0aCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Cisg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxf
QlVGRkVSX0JJVDsKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKICAgICA6OmdsRmx1c2goKTsK
IH0KIApAQCAtMjQzLDYgKzMwOSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVU
ZXh0dXJlKHVuCiAgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMpIHsKKyAgICAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKKyAgICAgICAgOjpnbEZpbmlzaCgpOworICAgIH0KK30KKwogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNo
YWRlcikKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CkBAIC02NzUsOSArNzUzLDI1IEBAIFBhc3NS
ZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0QKICAgICAvLyBGSVhNRTogQWxzbywg
d2Ugc2hvdWxkIHRocm93IHdoZW4gYW4gdW5hY2NlcHRhYmxlIHZhbHVlIGlzIHBhc3NlZAogICAg
IGlmICh0eXBlICE9IEdMX1VOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdMX1JHQkEpCiAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAKKworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBt
X211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFX
X0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhU
KHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0
LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KICAgICBSZWZQdHI8
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Ojpj
cmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIChHTHZvaWQqKSBhcnJheS0+ZGF0YSgpKTsKKyAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICBpZiAoIW1fYXR0cnMuYWxw
aGEpIHsKKyAgICAgICAgLy8gSWYgYWxwaGEgaXMgb2ZmLCBieSBkZWZhdWx0IGdsUmVhZFBpeGVs
cyBzaG91bGQgc2V0IHRoZSBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgICAgICAvLyBU
aGlzIGlzIGEgaGFjayB1bnRpbCA6OmdsUmVhZFBpeGVscyBmaXhlcyBpdHMgYmVoYXZpb3IuCisg
ICAgICAgIEdMdWJ5dGUqIGRhdGEgPSByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihhcnJheS0+
ZGF0YSgpKTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVuZ3Ro
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDM7IGkgPCBieXRlTGVuZ3RoOyBpICs9IDQp
CisgICAgICAgICAgICBkYXRhW2ldID0gMjU1OworICAgIH0KICAgICByZXR1cm4gYXJyYXk7ICAg
IAogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVy
Q0EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NMYXllckNBLm1tCShyZXZpc2lvbiA1NTc5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTcxNiw3ICsxNzE2
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9HcmFwaAogCiAgICAgaWYg
KG1fcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCAhPSBOdWxsUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCAmJiBtX3BsYXRmb3JtVGV4dHVyZSAhPSBOdWxsUGxhdGZvcm0zRE9iamVjdCkgewogICAg
ICAgICAvLyBjcmVhdGUgdGhlIGlubmVyIDNkIGxheWVyCi0gICAgICAgIG1fY29udGVudHNMYXll
ci5hZG9wdE5TKFtbQ2FudmFzM0RMYXllciBhbGxvY10gaW5pdFdpdGhDb250ZXh0OnN0YXRpY19j
YXN0PENHTENvbnRleHRPYmo+KG1fcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCkgdGV4dHVyZTpz
dGF0aWNfY2FzdDxHTHVpbnQ+KG1fcGxhdGZvcm1UZXh0dXJlKV0pOworICAgICAgICBtX2NvbnRl
bnRzTGF5ZXIuYWRvcHROUyhbW0NhbnZhczNETGF5ZXIgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpj
b25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dDNEKj4oZ3JhcGhpY3NDb250ZXh0M0QpXSk7CiAjaWZu
ZGVmIE5ERUJVRwogICAgICAgICBbbV9jb250ZW50c0xheWVyLmdldCgpIHNldE5hbWU6QCIzRCBM
YXllciJdOwogI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1ODA4KQorKysgV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDEwLTAzLTEwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSG9vayB1cCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNDE2CisKKyAgICAgICAgVGVzdDogZmFz
dC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50
aWFsaWFzLmh0bWwKKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IEhvb2sg
dXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2Rl
IGZvciBXaW5kb3dzLgorCiAyMDEwLTAzLTEwICBFdmFuIFN0YWRlICA8ZXN0YWRlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA1NTc5OSkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQsMTYgKzEyNCwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAgICAgdm9pZCB2
aWV3cG9ydEltcGwobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKIAorICAgIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9y
bWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGJ1ZmZlcik7CisKICAgICB2b2lkIHN5bnRo
ZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOwogCiBwcml2YXRlOgogICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cnM7Ci0KKyAgICAKICAgICB1bnNpZ25lZCBp
bnQgbV90ZXh0dXJlOwogICAgIHVuc2lnbmVkIGludCBtX2ZibzsKLSAgICB1bnNpZ25lZCBpbnQg
bV9kZXB0aEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CiAg
ICAgdW5zaWduZWQgaW50IG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0OwogCisgICAgLy8g
Rm9yIG11bHRpc2FtcGxpbmcKKyAgICB1bnNpZ25lZCBpbnQgbV9tdWx0aXNhbXBsZUZCTzsKKyAg
ICB1bnNpZ25lZCBpbnQgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcjsKKyAgICB1bnNp
Z25lZCBpbnQgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOworCiAgICAgLy8gRm9yIHRyYWNraW5n
IHdoaWNoIEZCTyBpcyBib3VuZAogICAgIHVuc2lnbmVkIGludCBtX2JvdW5kRkJPOwogCkBAIC0z
NTEsNyArMzU4LDEwIEBAIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGUK
ICAgICA6IG1fYXR0cnMoYXR0cnMpCiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1fZmJvKDAp
Ci0gICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQor
ICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiAgICAgLCBtX2Jv
dW5kRkJPKDApCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCiAgICAgLCBtX3Nj
YW5saW5lKDApCkBAIC0zNzUsMTQgKzM4NSwyMSBAQCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpHcmFwaGljc0NvbnRlCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRp
ZgogewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB1c2Vy
J3MgcmVxdWVzdGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLCBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNo
IGNvdWxkIGFuZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAgICBtX2F0dHJzLmFscGhh
ID0gdHJ1ZTsKLSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBtX2F0dHJzLnN0ZW5jaWwg
PSBmYWxzZTsKLSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIC8vIFRha2UgaW50
byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRl
cywgaW4KKyAgICAvLyBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVy
bWluZSB3aGljaCBjb3VsZCBhbmQgY291bGQKKyAgICAvLyBub3QgYmUgaG9ub3JlZCBiYXNlZCBv
biB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCisgICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoR0xFV19FWFRfcGFja2VkX2RlcHRoX3N0
ZW5jaWwpIHsKKyAgICAgICAgICAgIGlmICghbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAg
ICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
YXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiAhR0xFV19FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUpCisgICAgICAg
IG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgLy8gRklYTUU6IGluc3RlYWQgb2YgZW5m
b3JjaW5nIHByZW11bHRpcGxpZWRBbHBoYSA9IHRydWUsIGltcGxlbWVudCB0aGUKKyAgICAvLyBj
b3JyZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2UgaXMgcmVxdWVz
dGVkLgogICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKIAogI2lmIE9TKFdJ
TkRPV1MpCkBAIC01NzIsNyArNTg5LDE1IEBAIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5H
cmFwaGljc0NvbnQKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZm5kZWYgUkVOREVS
X1RPX0RFQlVHR0lOR19XSU5ET1cKLSAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
ZGVwdGhCdWZmZXIpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBnbERl
bGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIGlmIChtX2F0dHJzLmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgIGds
RGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJP
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCB8fCBtX2F0dHJzLnN0
ZW5jaWwpCisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICB9CiAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJl
KTsKICNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKICAgICBpZiAobV9zY2FubGlu
ZSkKQEAgLTY2OSwyMyArNjk0LDg2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
cmVzaGFwZSgKICAgICAgICAgbV90ZXh0dXJlID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJnZXQp
OwogICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgZnJhbWVidWZmZXIgb2JqZWN0CiAgICAgICAgIGds
R2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7Ci0gICAgICAgIC8vIEdlbmVyYXRlIHRoZSBk
ZXB0aCBidWZmZXIKLSAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVm
ZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICAvLyBH
ZW5lcmF0ZSB0aGUgbXVsdGlzYW1wbGUgZnJhbWVidWZmZXIgb2JqZWN0CisgICAgICAgICAgICBn
bEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICAv
LyBHZW5lcmF0ZSB0aGUgbXVsdGlzYW1wbGUgY29sb3IgYnVmZmVyCisgICAgICAgICAgICBnbEdl
blJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAg
ICAgICBpZiAobV9hdHRycy5kZXB0aCB8fCBtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgICAg
ICAgICAvLyBHZW5lcmF0ZSB0aGUgbXVsdGlzYW1wbGUgZGVwdGgvc3RlbmNpbCBidWZmZXIKKyAg
ICAgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKG1fYXR0cnMuZGVwdGggfHwgbV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgICAg
ICAgICAgLy8gR2VuZXJhdGUgdGhlIGRlcHRoL3N0ZW5jaWwgYnVmZmVyCisgICAgICAgICAgICAg
ICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBSZWFsbG9jYXRlIHRoZSBjb2xv
ciBhbmQgZGVwdGggYnVmZmVycworICAgIEdMaW50IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9y
Rm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBpZiAobV9hdHRycy5hbHBo
YSkgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNv
bG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQor
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAvLyBX
ZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVw
dGggaXMgbm90LgorICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCAmJiBtX2F0dHJzLmRlcHRoKQor
ICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5D
SUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgfQorCisgICAgLy8gU2V0dXAgbXVsdGlz
YW1wbGluZyBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xpbnQg
c2FtcGxlQ291bnQgPSA4OworICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAg
Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAg
ICAgIGlmIChzYW1wbGVDb3VudCA+IG1heFNhbXBsZUNvdW50KQorICAgICAgICAgICAgc2FtcGxl
Q291bnQgPSBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kUmVuZGVy
YnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0
dHJzLmRlcHRoKSB7CisgICAgICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAg
ICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9B
VFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAg
ICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xf
REVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIEdMZW51bSBzdGF0dXMgPSBn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKKyAgICAgICAg
aWYgKHN0YXR1cyAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgICAg
IHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IG11bHRpc2FtcGxpbmcgZnJhbWVidWZmZXIgd2Fz
IGluY29tcGxldGVcbiIpOworCisgICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZWFs
bG9jYXRlIHRoZSBjb2xvciBhbmQgZGVwdGgvc3RlbmNpbCBidWZmZXJzCiAgICAgZ2xCaW5kVGV4
dHVyZSh0YXJnZXQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgMCwgR0xf
UkdCQTgsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwor
ICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICBnbEJpbmRU
ZXh0dXJlKHRhcmdldCwgMCk7CiAKICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKLSAgICBtX2JvdW5kRkJPID0gbV9mYm87Ci0gICAgZ2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIGds
UmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01Q
T05FTlQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCAwKTsKLQogICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIHRhcmdldCwgbV90ZXh0dXJl
LCAwKTsKLSAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhC
dWZmZXIpOworCisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpKSB7CisgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNp
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChH
TF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAg
ICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAg
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRI
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgfQorCiAgICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1
c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOwogICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZG
RVJfQ09NUExFVEVfRVhUKSB7CiAgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IGZy
YW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRlXG4iKTsKQEAgLTY5Myw2ICs3ODEsMTMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKAogICAgICAgICAvLyBGSVhNRTogY2xl
YW51cC4KICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CisKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlz
YW1wbGVGQk87CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAg
IH0KICNlbmRpZiAgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKIAogI2lmZGVmIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQpAQCAtNzAzLDcgKzc5OCwxMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnJlc2hhcGUoCiAgICAgbV9zY2FubGluZSA9IG5ldyB1bnNpZ25l
ZCBjaGFyW3dpZHRoICogNF07CiAjZW5kaWYgIC8vIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxM
WQogCi0gICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKyAgICBHTGJpdGZpZWxkIGNs
ZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkK
KyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICBpZiAobV9h
dHRycy5kZXB0aCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Cisg
ICAgZ2xDbGVhcihjbGVhck1hc2spOwogCiAjaWYgUExBVEZPUk0oQ0cpCiAgICAgLy8gTmVlZCB0
byByZWFsbG9jYXRlIHRoZSBjbGllbnQtc2lkZSBiYWNraW5nIHN0b3JlLgpAQCAtNzU4LDkgKzg1
OCwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAgICAgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CiAgICAgdW5zaWduZWQgY2hhciog
cGl4ZWxzID0gMDsKLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gKG1fYm91bmRGQk8gIT0gbV9m
Ym8pOwotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICBib29sIG11c3RSZXN0b3JlRkJPOwor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAg
ICAgIGdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVp
Z2h0LCAwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQ09MT1JfQlVGRkVS
X0JJVCwgR0xfTElORUFSKTsKICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1fZmJvKTsK
KyAgICAgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICAgICAgZ2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQogI2lmIFBMQVRGT1JNKFNL
SUEpCiAgICAgY29uc3QgU2tCaXRtYXAqIGNhbnZhc0JpdG1hcCA9IGltYWdlQnVmZmVyLT5jb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKTsKICAgICBjb25zdCBTa0JpdG1hcCog
cmVhZGJhY2tCaXRtYXAgPSAwOwpAQCAtODY1LDYgKzk3NCwyMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAjZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdf
V0lORE9XCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVscyhs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQs
IHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGJ1ZmZlcikK
K3sKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1
ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSAr
IGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQorI2VuZGlm
CisgICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYnVm
ZmVyKTsKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9ib3VuZEZCTyk7CisjZW5kaWYKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKIHsKICAgICAvLyBG
SVhNRTogcXVlcnkgbnVtYmVyIG9mIHRleHR1cmVzIGF2YWlsYWJsZS4KQEAgLTg5Miw3ICsxMDE4
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kRnJhbQogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBpZCA9IEVYVFJBQ1QoZnJhbWVidWZmZXIpOwog
ICAgIGlmICghaWQpCi0gICAgICAgIGlkID0gbV9mYm87CisgICAgICAgIGlkID0gKG1fYXR0cnMu
YW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKICAgICBnbEJpbmRGcmFtZWJ1
ZmZlckVYVCh0YXJnZXQsIGlkKTsKICAgICBtX2JvdW5kRkJPID0gaWQ7CiB9CkBAIC0xODA5LDcg
KzE5MzUsMTggQEAgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBHcmFwaGljc0NvbnRleHQzRAogCiAg
ICAgLy8gRklYTUU6IHRha2UgaW50byBhY2NvdW50IHBhY2sgYWxpZ25tZW50LgogICAgIFJlZlB0
cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6
OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOwotICAgIGdsUmVhZFBpeGVscyh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5LT5iYXNlQWRkcmVzcygpKTsKKyAgICBtX2lu
dGVybmFsLT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYXJy
YXktPmJhc2VBZGRyZXNzKCkpOworI2lmIE9TKERBUldJTikKKyAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRycyA9IG1faW50ZXJuYWwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7
CisgICAgaWYgKCFhdHRycy5hbHBoYSkgeworICAgICAgICAvLyBJZiBhbHBoYSBpcyBvZmYsIGJ5
IGRlZmF1bHQgZ2xSZWFkUGl4ZWxzIHNob3VsZCBzZXQgdGhlIGFscGhhIHRvIDI1NSBpbnN0ZWFk
IG9mIDAuCisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHVudGlsIDo6Z2xSZWFkUGl4ZWxzIGZp
eGVzIGl0cyBiZWhhdmlvci4KKyAgICAgICAgR0x1Ynl0ZSogZGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R0x1Ynl0ZSo+KGFycmF5LT5iYXNlQWRkcmVzcygpKTsKKyAgICAgICAgdW5zaWduZWQgYnl0
ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDM7IGkgPCBieXRlTGVuZ3RoOyBpICs9IDQpCisgICAgICAgICAgICBkYXRhW2ldID0gMjU1Owor
ICAgIH0KKyNlbmRpZgogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NTU4MDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNyBAQAorMjAxMC0wMy0xMCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhvb2sgdXAgV2ViR0xD
b250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2RlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNgorCisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5j
aWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4dDogQWRkZWQuIAorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0
ZXMtZXhwZWN0ZWQudHh0OiBXZWJHTCBjb250ZXh0IGF0dHJpYnV0ZXMgYmVoYXZpb3IgY2hhbmdl
ZCB3aXRoIHRoaXMgZml4LgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0
cmlidXRlcy5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQt
Y2FsbHMtZXhwZWN0ZWQudHh0OiBTdGVuY2lsIGJ1ZmZlciBpcyBlbmFibGVkLCB0aHVzIFN0ZW5j
aWwgQml0cyBpcyBubyBsb25nZXIgMC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1n
ZXQtY2FsbHMuaHRtbDogRGl0dG8uCisKIDIwMTAtMDMtMTAgIEFudG9uaW8gR29tZXMgIDx0b25p
a2l0b29Ad2Via2l0Lm9yZz4KIAogICAgICAgICBUaGUgdGVzdCB3YXMgaW50cm9kdWNlZCBpbiBy
NTU3OTYsIGl0IGhhcyBiZWVuIGZhaWxpbmcgaW4gR3RrIGJvdHMgc2luY2UgdGhlbi4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1k
ZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0
ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2ls
LWFudGlhbGlhcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKyAg
ICAgICAKK1ZlcmlmeSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGFyZSB3b3JraW5nIGFzIHNwZWNp
ZmllZCwgaW5jbHVkaW5nIGFscGhhLCBkZXB0aCwgc3RlbmNpbCwgYW50aWFsaWFzLCBidXQgbm90
IHByZW11bHRpcGxpZWRBbHBoYQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1JlZ3Jl
c3Npb24gdGVzdCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMz
NDE2IDogSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNy
ZWF0aW9uIGNvZGUKK1Rlc3RpbmcgYWxwaGEgPSB0cnVlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0wo
J2FscGhhT24nLCB7IGFscGhhOiB0cnVlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBh
bnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BB
U1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1u
dWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRy
aWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UK
K1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRy
aWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xv
cgorVGVzdGluZyBhbHBoYSA9IGZhbHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FscGhhT2Zm
JywgeyBhbHBoYTogZmFsc2UsIGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlh
czogZmFsc2UgfSwgWyAwLCAwLCAwLCAwIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250
ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQ
QVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmRl
cHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1Mg
Y29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnBy
ZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVz
dGluZyBkZXB0aCA9IHRydWUKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnZGVwdGhPbicsIHsgc3Rl
bmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlz
IG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1
dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIHRydWUKK1BB
U1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVu
Y2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFT
UyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBp
cyBjb3JyZWN0Q29sb3IKK1Rlc3RpbmcgZGVwdGggPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdl
YkdMKCdkZXB0aE9mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFz
OiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRl
eHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BB
U1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxw
aGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVt
dWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3Rp
bmcgc3RlbmNpbCA9IHRydWUKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9uJywgeyBk
ZXB0aDogZmFsc2UsIHN0ZW5jaWw6IHRydWUsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAw
LCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRl
cHRoIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQQVNTIGNv
bnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFz
IGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVl
CitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBzdGVuY2lsID0gZmFsc2UKK1BB
U1Mgd2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2ls
OiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9u
LW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMo
KSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1Mg
Y29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBo
YSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBj
b250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBj
b3JyZWN0Q29sb3IKK1Rlc3RpbmcgYW50aWFsaWFzID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdl
YkdMKCdhbnRpYWxpYXNPbicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6
IGZhbHNlLCBhbnRpYWxpYXM6IHRydWUgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1u
dWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkg
aXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEg
aXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIHRydWUKK1BBU1MgY29u
dGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWxbMF0gPT0g
MjU1IHx8IHBpeGVsWzBdID09IDAgaXMgZmFsc2UKK1Rlc3RpbmcgYW50aWFsaWFzID0gZmFsc2UK
K1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYW50aWFsaWFzT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0
ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAw
LCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRl
cHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1Mg
Y29udGV4dEF0dHJpYnMuYWxwaGEgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFs
aWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0
cnVlCitQQVNTIHBpeGVsWzBdID09IDI1NSB8fCBwaXhlbFswXSA9PSAwIGlzIHRydWUKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgt
c3RlbmNpbC1hbnRpYWxpYXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxp
YXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Nv
bnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMwNyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3V0aWxzM2QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBpZD0idnNoYWRl
ciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzMgcG9zOworYXR0cmli
dXRlIHZlYzQgY29sb3JJbjsKK3ZhcnlpbmcgdmVjNCBjb2xvcjsKKwordm9pZCBtYWluKCkKK3sK
KyAgICBjb2xvciA9IGNvbG9ySW47CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcy54eXosIDEu
MCk7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIv
eC1mcmFnbWVudCI+Cit2YXJ5aW5nIHZlYzQgY29sb3I7CisKK3ZvaWQgbWFpbigpCit7CisgICAg
Z2xfRnJhZ0NvbG9yID0gY29sb3I7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKworLy8gVGhlc2UgZm91ciBkZWNsYXJhdGlvbnMgbmVl
ZCB0byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIgdG8gc2VlIHRoZW0KK3ZhciB3ZWJHTCA9IG51
bGw7Cit2YXIgY29udGV4dEF0dHJpYnMgPSBudWxsOwordmFyIHBpeGVsID0gWzAsIDAsIDAsIDFd
OwordmFyIGNvcnJlY3RDb2xvciA9IG51bGw7CisKK2Z1bmN0aW9uIGluaXQoKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJHTEVuYWJsZWQiLCAiMSIpOworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBkZXNjcmlwdGlvbign
VmVyaWZ5IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXJlIHdvcmtpbmcgYXMgc3BlY2lmaWVkLCBp
bmNsdWRpbmcgYWxwaGEsIGRlcHRoLCBzdGVuY2lsLCBhbnRpYWxpYXMsIGJ1dCBub3QgcHJlbXVs
dGlwbGllZEFscGhhJyk7CisKKyAgICBkZWJ1ZygnUmVncmVzc2lvbiB0ZXN0IGZvciA8YSBocmVm
PSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYiPmh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNjwvYT4gOiA8Y29kZT5Ib29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZTwv
Y29kZT4nKTsKKyAgICAKKyAgICBydW5UZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGdldFdlYkdMKGNh
bnZhc05hbWUsIGNvbnRleHRBdHRyaWJzLCBjbGVhckNvbG9yLCBjbGVhckRlcHRoLCBjbGVhclN0
ZW5jaWwpCit7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZh
c05hbWUpOworICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2Vi
Z2wiLCBjb250ZXh0QXR0cmlicyk7CisgICAgaWYgKCFnbCkgeworICAgICAgICBhbGVydCgiTm8g
V2ViR0wgY29udGV4dCBmb3VuZCIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAg
dmFyIGFjdHVhbENvbnRleHRBdHRyaWJzID0gZ2wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAg
ICAKKyAgICAvLyBBZGQgYSBjb25zb2xlCisgICAgZ2wuY29uc29sZSA9ICgiY29uc29sZSIgaW4g
d2luZG93KSA/IHdpbmRvdy5jb25zb2xlIDogeyBsb2c6IGZ1bmN0aW9uKCkgeyB9IH07CisKKyAg
ICAvLyBjcmVhdGUgb3VyIHNoYWRlcnMKKyAgICB2YXIgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRl
cihnbCwgInZzaGFkZXIiKTsKKyAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKGds
LCAiZnNoYWRlciIpOworCisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVy
KQorICAgICAgICByZXR1cm4gbnVsbDsKKworICAgIC8vIENyZWF0ZSB0aGUgcHJvZ3JhbSBvYmpl
Y3QKKyAgICBnbC5wcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworCisgICAgaWYgKCFnbC5w
cm9ncmFtKQorICAgICAgICByZXR1cm4gbnVsbDsKKworICAgIC8vIEF0dGFjaCBvdXIgdHdvIHNo
YWRlcnMgdG8gdGhlIHByb2dyYW0KKyAgICBnbC5hdHRhY2hTaGFkZXIoZ2wucHJvZ3JhbSwgdmVy
dGV4U2hhZGVyKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIoZ2wucHJvZ3JhbSwgZnJhZ21lbnRTaGFk
ZXIpOworCisgICAgLy8gQmluZCBhdHRyaWJ1dGVzCisgICAgdmFyIGF0dHJpYnMgPSBbICJwb3Mi
LCAiY29sb3JJbiIgXTsKKyAgICBmb3IgKHZhciBpIGluIGF0dHJpYnMpCisgICAgICAgIGdsLmJp
bmRBdHRyaWJMb2NhdGlvbihnbC5wcm9ncmFtLCBpLCBhdHRyaWJzW2ldKTsKKworICAgIC8vIExp
bmsgdGhlIHByb2dyYW0KKyAgICBnbC5saW5rUHJvZ3JhbShnbC5wcm9ncmFtKTsKKworICAgIC8v
IENoZWNrIHRoZSBsaW5rIHN0YXR1cworICAgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFy
YW1ldGVyKGdsLnByb2dyYW0sIGdsLkxJTktfU1RBVFVTKTsKKyAgICBpZiAoIWxpbmtlZCkgewor
ICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBsaW5rCisgICAgICAgIHZh
ciBlcnJvciA9IGdsLmdldFByb2dyYW1JbmZvTG9nIChnbC5wcm9ncmFtKTsKKyAgICAgICAgZ2wu
Y29uc29sZS5sb2coIkVycm9yIGluIHByb2dyYW0gbGlua2luZzoiK2Vycm9yKTsKKworICAgICAg
ICBnbC5kZWxldGVQcm9ncmFtKGdsLnByb2dyYW0pOworICAgICAgICBnbC5kZWxldGVQcm9ncmFt
KGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXIp
OworCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIGdsLnVzZVByb2dyYW0oZ2wu
cHJvZ3JhbSk7CisKKyAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3Jb
MV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIGdsLmNsZWFyRGVwdGgoY2xl
YXJEZXB0aCk7CisgICAgZ2wuY2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgZ2wuZW5h
YmxlKGdsLkRFUFRIX1RFU1QpOworICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpOworICAg
IGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUIHwgZ2wu
U1RFTkNJTF9CVUZGRVJfQklUKTsKKworICAgIHJldHVybiBnbDsKK30KKworZnVuY3Rpb24gZHJh
d0FuZFJlYWRQaXhlbChnbCwgdmVydGljZXMsIGNvbG9ycywgeCwgeSkKK3sKKyAgICB2YXIgY29s
b3JPZmZzZXQgPSB2ZXJ0aWNlcy5ieXRlTGVuZ3RoOworCisgICAgdmFyIHZibyA9IGdsLmNyZWF0
ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2Ym8pOworICAg
IGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCArIGNvbG9ycy5ieXRl
TGVuZ3RoLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9C
VUZGRVIsIDAsIHZlcnRpY2VzKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZF
UiwgY29sb3JPZmZzZXQsIGNvbG9ycyk7CisKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCA0LCBnbC5VTlNJR05FRF9CWVRF
LCB0cnVlLCAwLCBjb2xvck9mZnNldCk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
MSk7CisKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgdmVydGljZXMubGVuZ3Ro
IC8gMyk7CisKKyAgICByZXR1cm4gZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAxLCBnbC5SR0JBLCBn
bC5VTlNJR05FRF9CWVRFKTsKK30KKworZnVuY3Rpb24gdGVzdEFscGhhKGFscGhhKQoreworICAg
IGRlYnVnKCJUZXN0aW5nIGFscGhhID0gIiArIGFscGhhKTsKKyAgICBpZiAoYWxwaGEpCisgICAg
ICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPbicsIHsgYWxwaGE6
IHRydWUsIGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwg
WyAwLCAwLCAwLCAwIF0sIDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZU5vbk51
bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FscGhhT2ZmJywgeyBhbHBoYTogZmFsc2UsIGRlcHRoOiBm
YWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAwIF0s
IDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxw
aGEiLCAoYWxwaGEgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgc2hvdWxkQmUoImNvbnRleHRB
dHRyaWJzLmRlcHRoIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnN0
ZW5jaWwiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFz
IiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRB
bHBoYSIsICJ0cnVlIik7CisKKyAgICB2YXIgYnVmID0gd2ViR0wucmVhZFBpeGVscygwLCAwLCAx
LCAxLCB3ZWJHTC5SR0JBLCB3ZWJHTC5VTlNJR05FRF9CWVRFKTsKKyAgICBwaXhlbFswXSA9IGJ1
ZlswXTsKKyAgICBwaXhlbFsxXSA9IGJ1ZlsxXTsKKyAgICBwaXhlbFsyXSA9IGJ1ZlsyXTsKKyAg
ICBwaXhlbFszXSA9IGJ1ZlszXTsKKyAgICBjb3JyZWN0Q29sb3IgPSAoYWxwaGEgPyBbMCwgMCwg
MCwgMF0gOiBbMCwgMCwgMCwgMjU1XSk7CisgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RD
b2xvciIpOworfQorCitmdW5jdGlvbiB0ZXN0RGVwdGgoZGVwdGgpCit7CisgICAgZGVidWcoIlRl
c3RpbmcgZGVwdGggPSAiICsgZGVwdGgpOworICAgIGlmIChkZXB0aCkKKyAgICAgICAgc2hvdWxk
QmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdkZXB0aE9uJywgeyBzdGVuY2lsOiBmYWxzZSwg
YW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisg
ICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnZGVwdGhPZmYnLCB7IGRl
cHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAw
LCAxIF0sIDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IHdl
YkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJp
YnMuZGVwdGgiLCAoZGVwdGggPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgc2hvdWxkQmUoImNv
bnRleHRBdHRyaWJzLmFscGhhIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJp
YnMuc3RlbmNpbCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbnRp
YWxpYXMiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlw
bGllZEFscGhhIiwgInRydWUiKTsKKworICAgIHdlYkdMLmRlcHRoRnVuYyh3ZWJHTC5ORVZFUik7
CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAgIDEu
MCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0x
LjAsIDAuMCwKKyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAw
LjAsCisgICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xvcnMgPSBuZXcgV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAy
NTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwg
MCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTVd
KTsKKworICAgIHZhciBidWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdMLCB2ZXJ0aWNlcywgY29s
b3JzLCAwLCAwKTsKKyAgICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICBwaXhlbFsxXSA9IGJ1Zlsx
XTsKKyAgICBwaXhlbFsyXSA9IGJ1ZlsyXTsKKyAgICBwaXhlbFszXSA9IGJ1ZlszXTsKKyAgICBj
b3JyZWN0Q29sb3IgPSAoZGVwdGggPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0p
OworICAgIHNob3VsZEJlKCJwaXhlbCIsICJjb3JyZWN0Q29sb3IiKTsKK30KKworZnVuY3Rpb24g
dGVzdFN0ZW5jaWwoc3RlbmNpbCkKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBzdGVuY2lsID0gIiAr
IHN0ZW5jaWwpOworICAgIGlmIChzdGVuY2lsKQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndl
YkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxPbicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVl
LCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIGVsc2UK
KyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdzdGVuY2lsT2ZmJywg
eyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwg
MCwgMCwgMSBdLCAxLCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMg
PSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRB
dHRyaWJzLmRlcHRoIiwgKHN0ZW5jaWwgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgc2hvdWxk
QmUoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiLCAoc3RlbmNpbCA/ICJ0cnVlIiA6ICJmYWxzZSIp
KTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOworICAgIHNo
b3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRC
ZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKworICAgIHdl
YkdMLmRlcHRoRnVuYyh3ZWJHTC5BTFdBWVMpOworCisgICAgd2ViR0wuc3RlbmNpbEZ1bmMod2Vi
R0wuTkVWRVIsIDEsIDEpOworICAgIHdlYkdMLnN0ZW5jaWxPcCh3ZWJHTC5LRUVQLCB3ZWJHTC5L
RUVQLCB3ZWJHTC5LRUVQKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJy
YXkoWworICAgICAgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgMS4wLCAwLjAsCisg
ICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgMS4wLCAwLjAsCisgICAgICAg
IC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFyIGNv
bG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsKKyAgICAgICAgMjU1LCAwLCAwLCAy
NTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAg
ICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAy
NTUsIDAsIDAsIDI1NV0pOworCisgICAgdmFyIGJ1ZiA9IGRyYXdBbmRSZWFkUGl4ZWwod2ViR0ws
IHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOworICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAgIHBp
eGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVsWzJdID0gYnVmWzJdOworICAgIHBpeGVsWzNdID0g
YnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9IChzdGVuY2lsID8gWzAsIDAsIDAsIDI1NV0gOiBb
MjU1LCAwLCAwLCAyNTVdKTsKKyAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9yIik7
Cit9CisKK2Z1bmN0aW9uIHRlc3RBbnRpYWxpYXMoYW50aWFsaWFzKQoreworICAgIGRlYnVnKCJU
ZXN0aW5nIGFudGlhbGlhcyA9ICIgKyBhbnRpYWxpYXMpOworICAgIGlmIChhbnRpYWxpYXMpCisg
ICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnYW50aWFsaWFzT24nLCB7
IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiB0
cnVlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIGVsc2UKKyAgICAgICAgc2hvdWxk
QmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdhbnRpYWxpYXNPZmYnLCB7IGRlcHRoOiBmYWxz
ZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAs
IDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJz
ID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0
QXR0cmlicy5kZXB0aCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5z
dGVuY2lsIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFscGhhIiwg
ImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsIChhbnRp
YWxpYXMgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJz
LnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcg
V2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAgIDEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAs
IDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0g
bmV3IFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoWworICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAg
ICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisgICAgdmFy
IGJ1ZiA9IGRyYXdBbmRSZWFkUGl4ZWwod2ViR0wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOwor
ICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAgIHNob3VsZEJlKCJwaXhlbFswXSA9PSAyNTUgfHwg
cGl4ZWxbMF0gPT0gMCIsIChhbnRpYWxpYXMgPyAiZmFsc2UiIDogInRydWUiKSk7Cit9CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKQoreworCisgICAgdGVzdEFscGhhKHRydWUpOworICAgIHRlc3RBbHBo
YShmYWxzZSk7CisgICAgdGVzdERlcHRoKHRydWUpOworICAgIHRlc3REZXB0aChmYWxzZSk7Cisg
ICAgdGVzdFN0ZW5jaWwodHJ1ZSk7CisgICAgdGVzdFN0ZW5jaWwoZmFsc2UpOworICAgIHRlc3RB
bnRpYWxpYXModHJ1ZSk7CisgICAgdGVzdEFudGlhbGlhcyhmYWxzZSk7CisKKyAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNjcmlwdCIpOworICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsKKyAgICBlcGls
b2d1ZS5zcmMgPSAiLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7CisgICAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChlcGlsb2d1ZSk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaCgp
IHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0iaW5pdCgpIj4KKzxjYW52YXMgaWQ9ImFscGhhT24iIHdpZHRoPSIx
cHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFscGhhT2ZmIiB3aWR0aD0i
MXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJkZXB0aE9uIiB3aWR0aD0i
MXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJkZXB0aE9mZiIgd2lkdGg9
IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0ic3RlbmNpbE9uIiB3aWR0
aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJzdGVuY2lsT2ZmIiB3
aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJhbnRpYWxpYXNP
biIgd2lkdGg9IjJweCIgaGVpZ2h0PSIycHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iYW50aWFs
aWFzT2ZmIiB3aWR0aD0iMnB4IiBoZWlnaHQ9IjJweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNj
cmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRl
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTU3OTkpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsOCBAQCBQQVNTIGNvbnRleHQgPSBjcmVhdGUz
RENvbnRleHQoKSBpcyBub24tCiBQQVNTIGF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRy
aWJ1dGVzKCkgaXMgbm9uLW51bGwuCiBQQVNTIGF0dHJpYnMuZGVwdGggaXMgdHJ1ZQogUEFTUyBh
dHRyaWJzLmFscGhhIGlzIHRydWUKLVBBU1MgKGF0dHJpYnMuc3RlbmNpbCA9PSB0cnVlIHx8IGF0
dHJpYnMuc3RlbmNpbCA9PSBmYWxzZSkgaXMgdHJ1ZQotUEFTUyAoYXR0cmlicy5hbnRpYWxpYXMg
PT0gdHJ1ZSB8fCBhdHRyaWJzLmFudGlhbGlhcyA9PSBmYWxzZSkgaXMgdHJ1ZQorUEFTUyBhdHRy
aWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFudGlhbGlhcyBpcyB0cnVlCiBQQVNT
IGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKIFRlc3QgY3VzdG9taXplZCB2YWx1
ZXMKIFBBU1MgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IHN0ZW5jaWw6IGZhbHNlLCBhbnRp
YWxpYXM6IGZhbHNlIH0pIGlzIG5vbi1udWxsLgpAQCAtMTgsNiArMTgsMjIgQEAgUEFTUyBhdHRy
aWJzLmFscGhhIGlzIHRydWUKIFBBU1MgYXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCiBQQVNTIGF0
dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCiBQQVNTIGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhh
IGlzIHRydWUKK1Rlc3QgY3VzdG9taXplZCB2YWx1ZXMKK1BBU1MgY29udGV4dCA9IGNyZWF0ZTNE
Q29udGV4dCh7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSB9KSBpcyBub24tbnVsbC4KK1BB
U1MgYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4K
K1BBU1MgYXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQor
UEFTUyBhdHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFudGlhbGlhcyBpcyB0
cnVlCitQQVNTIGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1Rlc3QgY3VzdG9t
aXplZCB2YWx1ZXMKK1BBU1MgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IHByZW11bHRpcGxp
ZWRBbHBoYTogZmFsc2UgfSkgaXMgbm9uLW51bGwuCitQQVNTIGF0dHJpYnMgPSBjb250ZXh0Lmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGF0dHJpYnMuZGVwdGggaXMg
dHJ1ZQorUEFTUyBhdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgYXR0cmlicy5zdGVuY2lsIGlz
IHRydWUKK1BBU1MgYXR0cmlicy5hbnRpYWxpYXMgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLnByZW11
bHRpcGxpZWRBbHBoYSBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAK
IFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRl
eHQtYXR0cmlidXRlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy5odG1sCShyZXZpc2lvbiA1NTc5OSkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xOCw5ICsxOCw4IEBAIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dCA9IGNyZWF0
ZTNEQ29udGUKIHNob3VsZEJlTm9uTnVsbCgiYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0
dHJpYnV0ZXMoKSIpOwogc2hvdWxkQmUoImF0dHJpYnMuZGVwdGgiLCAidHJ1ZSIpOwogc2hvdWxk
QmUoImF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOwotLy8gVGhlIGZvbGxvd2luZyB0d28gZGVwZW5k
IG9uIHdoZXRoZXIgdGhlIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHN1cHBvcnRzIHRoZW0KLXNo
b3VsZEJlKCIoYXR0cmlicy5zdGVuY2lsID09IHRydWUgfHwgYXR0cmlicy5zdGVuY2lsID09IGZh
bHNlKSIsICJ0cnVlIik7Ci1zaG91bGRCZSgiKGF0dHJpYnMuYW50aWFsaWFzID09IHRydWUgfHwg
YXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UpIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJz
LnN0ZW5jaWwiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYW50aWFsaWFzIiwgInRydWUi
KTsKIHNob3VsZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CiAKIGRl
YnVnICgiVGVzdCBjdXN0b21pemVkIHZhbHVlcyIpOwpAQCAtMzIsNiArMzEsMjYgQEAgc2hvdWxk
QmUoImF0dHJpYnMuc3RlbmNpbCIsICJmYWxzZSIpOwogc2hvdWxkQmUoImF0dHJpYnMuYW50aWFs
aWFzIiwgImZhbHNlIik7CiBzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAi
dHJ1ZSIpOwogCitkZWJ1ZygiVGVzdCBjdXN0b21pemVkIHZhbHVlcyIpOworLy8gKHN0ZW5jaWwg
PT0gdHJ1ZSAmJiBkZXB0aCA9PSBmYWxzZSkgaXMgbm90IHN1cHBvcnRlZCwgZGVmYXVsdCBkZXB0
aCB0byB0cnVlCitzaG91bGRCZU5vbk51bGwoImNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBk
ZXB0aDogZmFsc2UsIHN0ZW5jaWw6IHRydWUgfSkiKTsKK3Nob3VsZEJlTm9uTnVsbCgiYXR0cmli
cyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworc2hvdWxkQmUoImF0dHJpYnMu
ZGVwdGgiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOworc2hv
dWxkQmUoImF0dHJpYnMuc3RlbmNpbCIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5hbnRp
YWxpYXMiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwg
InRydWUiKTsKKworZGVidWcoIlRlc3QgY3VzdG9taXplZCB2YWx1ZXMiKTsKKy8vIChwcmVtdWx0
aXBsaWVkQWxwaGEgPT0gZmFsc2UpIGlzIG5vdCBzdXBwb3J0ZWQsIGRlZmF1bHQgdG8gdHJ1ZQor
c2hvdWxkQmVOb25OdWxsKCJjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgcHJlbXVsdGlwbGll
ZEFscGhhOiBmYWxzZSB9KSIpOworc2hvdWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5n
ZXRDb250ZXh0QXR0cmlidXRlcygpIik7CitzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVl
Iik7CitzaG91bGRCZSgiYXR0cmlicy5hbHBoYSIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmli
cy5zdGVuY2lsIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJ0cnVl
Iik7CitzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCiBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CiAKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNTU3OTkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1n
ZXQtY2FsbHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIFBB
U1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0kKIFBBU1MgY29udGV4dC5nZXRQ
YXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMKSBpcyBjb250ZXh0
LktFRVAKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JBQ0tfUEFT
U19ERVBUSF9QQVNTKSBpcyBjb250ZXh0LktFRVAKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIo
Y29udGV4dC5TVEVOQ0lMX0JBQ0tfUkVGKSBpcyAwCi1QQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVy
KGNvbnRleHQuU1RFTkNJTF9CSVRTKSBpcyAwCitQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNv
bnRleHQuU1RFTkNJTF9CSVRTKSA+IDAgaXMgdHJ1ZQogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRl
cihjb250ZXh0LlNURU5DSUxfQ0xFQVJfVkFMVUUpIGlzIDAKIFBBU1MgY29udGV4dC5nZXRQYXJh
bWV0ZXIoY29udGV4dC5TVEVOQ0lMX0ZBSUwpIGlzIGNvbnRleHQuS0VFUAogUEFTUyBjb250ZXh0
LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRlVOQykgaXMgY29udGV4dC5BTFdBWVMKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy5odG1s
CShyZXZpc2lvbiA1NTc5OSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdl
dC1jYWxscy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIGVsc2UgewogICAg
IC8vIEZJWE1FOiBDdXJyZW50IFdlYktpdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHRoZSB3cm9u
ZyB2YWx1ZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxODQyKQog
ICAgIC8vc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0spJywgJzB4RkZGRkZGRkYnKTsKICAgICAvL3Nob3VsZEJlKCdjb250ZXh0Lmdl
dFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19XUklURU1BU0spJywgJzB4RkZGRkZGRkYn
KTsKLSAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JJ
VFMpJywgJzAnKTsKKyAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5T
VEVOQ0lMX0JJVFMpID4gMCcsICd0cnVlJyk7CiAgICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFy
YW1ldGVyKGNvbnRleHQuU1RFTkNJTF9DTEVBUl9WQUxVRSknLCAnMCcpOwogICAgIHNob3VsZEJl
KCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRkFJTCknLCAnY29udGV4dC5L
RUVQJyk7CiAgICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJ
TF9GVU5DKScsICdjb250ZXh0LkFMV0FZUycpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50570</attachid>
            <date>2010-03-11 18:40:25 -0800</date>
            <delta_ts>2010-03-15 15:55:32 -0700</delta_ts>
            <desc>modified acording to Ken Russell review </desc>
            <filename>attrs.patch</filename>
            <type>text/plain</type>
            <size>52741</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTgwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDMtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6IEFkZCBtZW1iZXJz
L2Z1bmN0aW9ucyBmb3IgbXVsdGlzYW1wbGluZy9zdGVuY2lsIGJ1ZmZlciBwdXJwb3NlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmg6IEFkZCBHcmFwaGlj
c0NvbnRleHQzRCBhcyBhIG1lbWJlciBvZiBDYW52YXMzRExheWVyLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tOiBBZGQgbXVsdGlzYW1wbGluZyBzdXBw
b3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5jcHA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBj
cmVhdGlvbiBjb2RlIGZvciBNYWMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENhbnZhczNETGF5ZXIgaW5pdCBj
YWxsLgorCiAyMDEwLTAzLTEwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGxvaXNsby1tYWNi
b29rcHJvLmxvY2FsPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAg
ICAgaWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0g
IndlYmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpj
cmVhdGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0
YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgp
OwogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6
Ok5ldygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2
aXNpb24gNTU4MTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsg
cmV0dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAg
IC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJl
Z3VsYXIgRkJPLgorICAgICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAg
ICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRh
IHR5cGVzCiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBp
bnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOwpAQCAtNzE3LDcgKzcyMiwxNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgICAgICBH
THVpbnQgbV90ZXh0dXJlOwogICAgICAgICBHTHVpbnQgbV9mYm87Ci0gICAgICAgIEdMdWludCBt
X2RlcHRoQnVmZmVyOworICAgICAgICBHTHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAg
ICAgICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZCTyBpcyBib3VuZAorICAgICAgICBHTHVpbnQg
bV9ib3VuZEZCTzsKKworICAgICAgICAvLyBGb3IgbXVsdGlzYW1wbGluZworICAgICAgICBHTHVp
bnQgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgR0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXI7CisgICAgICAgIEdMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisK
ICAgICAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgICAg
ICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9yczsKICNlbmRpZiAg
ICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RM
YXllci5oCShyZXZpc2lvbiA1NTc5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NhbnZhczNETGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTYgKzMyLDE4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0xheWVyOworICAgIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwogfQogCiBAaW50ZXJmYWNlIENhbnZhczNETGF5ZXIgOiBDQU9wZW5H
TExheWVyIAogewogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKKyAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIENHTENvbnRleHRP
YmogbV9jb250ZXh0T2JqOwogICAgIEdMdWludCBtX3RleHR1cmU7CiB9CiAKLS0gKGlkKWluaXRX
aXRoQ29udGV4dDooQ0dMQ29udGV4dE9iailjb250ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJl
OworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29u
dGV4dDsKIAogLSAoQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihD
R0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCShyZXZpc2lvbiA1NTgxNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQxLDEwICs0MSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVu
dGF0aW9uIENhbnZhczNETGF5ZXIKIAotLShpZClpbml0V2l0aENvbnRleHQ6KENHTENvbnRleHRP
YmopY29udGV4dCB0ZXh0dXJlOihHTHVpbnQpdGV4dHVyZQorLShpZClpbml0V2l0aENvbnRleHQ6
KEdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0CiB7Ci0gICAgbV9jb250ZXh0T2JqID0gY29udGV4
dDsKLSAgICBtX3RleHR1cmUgPSB0ZXh0dXJlOworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgbV9jb250ZXh0T2JqID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4oY29udGV4dC0+cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBtX3RleHR1cmUgPSBzdGF0aWNfY2FzdDxH
THVpbnQ+KGNvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpKTsKICAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwogICAgIHJldHVybiBzZWxmOwogfQpAQCAtNzAsOCArNzEsOCBAQCAtKENHTENvbnRleHRP
YmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvCiAKIC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihD
R0xDb250ZXh0T2JqKWdsQ29udGV4dCBwaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4
ZWxGb3JtYXQgZm9yTGF5ZXJUaW1lOihDRlRpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxh
eVRpbWU6KGNvbnN0IENWVGltZVN0YW1wICopdGltZVN0YW1wCiB7Ci0gICAgQ0dMU2V0Q3VycmVu
dENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBnbEZpbmlzaCgpOworICAgIG1fY29udGV4dC0+
cHJlcGFyZVRleHR1cmUoKTsKKwogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGdsQ29udGV4dCk7
CiAKICAgICBDR1JlY3QgZnJhbWUgPSBbc2VsZiBmcmFtZV07CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShy
ZXZpc2lvbiA1NTgyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIEdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICAsIG1fY29udGV4dE9iaigw
KQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZl
cigwKQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB1
c2VyJ3MgcmVxdWVzdGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLCBpbiBw
YXJ0aWN1bGFyIHN0ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdo
aWNoIGNvdWxkIGFuZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJhc2VkIG9uIHRoZSBj
YXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAgICBtX2F0dHJzLmFs
cGhhID0gdHJ1ZTsKLSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBtX2F0dHJzLnN0ZW5j
aWwgPSBmYWxzZTsKLSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgICwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAs
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQoreworICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4KKyAg
ICAvLyBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBhbmQgY291bGQKKyAgICAvLyBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2Fw
YWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCisgICAgaWYgKG1fYXR0cnMu
c3RlbmNpbCAmJiAhbV9hdHRycy5kZXB0aCkKKyAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7
CisgICAgLy8gRklYTUU6IGluc3RlYWQgb2YgZW5mb3JjaW5nIHByZW11bHRpcGxpZWRBbHBoYSA9
IHRydWUsIGltcGxlbWVudCB0aGUKKyAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVs
dGlwbGllZEFscGhhID0gZmFsc2UgaXMgcmVxdWVzdGVkLgogICAgIG1fYXR0cnMucHJlbXVsdGlw
bGllZEFscGhhID0gdHJ1ZTsKIAogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4g
YXR0cmliczsKQEAgLTE1MiwyMSArMTU1LDI1IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmEKICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CiAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKICAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOwotICAg
IDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4LCAxLCAxLCAwLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgMCk7Ci0gICAgCisKICAgICAvLyBjcmVhdGUgYW4gRkJPCiAgICAgOjpnbEdlbkZyYW1l
YnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgCi0gICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fZGVwdGhCdWZmZXIpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
RVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgMSwgMSk7Ci0gICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgCi0g
ICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09M
T1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRI
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAg
ICAKKyAgICBtX2JvdW5kRkJPID0gbV9mYm87CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAm
JiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICA6OmdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworCisgICAgLy8gY3JlYXRl
IGFuIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAg
ICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICB9CisKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIH0KIApAQCAtMTc0
LDggKzE4MSwxNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsK
ICAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1f
Y29udGV4dE9iaik7Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICYgbV9k
ZXB0aEJ1ZmZlcik7CiAgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsK
KyAgICAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRl
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAg
ICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CiAgICAg
ICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICAgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQoMCk7CiAgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9i
aik7CkBAIC0yMDUsMjUgKzIyMCw4NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBl
KGludCB3aWR0CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogICAgIAogICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCisKKyAgICBHTHVpbnQgaW50ZXJu
YWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0Owor
ICAgIGlmIChtX2F0dHJzLmFscGhhKSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBH
TF9SR0JBODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OworICAgICAgICBjb2xvckZvcm1h
dCA9IEdMX1JHQjsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRl
cHRoKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2ls
IGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0Nv
bnRleHQzRCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCAmJiBtX2F0
dHJzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9E
RVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgfQorCisgICAgYm9v
bCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworCisgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZC
TworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBHTGludCBzYW1wbGVDb3Vu
dCA9IDg7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfTUFYX1NBTVBMRVNfRVhULCAmbWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAo
c2FtcGxlQ291bnQgPiBtYXhTYW1wbGVDb3VudCkKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0g
bWF4U2FtcGxlQ291bnQ7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVG
Qk8pIHsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNv
dW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAg
ICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3Vu
dCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRf
RVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChH
TF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0
YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VY
VCkgeworICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJP
CisgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8g
PSB0cnVlOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9mYm8pOworICAgIH0KICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBOCwg
d2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgIAotICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9O
RU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCAwKTsKLSAgICAKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgMCk7CiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJE
LCBtX3RleHR1cmUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICBHTGVudW0gc3RhdHVzID0gOjpnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKLSAgICBpZiAoc3RhdHVzICE9IEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgewotICAgICAgICAvLyBGSVhNRTogY2xlYW51cAor
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBpZiAoIW1fYXR0cnMu
YW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKKyAgICAg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1F
TlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdM
X1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgfQorICAgIGlm
IChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCiAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgfQogCi0gICAgOjpnbENsZWFyKEdMX0NPTE9S
X0JVRkZFUl9CSVQpOworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworCisgICAgR0xl
bnVtIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgaWYgKG1fYXR0cnMuZGVw
dGgpCisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwpCisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQ7CisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKQEAg
LTI0Myw2ICszMjAsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1
bgogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7
CisgICAgICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisgICAgICAgIDo6
Z2xGaW5pc2goKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNo
YWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAg
QVNTRVJUKHByb2dyYW0pOwpAQCAtMjY4LDcgKzM1NywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kQnVmZmVyKHVuc2lnCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVi
dWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlcikKIHsK
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVCh0YXJnZXQsIChidWZmZXIgJiYgYnVmZmVyLT5vYmplY3QoKSkgPyAoR0x1aW50KSBidWZm
ZXItPm9iamVjdCgpIDogbV9mYm8pOworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlciAm
JiBidWZmZXItPm9iamVjdCgpKQorICAgICAgICBmYm8gPSAoR0x1aW50KWJ1ZmZlci0+b2JqZWN0
KCk7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAobV9hdHRycy5hbnRpYWxpYXMgPyBtX211bHRp
c2FtcGxlRkJPIDogbV9mYm8pOworICAgIGlmIChmYm8gIT0gbV9ib3VuZEZCTykgeworICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKKyAgICAgICAgbV9ib3VuZEZC
TyA9IGZibzsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJi
dWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZm
ZXIpCkBAIC02NzUsOSArNzcyLDI1IEBAIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3ND
b250ZXh0M0QKICAgICAvLyBGSVhNRTogQWxzbywgd2Ugc2hvdWxkIHRocm93IHdoZW4gYW4gdW5h
Y2NlcHRhYmxlIHZhbHVlIGlzIHBhc3NlZAogICAgIGlmICh0eXBlICE9IEdMX1VOU0lHTkVEX0JZ
VEUgfHwgZm9ybWF0ICE9IEdMX1JHQkEpCiAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1
ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSAr
IGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CiAgICAg
UmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fbXVsdGlzYW1wbGVGQk8pOworICAgIGlmICghbV9hdHRycy5hbHBoYSkgeworICAgICAgICAv
LyBJZiBhbHBoYSBpcyBvZmYsIGJ5IGRlZmF1bHQgZ2xSZWFkUGl4ZWxzIHNob3VsZCBzZXQgdGhl
IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHVu
dGlsIDo6Z2xSZWFkUGl4ZWxzIGZpeGVzIGl0cyBiZWhhdmlvci4KKyAgICAgICAgR0x1Ynl0ZSog
ZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KGFycmF5LT5kYXRhKCkpOworICAgICAg
ICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAgIGRh
dGFbaV0gPSAyNTU7CisgICAgfQogICAgIHJldHVybiBhcnJheTsgICAgCiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHJl
dmlzaW9uIDU1Nzk5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NM
YXllckNBLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE2LDcgKzE3MTYsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0dyYXBoCiAKICAgICBpZiAobV9wbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEICE9IE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEICYmIG1fcGxhdGZv
cm1UZXh0dXJlICE9IE51bGxQbGF0Zm9ybTNET2JqZWN0KSB7CiAgICAgICAgIC8vIGNyZWF0ZSB0
aGUgaW5uZXIgM2QgbGF5ZXIKLSAgICAgICAgbV9jb250ZW50c0xheWVyLmFkb3B0TlMoW1tDYW52
YXMzRExheWVyIGFsbG9jXSBpbml0V2l0aENvbnRleHQ6c3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9i
aj4obV9wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKSB0ZXh0dXJlOnN0YXRpY19jYXN0PEdMdWlu
dD4obV9wbGF0Zm9ybVRleHR1cmUpXSk7CisgICAgICAgIG1fY29udGVudHNMYXllci5hZG9wdE5T
KFtbQ2FudmFzM0RMYXllciBhbGxvY10gaW5pdFdpdGhDb250ZXh0OmNvbnN0X2Nhc3Q8R3JhcGhp
Y3NDb250ZXh0M0QqPihncmFwaGljc0NvbnRleHQzRCldKTsKICNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgIFttX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIjNEIExheWVyIl07CiAjZW5kaWYK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTU4MDgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDMtMTAgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdM
IGNvbnRleHQgY3JlYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9j
b250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisg
ICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcDogSG9vayB1cCBXZWJHTENvbnRleHRB
dHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGUgZm9yIFdpbmRvd3MuCisK
IDIwMTAtMDMtMTAgIEV2YW4gU3RhZGUgIDxlc3RhZGVAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFw
aGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDU1Nzk5KQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwxNiArMTI0LDIz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBz
dHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKICAgICB2b2lkIHZpZXdwb3J0SW1wbChsb25n
IHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwog
CisgICAgdm9pZCByZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgdHlwZSwgdm9pZCogYnVmZmVyKTsKKwogICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5z
aWduZWQgbG9uZyBlcnJvcik7CiAKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgbV9hdHRyczsKLQorICAgIAogICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmU7CiAg
ICAgdW5zaWduZWQgaW50IG1fZmJvOwotICAgIHVuc2lnbmVkIGludCBtX2RlcHRoQnVmZmVyOwor
ICAgIHVuc2lnbmVkIGludCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQg
bV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQ7CiAKKyAgICAvLyBGb3IgbXVsdGlzYW1wbGlu
ZworICAgIHVuc2lnbmVkIGludCBtX211bHRpc2FtcGxlRkJPOworICAgIHVuc2lnbmVkIGludCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXI7CisKICAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJv
dW5kCiAgICAgdW5zaWduZWQgaW50IG1fYm91bmRGQk87CiAKQEAgLTM1MSw3ICszNTgsMTAgQEAg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZQogICAgIDogbV9hdHRycyhh
dHRycykKICAgICAsIG1fdGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhC
dWZmZXIoMCkKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2Ft
cGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAg
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKICAgICAsIG1fYm91bmRGQk8oMCkKICNpZmRl
ZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKICAgICAsIG1fc2NhbmxpbmUoMCkKQEAgLTM3
NSwxNCArMzg1LDIxIEBAIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGUK
ICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiB7Ci0gICAgLy8gRklY
TUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQKLSAg
ICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBh
bmQKLSAgICAvLyBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxk
IG5vdCBiZSBob25vcmVkCi0gICAgLy8gYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUg
T3BlbkdMIGltcGxlbWVudGF0aW9uLgotICAgIG1fYXR0cnMuYWxwaGEgPSB0cnVlOwotICAgIG1f
YXR0cnMuZGVwdGggPSB0cnVlOwotICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgIG1f
YXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVz
ZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLCBpbgorICAgIC8vIHBh
cnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxk
IGFuZCBjb3VsZAorICAgIC8vIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRp
ZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KKyAgICBpZiAobV9hdHRycy5zdGVuY2ls
KSB7CisgICAgICAgIGlmIChHTEVXX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCkgeworICAgICAg
ICAgICAgaWYgKCFtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIG1fYXR0cnMuZGVwdGgg
PSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmICFH
TEVXX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSkKKyAgICAgICAgbV9hdHRycy5hbnRpYWxp
YXMgPSBmYWxzZTsKKyAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBlbmZvcmNpbmcgcHJlbXVsdGlw
bGllZEFscGhhID0gdHJ1ZSwgaW1wbGVtZW50IHRoZQorICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Ig
d2hlbiBwcmVtdWx0aXBsaWVkQWxwaGEgPSBmYWxzZSBpcyByZXF1ZXN0ZWQuCiAgICAgbV9hdHRy
cy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlOwogCiAjaWYgT1MoV0lORE9XUykKQEAgLTU3Miw3
ICs1ODksMTUgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udAogewog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJ
TkRPVwotICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7Cisg
ICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
c0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMu
ZGVwdGggfHwgbV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZm
ZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAg
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgIH0KICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2lmZGVmIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQogICAgIGlmIChtX3NjYW5saW5lKQpAQCAtNjY5LDIzICs2
OTQsODggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKAogICAgICAg
ICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJlT2JqZWN0KHRhcmdldCk7CiAgICAgICAgIC8vIEdl
bmVyYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QKICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNF
WFQoMSwgJm1fZmJvKTsKLSAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGRlcHRoIGJ1ZmZlcgotICAg
ICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAg
bV9ib3VuZEZCTyA9IG1fZmJvOworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCB8fCBtX2F0dHJz
LnN0ZW5jaWwpCisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGZyYW1l
YnVmZmVyIG9iamVjdAorICAgICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAg
ICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAg
ICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkKKyAg
ICAgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gUmVhbGxvY2F0ZSB0
aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgbV90
ZXh0dXJlKTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhl
aWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVy
ZSh0YXJnZXQsIDApOworICAgIEdMaW50IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0
LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgewor
ICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9y
bWF0ID0gR0xfUkdCQTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0
ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24n
dCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMg
bm90LgorICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCAmJiBtX2F0dHJzLmRlcHRoKQorICAgICAg
ICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VY
VDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQg
PSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgfQorCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IGZhbHNlOworCisgICAgLy8gUmVzaXplIG11bHRpc2FtcGxpbmcgRkJPCisgICAgaWYgKG1fYXR0
cnMuYW50aWFsaWFzKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICBn
bEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAg
ICAgR0xpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7CisgICAg
ICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgICAgIG11
c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIH0KKyAgICAgICAg
Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7CisgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAg
ICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkK
KyAgICAgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgR0xlbnVt
IHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQp
OworICAgICAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgewor
ICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogbXVsdGlzYW1wbGluZyBmcmFt
ZWJ1ZmZlciB3YXMgaW5jb21wbGV0ZVxuIik7CiAKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICBtX2JvdW5kRkJPID0gbV9mYm87Ci0gICAg
Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIp
OwotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9E
RVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVw
LgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgfQorICAgIH0KIAorICAg
IC8vIFJlc2l6ZSByZWd1bGFyIEZCTworICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Cisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwor
ICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfQorICAgIGdsQmluZFRleHR1cmUo
dGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFs
Q29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCAwKTsKICAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCB0YXJnZXQsIG1fdGV4dHVyZSwgMCk7Ci0gICAg
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRI
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAg
ICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAm
JiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKSB7CisgICAgICAgIGdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5k
ZXB0aCkKKyAgICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwg
bV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgfQogICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNr
RnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKICAgICBpZiAoc3RhdHVz
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgewogICAgICAgICBwcmludGYoIkdyYXBo
aWNzQ29udGV4dDNEOiBmcmFtZWJ1ZmZlciB3YXMgaW5jb21wbGV0ZVxuIik7CkBAIC02OTMsNiAr
NzgzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKAogICAgICAg
ICAvLyBGSVhNRTogY2xlYW51cC4KICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CisK
KyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CiAjZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJV
R0dJTkdfV0lORE9XCiAKICNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKQEAgLTcw
Myw3ICs3OTYsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKAog
ICAgIG1fc2NhbmxpbmUgPSBuZXcgdW5zaWduZWQgY2hhclt3aWR0aCAqIDRdOwogI2VuZGlmICAv
LyBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKIAotICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVG
RkVSX0JJVCk7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklU
OworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQ7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGNsZWFyTWFz
ayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIGdsQ2xlYXIoY2xlYXJNYXNrKTsKIAogI2lm
IFBMQVRGT1JNKENHKQogICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZSB0aGUgY2xpZW50LXNpZGUg
YmFja2luZyBzdG9yZS4KQEAgLTc1OCw5ICs4NTYsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpiZWdpblBhaQogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250
ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1
ZmZlcigpOwogICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7Ci0gICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1fZmJvKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
CisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTzsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
KyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZS
QU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAw
LCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9j
YWNoZWRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CiAgICAgICAgIGds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBt
dXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwor
ICAgICAgICB9CisgICAgfQogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgY29uc3QgU2tCaXRtYXAq
IGNhbnZhc0JpdG1hcCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
LT5iaXRtYXAoKTsKICAgICBjb25zdCBTa0JpdG1hcCogcmVhZGJhY2tCaXRtYXAgPSAwOwpAQCAt
ODY1LDYgKzk3MywyMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFp
CiAjZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGJ1ZmZlcikKK3sKKyNpZm5kZWYgUkVOREVSX1RPX0RF
QlVHR0lOR19XSU5ET1cKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9
PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JF
QURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgZ2xC
bGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsg
d2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAg
IH0KKyNlbmRpZgorICAgIGdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGJ1ZmZlcik7CisjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAg
aWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykK
KyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5k
RkJPKTsKKyNlbmRpZgorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmFjdGl2
ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewogICAgIC8vIEZJWE1FOiBxdWVyeSBu
dW1iZXIgb2YgdGV4dHVyZXMgYXZhaWxhYmxlLgpAQCAtODkyLDkgKzEwMTcsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kRnJhbQogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogICAgIEdMdWludCBpZCA9IEVYVFJBQ1QoZnJhbWVidWZmZXIpOwogICAgIGlmICghaWQp
Ci0gICAgICAgIGlkID0gbV9mYm87Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBp
ZCk7Ci0gICAgbV9ib3VuZEZCTyA9IGlkOworICAgICAgICBpZCA9IChtX2F0dHJzLmFudGlhbGlh
cyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7CisgICAgaWYgKGlkICE9IG1fYm91bmRGQk8p
IHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBpZCk7CisgICAgICAgIG1f
Ym91bmRGQk8gPSBpZDsKKyAgICB9CiB9CiAKIC8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sg
R0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUgbWFwcywKQEAgLTE4MDksNyArMTkzNiwxOCBAQCBQ
YXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNECiAKICAgICAvLyBGSVhNRTog
dGFrZSBpbnRvIGFjY291bnQgcGFjayBhbGlnbm1lbnQuCiAgICAgUmVmUHRyPFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdpZHRo
ICogaGVpZ2h0ICogNCk7Ci0gICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgYXJyYXktPmJhc2VBZGRyZXNzKCkpOworICAgIG1faW50ZXJuYWwtPnJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhcnJheS0+YmFzZUFkZHJl
c3MoKSk7CisjaWYgT1MoREFSV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzID0gbV9pbnRlcm5hbC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWF0
dHJzLmFscGhhKSB7CisgICAgICAgIC8vIElmIGFscGhhIGlzIG9mZiwgYnkgZGVmYXVsdCBnbFJl
YWRQaXhlbHMgc2hvdWxkIHNldCB0aGUgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAgICAg
ICAgLy8gVGhpcyBpcyBhIGhhY2sgdW50aWwgOjpnbFJlYWRQaXhlbHMgZml4ZXMgaXRzIGJlaGF2
aW9yLgorICAgICAgICBHTHVieXRlKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4o
YXJyYXktPmJhc2VBZGRyZXNzKCkpOworICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gYXJy
YXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMzsgaSA8IGJ5dGVM
ZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAyNTU7CisgICAgfQorI2VuZGlm
CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NTgwOCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEw
LTAzLTEwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNDE2CisKKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4gCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4
dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1leHBlY3RlZC50
eHQ6IFdlYkdMIGNvbnRleHQgYXR0cmlidXRlcyBiZWhhdmlvciBjaGFuZ2VkIHdpdGggdGhpcyBm
aXguCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWw6
IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3Rl
ZC50eHQ6IFN0ZW5jaWwgYnVmZmVyIGlzIGVuYWJsZWQsIHRodXMgU3RlbmNpbCBCaXRzIGlzIG5v
IGxvbmdlciAwLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy5odG1s
OiBEaXR0by4KKwogMjAxMC0wMy0xMCAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFRoZSB0ZXN0IHdhcyBpbnRyb2R1Y2VkIGluIHI1NTc5NiwgaXQgaGFz
IGJlZW4gZmFpbGluZyBpbiBHdGsgYm90cyBzaW5jZSB0aGVuLgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwt
YW50aWFsaWFzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxp
YXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorICAgICAgIAorVmVyaWZ5
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXJlIHdvcmtpbmcgYXMgc3BlY2lmaWVkLCBpbmNsdWRp
bmcgYWxwaGEsIGRlcHRoLCBzdGVuY2lsLCBhbnRpYWxpYXMsIGJ1dCBub3QgcHJlbXVsdGlwbGll
ZEFscGhhCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUmVncmVzc2lvbiB0ZXN0IGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYgOiBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
VGVzdGluZyBhbHBoYSA9IHRydWUKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPbicsIHsg
YWxwaGE6IHRydWUsIGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFs
c2UgfSwgWyAwLCAwLCAwLCAwIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0
cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNv
bnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMg
ZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0
QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlw
bGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGFs
cGhhID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPZmYnLCB7IGFscGhhOiBm
YWxzZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBb
IDAsIDAsIDAsIDAgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0g
d2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0
dHJpYnMuYWxwaGEgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UK
K1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmli
cy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFs
cGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGRlcHRoID0g
dHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdkZXB0aE9uJywgeyBzdGVuY2lsOiBmYWxzZSwg
YW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQ
QVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24t
bnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0
cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UK
K1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRy
aWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xv
cgorVGVzdGluZyBkZXB0aCA9IGZhbHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT2Zm
JywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsg
MCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3
ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0
cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQ
QVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMu
YW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBo
YSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBzdGVuY2lsID0g
dHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdzdGVuY2lsT24nLCB7IGRlcHRoOiBmYWxzZSwg
c3RlbmNpbDogdHJ1ZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkg
aXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgdHJ1ZQor
UEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMu
YWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BB
U1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwg
aXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHN0ZW5jaWwgPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdl
dFdlYkdMKCdzdGVuY2lsT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRp
YWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1Mg
Y29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxs
LgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmli
cy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BB
U1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJz
LnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgor
VGVzdGluZyBhbnRpYWxpYXMgPSB0cnVlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlh
c09uJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlh
bGlhczogdHJ1ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNv
bnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4K
K1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMu
c3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyBmYWxzZQorUEFT
UyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5w
cmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbFswXSA9PSAyNTUgfHwgcGl4ZWxb
MF0gPT0gMCBpcyBmYWxzZQorVGVzdGluZyBhbnRpYWxpYXMgPSBmYWxzZQorUEFTUyB3ZWJHTCA9
IGdldFdlYkdMKCdhbnRpYWxpYXNPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2Us
IGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkg
aXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UK
K1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmli
cy5hbHBoYSBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UK
K1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4
ZWxbMF0gPT0gMjU1IHx8IHBpeGVsWzBdID09IDAgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlh
bGlhcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Nv
bnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1
dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzA3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvdXRpbHMzZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNo
YWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBwb3M7CithdHRyaWJ1dGUgdmVjNCBjb2xv
ckluOwordmFyeWluZyB2ZWM0IGNvbG9yOworCit2b2lkIG1haW4oKQoreworICAgIGNvbG9yID0g
Y29sb3JJbjsKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zLnh5eiwgMS4wKTsKK30KKzwvc2Ny
aXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4K
K3ZhcnlpbmcgdmVjNCBjb2xvcjsKKwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3Ig
PSBjb2xvcjsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IGZhbHNlOworCisvLyBUaGVzZSBmb3VyIGRlY2xhcmF0aW9ucyBuZWVkIHRvIGJlIGdsb2Jh
bCBmb3IgInNob3VsZEJlIiB0byBzZWUgdGhlbQordmFyIHdlYkdMID0gbnVsbDsKK3ZhciBjb250
ZXh0QXR0cmlicyA9IG51bGw7Cit2YXIgcGl4ZWwgPSBbMCwgMCwgMCwgMV07Cit2YXIgY29ycmVj
dENvbG9yID0gbnVsbDsKKworZnVuY3Rpb24gaW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlk
ZVByZWZlcmVuY2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgV2ViR0xD
b250ZXh0QXR0cmlidXRlcyBhcmUgd29ya2luZyBhcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBhbHBo
YSwgZGVwdGgsIHN0ZW5jaWwsIGFudGlhbGlhcywgYnV0IG5vdCBwcmVtdWx0aXBsaWVkQWxwaGEn
KTsKKworICAgIGRlYnVnKCdSZWdyZXNzaW9uIHRlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNiI+aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMzNDE2PC9hPiA6IDxjb2RlPkhvb2sgdXAgV2ViR0xDb250ZXh0
QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2RlPC9jb2RlPicpOworICAg
IAorICAgIHJ1blRlc3QoKTsKK30KKworZnVuY3Rpb24gZ2V0V2ViR0woY2FudmFzTmFtZSwgY29u
dGV4dEF0dHJpYnMsIGNsZWFyQ29sb3IsIGNsZWFyRGVwdGgsIGNsZWFyU3RlbmNpbCkKK3sKKyAg
ICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FudmFzTmFtZSk7CisgICAg
dmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsIGNvbnRleHRB
dHRyaWJzKTsKKyAgICBpZiAoIWdsKSB7CisgICAgICAgIGFsZXJ0KCJObyBXZWJHTCBjb250ZXh0
IGZvdW5kIik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2YXIgYWN0dWFsQ29u
dGV4dEF0dHJpYnMgPSBnbC5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIEFk
ZCBhIGNvbnNvbGUKKyAgICBnbC5jb25zb2xlID0gKCJjb25zb2xlIiBpbiB3aW5kb3cpID8gd2lu
ZG93LmNvbnNvbGUgOiB7IGxvZzogZnVuY3Rpb24oKSB7IH0gfTsKKworICAgIC8vIGNyZWF0ZSBv
dXIgc2hhZGVycworICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCAidnNoYWRl
ciIpOworICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsICJmc2hhZGVyIik7
CisKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHJl
dHVybiBudWxsOworCisgICAgLy8gQ3JlYXRlIHRoZSBwcm9ncmFtIG9iamVjdAorICAgIGdsLnBy
b2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisKKyAgICBpZiAoIWdsLnByb2dyYW0pCisgICAg
ICAgIHJldHVybiBudWxsOworCisgICAgLy8gQXR0YWNoIG91ciB0d28gc2hhZGVycyB0byB0aGUg
cHJvZ3JhbQorICAgIGdsLmF0dGFjaFNoYWRlcihnbC5wcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwor
ICAgIGdsLmF0dGFjaFNoYWRlcihnbC5wcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisKKyAgICAv
LyBCaW5kIGF0dHJpYnV0ZXMKKyAgICB2YXIgYXR0cmlicyA9IFsgInBvcyIsICJjb2xvckluIiBd
OworICAgIGZvciAodmFyIGkgaW4gYXR0cmlicykKKyAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0
aW9uKGdsLnByb2dyYW0sIGksIGF0dHJpYnNbaV0pOworCisgICAgLy8gTGluayB0aGUgcHJvZ3Jh
bQorICAgIGdsLmxpbmtQcm9ncmFtKGdsLnByb2dyYW0pOworCisgICAgLy8gQ2hlY2sgdGhlIGxp
bmsgc3RhdHVzCisgICAgdmFyIGxpbmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoZ2wucHJv
Z3JhbSwgZ2wuTElOS19TVEFUVVMpOworICAgIGlmICghbGlua2VkKSB7CisgICAgICAgIC8vIHNv
bWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxpbmsKKyAgICAgICAgdmFyIGVycm9yID0gZ2wu
Z2V0UHJvZ3JhbUluZm9Mb2cgKGdsLnByb2dyYW0pOworICAgICAgICBnbC5jb25zb2xlLmxvZygi
RXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIrZXJyb3IpOworCisgICAgICAgIGdsLmRlbGV0ZVBy
b2dyYW0oZ2wucHJvZ3JhbSk7CisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0oZnJhZ21lbnRTaGFk
ZXIpOworICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHZlcnRleFNoYWRlcik7CisKKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorCisgICAgZ2wudXNlUHJvZ3JhbShnbC5wcm9ncmFtKTsKKwor
ICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xv
clsyXSwgY2xlYXJDb2xvclszXSk7CisgICAgZ2wuY2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAg
ICBnbC5jbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKKyAgICBnbC5lbmFibGUoZ2wuREVQVEhf
VEVTVCk7CisgICAgZ2wuZW5hYmxlKGdsLlNURU5DSUxfVEVTVCk7CisgICAgZ2wuY2xlYXIoZ2wu
Q09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZF
Ul9CSVQpOworCisgICAgcmV0dXJuIGdsOworfQorCitmdW5jdGlvbiBkcmF3QW5kUmVhZFBpeGVs
KGdsLCB2ZXJ0aWNlcywgY29sb3JzLCB4LCB5KQoreworICAgIHZhciBjb2xvck9mZnNldCA9IHZl
cnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2YXIgdmJvID0gZ2wuY3JlYXRlQnVmZmVyKCk7Cisg
ICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2wuYnVmZmVyRGF0
YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zmc2V0ICsgY29sb3JzLmJ5dGVMZW5ndGgsIGdsLlNU
QVRJQ19EUkFXKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVy
dGljZXMpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9mZnNl
dCwgY29sb3JzKTsKKworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQs
IGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBn
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDQsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAsIGNv
bG9yT2Zmc2V0KTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKworICAgIGds
LmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCB2ZXJ0aWNlcy5sZW5ndGggLyAzKTsKKworICAg
IHJldHVybiBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZ
VEUpOworfQorCitmdW5jdGlvbiB0ZXN0QWxwaGEoYWxwaGEpCit7CisgICAgZGVidWcoIlRlc3Rp
bmcgYWxwaGEgPSAiICsgYWxwaGEpOworICAgIGlmIChhbHBoYSkKKyAgICAgICAgc2hvdWxkQmVO
b25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9uJywgeyBhbHBoYTogdHJ1ZSwgZGVwdGg6
IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAg
XSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBn
ZXRXZWJHTCgnYWxwaGFPZmYnLCB7IGFscGhhOiBmYWxzZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2ls
OiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkiKTsKKyAg
ICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsIChhbHBoYSA/
ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgi
LCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIsICJmYWxz
ZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsK
KyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUi
KTsKKworICAgIHZhciBidWYgPSB3ZWJHTC5yZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIHdlYkdMLlJH
QkEsIHdlYkdMLlVOU0lHTkVEX0JZVEUpOworICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAgIHBp
eGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVsWzJdID0gYnVmWzJdOworICAgIHBpeGVsWzNdID0g
YnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9IChhbHBoYSA/IFswLCAwLCAwLCAwXSA6IFswLCAw
LCAwLCAyNTVdKTsKKyAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9yIik7Cit9CisK
K2Z1bmN0aW9uIHRlc3REZXB0aChkZXB0aCkKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBkZXB0aCA9
ICIgKyBkZXB0aCk7CisgICAgaWYgKGRlcHRoKQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndl
YkdMID0gZ2V0V2ViR0woJ2RlcHRoT24nLCB7IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZh
bHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIGVsc2UKKyAgICAgICAgc2hvdWxk
QmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdkZXB0aE9mZicsIHsgZGVwdGg6IGZhbHNlLCBz
dGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCki
KTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4
dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0aCIsIChk
ZXB0aCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMu
YWxwaGEiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5zdGVuY2lsIiwg
ImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxz
ZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAi
dHJ1ZSIpOworCisgICAgd2ViR0wuZGVwdGhGdW5jKHdlYkdMLk5FVkVSKTsKKworICAgIHZhciB2
ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAgMS4wLCAgMS4wLCAwLjAs
CisgICAgICAgIC0xLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAg
ICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAg
IDEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFyIGNvbG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5KFsKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1
LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAg
ICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOworCisgICAgdmFy
IGJ1ZiA9IGRyYXdBbmRSZWFkUGl4ZWwod2ViR0wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOwor
ICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAgIHBpeGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVs
WzJdID0gYnVmWzJdOworICAgIHBpeGVsWzNdID0gYnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9
IChkZXB0aCA/IFswLCAwLCAwLCAyNTVdIDogWzI1NSwgMCwgMCwgMjU1XSk7CisgICAgc2hvdWxk
QmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOworfQorCitmdW5jdGlvbiB0ZXN0U3RlbmNpbChz
dGVuY2lsKQoreworICAgIGRlYnVnKCJUZXN0aW5nIHN0ZW5jaWwgPSAiICsgc3RlbmNpbCk7Cisg
ICAgaWYgKHN0ZW5jaWwpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJH
TCgnc3RlbmNpbE9uJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IHRydWUsIGFudGlhbGlhczog
ZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91
bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxPZmYnLCB7IGRlcHRoOiBmYWxz
ZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEs
IDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENv
bnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgi
LCAoc3RlbmNpbCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0
dHJpYnMuc3RlbmNpbCIsIChzdGVuY2lsID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3Vs
ZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRl
eHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0
cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCisgICAgd2ViR0wuZGVwdGhGdW5j
KHdlYkdMLkFMV0FZUyk7CisKKyAgICB3ZWJHTC5zdGVuY2lsRnVuYyh3ZWJHTC5ORVZFUiwgMSwg
MSk7CisgICAgd2ViR0wuc3RlbmNpbE9wKHdlYkdMLktFRVAsIHdlYkdMLktFRVAsIHdlYkdMLktF
RVApOworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAg
ICAxLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwg
LTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwg
MC4wLAorICAgICAgICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFdl
YkdMVW5zaWduZWRCeXRlQXJyYXkoWworICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAg
MjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAs
IDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1
XSk7CisKKyAgICB2YXIgYnVmID0gZHJhd0FuZFJlYWRQaXhlbCh3ZWJHTCwgdmVydGljZXMsIGNv
bG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07CisgICAgcGl4ZWxbMV0gPSBidWZb
MV07CisgICAgcGl4ZWxbMl0gPSBidWZbMl07CisgICAgcGl4ZWxbM10gPSBidWZbM107CisgICAg
Y29ycmVjdENvbG9yID0gKHN0ZW5jaWwgPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1
NV0pOworICAgIHNob3VsZEJlKCJwaXhlbCIsICJjb3JyZWN0Q29sb3IiKTsKK30KKworZnVuY3Rp
b24gdGVzdEFudGlhbGlhcyhhbnRpYWxpYXMpCit7CisgICAgZGVidWcoIlRlc3RpbmcgYW50aWFs
aWFzID0gIiArIGFudGlhbGlhcyk7CisgICAgaWYgKGFudGlhbGlhcykKKyAgICAgICAgc2hvdWxk
QmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdhbnRpYWxpYXNPbicsIHsgZGVwdGg6IGZhbHNl
LCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IHRydWUgfSwgWyAwLCAw
LCAwLCAxIF0sIDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndl
YkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBm
YWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAx
LCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRD
b250ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmRlcHRo
IiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiLCAiZmFs
c2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAiZmFsc2UiKTsKKyAg
ICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIiwgKGFudGlhbGlhcyA/ICJ0cnVl
IiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGll
ZEFscGhhIiwgInRydWUiKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJy
YXkoWworICAgICAgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgMS4wLCAwLjAsCisg
ICAgICAgIC0xLjAsIC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xvcnMgPSBuZXcgV2ViR0xVbnNp
Z25lZEJ5dGVBcnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAs
IDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTVdKTsKKyAgICB2YXIgYnVmID0gZHJhd0Fu
ZFJlYWRQaXhlbCh3ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0g
PSBidWZbMF07CisgICAgc2hvdWxkQmUoInBpeGVsWzBdID09IDI1NSB8fCBwaXhlbFswXSA9PSAw
IiwgKGFudGlhbGlhcyA/ICJmYWxzZSIgOiAidHJ1ZSIpKTsKK30KKworZnVuY3Rpb24gcnVuVGVz
dCgpCit7CisKKyAgICB0ZXN0QWxwaGEodHJ1ZSk7CisgICAgdGVzdEFscGhhKGZhbHNlKTsKKyAg
ICB0ZXN0RGVwdGgodHJ1ZSk7CisgICAgdGVzdERlcHRoKGZhbHNlKTsKKyAgICB0ZXN0U3RlbmNp
bCh0cnVlKTsKKyAgICB0ZXN0U3RlbmNpbChmYWxzZSk7CisgICAgdGVzdEFudGlhbGlhcyh0cnVl
KTsKKyAgICB0ZXN0QW50aWFsaWFzKGZhbHNlKTsKKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0
Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0gZmluaXNoOworICAgIGVwaWxvZ3VlLnNyYyA9ICIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgeworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJpbml0KCkiPgorPGNhbnZhcyBpZD0iYWxwaGFPbiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIx
cHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iYWxwaGFPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0i
MXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImRlcHRoT24iIHdpZHRoPSIxcHgiIGhlaWdodD0i
MXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImRlcHRoT2ZmIiB3aWR0aD0iMXB4IiBoZWlnaHQ9
IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJzdGVuY2lsT24iIHdpZHRoPSIxcHgiIGhlaWdo
dD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9InN0ZW5jaWxPZmYiIHdpZHRoPSIxcHgiIGhl
aWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFudGlhbGlhc09uIiB3aWR0aD0iMnB4
IiBoZWlnaHQ9IjJweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJhbnRpYWxpYXNPZmYiIHdpZHRo
PSIycHgiIGhlaWdodD0iMnB4Ij48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rp
dj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0
dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NTc5OSkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTcsOCArNyw4IEBAIFBBU1MgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCgpIGlz
IG5vbi0KIFBBU1MgYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBu
b24tbnVsbC4KIFBBU1MgYXR0cmlicy5kZXB0aCBpcyB0cnVlCiBQQVNTIGF0dHJpYnMuYWxwaGEg
aXMgdHJ1ZQotUEFTUyAoYXR0cmlicy5zdGVuY2lsID09IHRydWUgfHwgYXR0cmlicy5zdGVuY2ls
ID09IGZhbHNlKSBpcyB0cnVlCi1QQVNTIChhdHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGF0
dHJpYnMuYW50aWFsaWFzID09IGZhbHNlKSBpcyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBp
cyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFsaWFzIGlzIHRydWUKIFBBU1MgYXR0cmlicy5wcmVt
dWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQogVGVzdCBjdXN0b21pemVkIHZhbHVlcwogUEFTUyBjb250
ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2Ug
fSkgaXMgbm9uLW51bGwuCkBAIC0xOCw2ICsxOCwyMiBAQCBQQVNTIGF0dHJpYnMuYWxwaGEgaXMg
dHJ1ZQogUEFTUyBhdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKIFBBU1MgYXR0cmlicy5hbnRpYWxp
YXMgaXMgZmFsc2UKIFBBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorVGVz
dCBjdXN0b21pemVkIHZhbHVlcworUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgZGVw
dGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlIH0pIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzID0g
Y29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJz
LmRlcHRoIGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGF0dHJpYnMu
c3RlbmNpbCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFsaWFzIGlzIHRydWUKK1BBU1MgYXR0
cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorVGVzdCBjdXN0b21pemVkIHZhbHVlcwor
UEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxz
ZSB9KSBpcyBub24tbnVsbC4KK1BBU1MgYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgYXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGF0
dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBh
dHRyaWJzLmFudGlhbGlhcyBpcyB0cnVlCitQQVNTIGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhh
IGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4
dC1hdHRyaWJ1dGVzLmh0bWwJKHJldmlzaW9uIDU1Nzk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4
LDkgKzE4LDggQEAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0ID0gY3JlYXRlM0RDb250ZQogc2hv
dWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7
CiBzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVlIik7CiBzaG91bGRCZSgiYXR0cmlicy5h
bHBoYSIsICJ0cnVlIik7Ci0vLyBUaGUgZm9sbG93aW5nIHR3byBkZXBlbmQgb24gd2hldGhlciB0
aGUgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgc3VwcG9ydHMgdGhlbQotc2hvdWxkQmUoIihhdHRy
aWJzLnN0ZW5jaWwgPT0gdHJ1ZSB8fCBhdHRyaWJzLnN0ZW5jaWwgPT0gZmFsc2UpIiwgInRydWUi
KTsKLXNob3VsZEJlKCIoYXR0cmlicy5hbnRpYWxpYXMgPT0gdHJ1ZSB8fCBhdHRyaWJzLmFudGlh
bGlhcyA9PSBmYWxzZSkiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuc3RlbmNpbCIsICJ0
cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAidHJ1ZSIpOwogc2hvdWxkQmUo
ImF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKIAogZGVidWcgKCJUZXN0IGN1
c3RvbWl6ZWQgdmFsdWVzIik7CkBAIC0zMiw2ICszMSwyNiBAQCBzaG91bGRCZSgiYXR0cmlicy5z
dGVuY2lsIiwgImZhbHNlIik7CiBzaG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2Ui
KTsKIHNob3VsZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CiAKK2Rl
YnVnKCJUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzIik7CisvLyAoc3RlbmNpbCA9PSB0cnVlICYmIGRl
cHRoID09IGZhbHNlKSBpcyBub3Qgc3VwcG9ydGVkLCBkZWZhdWx0IGRlcHRoIHRvIHRydWUKK3No
b3VsZEJlTm9uTnVsbCgiY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IGRlcHRoOiBmYWxzZSwg
c3RlbmNpbDogdHJ1ZSB9KSIpOworc2hvdWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5n
ZXRDb250ZXh0QXR0cmlidXRlcygpIik7CitzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVl
Iik7CitzaG91bGRCZSgiYXR0cmlicy5hbHBoYSIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmli
cy5zdGVuY2lsIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJ0cnVl
Iik7CitzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCitk
ZWJ1ZygiVGVzdCBjdXN0b21pemVkIHZhbHVlcyIpOworLy8gKHByZW11bHRpcGxpZWRBbHBoYSA9
PSBmYWxzZSkgaXMgbm90IHN1cHBvcnRlZCwgZGVmYXVsdCB0byB0cnVlCitzaG91bGRCZU5vbk51
bGwoImNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNl
IH0pIik7CitzaG91bGRCZU5vbk51bGwoImF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRy
aWJ1dGVzKCkiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmRlcHRoIiwgInRydWUiKTsKK3Nob3VsZEJl
KCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAi
dHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYW50aWFsaWFzIiwgInRydWUiKTsKK3Nob3VsZEJl
KCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1
NTc5OSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgUEFTUyBjb250ZXh0Lmdl
dFBhcmFtZXRlcihjb250ZXh0LlNURU5DSQogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250
ZXh0LlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwpIGlzIGNvbnRleHQuS0VFUAogUEFTUyBj
b250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1Mp
IGlzIGNvbnRleHQuS0VFUAogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5D
SUxfQkFDS19SRUYpIGlzIDAKLVBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVO
Q0lMX0JJVFMpIGlzIDAKK1BBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lM
X0JJVFMpID4gMCBpcyB0cnVlCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RF
TkNJTF9DTEVBUl9WQUxVRSkgaXMgMAogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0
LlNURU5DSUxfRkFJTCkgaXMgY29udGV4dC5LRUVQCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVy
KGNvbnRleHQuU1RFTkNJTF9GVU5DKSBpcyBjb250ZXh0LkFMV0FZUwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwJKHJldmlzaW9uIDU1
Nzk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgZWxzZSB7CiAgICAgLy8gRklYTUU6IEN1
cnJlbnQgV2ViS2l0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHdyb25nIHZhbHVlIChodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NDIpCiAgICAgLy9zaG91bGRC
ZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSykn
LCAnMHhGRkZGRkZGRicpOwogICAgIC8vc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNv
bnRleHQuU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyknLCAnMHhGRkZGRkZGRicpOwotICAgIHNob3Vs
ZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQklUUyknLCAnMCcpOwor
ICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQklUUykg
PiAwJywgJ3RydWUnKTsKICAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4
dC5TVEVOQ0lMX0NMRUFSX1ZBTFVFKScsICcwJyk7CiAgICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0
UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9GQUlMKScsICdjb250ZXh0LktFRVAnKTsKICAgICBz
aG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0ZVTkMpJywgJ2Nv
bnRleHQuQUxXQVlTJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50603</attachid>
            <date>2010-03-12 09:34:34 -0800</date>
            <delta_ts>2010-03-23 19:20:32 -0700</delta_ts>
            <desc>fix a warning that my compiler fails to catch</desc>
            <filename>attrs.patch</filename>
            <type>text/plain</type>
            <size>52771</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTgwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDMtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6IEFkZCBtZW1iZXJz
L2Z1bmN0aW9ucyBmb3IgbXVsdGlzYW1wbGluZy9zdGVuY2lsIGJ1ZmZlciBwdXJwb3NlLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmg6IEFkZCBHcmFwaGlj
c0NvbnRleHQzRCBhcyBhIG1lbWJlciBvZiBDYW52YXMzRExheWVyLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tOiBBZGQgbXVsdGlzYW1wbGluZyBzdXBw
b3J0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5jcHA6IEhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBj
cmVhdGlvbiBjb2RlIGZvciBNYWMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENhbnZhczNETGF5ZXIgaW5pdCBj
YWxsLgorCiAyMDEwLTAzLTEwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGxvaXNsby1tYWNi
b29rcHJvLmxvY2FsPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTU3OTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAg
ICAgaWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0g
IndlYmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpj
cmVhdGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0
YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgp
OwogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6
Ok5ldygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2
aXNpb24gNTU4MTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsg
cmV0dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAg
IC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJl
Z3VsYXIgRkJPLgorICAgICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAg
ICAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRh
IHR5cGVzCiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBp
bnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOwpAQCAtNzE3LDcgKzcyMiwxNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgICAgICBH
THVpbnQgbV90ZXh0dXJlOwogICAgICAgICBHTHVpbnQgbV9mYm87Ci0gICAgICAgIEdMdWludCBt
X2RlcHRoQnVmZmVyOworICAgICAgICBHTHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAg
ICAgICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZCTyBpcyBib3VuZAorICAgICAgICBHTHVpbnQg
bV9ib3VuZEZCTzsKKworICAgICAgICAvLyBGb3IgbXVsdGlzYW1wbGluZworICAgICAgICBHTHVp
bnQgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgR0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXI7CisgICAgICAgIEdMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisK
ICAgICAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgICAg
ICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBtX3N5bnRoZXRpY0Vycm9yczsKICNlbmRpZiAg
ICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RM
YXllci5oCShyZXZpc2lvbiA1NTc5OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NhbnZhczNETGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTYgKzMyLDE4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFwaGljc0xheWVyOworICAgIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwogfQogCiBAaW50ZXJmYWNlIENhbnZhczNETGF5ZXIgOiBDQU9wZW5H
TExheWVyIAogewogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKKyAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwogICAgIENHTENvbnRleHRP
YmogbV9jb250ZXh0T2JqOwogICAgIEdMdWludCBtX3RleHR1cmU7CiB9CiAKLS0gKGlkKWluaXRX
aXRoQ29udGV4dDooQ0dMQ29udGV4dE9iailjb250ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJl
OworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29u
dGV4dDsKIAogLSAoQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihD
R0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCShyZXZpc2lvbiA1NTgxNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQxLDEwICs0MSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVu
dGF0aW9uIENhbnZhczNETGF5ZXIKIAotLShpZClpbml0V2l0aENvbnRleHQ6KENHTENvbnRleHRP
YmopY29udGV4dCB0ZXh0dXJlOihHTHVpbnQpdGV4dHVyZQorLShpZClpbml0V2l0aENvbnRleHQ6
KEdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0CiB7Ci0gICAgbV9jb250ZXh0T2JqID0gY29udGV4
dDsKLSAgICBtX3RleHR1cmUgPSB0ZXh0dXJlOworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgbV9jb250ZXh0T2JqID0gc3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4oY29udGV4dC0+cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBtX3RleHR1cmUgPSBzdGF0aWNfY2FzdDxH
THVpbnQ+KGNvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpKTsKICAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwogICAgIHJldHVybiBzZWxmOwogfQpAQCAtNzAsOCArNzEsOCBAQCAtKENHTENvbnRleHRP
YmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvCiAKIC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihD
R0xDb250ZXh0T2JqKWdsQ29udGV4dCBwaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4
ZWxGb3JtYXQgZm9yTGF5ZXJUaW1lOihDRlRpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxh
eVRpbWU6KGNvbnN0IENWVGltZVN0YW1wICopdGltZVN0YW1wCiB7Ci0gICAgQ0dMU2V0Q3VycmVu
dENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBnbEZpbmlzaCgpOworICAgIG1fY29udGV4dC0+
cHJlcGFyZVRleHR1cmUoKTsKKwogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGdsQ29udGV4dCk7
CiAKICAgICBDR1JlY3QgZnJhbWUgPSBbc2VsZiBmcmFtZV07CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShy
ZXZpc2lvbiA1NTgyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDE5IEBAIEdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICAsIG1fY29udGV4dE9iaigw
KQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZl
cigwKQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB1
c2VyJ3MgcmVxdWVzdGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLCBpbiBw
YXJ0aWN1bGFyIHN0ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdo
aWNoIGNvdWxkIGFuZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJhc2VkIG9uIHRoZSBj
YXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAgICBtX2F0dHJzLmFs
cGhhID0gdHJ1ZTsKLSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBtX2F0dHJzLnN0ZW5j
aWwgPSBmYWxzZTsKLSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgICwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAs
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQoreworICAgIC8vIFRha2UgaW50byBhY2NvdW50
IHRoZSB1c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4KKyAg
ICAvLyBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBhbmQgY291bGQKKyAgICAvLyBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2Fw
YWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCisgICAgaWYgKG1fYXR0cnMu
c3RlbmNpbCAmJiAhbV9hdHRycy5kZXB0aCkKKyAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7
CisgICAgLy8gRklYTUU6IGluc3RlYWQgb2YgZW5mb3JjaW5nIHByZW11bHRpcGxpZWRBbHBoYSA9
IHRydWUsIGltcGxlbWVudCB0aGUKKyAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVs
dGlwbGllZEFscGhhID0gZmFsc2UgaXMgcmVxdWVzdGVkLgogICAgIG1fYXR0cnMucHJlbXVsdGlw
bGllZEFscGhhID0gdHJ1ZTsKIAogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4g
YXR0cmliczsKQEAgLTE1MiwyMSArMTU1LDI1IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGlj
c0NvbnRleHQzRChHcmEKICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CiAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKICAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOwotICAg
IDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4LCAxLCAxLCAwLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgMCk7Ci0gICAgCisKICAgICAvLyBjcmVhdGUgYW4gRkJPCiAgICAgOjpnbEdlbkZyYW1l
YnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgCi0gICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fZGVwdGhCdWZmZXIpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
RVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgMSwgMSk7Ci0gICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgCi0g
ICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09M
T1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRI
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAg
ICAKKyAgICBtX2JvdW5kRkJPID0gbV9mYm87CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAm
JiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICA6OmdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworCisgICAgLy8gY3JlYXRl
IGFuIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAg
ICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIDo6
Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICB9CisKICAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKIH0KIApAQCAtMTc0
LDggKzE4MSwxNiBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsK
ICAgICBpZiAobV9jb250ZXh0T2JqKSB7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1f
Y29udGV4dE9iaik7Ci0gICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICYgbV9k
ZXB0aEJ1ZmZlcik7CiAgICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsK
KyAgICAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgICAgICA6OmdsRGVsZXRl
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAg
ICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CiAgICAg
ICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICAgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQoMCk7CiAgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9i
aik7CkBAIC0yMDUsMjUgKzIyMCw4NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBl
KGludCB3aWR0CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogICAgIAogICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCisKKyAgICBHTHVpbnQgaW50ZXJu
YWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0g
MDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0
ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JG
b3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3Rl
bmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBTZWUgR3JhcGhp
Y3NDb250ZXh0M0QgY29uc3RydWN0b3IuCisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgJiYg
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0g
R0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOworICAgIH0KKworICAg
IGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKworICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBs
ZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xpbnQgbWF4U2Ft
cGxlQ291bnQ7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZt
YXhTYW1wbGVDb3VudCk7CisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwg
bWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1wbGVDb3Vu
dCkKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIGlm
IChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAg
ICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5z
dGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChH
TF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAg
ICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJz
LmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAg
ICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAg
ICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQp
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAgLy8gRklYTUU6
IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9m
Ym8pIHsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KICAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOwotICAgIAotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2Zibyk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVO
REVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICA6
OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICAKKyAg
ICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7CiAgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICBH
TGVudW0gc3RhdHVzID0gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZG
RVJfRVhUKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkg
ewotICAgICAgICAvLyBGSVhNRTogY2xlYW51cAorICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKyAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5j
aWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRo
U3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAg
ICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgMCk7CisgICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsK
KyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgfQogCi0gICAgOjpnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOworICAgIGlmIChtdXN0
UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fYm91bmRGQk8pOworCisgICAgR0xlbnVtIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JV
RkZFUl9CSVQ7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgIGNsZWFyTWFzayB8PSBH
TF9ERVBUSF9CVUZGRVJfQklUOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgOjpnbENsZWFyKGNsZWFyTWFz
ayk7CiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKQEAgLTI0Myw2ICszMjAsMTggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bgogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRl
eHR1cmUpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRG
cmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAw
LCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBH
TF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9ib3VuZEZCTyk7CisgICAgICAgIDo6Z2xGaW5pc2goKTsKKyAgICB9Cit9CisKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0s
IFdlYkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpAQCAtMjY4LDcg
KzM1NywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2lnCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlcikKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4
dE9iaik7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIChidWZmZXIgJiYgYnVm
ZmVyLT5vYmplY3QoKSkgPyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogbV9mYm8pOworICAg
IEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPm9iamVjdCgpKQorICAgICAg
ICBmYm8gPSAoR0x1aW50KWJ1ZmZlci0+b2JqZWN0KCk7CisgICAgZWxzZQorICAgICAgICBmYm8g
PSAobV9hdHRycy5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOworICAgIGlm
IChmYm8gIT0gbV9ib3VuZEZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRh
cmdldCwgZmJvKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IGZibzsKKyAgICB9CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCkBAIC02NzUsOSArNzcyLDI1IEBAIFBh
c3NSZWZQdHI8V2ViR0xBcnJheT4gR3JhcGhpY3NDb250ZXh0M0QKICAgICAvLyBGSVhNRTogQWxz
bywgd2Ugc2hvdWxkIHRocm93IHdoZW4gYW4gdW5hY2NlcHRhYmxlIHZhbHVlIGlzIHBhc3NlZAog
ICAgIGlmICh0eXBlICE9IEdMX1VOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ICE9IEdMX1JHQkEpCiAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAKKworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAm
JiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1f
ZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkg
KyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJ
VCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CiAgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJy
YXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0
ICogNCk7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
ICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgIGlm
ICghbV9hdHRycy5hbHBoYSkgeworICAgICAgICAvLyBJZiBhbHBoYSBpcyBvZmYsIGJ5IGRlZmF1
bHQgZ2xSZWFkUGl4ZWxzIHNob3VsZCBzZXQgdGhlIGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAu
CisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHVudGlsIDo6Z2xSZWFkUGl4ZWxzIGZpeGVzIGl0
cyBiZWhhdmlvci4KKyAgICAgICAgR0x1Ynl0ZSogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1
Ynl0ZSo+KGFycmF5LT5kYXRhKCkpOworICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gYXJy
YXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMzsgaSA8IGJ5dGVM
ZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAyNTU7CisgICAgfQogICAgIHJl
dHVybiBhcnJheTsgICAgCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHJldmlzaW9uIDU1Nzk5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzE2LDcgKzE3MTYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0dy
YXBoCiAKICAgICBpZiAobV9wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEICE9IE51bGxQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEICYmIG1fcGxhdGZvcm1UZXh0dXJlICE9IE51bGxQbGF0Zm9ybTNE
T2JqZWN0KSB7CiAgICAgICAgIC8vIGNyZWF0ZSB0aGUgaW5uZXIgM2QgbGF5ZXIKLSAgICAgICAg
bV9jb250ZW50c0xheWVyLmFkb3B0TlMoW1tDYW52YXMzRExheWVyIGFsbG9jXSBpbml0V2l0aENv
bnRleHQ6c3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9wbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEKSB0ZXh0dXJlOnN0YXRpY19jYXN0PEdMdWludD4obV9wbGF0Zm9ybVRleHR1cmUpXSk7Cisg
ICAgICAgIG1fY29udGVudHNMYXllci5hZG9wdE5TKFtbQ2FudmFzM0RMYXllciBhbGxvY10gaW5p
dFdpdGhDb250ZXh0OmNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0M0QqPihncmFwaGljc0NvbnRl
eHQzRCldKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFttX2NvbnRlbnRzTGF5ZXIuZ2V0KCkg
c2V0TmFtZTpAIjNEIExheWVyIl07CiAjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24g
NTU4MDgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTAtMDMtMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVwIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKworICAg
ICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVw
dGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4
dDNELmNwcDogSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0
IGNyZWF0aW9uIGNvZGUgZm9yIFdpbmRvd3MuCisKIDIwMTAtMDMtMTAgIEV2YW4gU3RhZGUgIDxl
c3RhZGVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9u
IDU1Nzk5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCwxNiArMTI0LDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKICAgICB2b2lkIHZpZXdwb3J0SW1wbChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCisgICAgdm9pZCByZWFkUGl4ZWxzKGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5z
aWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogYnVmZmVyKTsKKwog
ICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IodW5zaWduZWQgbG9uZyBlcnJvcik7CiAKIHByaXZh
dGU6CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyczsKLQorICAgIAog
ICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50IG1fZmJvOwotICAg
IHVuc2lnbmVkIGludCBtX2RlcHRoQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWln
aHQ7CiAKKyAgICAvLyBGb3IgbXVsdGlzYW1wbGluZworICAgIHVuc2lnbmVkIGludCBtX211bHRp
c2FtcGxlRkJPOworICAgIHVuc2lnbmVkIGludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyOworICAgIHVuc2lnbmVkIGludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisKICAgICAv
LyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCiAgICAgdW5zaWduZWQgaW50IG1fYm91
bmRGQk87CiAKQEAgLTM1MSw3ICszNTgsMTAgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
R3JhcGhpY3NDb250ZQogICAgIDogbV9hdHRycyhhdHRycykKICAgICAsIG1fdGV4dHVyZSgwKQog
ICAgICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAgLCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIo
MCkKICAgICAsIG1fYm91bmRGQk8oMCkKICNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FM
TFkKICAgICAsIG1fc2NhbmxpbmUoMCkKQEAgLTM3NSwxNCArMzg1LDIxIEBAIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGUKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBw
bGF0Zm9ybQogI2VuZGlmCiB7Ci0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFj
Y291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQKLSAgICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJp
YnV0ZXMsIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQKLSAgICAvLyBhbnRpYWxpYXMsIGFuZCBk
ZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxkIG5vdCBiZSBob25vcmVkCi0gICAgLy8gYmFz
ZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgotICAg
IG1fYXR0cnMuYWxwaGEgPSB0cnVlOwotICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOwotICAgIG1f
YXR0cnMuc3RlbmNpbCA9IGZhbHNlOwotICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Cisg
ICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVh
dGlvbiBhdHRyaWJ1dGVzLCBpbgorICAgIC8vIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFs
aWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIGFuZCBjb3VsZAorICAgIC8vIG5vdCBiZSBo
b25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRh
dGlvbi4KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGlmIChHTEVXX0VYVF9w
YWNrZWRfZGVwdGhfc3RlbmNpbCkgeworICAgICAgICAgICAgaWYgKCFtX2F0dHJzLmRlcHRoKQor
ICAgICAgICAgICAgICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmICFHTEVXX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNh
bXBsZSkKKyAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAvLyBGSVhNRTog
aW5zdGVhZCBvZiBlbmZvcmNpbmcgcHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZSwgaW1wbGVtZW50
IHRoZQorICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBwcmVtdWx0aXBsaWVkQWxwaGEgPSBm
YWxzZSBpcyByZXF1ZXN0ZWQuCiAgICAgbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVl
OwogCiAjaWYgT1MoV0lORE9XUykKQEAgLTU3Miw3ICs1ODksMTUgQEAgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udAogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
I2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgIGdsRGVsZXRlUmVuZGVyYnVm
ZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7
CisgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGggfHwgbV9hdHRycy5zdGVuY2lsKQor
ICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1f
bXVsdGlzYW1wbGVGQk8pOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRo
IHx8IG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KICAgICBnbERlbGV0ZVRleHR1cmVz
KDEsICZtX3RleHR1cmUpOwogI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogICAg
IGlmIChtX3NjYW5saW5lKQpAQCAtNjY5LDIzICs2OTQsODggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpyZXNoYXBlKAogICAgICAgICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJl
T2JqZWN0KHRhcmdldCk7CiAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmpl
Y3QKICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSAgICAgICAgLy8g
R2VuZXJhdGUgdGhlIGRlcHRoIGJ1ZmZlcgotICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAgICAg
ICBpZiAobV9hdHRycy5kZXB0aCB8fCBtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICBnbEdl
blJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgLy8g
R2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGZyYW1lYnVmZmVyIG9iamVjdAorICAgICAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEs
ICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgICAgICBtX2JvdW5k
RkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJz
LmRlcHRoIHx8IG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbEdlblJlbmRlcmJ1
ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9
CiAgICAgfQogCi0gICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMK
LSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleEltYWdlMkQo
dGFyZ2V0LCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIDApOworICAgIEdMaW50IGlu
dGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1h
dDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0
ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JG
b3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3Rl
bmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBTZWUgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCAmJiBtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxG
b3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAg
fQorCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworCisgICAgLy8gUmVzaXplIG11
bHRpc2FtcGxpbmcgRkJPCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIEdM
aW50IG1heFNhbXBsZUNvdW50OworICAgICAgICBnbEdldEludGVnZXJ2KEdMX01BWF9TQU1QTEVT
X0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgR0xpbnQgc2FtcGxlQ291bnQgPSBzdGQ6
Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVs
dGlzYW1wbGVGQk8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUZCTyk7CisgICAgICAgIH0KKyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBs
ZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZ2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7Cisg
ICAgICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwg
aW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwg
R0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgICAgICBnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVO
VF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICB9CisgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJC
VUZGRVJfRVhULCAwKTsKKyAgICAgICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOworICAgICAgICBpZiAoc3RhdHVzICE9IEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGlj
c0NvbnRleHQzRDogbXVsdGlzYW1wbGluZyBmcmFtZWJ1ZmZlciB3YXMgaW5jb21wbGV0ZVxuIik7
CiAKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsK
LSAgICBtX2JvdW5kRkJPID0gbV9mYm87Ci0gICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFn
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQsIHdpZHRoLCBoZWln
aHQpOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAgICAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIC8vIFJlc2l6ZSByZWd1bGFyIEZCTworICAg
IGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRy
dWU7CisgICAgfQorICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOworICAgIGds
VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICBnbEZyYW1lYnVmZmVy
VGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhU
LCB0YXJnZXQsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJC
VUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7
CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpKSB7CisgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAg
ICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGdsRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hN
RU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAg
ICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAg
fQogICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJB
TUVCVUZGRVJfRVhUKTsKICAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
X0VYVCkgewogICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBmcmFtZWJ1ZmZlciB3
YXMgaW5jb21wbGV0ZVxuIik7CkBAIC02OTMsNiArNzgzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpyZXNoYXBlKAogICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KICAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZC
Tyk7CiAjZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCiAKICNpZmRlZiBGTElQ
X0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKQEAgLTcwMyw3ICs3OTYsMTIgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpyZXNoYXBlKAogICAgIG1fc2NhbmxpbmUgPSBuZXcgdW5zaWdu
ZWQgY2hhclt3aWR0aCAqIDRdOwogI2VuZGlmICAvLyBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FM
TFkKIAotICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgR0xiaXRmaWVsZCBj
bGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgaWYgKG1f
YXR0cnMuZGVwdGgpCisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwor
ICAgIGdsQ2xlYXIoY2xlYXJNYXNrKTsKIAogI2lmIFBMQVRGT1JNKENHKQogICAgIC8vIE5lZWQg
dG8gcmVhbGxvY2F0ZSB0aGUgY2xpZW50LXNpZGUgYmFja2luZyBzdG9yZS4KQEAgLTc1OCw5ICs4
NTYsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaQogICAgIEhU
TUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwogICAgIHVuc2lnbmVkIGNoYXIq
IHBpeGVscyA9IDA7Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1f
ZmJvKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTzsK
KyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAg
ICAgICBnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhl
aWdodCwgMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdMX0NPTE9SX0JVRkZF
Ul9CSVQsIEdMX0xJTkVBUik7CiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAg
IG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9CisgICAgfQogI2lmIFBMQVRG
T1JNKFNLSUEpCiAgICAgY29uc3QgU2tCaXRtYXAqIGNhbnZhc0JpdG1hcCA9IGltYWdlQnVmZmVy
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKTsKICAgICBjb25zdCBTa0Jp
dG1hcCogcmVhZGJhY2tCaXRtYXAgPSAwOwpAQCAtODY1LDYgKzk3MywyMyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAjZW5kaWYgIC8vIFJFTkRFUl9UT19ERUJV
R0dJTkdfV0lORE9XCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVhZFBp
eGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGJ1
ZmZlcikKK3sKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7CisgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgZ2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCAr
IHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9S
X0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KKyNlbmRpZgorICAgIGdsUmVhZFBpeGVs
cyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZmZlcik7CisjaWZuZGVmIFJF
TkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1f
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyNlbmRpZgorfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0
dXJlKQogewogICAgIC8vIEZJWE1FOiBxdWVyeSBudW1iZXIgb2YgdGV4dHVyZXMgYXZhaWxhYmxl
LgpAQCAtODkyLDkgKzEwMTcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
aW5kRnJhbQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMdWludCBpZCA9IEVYVFJB
Q1QoZnJhbWVidWZmZXIpOwogICAgIGlmICghaWQpCi0gICAgICAgIGlkID0gbV9mYm87Ci0gICAg
Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBpZCk7Ci0gICAgbV9ib3VuZEZCTyA9IGlkOwor
ICAgICAgICBpZCA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zi
byk7CisgICAgaWYgKGlkICE9IG1fYm91bmRGQk8pIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZm
ZXJFWFQodGFyZ2V0LCBpZCk7CisgICAgICAgIG1fYm91bmRGQk8gPSBpZDsKKyAgICB9CiB9CiAK
IC8vIElmIHdlIGRpZG4ndCBoYXZlIHRvIGhhY2sgR0xfVEVYVFVSRV9XUkFQX1IgZm9yIGN1YmUg
bWFwcywKQEAgLTE4MDksNyArMTkzNiwxOCBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBo
aWNzQ29udGV4dDNECiAKICAgICAvLyBGSVhNRTogdGFrZSBpbnRvIGFjY291bnQgcGFjayBhbGln
bm1lbnQuCiAgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgZ2xSZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgYXJyYXktPmJhc2VBZGRy
ZXNzKCkpOworICAgIG1faW50ZXJuYWwtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBhcnJheS0+YmFzZUFkZHJlc3MoKSk7CisjaWYgT1MoREFSV0lOKQorICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzID0gbV9pbnRlcm5hbC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWF0dHJzLmFscGhhKSB7CisgICAgICAgIC8vIElm
IGFscGhhIGlzIG9mZiwgYnkgZGVmYXVsdCBnbFJlYWRQaXhlbHMgc2hvdWxkIHNldCB0aGUgYWxw
aGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdW50aWwg
OjpnbFJlYWRQaXhlbHMgZml4ZXMgaXRzIGJlaGF2aW9yLgorICAgICAgICBHTHVieXRlKiBkYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4oYXJyYXktPmJhc2VBZGRyZXNzKCkpOworICAg
ICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAg
IGRhdGFbaV0gPSAyNTU7CisgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIGFycmF5OwogfQogCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA1NTgwOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAzLTEwICBaaGVueWFvIE1vICA8em1vQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNyZWF0
aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMzNDE2CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMt
YWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4gCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0
ZW5jaWwtYW50aWFsaWFzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L2NvbnRleHQtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6IFdlYkdMIGNvbnRleHQgYXR0cmlidXRl
cyBiZWhhdmlvciBjaGFuZ2VkIHdpdGggdGhpcyBmaXguCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2Fu
dmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQ6IFN0ZW5jaWwgYnVmZmVyIGlzIGVu
YWJsZWQsIHRodXMgU3RlbmNpbCBCaXRzIGlzIG5vIGxvbmdlciAwLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy5odG1sOiBEaXR0by4KKwogMjAxMC0wMy0xMCAgQW50
b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFRoZSB0ZXN0IHdh
cyBpbnRyb2R1Y2VkIGluIHI1NTc5NiwgaXQgaGFzIGJlZW4gZmFpbGluZyBpbiBHdGsgYm90cyBz
aW5jZSB0aGVuLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1h
dHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0
ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFs
cGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4MiBAQAorICAgICAgIAorVmVyaWZ5IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXJl
IHdvcmtpbmcgYXMgc3BlY2lmaWVkLCBpbmNsdWRpbmcgYWxwaGEsIGRlcHRoLCBzdGVuY2lsLCBh
bnRpYWxpYXMsIGJ1dCBub3QgcHJlbXVsdGlwbGllZEFscGhhCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzM0MTYgOiBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8g
T3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQorVGVzdGluZyBhbHBoYSA9IHRydWUKK1BBU1Mg
d2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPbicsIHsgYWxwaGE6IHRydWUsIGRlcHRoOiBmYWxzZSwg
c3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAwIF0sIDEsIDAp
IGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRy
aWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUK
K1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMu
c3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UK
K1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4
ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGFscGhhID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBn
ZXRXZWJHTCgnYWxwaGFPZmYnLCB7IGFscGhhOiBmYWxzZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2ls
OiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkgaXMgbm9u
LW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMo
KSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgZmFsc2UKK1BBU1Mg
Y29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNp
bCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1Mg
Y29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMg
Y29ycmVjdENvbG9yCitUZXN0aW5nIGRlcHRoID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdM
KCdkZXB0aE9uJywgeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAs
IDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wu
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMu
ZGVwdGggaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNv
bnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFs
aWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0
cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBkZXB0aCA9IGZhbHNlCitQ
QVNTIHdlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6
IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24t
bnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygp
IGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBj
b250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwg
aXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNv
cnJlY3RDb2xvcgorVGVzdGluZyBzdGVuY2lsID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdM
KCdzdGVuY2lsT24nLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSwgYW50aWFsaWFzOiBm
YWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRB
dHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1Mg
Y29udGV4dEF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2ls
IGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0
QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlw
bGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHN0
ZW5jaWwgPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdzdGVuY2lsT2ZmJywgeyBkZXB0
aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwg
MSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRD
b250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0
aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFz
IGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVl
CitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBhbnRpYWxpYXMgPSB0cnVlCitQ
QVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09uJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5j
aWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1ZSB9LCBbIDAsIDAsIDAsIDEg
XSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGgg
aXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250
ZXh0QXR0cmlicy5hbHBoYSBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMg
aXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQor
UEFTUyBwaXhlbFswXSA9PSAyNTUgfHwgcGl4ZWxbMF0gPT0gMCBpcyBmYWxzZQorVGVzdGluZyBh
bnRpYWxpYXMgPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdhbnRpYWxpYXNPZmYnLCB7
IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBm
YWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRB
dHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1Mg
Y29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNp
bCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyBmYWxzZQorUEFTUyBjb250
ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVs
dGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWxbMF0gPT0gMjU1IHx8IHBpeGVsWzBdID09
IDAgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0
aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50
aWFsaWFzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzA3IEBACis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbHMzZC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUg
dmVjMyBwb3M7CithdHRyaWJ1dGUgdmVjNCBjb2xvckluOwordmFyeWluZyB2ZWM0IGNvbG9yOwor
Cit2b2lkIG1haW4oKQoreworICAgIGNvbG9yID0gY29sb3JJbjsKKyAgICBnbF9Qb3NpdGlvbiA9
IHZlYzQocG9zLnh5eiwgMS4wKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVy
IiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ZhcnlpbmcgdmVjNCBjb2xvcjsKKwordm9p
ZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKK30KKzwvc2NyaXB0PgorCis8
c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworCisvLyBUaGVzZSBmb3Vy
IGRlY2xhcmF0aW9ucyBuZWVkIHRvIGJlIGdsb2JhbCBmb3IgInNob3VsZEJlIiB0byBzZWUgdGhl
bQordmFyIHdlYkdMID0gbnVsbDsKK3ZhciBjb250ZXh0QXR0cmlicyA9IG51bGw7Cit2YXIgcGl4
ZWwgPSBbMCwgMCwgMCwgMV07Cit2YXIgY29ycmVjdENvbG9yID0gbnVsbDsKKworZnVuY3Rpb24g
aW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdMRW5h
YmxlZCIsICIxIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKwor
ICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgV2ViR0xDb250ZXh0QXR0cmlidXRlcyBhcmUgd29ya2lu
ZyBhcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBhbHBoYSwgZGVwdGgsIHN0ZW5jaWwsIGFudGlhbGlh
cywgYnV0IG5vdCBwcmVtdWx0aXBsaWVkQWxwaGEnKTsKKworICAgIGRlYnVnKCdSZWdyZXNzaW9u
IHRlc3QgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMzQxNiI+aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNDE2PC9h
PiA6IDxjb2RlPkhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4
dCBjcmVhdGlvbiBjb2RlPC9jb2RlPicpOworICAgIAorICAgIHJ1blRlc3QoKTsKK30KKworZnVu
Y3Rpb24gZ2V0V2ViR0woY2FudmFzTmFtZSwgY29udGV4dEF0dHJpYnMsIGNsZWFyQ29sb3IsIGNs
ZWFyRGVwdGgsIGNsZWFyU3RlbmNpbCkKK3sKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoY2FudmFzTmFtZSk7CisgICAgdmFyIGdsID0gY2FudmFzLmdldENvbnRleHQo
ImV4cGVyaW1lbnRhbC13ZWJnbCIsIGNvbnRleHRBdHRyaWJzKTsKKyAgICBpZiAoIWdsKSB7Cisg
ICAgICAgIGFsZXJ0KCJObyBXZWJHTCBjb250ZXh0IGZvdW5kIik7CisgICAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKyAgICB2YXIgYWN0dWFsQ29udGV4dEF0dHJpYnMgPSBnbC5nZXRDb250ZXh0
QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIEFkZCBhIGNvbnNvbGUKKyAgICBnbC5jb25zb2xl
ID0gKCJjb25zb2xlIiBpbiB3aW5kb3cpID8gd2luZG93LmNvbnNvbGUgOiB7IGxvZzogZnVuY3Rp
b24oKSB7IH0gfTsKKworICAgIC8vIGNyZWF0ZSBvdXIgc2hhZGVycworICAgIHZhciB2ZXJ0ZXhT
aGFkZXIgPSBsb2FkU2hhZGVyKGdsLCAidnNoYWRlciIpOworICAgIHZhciBmcmFnbWVudFNoYWRl
ciA9IGxvYWRTaGFkZXIoZ2wsICJmc2hhZGVyIik7CisKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8
fCAhZnJhZ21lbnRTaGFkZXIpCisgICAgICAgIHJldHVybiBudWxsOworCisgICAgLy8gQ3JlYXRl
IHRoZSBwcm9ncmFtIG9iamVjdAorICAgIGdsLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7
CisKKyAgICBpZiAoIWdsLnByb2dyYW0pCisgICAgICAgIHJldHVybiBudWxsOworCisgICAgLy8g
QXR0YWNoIG91ciB0d28gc2hhZGVycyB0byB0aGUgcHJvZ3JhbQorICAgIGdsLmF0dGFjaFNoYWRl
cihnbC5wcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihnbC5wcm9n
cmFtLCBmcmFnbWVudFNoYWRlcik7CisKKyAgICAvLyBCaW5kIGF0dHJpYnV0ZXMKKyAgICB2YXIg
YXR0cmlicyA9IFsgInBvcyIsICJjb2xvckluIiBdOworICAgIGZvciAodmFyIGkgaW4gYXR0cmli
cykKKyAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKGdsLnByb2dyYW0sIGksIGF0dHJpYnNb
aV0pOworCisgICAgLy8gTGluayB0aGUgcHJvZ3JhbQorICAgIGdsLmxpbmtQcm9ncmFtKGdsLnBy
b2dyYW0pOworCisgICAgLy8gQ2hlY2sgdGhlIGxpbmsgc3RhdHVzCisgICAgdmFyIGxpbmtlZCA9
IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoZ2wucHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpOworICAg
IGlmICghbGlua2VkKSB7CisgICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhl
IGxpbmsKKyAgICAgICAgdmFyIGVycm9yID0gZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cgKGdsLnByb2dy
YW0pOworICAgICAgICBnbC5jb25zb2xlLmxvZygiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIr
ZXJyb3IpOworCisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0oZ2wucHJvZ3JhbSk7CisgICAgICAg
IGdsLmRlbGV0ZVByb2dyYW0oZnJhZ21lbnRTaGFkZXIpOworICAgICAgICBnbC5kZWxldGVQcm9n
cmFtKHZlcnRleFNoYWRlcik7CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAg
Z2wudXNlUHJvZ3JhbShnbC5wcm9ncmFtKTsKKworICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xv
clswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CisgICAg
Z2wuY2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICBnbC5jbGVhclN0ZW5jaWwoY2xlYXJTdGVu
Y2lsKTsKKyAgICBnbC5lbmFibGUoZ2wuREVQVEhfVEVTVCk7CisgICAgZ2wuZW5hYmxlKGdsLlNU
RU5DSUxfVEVTVCk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRI
X0JVRkZFUl9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOworCisgICAgcmV0dXJuIGdsOwor
fQorCitmdW5jdGlvbiBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCB4LCB5
KQoreworICAgIHZhciBjb2xvck9mZnNldCA9IHZlcnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2
YXIgdmJvID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIHZibyk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zm
c2V0ICsgY29sb3JzLmJ5dGVMZW5ndGgsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5idWZmZXJT
dWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOworICAgIGdsLmJ1ZmZlclN1YkRh
dGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCwgY29sb3JzKTsKKworICAgIGdsLnZlcnRl
eEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDQs
IGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAsIGNvbG9yT2Zmc2V0KTsKKyAgICBnbC5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAw
LCB2ZXJ0aWNlcy5sZW5ndGggLyAzKTsKKworICAgIHJldHVybiBnbC5yZWFkUGl4ZWxzKHgsIHks
IDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUpOworfQorCitmdW5jdGlvbiB0ZXN0QWxw
aGEoYWxwaGEpCit7CisgICAgZGVidWcoIlRlc3RpbmcgYWxwaGEgPSAiICsgYWxwaGEpOworICAg
IGlmIChhbHBoYSkKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdh
bHBoYU9uJywgeyBhbHBoYTogdHJ1ZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50
aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAg
ICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPZmYnLCB7IGFscGhh
OiBmYWxzZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9
LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRB
dHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJj
b250ZXh0QXR0cmlicy5hbHBoYSIsIChhbHBoYSA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBz
aG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgi
Y29udGV4dEF0dHJpYnMuc3RlbmNpbCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0
QXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJp
YnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKworICAgIHZhciBidWYgPSB3ZWJHTC5y
ZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIHdlYkdMLlJHQkEsIHdlYkdMLlVOU0lHTkVEX0JZVEUpOwor
ICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAgIHBpeGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVs
WzJdID0gYnVmWzJdOworICAgIHBpeGVsWzNdID0gYnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9
IChhbHBoYSA/IFswLCAwLCAwLCAwXSA6IFswLCAwLCAwLCAyNTVdKTsKKyAgICBzaG91bGRCZSgi
cGl4ZWwiLCAiY29ycmVjdENvbG9yIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REZXB0aChkZXB0aCkK
K3sKKyAgICBkZWJ1ZygiVGVzdGluZyBkZXB0aCA9ICIgKyBkZXB0aCk7CisgICAgaWYgKGRlcHRo
KQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT24nLCB7
IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAw
KSIpOworICAgIGVsc2UKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdM
KCdkZXB0aE9mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBm
YWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNv
bnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3Vs
ZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0aCIsIChkZXB0aCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsK
KyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOworICAgIHNob3Vs
ZEJlKCJjb250ZXh0QXR0cmlicy5zdGVuY2lsIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNv
bnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0
QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCisgICAgd2ViR0wuZGVwdGhG
dW5jKHdlYkdMLk5FVkVSKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJy
YXkoWworICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsICAxLjAsIDAuMCwK
KyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAg
ICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFy
IGNvbG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwK
KyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAg
ICAyNTUsIDAsIDAsIDI1NV0pOworCisgICAgdmFyIGJ1ZiA9IGRyYXdBbmRSZWFkUGl4ZWwod2Vi
R0wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOworICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAg
IHBpeGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVsWzJdID0gYnVmWzJdOworICAgIHBpeGVsWzNd
ID0gYnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9IChkZXB0aCA/IFswLCAwLCAwLCAyNTVdIDog
WzI1NSwgMCwgMCwgMjU1XSk7CisgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIp
OworfQorCitmdW5jdGlvbiB0ZXN0U3RlbmNpbChzdGVuY2lsKQoreworICAgIGRlYnVnKCJUZXN0
aW5nIHN0ZW5jaWwgPSAiICsgc3RlbmNpbCk7CisgICAgaWYgKHN0ZW5jaWwpCisgICAgICAgIHNo
b3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9uJywgeyBkZXB0aDogZmFs
c2UsIHN0ZW5jaWw6IHRydWUsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEs
IDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2Vi
R0woJ3N0ZW5jaWxPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlh
czogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxs
KCJjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBz
aG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAoc3RlbmNpbCA/ICJ0cnVlIiA6ICJmYWxz
ZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIsIChzdGVuY2lsID8g
InRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIs
ICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxz
ZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAi
dHJ1ZSIpOworCisgICAgd2ViR0wuZGVwdGhGdW5jKHdlYkdMLkFMV0FZUyk7CisKKyAgICB3ZWJH
TC5zdGVuY2lsRnVuYyh3ZWJHTC5ORVZFUiwgMSwgMSk7CisgICAgd2ViR0wuc3RlbmNpbE9wKHdl
YkdMLktFRVAsIHdlYkdMLktFRVAsIHdlYkdMLktFRVApOworCisgICAgdmFyIHZlcnRpY2VzID0g
bmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsIDEuMCwgMC4wLAorICAgICAgICAt
MS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAx
LjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAtMS4wLCAw
LjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoWworICAg
ICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1
NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisKKyAgICB2YXIgYnVmID0gZHJhd0Fu
ZFJlYWRQaXhlbCh3ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0g
PSBidWZbMF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07CisgICAgcGl4ZWxbMl0gPSBidWZbMl07
CisgICAgcGl4ZWxbM10gPSBidWZbM107CisgICAgY29ycmVjdENvbG9yID0gKHN0ZW5jaWwgPyBb
MCwgMCwgMCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOworICAgIHNob3VsZEJlKCJwaXhlbCIs
ICJjb3JyZWN0Q29sb3IiKTsKK30KKworZnVuY3Rpb24gdGVzdEFudGlhbGlhcyhhbnRpYWxpYXMp
Cit7CisgICAgZGVidWcoIlRlc3RpbmcgYW50aWFsaWFzID0gIiArIGFudGlhbGlhcyk7CisgICAg
aWYgKGFudGlhbGlhcykKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdM
KCdhbnRpYWxpYXNPbicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZh
bHNlLCBhbnRpYWxpYXM6IHRydWUgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgZWxz
ZQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09m
ZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxp
YXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVs
bCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisgICAg
c2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmRlcHRoIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUo
ImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4
dEF0dHJpYnMuYWxwaGEiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMu
YW50aWFsaWFzIiwgKGFudGlhbGlhcyA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRC
ZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKworICAgIHZh
ciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAgMS4wLCAxLjAsIDAu
MCwKKyAgICAgICAgLTEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMF0pOwor
ICAgIHZhciBjb2xvcnMgPSBuZXcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShbCisgICAgICAgIDI1
NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTVdKTsKKyAgICB2YXIgYnVmID0gZHJhd0FuZFJlYWRQaXhlbCh3ZWJHTCwgdmVydGljZXMs
IGNvbG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07CisgICAgc2hvdWxkQmUoInBp
eGVsWzBdID09IDI1NSB8fCBwaXhlbFswXSA9PSAwIiwgKGFudGlhbGlhcyA/ICJmYWxzZSIgOiAi
dHJ1ZSIpKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisKKyAgICB0ZXN0QWxwaGEodHJ1
ZSk7CisgICAgdGVzdEFscGhhKGZhbHNlKTsKKyAgICB0ZXN0RGVwdGgodHJ1ZSk7CisgICAgdGVz
dERlcHRoKGZhbHNlKTsKKyAgICB0ZXN0U3RlbmNpbCh0cnVlKTsKKyAgICB0ZXN0U3RlbmNpbChm
YWxzZSk7CisgICAgdGVzdEFudGlhbGlhcyh0cnVlKTsKKyAgICB0ZXN0QW50aWFsaWFzKGZhbHNl
KTsKKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0g
ZmluaXNoOworICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIjsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKwor
ZnVuY3Rpb24gZmluaXNoKCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0KCkiPgorPGNhbnZhcyBpZD0i
YWxwaGFPbiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0i
YWxwaGFPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9
ImRlcHRoT24iIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9
ImRlcHRoT2ZmIiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlk
PSJzdGVuY2lsT24iIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMg
aWQ9InN0ZW5jaWxPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52
YXMgaWQ9ImFudGlhbGlhc09uIiB3aWR0aD0iMnB4IiBoZWlnaHQ9IjJweCI+PC9jYW52YXM+Cis8
Y2FudmFzIGlkPSJhbnRpYWxpYXNPZmYiIHdpZHRoPSIycHgiIGhlaWdodD0iMnB4Ij48L2NhbnZh
cz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Y29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA1NTc5OSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0
cmlidXRlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw4IEBAIFBBU1Mg
Y29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCgpIGlzIG5vbi0KIFBBU1MgYXR0cmlicyA9IGNvbnRl
eHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KIFBBU1MgYXR0cmlicy5kZXB0
aCBpcyB0cnVlCiBQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQotUEFTUyAoYXR0cmlicy5zdGVu
Y2lsID09IHRydWUgfHwgYXR0cmlicy5zdGVuY2lsID09IGZhbHNlKSBpcyB0cnVlCi1QQVNTIChh
dHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGF0dHJpYnMuYW50aWFsaWFzID09IGZhbHNlKSBp
cyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFs
aWFzIGlzIHRydWUKIFBBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQogVGVz
dCBjdXN0b21pemVkIHZhbHVlcwogUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgc3Rl
bmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSkgaXMgbm9uLW51bGwuCkBAIC0xOCw2ICsx
OCwyMiBAQCBQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQogUEFTUyBhdHRyaWJzLnN0ZW5jaWwg
aXMgZmFsc2UKIFBBU1MgYXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKIFBBU1MgYXR0cmlicy5w
cmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorVGVzdCBjdXN0b21pemVkIHZhbHVlcworUEFTUyBj
b250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlIH0p
IGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRl
cygpIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzLmRlcHRoIGlzIHRydWUKK1BBU1MgYXR0cmli
cy5hbHBoYSBpcyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQQVNTIGF0dHJp
YnMuYW50aWFsaWFzIGlzIHRydWUKK1BBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMg
dHJ1ZQorVGVzdCBjdXN0b21pemVkIHZhbHVlcworUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250
ZXh0KHsgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZSB9KSBpcyBub24tbnVsbC4KK1BBU1MgYXR0
cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1Mg
YXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBh
dHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFudGlhbGlhcyBpcyB0cnVlCitQ
QVNTIGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWwJKHJldmlzaW9u
IDU1Nzk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1
dGVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDkgKzE4LDggQEAgc2hvdWxkQmVOb25OdWxs
KCJjb250ZXh0ID0gY3JlYXRlM0RDb250ZQogc2hvdWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29u
dGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CiBzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIs
ICJ0cnVlIik7CiBzaG91bGRCZSgiYXR0cmlicy5hbHBoYSIsICJ0cnVlIik7Ci0vLyBUaGUgZm9s
bG93aW5nIHR3byBkZXBlbmQgb24gd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkg
c3VwcG9ydHMgdGhlbQotc2hvdWxkQmUoIihhdHRyaWJzLnN0ZW5jaWwgPT0gdHJ1ZSB8fCBhdHRy
aWJzLnN0ZW5jaWwgPT0gZmFsc2UpIiwgInRydWUiKTsKLXNob3VsZEJlKCIoYXR0cmlicy5hbnRp
YWxpYXMgPT0gdHJ1ZSB8fCBhdHRyaWJzLmFudGlhbGlhcyA9PSBmYWxzZSkiLCAidHJ1ZSIpOwor
c2hvdWxkQmUoImF0dHJpYnMuc3RlbmNpbCIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5h
bnRpYWxpYXMiLCAidHJ1ZSIpOwogc2hvdWxkQmUoImF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhh
IiwgInRydWUiKTsKIAogZGVidWcgKCJUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzIik7CkBAIC0zMiw2
ICszMSwyNiBAQCBzaG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwgImZhbHNlIik7CiBzaG91bGRC
ZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCJhdHRyaWJzLnByZW11
bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CiAKK2RlYnVnKCJUZXN0IGN1c3RvbWl6ZWQgdmFsdWVz
Iik7CisvLyAoc3RlbmNpbCA9PSB0cnVlICYmIGRlcHRoID09IGZhbHNlKSBpcyBub3Qgc3VwcG9y
dGVkLCBkZWZhdWx0IGRlcHRoIHRvIHRydWUKK3Nob3VsZEJlTm9uTnVsbCgiY29udGV4dCA9IGNy
ZWF0ZTNEQ29udGV4dCh7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSB9KSIpOworc2hvdWxk
QmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7Citz
aG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5hbHBo
YSIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwgInRydWUiKTsKK3Nob3Vs
ZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5wcmVt
dWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCitkZWJ1ZygiVGVzdCBjdXN0b21pemVkIHZhbHVl
cyIpOworLy8gKHByZW11bHRpcGxpZWRBbHBoYSA9PSBmYWxzZSkgaXMgbm90IHN1cHBvcnRlZCwg
ZGVmYXVsdCB0byB0cnVlCitzaG91bGRCZU5vbk51bGwoImNvbnRleHQgPSBjcmVhdGUzRENvbnRl
eHQoeyBwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNlIH0pIik7CitzaG91bGRCZU5vbk51bGwoImF0
dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKK3Nob3VsZEJlKCJhdHRy
aWJzLmRlcHRoIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsK
K3Nob3VsZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMu
YW50aWFsaWFzIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBo
YSIsICJ0cnVlIik7CisKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KIApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQt
Y2FsbHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NTc5OSkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDcgKzUzLDcgQEAgUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSQog
UEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19QQVNTX0RFUFRI
X0ZBSUwpIGlzIGNvbnRleHQuS0VFUAogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0
LlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MpIGlzIGNvbnRleHQuS0VFUAogUEFTUyBjb250
ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19SRUYpIGlzIDAKLVBBU1MgY29u
dGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JJVFMpIGlzIDAKK1BBU1MgY29udGV4
dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JJVFMpID4gMCBpcyB0cnVlCiBQQVNTIGNv
bnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9DTEVBUl9WQUxVRSkgaXMgMAogUEFT
UyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRkFJTCkgaXMgY29udGV4dC5L
RUVQCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9GVU5DKSBpcyBj
b250ZXh0LkFMV0FZUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0
LWNhbGxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtZ2V0LWNhbGxzLmh0bWwJKHJldmlzaW9uIDU1Nzk5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDcgQEAgZWxzZSB7CiAgICAgLy8gRklYTUU6IEN1cnJlbnQgV2ViS2l0IGltcGxlbWVudGF0aW9u
IHJldHVybnMgdGhlIHdyb25nIHZhbHVlIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzE4NDIpCiAgICAgLy9zaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29u
dGV4dC5TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyknLCAnMHhGRkZGRkZGRicpOwogICAgIC8vc2hv
dWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SyknLCAnMHhGRkZGRkZGRicpOwotICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihj
b250ZXh0LlNURU5DSUxfQklUUyknLCAnMCcpOworICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBh
cmFtZXRlcihjb250ZXh0LlNURU5DSUxfQklUUykgPiAwJywgJ3RydWUnKTsKICAgICBzaG91bGRC
ZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0NMRUFSX1ZBTFVFKScsICcw
Jyk7CiAgICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9G
QUlMKScsICdjb250ZXh0LktFRVAnKTsKICAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0
ZXIoY29udGV4dC5TVEVOQ0lMX0ZVTkMpJywgJ2NvbnRleHQuQUxXQVlTJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51472</attachid>
            <date>2010-03-23 19:20:32 -0700</date>
            <delta_ts>2010-03-30 18:12:19 -0700</delta_ts>
            <desc>patch after Ken Russell&apos;s refac</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>59032</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDMtMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAoV2ViQ29yZTo6VjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dENhbGxiYWNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBBZGQgbWVt
YmVycy9mdW5jdGlvbnMgZm9yIG11bHRpc2FtcGxpbmcvc3RlbmNpbCBidWZmZXIgcHVycG9zZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oOiBBZGQgR3Jh
cGhpY3NDb250ZXh0M0QgYXMgYSBtZW1iZXIgb2YgQ2FudmFzM0RMYXllci4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbTogQWRkIG11bHRpc2FtcGxpbmcg
c3VwcG9ydC4KKyAgICAgICAgKC1bQ2FudmFzM0RMYXllciBkcmF3SW5DR0xDb250ZXh0OnBpeGVs
Rm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOiBIb29rIHVwIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgTWFjLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENh
bnZhczNETGF5ZXIgaW5pdCBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QpOgorCiAyMDEwLTAzLTIzICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgdHlwb3MuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTYzOTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAgICAg
aWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0gIndl
YmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpjcmVh
dGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0YXRp
Y19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgpOwog
ICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6Ok5l
dygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNp
b24gNTYzOTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0
dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIC8v
IFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3Vs
YXIgRkJPLgorICAgICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAgICAg
ICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5
cGVzCiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBpbnQg
c2l6ZUluQnl0ZXMoaW50IHR5cGUpOwpAQCAtNzA4LDYgKzcxMywxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFscGhhT3As
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KTsKIAorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyBy
ZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAorICAgICAgICAvLyBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBv
cgorICAgICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0
aWVzIG9mIHRoZSBPcGVuR0wKKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgICAgIHZv
aWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisjZW5kaWYKKwogICAgICAgICBpbnQgbV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodDsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
NzE3LDcgKzczMCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENHTENvbnRleHRP
YmogbV9jb250ZXh0T2JqOwogICAgICAgICBHTHVpbnQgbV90ZXh0dXJlOwogICAgICAgICBHTHVp
bnQgbV9mYm87Ci0gICAgICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOworICAgICAgICBHTHVpbnQg
bV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAgICAgICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZC
TyBpcyBib3VuZAorICAgICAgICBHTHVpbnQgbV9ib3VuZEZCTzsKKworICAgICAgICAvLyBGb3Ig
bXVsdGlzYW1wbGluZworICAgICAgICBHTHVpbnQgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAg
R0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAgIEdMdWludCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisKICAgICAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBz
eW50aGVzaXplR0xFcnJvcigpLgogICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBt
X3N5bnRoZXRpY0Vycm9yczsKICNlbmRpZiAgICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCShyZXZpc2lvbiA1NjM5OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTYgKzMyLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBH
cmFwaGljc0xheWVyOworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogfQogCiBAaW50ZXJm
YWNlIENhbnZhczNETGF5ZXIgOiBDQU9wZW5HTExheWVyIAogewogICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIEdMdWludCBt
X3RleHR1cmU7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooQ0dMQ29udGV4dE9iailjb250
ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJlOworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKIAogLSAoQ0dJbWFnZVJlZiljb3B5SW1h
Z2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZTsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1t
CShyZXZpc2lvbiA1NjM5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZh
czNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVudGF0aW9uIENhbnZhczNETGF5ZXIKIAotLShpZClp
bml0V2l0aENvbnRleHQ6KENHTENvbnRleHRPYmopY29udGV4dCB0ZXh0dXJlOihHTHVpbnQpdGV4
dHVyZQorLShpZClpbml0V2l0aENvbnRleHQ6KEdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0CiB7
Ci0gICAgbV9jb250ZXh0T2JqID0gY29udGV4dDsKLSAgICBtX3RleHR1cmUgPSB0ZXh0dXJlOwor
ICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jb250ZXh0T2JqID0gc3RhdGljX2Nhc3Q8
Q0dMQ29udGV4dE9iaj4oY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAg
ICBtX3RleHR1cmUgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KGNvbnRleHQtPnBsYXRmb3JtVGV4dHVy
ZSgpKTsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIHJldHVybiBzZWxmOwogfQpAQCAt
NzAsOCArNzEsOCBAQCAtKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvCiAK
IC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWdsQ29udGV4dCBwaXhlbEZv
cm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1lOihDRlRpbWVJ
bnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6KGNvbnN0IENWVGltZVN0YW1wICopdGlt
ZVN0YW1wCiB7Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBn
bEZpbmlzaCgpOworICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKwogICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KGdsQ29udGV4dCk7CiAKICAgICBDR1JlY3QgZnJhbWUgPSBbc2VsZiBm
cmFtZV07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1NjM5OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsMTggKzg2LDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmEKICAgICAsIG1fY29udGV4dE9iaigwKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBt
X2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAg
ICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQogewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBh
Y2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRy
aWJ1dGVzLCBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQg
ZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIGFuZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJh
c2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAg
ICBtX2F0dHJzLmFscGhhID0gdHJ1ZTsKLSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBt
X2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKLSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
ICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKLQogICAgIFZlY3RvcjxDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhl
bEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKQEAgLTE0NSw2
ICsxMzksOCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAg
Ly8gU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIG9uZSBnaXZlbiB0byB1cy4KICAgICBD
R0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwogICAgIAorICAgIHZhbGlkYXRlQXR0
cmlidXRlcygpOworCiAgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bwogICAg
IDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKQEAgLTE1MiwyMCArMTQ4LDI1IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CiAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsK
ICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVApOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4
LCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgCiAgICAgLy8gY3JlYXRlIGFuIEZCTwogICAg
IDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwogICAgIAotICAgIDo6Z2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQs
IDEsIDEpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IDApOwotICAgIAotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
LCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0
aEJ1ZmZlcik7CisgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAgIGlmICghbV9hdHRycy5hbnRp
YWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKKyAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAgIC8v
IGNyZWF0ZSBhbiBtdWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
KyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAg
ICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAg
ICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQogICAgIAogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwog
fQpAQCAtMTc0LDE0ICsxNzUsNDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiB7CiAgICAgaWYgKG1fY29udGV4dE9iaikgewogICAgICAgICBDR0xTZXRDdXJyZW50
Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmIG1fZGVwdGhCdWZmZXIpOwogICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7CisgICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICAgICAg
OjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAg
ICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgfQogICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiAgICAg
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95Q29udGV4dCht
X2NvbnRleHRPYmopOwogICAgIH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBjb25zdCBjaGFyKiBleHRlbnNpb25zID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSk7CisgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoc3RkOjpzdHJzdHIoZXh0ZW5zaW9u
cywgIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7CisgICAgICAgICAgICBpZiAoIW1f
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3Ig
PSB0cnVlOworICAgICAgICAvLyBDdXJyZW50a3kgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRp
YWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsK
KyAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAg
IGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFz
dGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikp
CisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0KKyAgICAvLyBG
SVhNRTogaW5zdGVhZCBvZiBlbmZvcmNpbmcgcHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZSwgaW1w
bGVtZW50IHRoZQorICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBwcmVtdWx0aXBsaWVkQWxw
aGEgPSBmYWxzZSBpcyByZXF1ZXN0ZWQuCisgICAgbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEg
PSB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQo
KQogewogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CkBAIC0yMDYsMjQg
KzIzOSw4NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAg
CiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAKKyAgICBHTHVp
bnQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAgICAg
ICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwg
fHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMg
d2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBT
ZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCisgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgJiYgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOworICAg
IH0KKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKworICAgIC8vIHJlc2l6ZSBt
dWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xp
bnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExF
U19FWFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3Rk
OjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhT
YW1wbGVDb3VudCkKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7Cisg
ICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAo
bV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0
ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlm
IChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgfQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCAwKTsKKyAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJV
RkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0K
ICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOwotICAgIAotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsK
LSAgICAKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
MCk7CiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwot
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVy
KTsKLSAgICBHTGVudW0gc3RhdHVzID0gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xf
RlJBTUVCVUZGRVJfRVhUKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFX0VYVCkgeworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBp
ZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkpIHsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNI
TUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Cisg
ICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJf
RVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKICAgICAgICAgLy8gRklYTUU6
IGNsZWFudXAKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKLSAgICA6OmdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7
CisKKyAgICBHTGVudW0gY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAo
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7
CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5D
SUxfQlVGRkVSX0JJVDsKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKICAgICA6OmdsRmx1c2go
KTsKIH0KIApAQCAtMjM3LDYgKzMzMiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW5zdXJlQ29u
dGV4dChDR0xDb250CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJB
V19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVY
VCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3Vu
ZEZCTyk7CisgICAgICAgIDo6Z2xGaW5pc2goKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKQEAgLTI2OCw3ICszNzUsMTUgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBi
dWZmZXIpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQodGFyZ2V0LCAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdM
dWludCkgYnVmZmVyLT5vYmplY3QoKSA6IG1fZmJvKTsKKyAgICBHTHVpbnQgZmJvOworICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5vYmplY3QoKSkKKyAgICAgICAgZmJvID0gKEdMdWludClidWZm
ZXItPm9iamVjdCgpOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFsaWFz
ID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8p
IHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAg
IG1fYm91bmRGQk8gPSBmYm87CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciog
cmVuZGVyYnVmZmVyKQpAQCAtNjc2LDggKzc5MSwyNCBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+
IEdyYXBoaWNzQ29udGV4dDNECiAgICAgaWYgKHR5cGUgIT0gR0xfVU5TSUdORURfQllURSB8fCBm
b3JtYXQgIT0gR0xfUkdCQSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAorICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9t
dWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4
LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CiAgICAgUmVmUHRyPFdl
YkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3Jl
YXRlKHdpZHRoICogaGVpZ2h0ICogNCk7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVGQk8pOworICAgIGlmICghbV9hdHRycy5hbHBoYSkgeworICAgICAgICAvLyBJZiBhbHBo
YSBpcyBvZmYsIGJ5IGRlZmF1bHQgZ2xSZWFkUGl4ZWxzIHNob3VsZCBzZXQgdGhlIGFscGhhIHRv
IDI1NSBpbnN0ZWFkIG9mIDAuCisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHVudGlsIDo6Z2xS
ZWFkUGl4ZWxzIGZpeGVzIGl0cyBiZWhhdmlvci4KKyAgICAgICAgR0x1Ynl0ZSogZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KGFycmF5LT5kYXRhKCkpOworICAgICAgICB1bnNpZ25l
ZCBieXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAy
NTU7CisgICAgfQogICAgIHJldHVybiBhcnJheTsgICAgCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHJldmlzaW9uIDU2
Mzk4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzE2LDcgKzE3MTYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6c2V0Q29udGVudHNUb0dyYXBoCiAKICAgICBpZiAobV9wbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEICE9IE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEICYmIG1fcGxhdGZvcm1UZXh0dXJl
ICE9IE51bGxQbGF0Zm9ybTNET2JqZWN0KSB7CiAgICAgICAgIC8vIGNyZWF0ZSB0aGUgaW5uZXIg
M2QgbGF5ZXIKLSAgICAgICAgbV9jb250ZW50c0xheWVyLmFkb3B0TlMoW1tDYW52YXMzRExheWVy
IGFsbG9jXSBpbml0V2l0aENvbnRleHQ6c3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKSB0ZXh0dXJlOnN0YXRpY19jYXN0PEdMdWludD4obV9wbGF0
Zm9ybVRleHR1cmUpXSk7CisgICAgICAgIG1fY29udGVudHNMYXllci5hZG9wdE5TKFtbQ2FudmFz
M0RMYXllciBhbGxvY10gaW5pdFdpdGhDb250ZXh0OmNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0
M0QqPihncmFwaGljc0NvbnRleHQzRCldKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFttX2Nv
bnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIjNEIExheWVyIl07CiAjZW5kaWYKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gNTY0MzEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDMtMjMgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQg
Y3JlYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzM0MTYKKworICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oOiBS
ZW1vdmUgdmlydHVhbCBkZXN0cnVjdG9yIGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHNyYy9H
cmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpyZWFkUGl4ZWxzKTogRGVhbCB3aXRoIHdyb25nIHJldHVybmVkIGFscGhhIHZh
bHVlcyBpbiBNYWMuCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcDogQWRk
IHZpcnR1YWwgZGVzdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6On5XZWJHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOiBIb29rIHVwIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgQ2hyb21lLgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
dmFsaWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OnJlYWRCYWNrRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWFkUGl4ZWxz
KToKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oOiBBZGQg
YSBmdW5jdGlvbi4KKwogMjAxMC0wMy0yMyAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA1NjM5OCkKKysr
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFRoaXMgZGVz
dHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB1c2luZyBjbGFzc2VzIGNhbiBkZXN0
cm95IGluc3RhbmNlcyBpZiBpbml0aWFsaXphdGlvbiBmYWlscy4KLSAgICB2aXJ0dWFsIH5XZWJH
cmFwaGljc0NvbnRleHQzRCgpIHt9CisgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NDb250ZXh0M0Qo
KTsKIAogICAgIC8vIENyZWF0ZXMgYSAiZGVmYXVsdCIgaW1wbGVtZW50YXRpb24gb2YgV2ViR3Jh
cGhpY3NDb250ZXh0M0Qgd2hpY2ggY2FsbHMKICAgICAvLyBPcGVuR0wgZGlyZWN0bHkuCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNTYz
OTgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODEyLDYgKzgxMiwxNyBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IEdyYXBo
aWNzQ29udGV4dDNECiAgICAgLy8gRklYTUU6IHRha2UgaW50byBhY2NvdW50IHBhY2sgYWxpZ25t
ZW50LgogICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhcnJheSA9IFdlYkdMVW5z
aWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQpOwogICAgIG1faW1wbC0+
cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5LT5iYXNl
QWRkcmVzcygpKTsKKyNpZiBQTEFURk9STShDRykKKyAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXMgPSBtX2ltcGwtPmdldENvbnRleHRBdHRy
aWJ1dGVzKCk7CisgICAgaWYgKCF3ZWJBdHRyaWJ1dGVzLmFscGhhKSB7CisgICAgICAgIC8vIElm
IGFscGhhIGlzIG9mZiwgYnkgZGVmYXVsdCBnbFJlYWRQaXhlbHMgc2hvdWxkIHNldCB0aGUgYWxw
aGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdW50aWwg
Z2xSZWFkUGl4ZWxzIGZpeGVzIGl0cyBiZWhhdmlvci4KKyAgICAgICAgR0x1Ynl0ZSogZGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KGFycmF5LT5iYXNlQWRkcmVzcygpKTsKKyAgICAg
ICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDM7IGkgPCBieXRlTGVuZ3RoOyBpICs9IDQpCisgICAgICAgICAgICBk
YXRhW2ldID0gMjU1OworICAgIH0KKyNlbmRpZgogICAgIHJldHVybiBhcnJheTsKIH0KIApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlz
aW9uIDU2Mzk4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCitXZWJHcmFwaGljc0NvbnRleHQzRDo6fldlYkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKK30K
KwogV2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEZWZh
dWx0KCkKIHsKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZp
c2lvbiA1NjM5OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsMTAgQEAgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcAogICAgIDogbV9pbml0aWFsaXplZChm
YWxzZSkKICAgICAsIG1fdGV4dHVyZSgwKQogICAgICwgbV9mYm8oMCkKLSAgICAsIG1fZGVwdGhC
dWZmZXIoMCkKKyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2Ft
cGxlRkJPKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAg
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKICAgICAsIG1fYm91bmRGQk8oMCkKICNpZmRl
ZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKICAgICAsIG1fc2NhbmxpbmUoMCkKQEAgLTE1
MCw3ICsxNTMsMTUgQEAgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYQog
ICAgIGlmIChtX2luaXRpYWxpemVkKSB7CiAgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwog
I2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwotICAgICAgICBnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhCdWZmZXIpOworICAgICAgICBpZiAobV9hdHRyaWJ1dGVz
LmFudGlhbGlhcykgeworICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5k
ZXB0aCB8fCBtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbERlbGV0ZVJl
bmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAg
ICAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXB0aCB8fCBt
X2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQogICAgICAgICBnbERl
bGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVS
VElDQUxMWQogICAgICAgICBpZiAobV9zY2FubGluZSkKQEAgLTE4MiwxNiArMTkzLDYgQEAgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYQogCiBib29sIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmluaXRpYWxpemUoV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cmlidXRlcykKIHsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0YWtlIGlu
dG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZAotICAgIC8vIGNvbnRleHQgY3JlYXRpb24g
YXR0cmlidXRlcywgaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZAotICAgIC8vIGFudGlhbGlhcywg
YW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBhbmQgY291bGQgbm90IGJlIGhvbm9yZWQKLSAgICAv
LyBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24u
Ci0gICAgbV9hdHRyaWJ1dGVzLmFscGhhID0gdHJ1ZTsKLSAgICBtX2F0dHJpYnV0ZXMuZGVwdGgg
PSB0cnVlOwotICAgIG1fYXR0cmlidXRlcy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgbV9hdHRyaWJ1
dGVzLmFudGlhbGlhcyA9IGZhbHNlOwotICAgIG1fYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxw
aGEgPSB0cnVlOwotCiAjaWYgT1MoV0lORE9XUykKICAgICBXTkRDTEFTUyB3YzsKICAgICBpZiAo
IUdldENsYXNzSW5mbyhHZXRNb2R1bGVIYW5kbGUoMCksIEwiQ0FOVkFTR0wiLCAmd2MpKSB7CkBA
IC0zNzQsMTAgKzM3NSw0MCBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmluCiAgICAgICAgIHNfaW5pdGlhbGl6ZWRHTEVXID0gdHJ1ZTsKICAgICB9CiAKKyAgICBtX2F0
dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCiAgICAg
bV9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBj
b25zdCBjaGFyKiBleHRlbnNpb25zID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xH
ZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpOworCisgICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2ls
KSB7CisgICAgICAgIGlmIChzdGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsIikpIHsKKyAgICAgICAgICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQor
ICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlcy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAg
aWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9y
ID0gdHJ1ZTsKKyNpZiBQTEFURk9STShDRykKKyAgICAgICAgLy8gQ3VycmVudGt5IGluIE1hYyB3
ZSBvbmx5IHR1cm4gb24gYW50aWFsaWFzIGlmIHZlbmRvciBpcyBOVklESUEuCisgICAgICAgIGNv
bnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsR2V0U3Ry
aW5nKEdMX1ZFTkRPUikpOworICAgICAgICBpZiAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJ
QSIpKQorICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOworI2VuZGlmCisgICAgICAg
IGlmICghaXNWYWxpZFZlbmRvciB8fCAhc3RkOjpzdHJzdHIoZXh0ZW5zaW9ucywgIkdMX0VYVF9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpKQorICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLmFudGlh
bGlhcyA9IGZhbHNlOworICAgIH0KKyAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBlbmZvcmNpbmcg
cHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZSwgaW1wbGVtZW50IHRoZQorICAgIC8vIGNvcnJlY3Qg
YmVoYXZpb3Igd2hlbiBwcmVtdWx0aXBsaWVkQWxwaGEgPSBmYWxzZSBpcyByZXF1ZXN0ZWQuCisg
ICAgbV9hdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYSA9IHRydWU7Cit9CisKIGJvb2wgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bWFrZUNvbnRleHRDdXJyZW50KCkKIHsKICNp
ZiBPUyhXSU5ET1dTKQpAQCAtNDYzLDIzICs0OTQsODggQEAgdm9pZCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpyZQogICAgICAgICBtX3RleHR1cmUgPSBjcmVhdGVUZXh0dXJlT2Jq
ZWN0KHRhcmdldCk7CiAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QK
ICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLSAgICAgICAgLy8gR2Vu
ZXJhdGUgdGhlIGRlcHRoIGJ1ZmZlcgotICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwg
Jm1fZGVwdGhCdWZmZXIpOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAgICAgICBp
ZiAobV9hdHRyaWJ1dGVzLmRlcHRoIHx8IG1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAg
ICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgIC8vIEdlbmVyYXRlIHRoZSBtdWx0aXNhbXBsZSBmcmFtZWJ1ZmZlciBvYmplY3QKKyAgICAg
ICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsR2VuRnJhbWVi
dWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgICAgIGdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAg
ICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAgICAgIGdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAg
IGlmIChtX2F0dHJpYnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAg
ICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFJlYWxsb2NhdGUgdGhlIGNv
bG9yIGFuZCBkZXB0aCBidWZmZXJzCi0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIG1fdGV4dHVy
ZSk7Ci0gICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgMCwgR0xfUkdCQTgsIHdpZHRoLCBoZWlnaHQs
IDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIGdsQmluZFRleHR1cmUodGFy
Z2V0LCAwKTsKKyAgICBHTGludCBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOworICAgIGlmIChtX2F0dHJpYnV0ZXMuYWxwaGEp
IHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBjb2xv
ckZvcm1hdCA9IEdMX1JHQkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZv
cm1hdCA9IEdMX1JHQjg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAg
ICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgbV9hdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAg
ICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVk
IGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwgJiYgbV9h
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQg
PSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgfQorCisg
ICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworCisgICAgLy8gUmVzaXplIG11bHRpc2Ft
cGxpbmcgRkJPCisgICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xp
bnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNf
RVhULCAmbWF4U2FtcGxlQ291bnQpOworICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6
bWluKDgsIG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9tdWx0
aXNhbXBsZUZCTykgeworICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgfQorICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVO
REVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxl
Q291bnQsIGludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOworICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgbV9hdHRyaWJ1dGVzLmRl
cHRoKSB7CisgICAgICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1w
bGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FU
VEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAg
ICAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBnbEJpbmRSZW5kZXJi
dWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgICAgIEdMZW51bSBzdGF0dXMg
PSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKKyAgICAg
ICAgaWYgKHN0YXR1cyAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAg
ICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0M0Q6IG11bHRpc2FtcGxpbmcgZnJhbWVidWZmZXIg
d2FzIGluY29tcGxldGVcbiIpOwogCi0gICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgbV9ib3VuZEZCTyA9IG1fZmJvOwotICAgIGdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09N
UE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVO
REVSQlVGRkVSX0VYVCwgMCk7CisgICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIH0KKyAgICB9CiAKKyAgICAvLyBSZXNp
emUgcmVndWxhciBGQk8KKyAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAg
bXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0KKyAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwg
bV90ZXh0dXJlKTsKKyAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbENvbG9yRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7
CiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCwgdGFyZ2V0LCBtX3RleHR1cmUsIDApOwotICAgIGdsRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hN
RU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CisgICAgZ2xCaW5k
VGV4dHVyZSh0YXJnZXQsIDApOworICAgIGlmICghbV9hdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiAo
bV9hdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgbV9hdHRyaWJ1dGVzLmRlcHRoKSkgeworICAgICAgICBn
bEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VY
VCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBp
ZiAobV9hdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICB9CiAgICAgR0xlbnVt
IHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQp
OwogICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CiAgICAg
ICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDogZnJhbWVidWZmZXIg
d2FzIGluY29tcGxldGVcbiIpOwpAQCAtNDg3LDYgKzU4Myw5IEBAIHZvaWQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6cmUKICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCiAgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgfQorCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQor
ICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRG
Qk8pOwogI2VuZGlmIC8vIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCiAKICNpZmRlZiBGTElQ
X0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKQEAgLTQ5Nyw4ICs1OTYsMTIgQEAgdm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZQogICAgIG1fc2NhbmxpbmUgPSBuZXcgdW5zaWdu
ZWQgY2hhclt3aWR0aCAqIDRdOwogI2VuZGlmIC8vIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxM
WQogCi0gICAgZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKLQorICAgIEdMYml0ZmllbGQg
Y2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLnN0
ZW5jaWwpCisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAg
aWYgKG1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JV
RkZFUl9CSVQ7CisgICAgZ2xDbGVhcihjbGVhck1hc2spOwogfQogCiAjaWZkZWYgRkxJUF9GUkFN
RUJVRkZFUl9WRVJUSUNBTExZCkBAIC01NDIsOSArNjQ1LDE5IEBAIGJvb2wgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6cmUKICAgICAvLyB2ZXJ0aWNhbCBmbGlwIGlzIG9ubHkgYSB0
ZW1wb3Jhcnkgc29sdXRpb24gYW55d2F5IHVudGlsIENocm9tZQogICAgIC8vIGlzIGZ1bGx5IEdQ
VSBjb21wb3NpdGVkLCBpdCB3YXNuJ3Qgd29ydGggdGhlIGNvbXBsZXhpdHkuCiAKLSAgICBib29s
IG11c3RSZXN0b3JlRkJPID0gKG1fYm91bmRGQk8gIT0gbV9mYm8pOwotICAgIGlmIChtdXN0UmVz
dG9yZUZCTykKKyAgICBib29sIG11c3RSZXN0b3JlRkJPOworICAgIGlmIChtX2F0dHJpYnV0ZXMu
YW50aWFsaWFzKSB7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVC
VUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgZ2xCbGl0RnJhbWVi
dWZmZXJFWFQoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIDAsIDAsIG1fY2Fj
aGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIp
OwogICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7CisgICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKKyAgICAgICAgfQorICAgIH0KICNpZiBQTEFURk9STShTS0lBKQogICAgIGds
UmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQkdSQSwg
R0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKICNlbGlmIFBMQVRGT1JNKENHKQpAQCAtNjgzLDkg
Kzc5NiwxMSBAQCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmJpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAg
ZnJhbWVidWZmZXIgPSBtX2ZibzsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZy
YW1lYnVmZmVyKTsKLSAgICBtX2JvdW5kRkJPID0gZnJhbWVidWZmZXI7CisgICAgICAgIGZyYW1l
YnVmZmVyID0gKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJPIDogbV9m
Ym8pOworICAgIGlmIChmcmFtZWJ1ZmZlciAhPSBtX2JvdW5kRkJPKSB7CisgICAgICAgIGdsQmlu
ZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZnJhbWVidWZmZXIpOworICAgICAgICBtX2JvdW5kRkJP
ID0gZnJhbWVidWZmZXI7CisgICAgfQogfQogCiBERUxFR0FURV9UT19HTF8yKGJpbmRSZW5kZXJi
dWZmZXIsIEJpbmRSZW5kZXJidWZmZXJFWFQsIHVuc2lnbmVkIGxvbmcsIFdlYkdMSWQpCkBAIC05
ODIsNyArMTA5NywyMiBAQCBERUxFR0FURV9UT19HTF8yKHBpeGVsU3RvcmVpLCBQaXhlbFN0b3Jl
CiAKIERFTEVHQVRFX1RPX0dMXzIocG9seWdvbk9mZnNldCwgUG9seWdvbk9mZnNldCwgZG91Ymxl
LCBkb3VibGUpCiAKLURFTEVHQVRFX1RPX0dMXzcocmVhZFBpeGVscywgUmVhZFBpeGVscywgbG9u
ZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5z
aWduZWQgbG9uZywgdm9pZCopCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2
b2lkKiBwaXhlbHMpCit7CisjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAg
aWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxl
RkJPKSB7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgZ2xCbGl0RnJhbWVidWZmZXJF
WFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWln
aHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIGdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KKyNlbmRpZgorICAg
IGdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CisjaWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCisgICAgaWYgKG1fYXR0cmlidXRl
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworI2Vu
ZGlmCit9CiAKIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVsZWFzZVNo
YWRlckNvbXBpbGVyKCkKIHsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCShyZXZpc2lvbiA1NjM5OCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjQsOSArMjY0LDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2luaXRp
YWxpemVkOwogICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50IG1f
ZmJvOwotICAgIHVuc2lnbmVkIGludCBtX2RlcHRoQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwgbV9j
YWNoZWRIZWlnaHQ7CiAKKyAgICAvLyBGb3IgbXVsdGlzYW1wbGluZworICAgIHVuc2lnbmVkIGlu
dCBtX211bHRpc2FtcGxlRkJPOworICAgIHVuc2lnbmVkIGludCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7
CisKICAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCiAgICAgdW5zaWduZWQg
aW50IG1fYm91bmRGQk87CiAKQEAgLTI3Nyw2ICsyODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQpOwogI2VuZGlmCiAKKyAgICAvLyBU
YWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0
dHJpYnV0ZXMsIGluCisgICAgLy8gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFu
ZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IgY291bGQKKyAgICAvLyBub3QgYmUgaG9ub3JlZCBi
YXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wgaW1wbGVtZW50YXRpb24uCisg
ICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKwogICAgIC8vIE5vdGU6IHdlIGFyZW4ndCBj
dXJyZW50bHkgdXNpbmcgdGhpcyBpbmZvcm1hdGlvbiwgYnV0IHdlIHdpbGwKICAgICAvLyBuZWVk
IHRvIGluIG9yZGVyIHRvIHZlcmlmeSB0aGF0IGFsbCBlbmFibGVkIHZlcnRleCBhcnJheXMgaGF2
ZQogICAgIC8vIGEgdmFsaWQgYnVmZmVyIGJvdW5kIC0tIHRvIGF2b2lkIGNyYXNoZXMgb24gY2Vy
dGFpbiBjYXJkcy4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU2NDMxKQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMjMgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdM
IGNvbnRleHQgY3JlYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRl
eHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1h
bHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0OiBXZWJHTCBjb250
ZXh0IGF0dHJpYnV0ZXMgYmVoYXZpb3IgY2hhbmdlZCB3aXRoIHRoaXMgZml4LgorICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy5odG1sOiBEaXR0by4KKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0OiBTdGVuY2ls
IGJ1ZmZlciBpcyBlbmFibGVkLCB0aHVzIFN0ZW5jaWwgQml0cyBpcyBubyBsb25nZXIgMC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbDogRGl0dG8uCisKIDIw
MTAtMDMtMjMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlh
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Nv
bnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKyAgICAgICAKK1ZlcmlmeSBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzIGFyZSB3b3JraW5nIGFzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGFscGhh
LCBkZXB0aCwgc3RlbmNpbCwgYW50aWFsaWFzLCBidXQgbm90IHByZW11bHRpcGxpZWRBbHBoYQor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1JlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNDE2IDogSG9vayB1cCBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGUKK1Rlc3Rpbmcg
YWxwaGEgPSB0cnVlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FscGhhT24nLCB7IGFscGhhOiB0
cnVlLCBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsg
MCwgMCwgMCwgMCBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3
ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0
cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQ
QVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMu
YW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBo
YSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBhbHBoYSA9IGZh
bHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FscGhhT2ZmJywgeyBhbHBoYTogZmFsc2UsIGRl
cHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAw
LCAwIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmFs
cGhhIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFs
aWFzIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0
cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBkZXB0aCA9IHRydWUKK1BB
U1Mgd2ViR0wgPSBnZXRXZWJHTCgnZGVwdGhPbicsIHsgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlh
czogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250
ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQ
QVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxw
aGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNv
bnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVt
dWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3Rp
bmcgZGVwdGggPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdkZXB0aE9mZicsIHsgZGVw
dGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAs
IDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVw
dGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250
ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlh
cyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1
ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3Rpbmcgc3RlbmNpbCA9IHRydWUKK1BB
U1Mgd2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9uJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6
IHRydWUsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1u
dWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkg
aXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIHRydWUKK1BBU1MgY29u
dGV4dEF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlz
IHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJl
Y3RDb2xvcgorVGVzdGluZyBzdGVuY2lsID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgn
c3RlbmNpbE9mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBm
YWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRB
dHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1Mg
Y29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNp
bCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0
aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3Rpbmcg
YW50aWFsaWFzID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdhbnRpYWxpYXNPbicsIHsg
ZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IHRy
dWUgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0
cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNv
bnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwg
aXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgZmFsc2UKK1BBU1MgY29udGV4
dEF0dHJpYnMuYW50aWFsaWFzID09IHRydWUgfHwgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzID09
IGZhbHNlIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlz
IHRydWUKK1BBU1MgcGl4ZWxbMF0gPT0gMjU1IHx8IHBpeGVsWzBdID09IDAgaXMgZmFsc2UKK1Rl
c3RpbmcgYW50aWFsaWFzID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYW50aWFsaWFz
T2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlh
bGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBj
b250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwu
CitQQVNTIGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJz
LnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgZmFsc2UKK1BB
U1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzID09IHRydWUgfHwgY29udGV4dEF0dHJpYnMuYW50
aWFsaWFzID09IGZhbHNlIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGll
ZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWxbMF0gPT0gMjU1IHx8IHBpeGVsWzBdID09IDAgaXMg
dHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1h
bHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVu
Y2lsLWFudGlhbGlhcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFz
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEwIEBACis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRpbHMzZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBw
b3M7CithdHRyaWJ1dGUgdmVjNCBjb2xvckluOwordmFyeWluZyB2ZWM0IGNvbG9yOworCit2b2lk
IG1haW4oKQoreworICAgIGNvbG9yID0gY29sb3JJbjsKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQo
cG9zLnh5eiwgMS4wKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBl
PSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ZhcnlpbmcgdmVjNCBjb2xvcjsKKwordm9pZCBtYWlu
KCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0
PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworCisvLyBUaGVzZSBmb3VyIGRlY2xh
cmF0aW9ucyBuZWVkIHRvIGJlIGdsb2JhbCBmb3IgInNob3VsZEJlIiB0byBzZWUgdGhlbQordmFy
IHdlYkdMID0gbnVsbDsKK3ZhciBjb250ZXh0QXR0cmlicyA9IG51bGw7Cit2YXIgcGl4ZWwgPSBb
MCwgMCwgMCwgMV07Cit2YXIgY29ycmVjdENvbG9yID0gbnVsbDsKKworZnVuY3Rpb24gaW5pdCgp
Cit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdMRW5hYmxlZCIs
ICIxIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIGRl
c2NyaXB0aW9uKCdWZXJpZnkgV2ViR0xDb250ZXh0QXR0cmlidXRlcyBhcmUgd29ya2luZyBhcyBz
cGVjaWZpZWQsIGluY2x1ZGluZyBhbHBoYSwgZGVwdGgsIHN0ZW5jaWwsIGFudGlhbGlhcywgYnV0
IG5vdCBwcmVtdWx0aXBsaWVkQWxwaGEnKTsKKworICAgIGRlYnVnKCdSZWdyZXNzaW9uIHRlc3Qg
Zm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQx
NiI+aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNDE2PC9hPiA6IDxj
b2RlPkhvb2sgdXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVh
dGlvbiBjb2RlPC9jb2RlPicpOworICAgIAorICAgIHJ1blRlc3QoKTsKK30KKworZnVuY3Rpb24g
Z2V0V2ViR0woY2FudmFzTmFtZSwgY29udGV4dEF0dHJpYnMsIGNsZWFyQ29sb3IsIGNsZWFyRGVw
dGgsIGNsZWFyU3RlbmNpbCkKK3sKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoY2FudmFzTmFtZSk7CisgICAgdmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVy
aW1lbnRhbC13ZWJnbCIsIGNvbnRleHRBdHRyaWJzKTsKKyAgICBpZiAoIWdsKSB7CisgICAgICAg
IGFsZXJ0KCJObyBXZWJHTCBjb250ZXh0IGZvdW5kIik7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH0KKyAgICB2YXIgYWN0dWFsQ29udGV4dEF0dHJpYnMgPSBnbC5nZXRDb250ZXh0QXR0cmli
dXRlcygpOworICAgIAorICAgIC8vIEFkZCBhIGNvbnNvbGUKKyAgICBnbC5jb25zb2xlID0gKCJj
b25zb2xlIiBpbiB3aW5kb3cpID8gd2luZG93LmNvbnNvbGUgOiB7IGxvZzogZnVuY3Rpb24oKSB7
IH0gfTsKKworICAgIC8vIGNyZWF0ZSBvdXIgc2hhZGVycworICAgIHZhciB2ZXJ0ZXhTaGFkZXIg
PSBsb2FkU2hhZGVyKGdsLCAidnNoYWRlciIpOworICAgIHZhciBmcmFnbWVudFNoYWRlciA9IGxv
YWRTaGFkZXIoZ2wsICJmc2hhZGVyIik7CisKKyAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhZnJh
Z21lbnRTaGFkZXIpCisgICAgICAgIHJldHVybiBudWxsOworCisgICAgLy8gQ3JlYXRlIHRoZSBw
cm9ncmFtIG9iamVjdAorICAgIGdsLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisKKyAg
ICBpZiAoIWdsLnByb2dyYW0pCisgICAgICAgIHJldHVybiBudWxsOworCisgICAgLy8gQXR0YWNo
IG91ciB0d28gc2hhZGVycyB0byB0aGUgcHJvZ3JhbQorICAgIGdsLmF0dGFjaFNoYWRlcihnbC5w
cm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihnbC5wcm9ncmFtLCBm
cmFnbWVudFNoYWRlcik7CisKKyAgICAvLyBCaW5kIGF0dHJpYnV0ZXMKKyAgICB2YXIgYXR0cmli
cyA9IFsgInBvcyIsICJjb2xvckluIiBdOworICAgIGZvciAodmFyIGkgaW4gYXR0cmlicykKKyAg
ICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKGdsLnByb2dyYW0sIGksIGF0dHJpYnNbaV0pOwor
CisgICAgLy8gTGluayB0aGUgcHJvZ3JhbQorICAgIGdsLmxpbmtQcm9ncmFtKGdsLnByb2dyYW0p
OworCisgICAgLy8gQ2hlY2sgdGhlIGxpbmsgc3RhdHVzCisgICAgdmFyIGxpbmtlZCA9IGdsLmdl
dFByb2dyYW1QYXJhbWV0ZXIoZ2wucHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpOworICAgIGlmICgh
bGlua2VkKSB7CisgICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxpbmsK
KyAgICAgICAgdmFyIGVycm9yID0gZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cgKGdsLnByb2dyYW0pOwor
ICAgICAgICBnbC5jb25zb2xlLmxvZygiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIrZXJyb3Ip
OworCisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0oZ2wucHJvZ3JhbSk7CisgICAgICAgIGdsLmRl
bGV0ZVByb2dyYW0oZnJhZ21lbnRTaGFkZXIpOworICAgICAgICBnbC5kZWxldGVQcm9ncmFtKHZl
cnRleFNoYWRlcik7CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgZ2wudXNl
UHJvZ3JhbShnbC5wcm9ncmFtKTsKKworICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwg
Y2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CisgICAgZ2wuY2xl
YXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICBnbC5jbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsK
KyAgICBnbC5lbmFibGUoZ2wuREVQVEhfVEVTVCk7CisgICAgZ2wuZW5hYmxlKGdsLlNURU5DSUxf
VEVTVCk7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZF
Ul9CSVQgfCBnbC5TVEVOQ0lMX0JVRkZFUl9CSVQpOworCisgICAgcmV0dXJuIGdsOworfQorCitm
dW5jdGlvbiBkcmF3QW5kUmVhZFBpeGVsKGdsLCB2ZXJ0aWNlcywgY29sb3JzLCB4LCB5KQorewor
ICAgIHZhciBjb2xvck9mZnNldCA9IHZlcnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2YXIgdmJv
ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIs
IHZibyk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zmc2V0ICsg
Y29sb3JzLmJ5dGVMZW5ndGgsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5idWZmZXJTdWJEYXRh
KGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wu
QVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCwgY29sb3JzKTsKKworICAgIGdsLnZlcnRleEF0dHJp
YlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDQsIGdsLlVO
U0lHTkVEX0JZVEUsIHRydWUsIDAsIGNvbG9yT2Zmc2V0KTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheSgxKTsKKworICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCB2ZXJ0
aWNlcy5sZW5ndGggLyAzKTsKKworICAgIHJldHVybiBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEs
IGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUpOworfQorCitmdW5jdGlvbiB0ZXN0QWxwaGEoYWxw
aGEpCit7CisgICAgZGVidWcoIlRlc3RpbmcgYWxwaGEgPSAiICsgYWxwaGEpOworICAgIGlmIChh
bHBoYSkKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9u
JywgeyBhbHBoYTogdHJ1ZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFz
OiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAgICAgIHNo
b3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFPZmYnLCB7IGFscGhhOiBmYWxz
ZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAs
IDAsIDAsIDAgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJz
ID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0
QXR0cmlicy5hbHBoYSIsIChhbHBoYSA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRC
ZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4
dEF0dHJpYnMuc3RlbmNpbCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmli
cy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMucHJl
bXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKworICAgIHZhciBidWYgPSB3ZWJHTC5yZWFkUGl4
ZWxzKDAsIDAsIDEsIDEsIHdlYkdMLlJHQkEsIHdlYkdMLlVOU0lHTkVEX0JZVEUpOworICAgIHBp
eGVsWzBdID0gYnVmWzBdOworICAgIHBpeGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVsWzJdID0g
YnVmWzJdOworICAgIHBpeGVsWzNdID0gYnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9IChhbHBo
YSA/IFswLCAwLCAwLCAwXSA6IFswLCAwLCAwLCAyNTVdKTsKKyAgICBzaG91bGRCZSgicGl4ZWwi
LCAiY29ycmVjdENvbG9yIik7Cit9CisKK2Z1bmN0aW9uIHRlc3REZXB0aChkZXB0aCkKK3sKKyAg
ICBkZWJ1ZygiVGVzdGluZyBkZXB0aCA9ICIgKyBkZXB0aCk7CisgICAgaWYgKGRlcHRoKQorICAg
ICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT24nLCB7IHN0ZW5j
aWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOwor
ICAgIGVsc2UKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdkZXB0
aE9mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9
LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRB
dHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJj
b250ZXh0QXR0cmlicy5kZXB0aCIsIChkZXB0aCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsKKyAgICBz
aG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJj
b250ZXh0QXR0cmlicy5zdGVuY2lsIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRB
dHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmli
cy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCisgICAgd2ViR0wuZGVwdGhGdW5jKHdl
YkdMLk5FVkVSKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWwor
ICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsICAxLjAsIDAuMCwKKyAgICAg
ICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0x
LjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFyIGNvbG9y
cyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUs
CisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAg
ICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUs
IDAsIDAsIDI1NV0pOworCisgICAgdmFyIGJ1ZiA9IGRyYXdBbmRSZWFkUGl4ZWwod2ViR0wsIHZl
cnRpY2VzLCBjb2xvcnMsIDAsIDApOworICAgIHBpeGVsWzBdID0gYnVmWzBdOworICAgIHBpeGVs
WzFdID0gYnVmWzFdOworICAgIHBpeGVsWzJdID0gYnVmWzJdOworICAgIHBpeGVsWzNdID0gYnVm
WzNdOworICAgIGNvcnJlY3RDb2xvciA9IChkZXB0aCA/IFswLCAwLCAwLCAyNTVdIDogWzI1NSwg
MCwgMCwgMjU1XSk7CisgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOworfQor
CitmdW5jdGlvbiB0ZXN0U3RlbmNpbChzdGVuY2lsKQoreworICAgIGRlYnVnKCJUZXN0aW5nIHN0
ZW5jaWwgPSAiICsgc3RlbmNpbCk7CisgICAgaWYgKHN0ZW5jaWwpCisgICAgICAgIHNob3VsZEJl
Tm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9uJywgeyBkZXB0aDogZmFsc2UsIHN0
ZW5jaWw6IHRydWUsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7
CisgICAgZWxzZQorICAgICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ3N0
ZW5jaWxPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFs
c2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250
ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRC
ZSgiY29udGV4dEF0dHJpYnMuZGVwdGgiLCAoc3RlbmNpbCA/ICJ0cnVlIiA6ICJmYWxzZSIpKTsK
KyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIsIChzdGVuY2lsID8gInRydWUi
IDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsICJ0cnVl
Iik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOwor
ICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIp
OworCisgICAgd2ViR0wuZGVwdGhGdW5jKHdlYkdMLkFMV0FZUyk7CisKKyAgICB3ZWJHTC5zdGVu
Y2lsRnVuYyh3ZWJHTC5ORVZFUiwgMSwgMSk7CisgICAgd2ViR0wuc3RlbmNpbE9wKHdlYkdMLktF
RVAsIHdlYkdMLktFRVAsIHdlYkdMLktFRVApOworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IFdl
YkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAx
LjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAxLjAsIDAu
MCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAtMS4wLCAwLjBdKTsK
KyAgICB2YXIgY29sb3JzID0gbmV3IFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoWworICAgICAgICAy
NTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwg
MCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUs
CisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisKKyAgICB2YXIgYnVmID0gZHJhd0FuZFJlYWRQ
aXhlbCh3ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0gPSBidWZb
MF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07CisgICAgcGl4ZWxbMl0gPSBidWZbMl07CisgICAg
cGl4ZWxbM10gPSBidWZbM107CisgICAgY29ycmVjdENvbG9yID0gKHN0ZW5jaWwgPyBbMCwgMCwg
MCwgMjU1XSA6IFsyNTUsIDAsIDAsIDI1NV0pOworICAgIHNob3VsZEJlKCJwaXhlbCIsICJjb3Jy
ZWN0Q29sb3IiKTsKK30KKworZnVuY3Rpb24gdGVzdEFudGlhbGlhcyhhbnRpYWxpYXMpCit7Cisg
ICAgZGVidWcoIlRlc3RpbmcgYW50aWFsaWFzID0gIiArIGFudGlhbGlhcyk7CisgICAgaWYgKGFu
dGlhbGlhcykKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdhbnRp
YWxpYXNPbicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBh
bnRpYWxpYXM6IHRydWUgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgZWxzZQorICAg
ICAgICBzaG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09mZicsIHsg
ZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRpYWxpYXM6IGZh
bHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVsbCgiY29u
dGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxk
QmUoImNvbnRleHRBdHRyaWJzLmRlcHRoIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRl
eHRBdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJp
YnMuYWxwaGEiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFs
aWFzID09IHRydWUgfHwgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzID09IGZhbHNlIiwgInRydWUi
KTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRy
dWUiKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAg
ICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAs
IC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xvcnMgPSBuZXcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAg
ICAgICAgMjU1LCAwLCAwLCAyNTVdKTsKKyAgICB2YXIgYnVmID0gZHJhd0FuZFJlYWRQaXhlbCh3
ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07Cisg
ICAgLy8gSWYgYW50aWFsaWFzIGlzIHJlcXVlc3RlZCBidXQgbm90IHN1cHBvcnRlZCwgd2UgZmFr
ZSB0aGUgZWZmZWN0LgorICAgIGlmIChhbnRpYWxpYXMgJiYgIWNvbnRleHRBdHRyaWJzLmFudGlh
bGlhcykKKyAgICAgICAgcGl4ZWxbMF0gPSAxMjc7CisgICAgc2hvdWxkQmUoInBpeGVsWzBdID09
IDI1NSB8fCBwaXhlbFswXSA9PSAwIiwgKGFudGlhbGlhcyA/ICJmYWxzZSIgOiAidHJ1ZSIpKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisKKyAgICB0ZXN0QWxwaGEodHJ1ZSk7CisgICAg
dGVzdEFscGhhKGZhbHNlKTsKKyAgICB0ZXN0RGVwdGgodHJ1ZSk7CisgICAgdGVzdERlcHRoKGZh
bHNlKTsKKyAgICB0ZXN0U3RlbmNpbCh0cnVlKTsKKyAgICB0ZXN0U3RlbmNpbChmYWxzZSk7Cisg
ICAgdGVzdEFudGlhbGlhcyh0cnVlKTsKKyAgICB0ZXN0QW50aWFsaWFzKGZhbHNlKTsKKworICAg
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0gZmluaXNoOwor
ICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsK
KyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKworZnVuY3Rpb24g
ZmluaXNoKCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0KCkiPgorPGNhbnZhcyBpZD0iYWxwaGFPbiIg
d2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iYWxwaGFPZmYi
IHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImRlcHRoT24i
IHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImRlcHRoT2Zm
IiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJzdGVuY2ls
T24iIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9InN0ZW5j
aWxPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFu
dGlhbGlhc09uIiB3aWR0aD0iMnB4IiBoZWlnaHQ9IjJweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlk
PSJhbnRpYWxpYXNPZmYiIHdpZHRoPSIycHgiIGhlaWdodD0iMnB4Ij48L2NhbnZhcz4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1h
dHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NjM5
OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw4IEBAIFBBU1MgY29udGV4dCA9
IGNyZWF0ZTNEQ29udGV4dCgpIGlzIG5vbi0KIFBBU1MgYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KIFBBU1MgYXR0cmlicy5kZXB0aCBpcyB0cnVl
CiBQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQotUEFTUyAoYXR0cmlicy5zdGVuY2lsID09IHRy
dWUgfHwgYXR0cmlicy5zdGVuY2lsID09IGZhbHNlKSBpcyB0cnVlCi1QQVNTIChhdHRyaWJzLmFu
dGlhbGlhcyA9PSB0cnVlIHx8IGF0dHJpYnMuYW50aWFsaWFzID09IGZhbHNlKSBpcyB0cnVlCitQ
QVNTIGF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFsaWFzID09IHRy
dWUgfHwgYXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UgaXMgdHJ1ZQogUEFTUyBhdHRyaWJzLnBy
ZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCiBUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzCiBQQVNTIGNv
bnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxz
ZSB9KSBpcyBub24tbnVsbC4KQEAgLTE4LDYgKzE4LDIyIEBAIFBBU1MgYXR0cmlicy5hbHBoYSBp
cyB0cnVlCiBQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQogUEFTUyBhdHRyaWJzLmFudGlh
bGlhcyBpcyBmYWxzZQogUEFTUyBhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitU
ZXN0IGN1c3RvbWl6ZWQgdmFsdWVzCitQQVNTIGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBk
ZXB0aDogZmFsc2UsIHN0ZW5jaWw6IHRydWUsIGFudGlhbGlhczogZmFsc2UgfSkgaXMgbm9uLW51
bGwuCitQQVNTIGF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9u
LW51bGwuCitQQVNTIGF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFscGhhIGlz
IHRydWUKK1BBU1MgYXR0cmlicy5zdGVuY2lsIGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbnRpYWxp
YXMgaXMgZmFsc2UKK1BBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorVGVz
dCBjdXN0b21pemVkIHZhbHVlcworUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgcHJl
bXVsdGlwbGllZEFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9KSBpcyBub24tbnVsbC4K
K1BBU1MgYXR0cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVs
bC4KK1BBU1MgYXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1
ZQorUEFTUyBhdHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFudGlhbGlhcyBp
cyBmYWxzZQorUEFTUyBhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy5odG1s
CShyZXZpc2lvbiA1NjM5OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRl
eHQtYXR0cmlidXRlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw5ICsxOCw5IEBAIHNob3Vs
ZEJlTm9uTnVsbCgiY29udGV4dCA9IGNyZWF0ZTNEQ29udGUKIHNob3VsZEJlTm9uTnVsbCgiYXR0
cmlicyA9IGNvbnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOwogc2hvdWxkQmUoImF0dHJp
YnMuZGVwdGgiLCAidHJ1ZSIpOwogc2hvdWxkQmUoImF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOwot
Ly8gVGhlIGZvbGxvd2luZyB0d28gZGVwZW5kIG9uIHdoZXRoZXIgdGhlIGltcGxlbWVudGF0aW9u
IGFjdHVhbGx5IHN1cHBvcnRzIHRoZW0KLXNob3VsZEJlKCIoYXR0cmlicy5zdGVuY2lsID09IHRy
dWUgfHwgYXR0cmlicy5zdGVuY2lsID09IGZhbHNlKSIsICJ0cnVlIik7Ci1zaG91bGRCZSgiKGF0
dHJpYnMuYW50aWFsaWFzID09IHRydWUgfHwgYXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UpIiwg
InRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAidHJ1ZSIpOworLy8gQW50aWFs
aWFzIGlzIHJlcXVlc3RlZCBieSBkZWZhdWx0LCBidXQgbWlnaHQgb3IgbWlnaHQgbm90IGJlIHN1
cHBvcnRlZC4KK3Nob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGF0dHJpYnMu
YW50aWFsaWFzID09IGZhbHNlIiwgInRydWUiKTsKIHNob3VsZEJlKCJhdHRyaWJzLnByZW11bHRp
cGxpZWRBbHBoYSIsICJ0cnVlIik7CiAKIGRlYnVnICgiVGVzdCBjdXN0b21pemVkIHZhbHVlcyIp
OwpAQCAtMzIsNiArMzIsMjYgQEAgc2hvdWxkQmUoImF0dHJpYnMuc3RlbmNpbCIsICJmYWxzZSIp
Owogc2hvdWxkQmUoImF0dHJpYnMuYW50aWFsaWFzIiwgImZhbHNlIik7CiBzaG91bGRCZSgiYXR0
cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOwogCitkZWJ1ZygiVGVzdCBjdXN0b21p
emVkIHZhbHVlcyIpOworLy8gKHN0ZW5jaWwgPT0gdHJ1ZSAmJiBkZXB0aCA9PSBmYWxzZSkgaXMg
bm90IHN1cHBvcnRlZCwgZGVmYXVsdCBkZXB0aCB0byB0cnVlCitzaG91bGRCZU5vbk51bGwoImNv
bnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IHRydWUsIGFu
dGlhbGlhczogZmFsc2UgfSkiKTsKK3Nob3VsZEJlTm9uTnVsbCgiYXR0cmlicyA9IGNvbnRleHQu
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworc2hvdWxkQmUoImF0dHJpYnMuZGVwdGgiLCAidHJ1
ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJp
YnMuc3RlbmNpbCIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMiLCAiZmFs
c2UiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisK
K2RlYnVnKCJUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzIik7CisvLyAocHJlbXVsdGlwbGllZEFscGhh
ID09IGZhbHNlKSBpcyBub3Qgc3VwcG9ydGVkLCBkZWZhdWx0IHRvIHRydWUKK3Nob3VsZEJlTm9u
TnVsbCgiY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IHByZW11bHRpcGxpZWRBbHBoYTogZmFs
c2UsIGFudGlhbGlhczogZmFsc2UgfSkiKTsKK3Nob3VsZEJlTm9uTnVsbCgiYXR0cmlicyA9IGNv
bnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworc2hvdWxkQmUoImF0dHJpYnMuZGVwdGgi
LCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYWxwaGEiLCAidHJ1ZSIpOworc2hvdWxkQmUo
ImF0dHJpYnMuc3RlbmNpbCIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMi
LCAiZmFsc2UiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVl
Iik7CisKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KIApJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA1NjM5OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSQogUEFTUyBjb250
ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwpIGlz
IGNvbnRleHQuS0VFUAogUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxf
QkFDS19QQVNTX0RFUFRIX1BBU1MpIGlzIGNvbnRleHQuS0VFUAogUEFTUyBjb250ZXh0LmdldFBh
cmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19SRUYpIGlzIDAKLVBBU1MgY29udGV4dC5nZXRQ
YXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JJVFMpIGlzIDAKK1BBU1MgY29udGV4dC5nZXRQYXJh
bWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JJVFMpID4gMCBpcyB0cnVlCiBQQVNTIGNvbnRleHQuZ2V0
UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9DTEVBUl9WQUxVRSkgaXMgMAogUEFTUyBjb250ZXh0
LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRkFJTCkgaXMgY29udGV4dC5LRUVQCiBQQVNT
IGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9GVU5DKSBpcyBjb250ZXh0LkFM
V0FZUwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNh
bGxzLmh0bWwJKHJldmlzaW9uIDU2Mzk4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtZ2V0LWNhbGxzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgZWxz
ZSB7CiAgICAgLy8gRklYTUU6IEN1cnJlbnQgV2ViS2l0IGltcGxlbWVudGF0aW9uIHJldHVybnMg
dGhlIHdyb25nIHZhbHVlIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzE4NDIpCiAgICAgLy9zaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVO
Q0lMX0JBQ0tfVkFMVUVfTUFTSyknLCAnMHhGRkZGRkZGRicpOwogICAgIC8vc2hvdWxkQmUoJ2Nv
bnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyknLCAnMHhG
RkZGRkZGRicpOwotICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNU
RU5DSUxfQklUUyknLCAnMCcpOworICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihj
b250ZXh0LlNURU5DSUxfQklUUykgPiAwJywgJ3RydWUnKTsKICAgICBzaG91bGRCZSgnY29udGV4
dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0NMRUFSX1ZBTFVFKScsICcwJyk7CiAgICAg
c2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9GQUlMKScsICdj
b250ZXh0LktFRVAnKTsKICAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4
dC5TVEVOQ0lMX0ZVTkMpJywgJ2NvbnRleHQuQUxXQVlTJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52111</attachid>
            <date>2010-03-30 18:12:19 -0700</date>
            <delta_ts>2010-03-30 18:29:19 -0700</delta_ts>
            <desc>revised patch : responding to Ken Russell&apos;s review</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>58554</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDMtMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAoV2ViQ29yZTo6VjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dENhbGxiYWNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBBZGQgbWVt
YmVycy9mdW5jdGlvbnMgZm9yIG11bHRpc2FtcGxpbmcvc3RlbmNpbCBidWZmZXIgcHVycG9zZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oOiBBZGQgR3Jh
cGhpY3NDb250ZXh0M0QgYXMgYSBtZW1iZXIgb2YgQ2FudmFzM0RMYXllci4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbTogQWRkIG11bHRpc2FtcGxpbmcg
c3VwcG9ydC4KKyAgICAgICAgKC1bQ2FudmFzM0RMYXllciBkcmF3SW5DR0xDb250ZXh0OnBpeGVs
Rm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOiBIb29rIHVwIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgTWFjLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENh
bnZhczNETGF5ZXIgaW5pdCBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QpOgorCiAyMDEwLTAzLTIzICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgdHlwb3MuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTYzOTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAgICAg
aWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0gIndl
YmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpjcmVh
dGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0YXRp
Y19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgpOwog
ICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6Ok5l
dygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNp
b24gNTYzOTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0
dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIC8v
IFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3Vs
YXIgRkJPLgorICAgICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAgICAg
ICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5
cGVzCiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBpbnQg
c2l6ZUluQnl0ZXMoaW50IHR5cGUpOwpAQCAtNzA4LDYgKzcxMywxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFscGhhT3As
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KTsKIAorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyBy
ZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAorICAgICAgICAvLyBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBv
cgorICAgICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0
aWVzIG9mIHRoZSBPcGVuR0wKKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgICAgIHZv
aWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisjZW5kaWYKKwogICAgICAgICBpbnQgbV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodDsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
NzE3LDcgKzczMCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENHTENvbnRleHRP
YmogbV9jb250ZXh0T2JqOwogICAgICAgICBHTHVpbnQgbV90ZXh0dXJlOwogICAgICAgICBHTHVp
bnQgbV9mYm87Ci0gICAgICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOworICAgICAgICBHTHVpbnQg
bV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAgICAgICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZC
TyBpcyBib3VuZAorICAgICAgICBHTHVpbnQgbV9ib3VuZEZCTzsKKworICAgICAgICAvLyBGb3Ig
bXVsdGlzYW1wbGluZworICAgICAgICBHTHVpbnQgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAg
R0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAgIEdMdWludCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisKICAgICAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBz
eW50aGVzaXplR0xFcnJvcigpLgogICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBt
X3N5bnRoZXRpY0Vycm9yczsKICNlbmRpZiAgICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCShyZXZpc2lvbiA1NjM5OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTYgKzMyLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBH
cmFwaGljc0xheWVyOworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogfQogCiBAaW50ZXJm
YWNlIENhbnZhczNETGF5ZXIgOiBDQU9wZW5HTExheWVyIAogewogICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIEdMdWludCBt
X3RleHR1cmU7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooQ0dMQ29udGV4dE9iailjb250
ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJlOworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKIAogLSAoQ0dJbWFnZVJlZiljb3B5SW1h
Z2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZTsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1t
CShyZXZpc2lvbiA1NjM5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZh
czNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVudGF0aW9uIENhbnZhczNETGF5ZXIKIAotLShpZClp
bml0V2l0aENvbnRleHQ6KENHTENvbnRleHRPYmopY29udGV4dCB0ZXh0dXJlOihHTHVpbnQpdGV4
dHVyZQorLShpZClpbml0V2l0aENvbnRleHQ6KEdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0CiB7
Ci0gICAgbV9jb250ZXh0T2JqID0gY29udGV4dDsKLSAgICBtX3RleHR1cmUgPSB0ZXh0dXJlOwor
ICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jb250ZXh0T2JqID0gc3RhdGljX2Nhc3Q8
Q0dMQ29udGV4dE9iaj4oY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAg
ICBtX3RleHR1cmUgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KGNvbnRleHQtPnBsYXRmb3JtVGV4dHVy
ZSgpKTsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIHJldHVybiBzZWxmOwogfQpAQCAt
NzAsOCArNzEsOCBAQCAtKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvCiAK
IC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWdsQ29udGV4dCBwaXhlbEZv
cm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1lOihDRlRpbWVJ
bnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6KGNvbnN0IENWVGltZVN0YW1wICopdGlt
ZVN0YW1wCiB7Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBn
bEZpbmlzaCgpOworICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKwogICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KGdsQ29udGV4dCk7CiAKICAgICBDR1JlY3QgZnJhbWUgPSBbc2VsZiBm
cmFtZV07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1NjM5OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsMTggKzg2LDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmEKICAgICAsIG1fY29udGV4dE9iaigwKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBt
X2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAg
ICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQogewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBh
Y2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRy
aWJ1dGVzLCBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQg
ZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIGFuZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJh
c2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAg
ICBtX2F0dHJzLmFscGhhID0gdHJ1ZTsKLSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBt
X2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKLSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
ICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKLQogICAgIFZlY3RvcjxDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhl
bEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKQEAgLTE0NSw2
ICsxMzksOCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAg
Ly8gU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIG9uZSBnaXZlbiB0byB1cy4KICAgICBD
R0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwogICAgIAorICAgIHZhbGlkYXRlQXR0
cmlidXRlcygpOworCiAgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bwogICAg
IDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKQEAgLTE1MiwyMCArMTQ4LDI1IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CiAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsK
ICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVApOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4
LCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgCiAgICAgLy8gY3JlYXRlIGFuIEZCTwogICAg
IDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwogICAgIAotICAgIDo6Z2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQs
IDEsIDEpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IDApOwotICAgIAotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
LCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0
aEJ1ZmZlcik7CisgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAgIGlmICghbV9hdHRycy5hbnRp
YWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKKyAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAgIC8v
IGNyZWF0ZSBhbiBtdWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
KyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAg
ICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAg
ICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQogICAgIAogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwog
fQpAQCAtMTc0LDE0ICsxNzUsNDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiB7CiAgICAgaWYgKG1fY29udGV4dE9iaikgewogICAgICAgICBDR0xTZXRDdXJyZW50
Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmIG1fZGVwdGhCdWZmZXIpOwogICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7CisgICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICAgICAg
OjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAg
ICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgfQogICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiAgICAg
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95Q29udGV4dCht
X2NvbnRleHRPYmopOwogICAgIH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBjb25zdCBjaGFyKiBleHRlbnNpb25zID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSk7CisgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoc3RkOjpzdHJzdHIoZXh0ZW5zaW9u
cywgIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7CisgICAgICAgICAgICBpZiAoIW1f
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3Ig
PSB0cnVlOworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRp
YWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsK
KyAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAg
IGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFz
dGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikp
CisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0KKyAgICAvLyBG
SVhNRTogaW5zdGVhZCBvZiBlbmZvcmNpbmcgcHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZSwgaW1w
bGVtZW50IHRoZQorICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBwcmVtdWx0aXBsaWVkQWxw
aGEgPSBmYWxzZSBpcyByZXF1ZXN0ZWQuCisgICAgbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEg
PSB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQo
KQogewogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CkBAIC0yMDYsMjQg
KzIzOSw4NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAg
CiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAKKyAgICBHTHVp
bnQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAgICAg
ICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwg
fHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMg
d2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBT
ZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCisgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgJiYgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOworICAg
IH0KKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKworICAgIC8vIHJlc2l6ZSBt
dWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xp
bnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExF
U19FWFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3Rk
OjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhT
YW1wbGVDb3VudCkKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7Cisg
ICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAo
bV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0
ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlm
IChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgfQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCAwKTsKKyAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJV
RkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0K
ICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOwotICAgIAotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsK
LSAgICAKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
MCk7CiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwot
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVy
KTsKLSAgICBHTGVudW0gc3RhdHVzID0gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xf
RlJBTUVCVUZGRVJfRVhUKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFX0VYVCkgeworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBp
ZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkpIHsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNI
TUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Cisg
ICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJf
RVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKICAgICAgICAgLy8gRklYTUU6
IGNsZWFudXAKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKLSAgICA6OmdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7
CisKKyAgICBHTGVudW0gY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAo
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7
CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5D
SUxfQlVGRkVSX0JJVDsKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKICAgICA6OmdsRmx1c2go
KTsKIH0KIApAQCAtMjM3LDYgKzMzMiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW5zdXJlQ29u
dGV4dChDR0xDb250CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJB
V19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVY
VCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3Vu
ZEZCTyk7CisgICAgICAgIDo6Z2xGaW5pc2goKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKQEAgLTI2OCw3ICszNzUsMTUgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBi
dWZmZXIpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQodGFyZ2V0LCAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdM
dWludCkgYnVmZmVyLT5vYmplY3QoKSA6IG1fZmJvKTsKKyAgICBHTHVpbnQgZmJvOworICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5vYmplY3QoKSkKKyAgICAgICAgZmJvID0gKEdMdWludClidWZm
ZXItPm9iamVjdCgpOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFsaWFz
ID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8p
IHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAg
IG1fYm91bmRGQk8gPSBmYm87CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciog
cmVuZGVyYnVmZmVyKQpAQCAtNjc2LDggKzc5MSwyNCBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+
IEdyYXBoaWNzQ29udGV4dDNECiAgICAgaWYgKHR5cGUgIT0gR0xfVU5TSUdORURfQllURSB8fCBm
b3JtYXQgIT0gR0xfUkdCQSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAorICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9t
dWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4
LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CiAgICAgUmVmUHRyPFdl
YkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3Jl
YXRlKHdpZHRoICogaGVpZ2h0ICogNCk7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVGQk8pOworICAgIGlmICghbV9hdHRycy5hbHBoYSkgeworICAgICAgICAvLyBJZiBhbHBo
YSBpcyBvZmYsIGJ5IGRlZmF1bHQgZ2xSZWFkUGl4ZWxzIHNob3VsZCBzZXQgdGhlIGFscGhhIHRv
IDI1NSBpbnN0ZWFkIG9mIDAuCisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHVudGlsIDo6Z2xS
ZWFkUGl4ZWxzIGZpeGVzIGl0cyBiZWhhdmlvci4KKyAgICAgICAgR0x1Ynl0ZSogZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KGFycmF5LT5kYXRhKCkpOworICAgICAgICB1bnNpZ25l
ZCBieXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAy
NTU7CisgICAgfQogICAgIHJldHVybiBhcnJheTsgICAgCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHJldmlzaW9uIDU2
Mzk4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzE2LDcgKzE3MTYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6c2V0Q29udGVudHNUb0dyYXBoCiAKICAgICBpZiAobV9wbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEICE9IE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEICYmIG1fcGxhdGZvcm1UZXh0dXJl
ICE9IE51bGxQbGF0Zm9ybTNET2JqZWN0KSB7CiAgICAgICAgIC8vIGNyZWF0ZSB0aGUgaW5uZXIg
M2QgbGF5ZXIKLSAgICAgICAgbV9jb250ZW50c0xheWVyLmFkb3B0TlMoW1tDYW52YXMzRExheWVy
IGFsbG9jXSBpbml0V2l0aENvbnRleHQ6c3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKSB0ZXh0dXJlOnN0YXRpY19jYXN0PEdMdWludD4obV9wbGF0
Zm9ybVRleHR1cmUpXSk7CisgICAgICAgIG1fY29udGVudHNMYXllci5hZG9wdE5TKFtbQ2FudmFz
M0RMYXllciBhbGxvY10gaW5pdFdpdGhDb250ZXh0OmNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0
M0QqPihncmFwaGljc0NvbnRleHQzRCldKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFttX2Nv
bnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIjNEIExheWVyIl07CiAjZW5kaWYKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gNTY0MzEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDMtMjMgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQg
Y3JlYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzM0MTYKKworICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oOiBS
ZW1vdmUgdmlydHVhbCBkZXN0cnVjdG9yIGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHNyYy9H
cmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpyZWFkUGl4ZWxzKTogRGVhbCB3aXRoIHdyb25nIHJldHVybmVkIGFscGhhIHZh
bHVlcyBpbiBNYWMuCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcDogQWRk
IHZpcnR1YWwgZGVzdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6On5XZWJHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOiBIb29rIHVwIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgQ2hyb21lLgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
dmFsaWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OnJlYWRCYWNrRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpiaW5kRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWFkUGl4ZWxz
KToKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oOiBBZGQg
YSBmdW5jdGlvbi4KKwogMjAxMC0wMy0yMyAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA1NjM5OCkKKysr
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFRoaXMgZGVz
dHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB1c2luZyBjbGFzc2VzIGNhbiBkZXN0
cm95IGluc3RhbmNlcyBpZiBpbml0aWFsaXphdGlvbiBmYWlscy4KLSAgICB2aXJ0dWFsIH5XZWJH
cmFwaGljc0NvbnRleHQzRCgpIHt9CisgICAgdmlydHVhbCB+V2ViR3JhcGhpY3NDb250ZXh0M0Qo
KTsKIAogICAgIC8vIENyZWF0ZXMgYSAiZGVmYXVsdCIgaW1wbGVtZW50YXRpb24gb2YgV2ViR3Jh
cGhpY3NDb250ZXh0M0Qgd2hpY2ggY2FsbHMKICAgICAvLyBPcGVuR0wgZGlyZWN0bHkuCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNp
b24gNTYzOTgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTAgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKK1dlYkdyYXBoaWNzQ29udGV4dDNEOjp+V2ViR3JhcGhpY3NDb250ZXh0M0QoKQoreworfQor
CiBXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURlZmF1
bHQoKQogewogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlz
aW9uIDU2Mzk4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiwxMCBAQCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpXZWJHcmFwCiAgICAgOiBtX2luaXRpYWxpemVkKGZh
bHNlKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aEJ1
ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAs
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogICAgICwgbV9ib3VuZEZCTygwKQogI2lmZGVm
IEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQogICAgICwgbV9zY2FubGluZSgwKQpAQCAtMTUw
LDcgKzE1MywxNSBAQCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhCiAg
ICAgaWYgKG1faW5pdGlhbGl6ZWQpIHsKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAj
aWZuZGVmIFJFTkRFUl9UT19ERUJVR0dJTkdfV0lORE9XCi0gICAgICAgIGdsRGVsZXRlUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMu
YW50aWFsaWFzKSB7CisgICAgICAgICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRl
cHRoIHx8IG1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGdsRGVsZXRlUmVu
ZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoIHx8IG1f
YXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVy
c0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CiAgICAgICAgIGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJU
SUNBTExZCiAgICAgICAgIGlmIChtX3NjYW5saW5lKQpAQCAtMTgyLDE2ICsxOTMsNiBAQCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhCiAKIGJvb2wgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6aW5pdGlhbGl6ZShXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0
cmlidXRlcyBhdHRyaWJ1dGVzKQogewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50
byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBh
dHRyaWJ1dGVzLCBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBh
bmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIGFuZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8v
IGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4K
LSAgICBtX2F0dHJpYnV0ZXMuYWxwaGEgPSB0cnVlOwotICAgIG1fYXR0cmlidXRlcy5kZXB0aCA9
IHRydWU7Ci0gICAgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwgPSBmYWxzZTsKLSAgICBtX2F0dHJpYnV0
ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgbV9hdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBo
YSA9IHRydWU7Ci0KICNpZiBPUyhXSU5ET1dTKQogICAgIFdORENMQVNTIHdjOwogICAgIGlmICgh
R2V0Q2xhc3NJbmZvKEdldE1vZHVsZUhhbmRsZSgwKSwgTCJDQU5WQVNHTCIsICZ3YykpIHsKQEAg
LTM3NCwxMCArMzc1LDQwIEBAIGJvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
aW4KICAgICAgICAgc19pbml0aWFsaXplZEdMRVcgPSB0cnVlOwogICAgIH0KIAorICAgIG1fYXR0
cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKICAgICBt
X2luaXRpYWxpemVkID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIGNv
bnN0IGNoYXIqIGV4dGVuc2lvbnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdl
dFN0cmluZyhHTF9FWFRFTlNJT05TKSk7CisKKyAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwp
IHsKKyAgICAgICAgaWYgKHN0ZDo6c3Ryc3RyKGV4dGVuc2lvbnMsICJHTF9FWFRfcGFja2VkX2Rl
cHRoX3N0ZW5jaWwiKSkgeworICAgICAgICAgICAgaWYgKCFtX2F0dHJpYnV0ZXMuZGVwdGgpCisg
ICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMuc3RlbmNpbCA9IGZhbHNlOworICAgIH0KKyAgICBp
ZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3Ig
PSB0cnVlOworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdl
IG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KKyAgICAgICAgY29u
c3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJp
bmcoR0xfVkVORE9SKSk7CisgICAgICAgIGlmICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElB
IikpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAg
aWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFzdGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlIikpCisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMuYW50aWFs
aWFzID0gZmFsc2U7CisgICAgfQorICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9yY2luZyBw
cmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCisgICAgLy8gY29ycmVjdCBi
ZWhhdmlvciB3aGVuIHByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3RlZC4KKyAg
ICBtX2F0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKK30KKwogYm9vbCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjptYWtlQ29udGV4dEN1cnJlbnQoKQogewogI2lm
IE9TKFdJTkRPV1MpCkBAIC00NjMsMjMgKzQ5NCw4OCBAQCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OnJlCiAgICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmVPYmpl
Y3QodGFyZ2V0KTsKICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdAog
ICAgICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgICAgICAvLyBHZW5l
cmF0ZSB0aGUgZGVwdGggYnVmZmVyCi0gICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworICAgICAgICBtX2JvdW5kRkJPID0gbV9mYm87CisgICAgICAgIGlm
IChtX2F0dHJpYnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAg
ICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgLy8gR2VuZXJhdGUgdGhlIG11bHRpc2FtcGxlIGZyYW1lYnVmZmVyIG9iamVjdAorICAgICAg
ICBpZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICAgICAgZ2xHZW5GcmFtZWJ1
ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICAgICAgZ2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAg
ICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOworICAgICAgICAgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAg
aWYgKG1fYXR0cmlidXRlcy5kZXB0aCB8fCBtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAg
ICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gUmVhbGxvY2F0ZSB0aGUgY29s
b3IgYW5kIGRlcHRoIGJ1ZmZlcnMKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgbV90ZXh0dXJl
KTsKLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwg
MCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJn
ZXQsIDApOworICAgIEdMaW50IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7CisgICAgaWYgKG1fYXR0cmlidXRlcy5hbHBoYSkg
eworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9y
Rm9ybWF0ID0gR0xfUkdCQTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9y
bWF0ID0gR0xfUkdCODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAg
IGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCB8fCBtX2F0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQg
YW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwgY29uc3RydWN0b3IuCisgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCAmJiBtX2F0
dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9
IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICB9CisKKyAg
ICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisKKyAgICAvLyBSZXNpemUgbXVsdGlzYW1w
bGluZyBGQk8KKyAgICBpZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBHTGlu
dCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19F
WFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjpt
aW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX211bHRp
c2FtcGxlRkJPKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVGQk8pOworICAgICAgICB9CisgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVD
b3VudCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CisgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCB8fCBtX2F0dHJpYnV0ZXMuZGVw
dGgpIHsKKyAgICAgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBs
ZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICAgICAgZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRU
QUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAg
ICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgR0xlbnVtIHN0YXR1cyA9
IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOworICAgICAg
ICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAg
ICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogbXVsdGlzYW1wbGluZyBmcmFtZWJ1ZmZlciB3
YXMgaW5jb21wbGV0ZVxuIik7CiAKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKLSAgICBtX2JvdW5kRkJPID0gbV9mYm87Ci0gICAgZ2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOwotICAgIGds
UmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01Q
T05FTlQsIHdpZHRoLCBoZWlnaHQpOwotICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgorICAgICAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIC8vIFJlc2l6
ZSByZWd1bGFyIEZCTworICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgIGds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBt
dXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfQorICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCBt
X3RleHR1cmUpOworICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsQ29sb3JGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
ICAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09M
T1JfQVRUQUNITUVOVDBfRVhULCB0YXJnZXQsIG1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1F
TlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICBnbEJpbmRU
ZXh0dXJlKHRhcmdldCwgMCk7CisgICAgaWYgKCFtX2F0dHJpYnV0ZXMuYW50aWFsaWFzICYmICht
X2F0dHJpYnV0ZXMuc3RlbmNpbCB8fCBtX2F0dHJpYnV0ZXMuZGVwdGgpKSB7CisgICAgICAgIGds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJf
RVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg
IGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhU
LCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGlm
IChtX2F0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgIH0KICAgICBHTGVudW0g
c3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7
CiAgICAgaWYgKHN0YXR1cyAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKICAgICAg
ICAgcHJpbnRmKCJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOiBmcmFtZWJ1ZmZlciB3
YXMgaW5jb21wbGV0ZVxuIik7CkBAIC00ODcsNiArNTgzLDkgQEAgdm9pZCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpyZQogICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KICAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisg
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZC
Tyk7CiAjZW5kaWYgLy8gUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKIAogI2lmZGVmIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQpAQCAtNDk3LDggKzU5NiwxMiBAQCB2b2lkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlCiAgICAgbV9zY2FubGluZSA9IG5ldyB1bnNpZ25l
ZCBjaGFyW3dpZHRoICogNF07CiAjZW5kaWYgLy8gRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZ
CiAKLSAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwotCisgICAgR0xiaXRmaWVsZCBj
bGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgIGlmIChtX2F0dHJpYnV0ZXMuc3Rl
bmNpbCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICBp
ZiAobV9hdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVG
RkVSX0JJVDsKKyAgICBnbENsZWFyKGNsZWFyTWFzayk7CiB9CiAKICNpZmRlZiBGTElQX0ZSQU1F
QlVGRkVSX1ZFUlRJQ0FMTFkKQEAgLTU0Miw5ICs2NDUsMTkgQEAgYm9vbCBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpyZQogICAgIC8vIHZlcnRpY2FsIGZsaXAgaXMgb25seSBhIHRl
bXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkgdW50aWwgQ2hyb21lCiAgICAgLy8gaXMgZnVsbHkgR1BV
IGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3b3J0aCB0aGUgY29tcGxleGl0eS4KIAotICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSAobV9ib3VuZEZCTyAhPSBtX2Zibyk7Ci0gICAgaWYgKG11c3RSZXN0
b3JlRkJPKQorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk87CisgICAgaWYgKG1fYXR0cmlidXRlcy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1
ZmZlckVYVCgwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgMCwgMCwgbV9jYWNo
ZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7
CiAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8p
OworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0g
dHJ1ZTsKKyAgICAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9mYm8pOworICAgICAgICB9CisgICAgfQogI2lmIFBMQVRGT1JNKFNLSUEpCiAgICAgZ2xS
ZWFkUGl4ZWxzKDAsIDAsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwogI2VsaWYgUExBVEZPUk0oQ0cpCkBAIC02ODMsOSAr
Nzk2LDExIEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmkKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICBm
cmFtZWJ1ZmZlciA9IG1fZmJvOwotICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZnJh
bWVidWZmZXIpOwotICAgIG1fYm91bmRGQk8gPSBmcmFtZWJ1ZmZlcjsKKyAgICAgICAgZnJhbWVi
dWZmZXIgPSAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zi
byk7CisgICAgaWYgKGZyYW1lYnVmZmVyICE9IG1fYm91bmRGQk8pIHsKKyAgICAgICAgZ2xCaW5k
RnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIG1fYm91bmRGQk8g
PSBmcmFtZWJ1ZmZlcjsKKyAgICB9CiB9CiAKIERFTEVHQVRFX1RPX0dMXzIoYmluZFJlbmRlcmJ1
ZmZlciwgQmluZFJlbmRlcmJ1ZmZlckVYVCwgdW5zaWduZWQgbG9uZywgV2ViR0xJZCkKQEAgLTk4
Miw3ICsxMDk3LDM0IEBAIERFTEVHQVRFX1RPX0dMXzIocGl4ZWxTdG9yZWksIFBpeGVsU3RvcmUK
IAogREVMRUdBVEVfVE9fR0xfMihwb2x5Z29uT2Zmc2V0LCBQb2x5Z29uT2Zmc2V0LCBkb3VibGUs
IGRvdWJsZSkKIAotREVMRUdBVEVfVE9fR0xfNyhyZWFkUGl4ZWxzLCBSZWFkUGl4ZWxzLCBsb25n
LCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNp
Z25lZCBsb25nLCB2b2lkKikKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZv
aWQqIHBpeGVscykKK3sKKyNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKKyAgICBp
ZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9E
UkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBnbEJsaXRGcmFtZWJ1ZmZlckVY
VCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdo
dCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQorI2VuZGlmCisgICAg
Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
KyNpZiBQTEFURk9STShDRykKKyAgICBpZiAoIW1fYXR0cmlidXRlcy5hbHBoYSkgeworICAgICAg
ICAvLyBJZiBhbHBoYSBpcyBvZmYsIGJ5IGRlZmF1bHQgZ2xSZWFkUGl4ZWxzIHNob3VsZCBzZXQg
dGhlIGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNr
IHVudGlsIGdsUmVhZFBpeGVscyBmaXhlcyBpdHMgYmVoYXZpb3IuCisgICAgICAgIC8vIFBpeGVs
cyBhcmUgc3RvcmVkIGluIFdlYkdMVW5zaWduZWRCeXRlQXJyYXksIHdoaWNoIGlzIHVuc2lnbmVk
IGNoYXIgYXJyYXkuCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOworICAgICAgICAvLyBGSVhNRTogdGFrZSBpbnRv
IGFjY291bnQgcGFjayBhbGlnbm1lbnQuCisgICAgICAgIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0
aCA9IHdpZHRoICogaGVpZ2h0ICogNCAqIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAzOyBpIDwgYnl0ZUxlbmd0aDsgaSArPSA0KQorICAgICAg
ICAgICAgZGF0YVtpXSA9IDI1NTsKKyAgICB9CisjZW5kaWYKKyNpZm5kZWYgUkVOREVSX1RPX0RF
QlVHR0lOR19XSU5ET1cKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX2JvdW5k
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisjZW5kaWYKK30KIAogdm9pZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogewpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmgJKHJldmlzaW9uIDU2Mzk4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw5ICsy
NjQsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CiAgICAgdW5zaWduZWQg
aW50IG1fdGV4dHVyZTsKICAgICB1bnNpZ25lZCBpbnQgbV9mYm87Ci0gICAgdW5zaWduZWQgaW50
IG1fZGVwdGhCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwog
ICAgIHVuc2lnbmVkIGludCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodDsKIAorICAgIC8v
IEZvciBtdWx0aXNhbXBsaW5nCisgICAgdW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVGQk87Cisg
ICAgdW5zaWduZWQgaW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgdW5z
aWduZWQgaW50IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcjsKKwogICAgIC8vIEZvciB0cmFja2lu
ZyB3aGljaCBGQk8gaXMgYm91bmQKICAgICB1bnNpZ25lZCBpbnQgbV9ib3VuZEZCTzsKIApAQCAt
Mjc3LDYgKzI4MiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGhlaWdodCk7CiAjZW5kaWYKIAorICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1
c2VyJ3MgcmVxdWVzdGVkIGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywgaW4KKyAgICAvLyBw
YXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3Vs
ZCBvciBjb3VsZAorICAgIC8vIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRp
ZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2b2lkIHZhbGlkYXRlQXR0cmli
dXRlcygpOworCiAgICAgLy8gTm90ZTogd2UgYXJlbid0IGN1cnJlbnRseSB1c2luZyB0aGlzIGlu
Zm9ybWF0aW9uLCBidXQgd2Ugd2lsbAogICAgIC8vIG5lZWQgdG8gaW4gb3JkZXIgdG8gdmVyaWZ5
IHRoYXQgYWxsIGVuYWJsZWQgdmVydGV4IGFycmF5cyBoYXZlCiAgICAgLy8gYSB2YWxpZCBidWZm
ZXIgYm91bmQgLS0gdG8gYXZvaWQgY3Jhc2hlcyBvbiBjZXJ0YWluIGNhcmRzLgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNTY0MzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNyBAQAorMjAxMC0wMy0yMyAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhvb2sg
dXAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNgor
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRl
cHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50
aWFsaWFzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQt
YXR0cmlidXRlcy1leHBlY3RlZC50eHQ6IFdlYkdMIGNvbnRleHQgYXR0cmlidXRlcyBiZWhhdmlv
ciBjaGFuZ2VkIHdpdGggdGhpcyBmaXguCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29u
dGV4dC1hdHRyaWJ1dGVzLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQ6IFN0ZW5jaWwgYnVmZmVyIGlzIGVuYWJsZWQsIHRo
dXMgU3RlbmNpbCBCaXRzIGlzIG5vIGxvbmdlciAwLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL2dsLWdldC1jYWxscy5odG1sOiBEaXR0by4KKwogMjAxMC0wMy0yMyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRy
aWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMt
YWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhh
LWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4MiBAQAorICAgICAgIAorVmVyaWZ5IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXJlIHdv
cmtpbmcgYXMgc3BlY2lmaWVkLCBpbmNsdWRpbmcgYWxwaGEsIGRlcHRoLCBzdGVuY2lsLCBhbnRp
YWxpYXMsIGJ1dCBub3QgcHJlbXVsdGlwbGllZEFscGhhCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzM0MTYgOiBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3Bl
bkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQorVGVzdGluZyBhbHBoYSA9IHRydWUKK1BBU1Mgd2Vi
R0wgPSBnZXRXZWJHTCgnYWxwaGFPbicsIHsgYWxwaGE6IHRydWUsIGRlcHRoOiBmYWxzZSwgc3Rl
bmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAwIF0sIDEsIDApIGlz
IG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1
dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BB
U1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3Rl
bmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BB
U1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwg
aXMgY29ycmVjdENvbG9yCitUZXN0aW5nIGFscGhhID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBnZXRX
ZWJHTCgnYWxwaGFPZmYnLCB7IGFscGhhOiBmYWxzZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBm
YWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDAgXSwgMSwgMCkgaXMgbm9uLW51
bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBp
cyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgZmFsc2UKK1BBU1MgY29u
dGV4dEF0dHJpYnMuZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBp
cyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29u
dGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29y
cmVjdENvbG9yCitUZXN0aW5nIGRlcHRoID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdk
ZXB0aE9uJywgeyBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAs
IDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVw
dGggaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFz
IGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVl
CitQQVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBkZXB0aCA9IGZhbHNlCitQQVNT
IHdlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZh
bHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVs
bC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlz
IG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250
ZXh0QXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMg
ZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsIGlzIGNvcnJl
Y3RDb2xvcgorVGVzdGluZyBzdGVuY2lsID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdz
dGVuY2lsT24nLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSwgYW50aWFsaWFzOiBmYWxz
ZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRy
aWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29u
dGV4dEF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlz
IHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0
cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGll
ZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHN0ZW5j
aWwgPSBmYWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdzdGVuY2lsT2ZmJywgeyBkZXB0aDog
ZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBd
LCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250
ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBp
cyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIGlz
IGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitQ
QVNTIHBpeGVsIGlzIGNvcnJlY3RDb2xvcgorVGVzdGluZyBhbnRpYWxpYXMgPSB0cnVlCitQQVNT
IHdlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09uJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6
IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1ZSB9LCBbIDAsIDAsIDAsIDEgXSwg
MSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4
dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMuZGVwdGggaXMg
ZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0
QXR0cmlicy5hbHBoYSBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgPT0g
dHJ1ZSB8fCBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UgaXMgdHJ1ZQorUEFTUyBj
b250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbFswXSA9
PSAyNTUgfHwgcGl4ZWxbMF0gPT0gMCBpcyBmYWxzZQorVGVzdGluZyBhbnRpYWxpYXMgPSBmYWxz
ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdhbnRpYWxpYXNPZmYnLCB7IGRlcHRoOiBmYWxzZSwg
c3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAs
IDAsIDEgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0gd2ViR0wu
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMu
ZGVwdGggaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFT
UyBjb250ZXh0QXR0cmlicy5hbHBoYSBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRp
YWxpYXMgPT0gdHJ1ZSB8fCBjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UgaXMgdHJ1
ZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBw
aXhlbFswXSA9PSAyNTUgfHwgcGl4ZWxbMF0gPT0gMCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50
aWFsaWFzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Y29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJp
YnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy91dGlsczNkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9Ingt
c2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWMzIHBvczsKK2F0dHJpYnV0ZSB2ZWM0IGNv
bG9ySW47Cit2YXJ5aW5nIHZlYzQgY29sb3I7CisKK3ZvaWQgbWFpbigpCit7CisgICAgY29sb3Ig
PSBjb2xvckluOworICAgIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MueHl6LCAxLjApOworfQorPC9z
Y3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQi
PgordmFyeWluZyB2ZWM0IGNvbG9yOworCit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xv
ciA9IGNvbG9yOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gZmFsc2U7CisKKy8vIFRoZXNlIGZvdXIgZGVjbGFyYXRpb25zIG5lZWQgdG8gYmUgZ2xv
YmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCit2YXIgd2ViR0wgPSBudWxsOwordmFyIGNv
bnRleHRBdHRyaWJzID0gbnVsbDsKK3ZhciBwaXhlbCA9IFswLCAwLCAwLCAxXTsKK3ZhciBjb3Jy
ZWN0Q29sb3IgPSBudWxsOworCitmdW5jdGlvbiBpbml0KCkKK3sKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgZGVzY3JpcHRpb24oJ1ZlcmlmeSBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzIGFyZSB3b3JraW5nIGFzIHNwZWNpZmllZCwgaW5jbHVkaW5nIGFs
cGhhLCBkZXB0aCwgc3RlbmNpbCwgYW50aWFsaWFzLCBidXQgbm90IHByZW11bHRpcGxpZWRBbHBo
YScpOworCisgICAgZGVidWcoJ1JlZ3Jlc3Npb24gdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNDE2Ij5odHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTY8L2E+IDogPGNvZGU+SG9vayB1cCBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0IGNyZWF0aW9uIGNvZGU8L2NvZGU+Jyk7Cisg
ICAgCisgICAgcnVuVGVzdCgpOworfQorCitmdW5jdGlvbiBnZXRXZWJHTChjYW52YXNOYW1lLCBj
b250ZXh0QXR0cmlicywgY2xlYXJDb2xvciwgY2xlYXJEZXB0aCwgY2xlYXJTdGVuY2lsKQorewor
ICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYW52YXNOYW1lKTsKKyAg
ICB2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIiwgY29udGV4
dEF0dHJpYnMpOworICAgIGlmICghZ2wpIHsKKyAgICAgICAgYWxlcnQoIk5vIFdlYkdMIGNvbnRl
eHQgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZhciBhY3R1YWxD
b250ZXh0QXR0cmlicyA9IGdsLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisgICAgCisgICAgLy8g
QWRkIGEgY29uc29sZQorICAgIGdsLmNvbnNvbGUgPSAoImNvbnNvbGUiIGluIHdpbmRvdykgPyB3
aW5kb3cuY29uc29sZSA6IHsgbG9nOiBmdW5jdGlvbigpIHsgfSB9OworCisgICAgLy8gY3JlYXRl
IG91ciBzaGFkZXJzCisgICAgdmFyIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsICJ2c2hh
ZGVyIik7CisgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlcihnbCwgImZzaGFkZXIi
KTsKKworICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlcikKKyAgICAgICAg
cmV0dXJuIG51bGw7CisKKyAgICAvLyBDcmVhdGUgdGhlIHByb2dyYW0gb2JqZWN0CisgICAgZ2wu
cHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKworICAgIGlmICghZ2wucHJvZ3JhbSkKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAvLyBBdHRhY2ggb3VyIHR3byBzaGFkZXJzIHRvIHRo
ZSBwcm9ncmFtCisgICAgZ2wuYXR0YWNoU2hhZGVyKGdsLnByb2dyYW0sIHZlcnRleFNoYWRlcik7
CisgICAgZ2wuYXR0YWNoU2hhZGVyKGdsLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKworICAg
IC8vIEJpbmQgYXR0cmlidXRlcworICAgIHZhciBhdHRyaWJzID0gWyAicG9zIiwgImNvbG9ySW4i
IF07CisgICAgZm9yICh2YXIgaSBpbiBhdHRyaWJzKQorICAgICAgICBnbC5iaW5kQXR0cmliTG9j
YXRpb24oZ2wucHJvZ3JhbSwgaSwgYXR0cmlic1tpXSk7CisKKyAgICAvLyBMaW5rIHRoZSBwcm9n
cmFtCisgICAgZ2wubGlua1Byb2dyYW0oZ2wucHJvZ3JhbSk7CisKKyAgICAvLyBDaGVjayB0aGUg
bGluayBzdGF0dXMKKyAgICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnbC5w
cm9ncmFtLCBnbC5MSU5LX1NUQVRVUyk7CisgICAgaWYgKCFsaW5rZWQpIHsKKyAgICAgICAgLy8g
c29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgbGluaworICAgICAgICB2YXIgZXJyb3IgPSBn
bC5nZXRQcm9ncmFtSW5mb0xvZyAoZ2wucHJvZ3JhbSk7CisgICAgICAgIGdsLmNvbnNvbGUubG9n
KCJFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6IitlcnJvcik7CisKKyAgICAgICAgZ2wuZGVsZXRl
UHJvZ3JhbShnbC5wcm9ncmFtKTsKKyAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShmcmFnbWVudFNo
YWRlcik7CisgICAgICAgIGdsLmRlbGV0ZVByb2dyYW0odmVydGV4U2hhZGVyKTsKKworICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBnbC51c2VQcm9ncmFtKGdsLnByb2dyYW0pOwor
CisgICAgZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNv
bG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICBnbC5jbGVhckRlcHRoKGNsZWFyRGVwdGgpOwor
ICAgIGdsLmNsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOworICAgIGdsLmVuYWJsZShnbC5ERVBU
SF9URVNUKTsKKyAgICBnbC5lbmFibGUoZ2wuU1RFTkNJTF9URVNUKTsKKyAgICBnbC5jbGVhcihn
bC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCB8IGdsLlNURU5DSUxfQlVG
RkVSX0JJVCk7CisKKyAgICByZXR1cm4gZ2w7Cit9CisKK2Z1bmN0aW9uIGRyYXdBbmRSZWFkUGl4
ZWwoZ2wsIHZlcnRpY2VzLCBjb2xvcnMsIHgsIHkpCit7CisgICAgdmFyIGNvbG9yT2Zmc2V0ID0g
dmVydGljZXMuYnl0ZUxlbmd0aDsKKworICAgIHZhciB2Ym8gPSBnbC5jcmVhdGVCdWZmZXIoKTsK
KyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmJvKTsKKyAgICBnbC5idWZmZXJE
YXRhKGdsLkFSUkFZX0JVRkZFUiwgY29sb3JPZmZzZXQgKyBjb2xvcnMuYnl0ZUxlbmd0aCwgZ2wu
U1RBVElDX0RSQVcpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB2
ZXJ0aWNlcyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9yT2Zm
c2V0LCBjb2xvcnMpOworCisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9B
VCwgZmFsc2UsIDAsIDApOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAg
IGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgNCwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgMCwg
Y29sb3JPZmZzZXQpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDEpOworCisgICAg
Z2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIHZlcnRpY2VzLmxlbmd0aCAvIDMpOworCisg
ICAgcmV0dXJuIGdsLnJlYWRQaXhlbHMoeCwgeSwgMSwgMSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURf
QllURSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RBbHBoYShhbHBoYSkKK3sKKyAgICBkZWJ1ZygiVGVz
dGluZyBhbHBoYSA9ICIgKyBhbHBoYSk7CisgICAgaWYgKGFscGhhKQorICAgICAgICBzaG91bGRC
ZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FscGhhT24nLCB7IGFscGhhOiB0cnVlLCBkZXB0
aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwg
MCBdLCAxLCAwKSIpOworICAgIGVsc2UKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9
IGdldFdlYkdMKCdhbHBoYU9mZicsIHsgYWxwaGE6IGZhbHNlLCBkZXB0aDogZmFsc2UsIHN0ZW5j
aWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMCBdLCAxLCAwKSIpOwor
ICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0
cmlidXRlcygpIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFscGhhIiwgKGFscGhh
ID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0
aCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5zdGVuY2lsIiwgImZh
bHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIp
OworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1
ZSIpOworCisgICAgdmFyIGJ1ZiA9IHdlYkdMLnJlYWRQaXhlbHMoMCwgMCwgMSwgMSwgd2ViR0wu
UkdCQSwgd2ViR0wuVU5TSUdORURfQllURSk7CisgICAgcGl4ZWxbMF0gPSBidWZbMF07CisgICAg
cGl4ZWxbMV0gPSBidWZbMV07CisgICAgcGl4ZWxbMl0gPSBidWZbMl07CisgICAgcGl4ZWxbM10g
PSBidWZbM107CisgICAgY29ycmVjdENvbG9yID0gKGFscGhhID8gWzAsIDAsIDAsIDBdIDogWzAs
IDAsIDAsIDI1NV0pOworICAgIHNob3VsZEJlKCJwaXhlbCIsICJjb3JyZWN0Q29sb3IiKTsKK30K
KworZnVuY3Rpb24gdGVzdERlcHRoKGRlcHRoKQoreworICAgIGRlYnVnKCJUZXN0aW5nIGRlcHRo
ID0gIiArIGRlcHRoKTsKKyAgICBpZiAoZGVwdGgpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgi
d2ViR0wgPSBnZXRXZWJHTCgnZGVwdGhPbicsIHsgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczog
ZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBzaG91
bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT2ZmJywgeyBkZXB0aDogZmFsc2Us
IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAw
KSIpOworICAgIHNob3VsZEJlTm9uTnVsbCgiY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250
ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmRlcHRoIiwg
KGRlcHRoID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmli
cy5hbHBoYSIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwi
LCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYW50aWFsaWFzIiwgImZh
bHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIs
ICJ0cnVlIik7CisKKyAgICB3ZWJHTC5kZXB0aEZ1bmMod2ViR0wuTkVWRVIpOworCisgICAgdmFy
IHZlcnRpY2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsICAxLjAsIDAu
MCwKKyAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisg
ICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAg
ICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFdlYkdMVW5zaWduZWRC
eXRlQXJyYXkoWworICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAy
NTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAg
ICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisKKyAgICB2
YXIgYnVmID0gZHJhd0FuZFJlYWRQaXhlbCh3ZWJHTCwgdmVydGljZXMsIGNvbG9ycywgMCwgMCk7
CisgICAgcGl4ZWxbMF0gPSBidWZbMF07CisgICAgcGl4ZWxbMV0gPSBidWZbMV07CisgICAgcGl4
ZWxbMl0gPSBidWZbMl07CisgICAgcGl4ZWxbM10gPSBidWZbM107CisgICAgY29ycmVjdENvbG9y
ID0gKGRlcHRoID8gWzAsIDAsIDAsIDI1NV0gOiBbMjU1LCAwLCAwLCAyNTVdKTsKKyAgICBzaG91
bGRCZSgicGl4ZWwiLCAiY29ycmVjdENvbG9yIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RTdGVuY2ls
KHN0ZW5jaWwpCit7CisgICAgZGVidWcoIlRlc3Rpbmcgc3RlbmNpbCA9ICIgKyBzdGVuY2lsKTsK
KyAgICBpZiAoc3RlbmNpbCkKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdl
YkdMKCdzdGVuY2lsT24nLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSwgYW50aWFsaWFz
OiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAgICAgIHNo
b3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnc3RlbmNpbE9mZicsIHsgZGVwdGg6IGZh
bHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwg
MSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNvbnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0
aCIsIChzdGVuY2lsID8gInRydWUiIDogImZhbHNlIikpOworICAgIHNob3VsZEJlKCJjb250ZXh0
QXR0cmlicy5zdGVuY2lsIiwgKHN0ZW5jaWwgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgc2hv
dWxkQmUoImNvbnRleHRBdHRyaWJzLmFscGhhIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgiY29u
dGV4dEF0dHJpYnMuYW50aWFsaWFzIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRB
dHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKKyAgICB3ZWJHTC5kZXB0aEZ1
bmMod2ViR0wuQUxXQVlTKTsKKworICAgIHdlYkdMLnN0ZW5jaWxGdW5jKHdlYkdMLk5FVkVSLCAx
LCAxKTsKKyAgICB3ZWJHTC5zdGVuY2lsT3Aod2ViR0wuS0VFUCwgd2ViR0wuS0VFUCwgd2ViR0wu
S0VFUCk7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAg
ICAgIDEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4w
LCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4w
LCAwLjAsCisgICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xvcnMgPSBuZXcg
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAg
ICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwg
MCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAy
NTVdKTsKKworICAgIHZhciBidWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdMLCB2ZXJ0aWNlcywg
Y29sb3JzLCAwLCAwKTsKKyAgICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICBwaXhlbFsxXSA9IGJ1
ZlsxXTsKKyAgICBwaXhlbFsyXSA9IGJ1ZlsyXTsKKyAgICBwaXhlbFszXSA9IGJ1ZlszXTsKKyAg
ICBjb3JyZWN0Q29sb3IgPSAoc3RlbmNpbCA/IFswLCAwLCAwLCAyNTVdIDogWzI1NSwgMCwgMCwg
MjU1XSk7CisgICAgc2hvdWxkQmUoInBpeGVsIiwgImNvcnJlY3RDb2xvciIpOworfQorCitmdW5j
dGlvbiB0ZXN0QW50aWFsaWFzKGFudGlhbGlhcykKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBhbnRp
YWxpYXMgPSAiICsgYW50aWFsaWFzKTsKKyAgICBpZiAoYW50aWFsaWFzKQorICAgICAgICBzaG91
bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlhc09uJywgeyBkZXB0aDogZmFs
c2UsIHN0ZW5jaWw6IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogdHJ1ZSB9LCBbIDAs
IDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgi
d2ViR0wgPSBnZXRXZWJHTCgnYW50aWFsaWFzT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6
IGZhbHNlLCBhbHBoYTogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0s
IDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuZGVw
dGgiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuc3RlbmNpbCIsICJm
YWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbHBoYSIsICJmYWxzZSIpOwor
ICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMgPT0gdHJ1ZSB8fCBjb250ZXh0
QXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJjb250
ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOworCisgICAgdmFyIHZlcnRp
Y2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsIDEuMCwgMC4wLAorICAg
ICAgICAtMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFy
IGNvbG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsKKyAgICAgICAgMjU1LCAwLCAw
LCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NV0p
OworICAgIHZhciBidWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdMLCB2ZXJ0aWNlcywgY29sb3Jz
LCAwLCAwKTsKKyAgICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICAvLyBJZiBhbnRpYWxpYXMgaXMg
cmVxdWVzdGVkIGJ1dCBub3Qgc3VwcG9ydGVkLCB3ZSBmYWtlIHRoZSBlZmZlY3QuCisgICAgaWYg
KGFudGlhbGlhcyAmJiAhY29udGV4dEF0dHJpYnMuYW50aWFsaWFzKQorICAgICAgICBwaXhlbFsw
XSA9IDEyNzsKKyAgICBzaG91bGRCZSgicGl4ZWxbMF0gPT0gMjU1IHx8IHBpeGVsWzBdID09IDAi
LCAoYW50aWFsaWFzID8gImZhbHNlIiA6ICJ0cnVlIikpOworfQorCitmdW5jdGlvbiBydW5UZXN0
KCkKK3sKKworICAgIHRlc3RBbHBoYSh0cnVlKTsKKyAgICB0ZXN0QWxwaGEoZmFsc2UpOworICAg
IHRlc3REZXB0aCh0cnVlKTsKKyAgICB0ZXN0RGVwdGgoZmFsc2UpOworICAgIHRlc3RTdGVuY2ls
KHRydWUpOworICAgIHRlc3RTdGVuY2lsKGZhbHNlKTsKKyAgICB0ZXN0QW50aWFsaWFzKHRydWUp
OworICAgIHRlc3RBbnRpYWxpYXMoZmFsc2UpOworCisgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKyAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQi
KTsKKyAgICBlcGlsb2d1ZS5vbmxvYWQgPSBmaW5pc2g7CisgICAgZXBpbG9ndWUuc3JjID0gIi4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiOworICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoZXBpbG9ndWUpOworfQorCitmdW5jdGlvbiBmaW5pc2goKSB7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9ImluaXQoKSI+Cis8Y2FudmFzIGlkPSJhbHBoYU9uIiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFw
eCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJhbHBoYU9mZiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIx
cHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iZGVwdGhPbiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIx
cHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iZGVwdGhPZmYiIHdpZHRoPSIxcHgiIGhlaWdodD0i
MXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9InN0ZW5jaWxPbiIgd2lkdGg9IjFweCIgaGVpZ2h0
PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0ic3RlbmNpbE9mZiIgd2lkdGg9IjFweCIgaGVp
Z2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iYW50aWFsaWFzT24iIHdpZHRoPSIycHgi
IGhlaWdodD0iMnB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFudGlhbGlhc09mZiIgd2lkdGg9
IjJweCIgaGVpZ2h0PSIycHgiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0
cmlidXRlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU2Mzk4KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNyw4ICs3LDggQEAgUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KCkgaXMg
bm9uLQogUEFTUyBhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5v
bi1udWxsLgogUEFTUyBhdHRyaWJzLmRlcHRoIGlzIHRydWUKIFBBU1MgYXR0cmlicy5hbHBoYSBp
cyB0cnVlCi1QQVNTIChhdHRyaWJzLnN0ZW5jaWwgPT0gdHJ1ZSB8fCBhdHRyaWJzLnN0ZW5jaWwg
PT0gZmFsc2UpIGlzIHRydWUKLVBBU1MgKGF0dHJpYnMuYW50aWFsaWFzID09IHRydWUgfHwgYXR0
cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UpIGlzIHRydWUKK1BBU1MgYXR0cmlicy5zdGVuY2lsIGlz
IHRydWUKK1BBU1MgYXR0cmlicy5hbnRpYWxpYXMgPT0gdHJ1ZSB8fCBhdHRyaWJzLmFudGlhbGlh
cyA9PSBmYWxzZSBpcyB0cnVlCiBQQVNTIGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRy
dWUKIFRlc3QgY3VzdG9taXplZCB2YWx1ZXMKIFBBU1MgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4
dCh7IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0pIGlzIG5vbi1udWxsLgpAQCAt
MTgsNiArMTgsMjIgQEAgUEFTUyBhdHRyaWJzLmFscGhhIGlzIHRydWUKIFBBU1MgYXR0cmlicy5z
dGVuY2lsIGlzIGZhbHNlCiBQQVNTIGF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCiBQQVNTIGF0
dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1Rlc3QgY3VzdG9taXplZCB2YWx1ZXMK
K1BBU1MgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDog
dHJ1ZSwgYW50aWFsaWFzOiBmYWxzZSB9KSBpcyBub24tbnVsbC4KK1BBU1MgYXR0cmlicyA9IGNv
bnRleHQuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgYXR0cmlicy5k
ZXB0aCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLnN0
ZW5jaWwgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBhdHRy
aWJzLnByZW11bHRpcGxpZWRBbHBoYSBpcyB0cnVlCitUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzCitQ
QVNTIGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBwcmVtdWx0aXBsaWVkQWxwaGE6IGZhbHNl
LCBhbnRpYWxpYXM6IGZhbHNlIH0pIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzID0gY29udGV4
dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBhdHRyaWJzLmRlcHRo
IGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbHBoYSBpcyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNp
bCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFsaWFzIGlzIGZhbHNlCitQQVNTIGF0dHJpYnMu
cHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Y29udGV4dC1hdHRyaWJ1dGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWwJKHJldmlzaW9uIDU2Mzk4KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTE4LDkgKzE4LDkgQEAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0ID0g
Y3JlYXRlM0RDb250ZQogc2hvdWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5nZXRDb250
ZXh0QXR0cmlidXRlcygpIik7CiBzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVlIik7CiBz
aG91bGRCZSgiYXR0cmlicy5hbHBoYSIsICJ0cnVlIik7Ci0vLyBUaGUgZm9sbG93aW5nIHR3byBk
ZXBlbmQgb24gd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgc3VwcG9ydHMgdGhl
bQotc2hvdWxkQmUoIihhdHRyaWJzLnN0ZW5jaWwgPT0gdHJ1ZSB8fCBhdHRyaWJzLnN0ZW5jaWwg
PT0gZmFsc2UpIiwgInRydWUiKTsKLXNob3VsZEJlKCIoYXR0cmlicy5hbnRpYWxpYXMgPT0gdHJ1
ZSB8fCBhdHRyaWJzLmFudGlhbGlhcyA9PSBmYWxzZSkiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0
dHJpYnMuc3RlbmNpbCIsICJ0cnVlIik7CisvLyBBbnRpYWxpYXMgaXMgcmVxdWVzdGVkIGJ5IGRl
ZmF1bHQsIGJ1dCBtaWdodCBvciBtaWdodCBub3QgYmUgc3VwcG9ydGVkLgorc2hvdWxkQmUoImF0
dHJpYnMuYW50aWFsaWFzID09IHRydWUgfHwgYXR0cmlicy5hbnRpYWxpYXMgPT0gZmFsc2UiLCAi
dHJ1ZSIpOwogc2hvdWxkQmUoImF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsK
IAogZGVidWcgKCJUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzIik7CkBAIC0zMiw2ICszMiwyNiBAQCBz
aG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwgImZhbHNlIik7CiBzaG91bGRCZSgiYXR0cmlicy5h
bnRpYWxpYXMiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCJhdHRyaWJzLnByZW11bHRpcGxpZWRBbHBo
YSIsICJ0cnVlIik7CiAKK2RlYnVnKCJUZXN0IGN1c3RvbWl6ZWQgdmFsdWVzIik7CisvLyAoc3Rl
bmNpbCA9PSB0cnVlICYmIGRlcHRoID09IGZhbHNlKSBpcyBub3Qgc3VwcG9ydGVkLCBkZWZhdWx0
IGRlcHRoIHRvIHRydWUKK3Nob3VsZEJlTm9uTnVsbCgiY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4
dCh7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogdHJ1ZSwgYW50aWFsaWFzOiBmYWxzZSB9KSIpOwor
c2hvdWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygp
Iik7CitzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmli
cy5hbHBoYSIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwgInRydWUiKTsK
K3Nob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOworc2hvdWxkQmUoImF0dHJp
YnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKworZGVidWcoIlRlc3QgY3VzdG9taXpl
ZCB2YWx1ZXMiKTsKKy8vIChwcmVtdWx0aXBsaWVkQWxwaGEgPT0gZmFsc2UpIGlzIG5vdCBzdXBw
b3J0ZWQsIGRlZmF1bHQgdG8gdHJ1ZQorc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0ID0gY3JlYXRl
M0RDb250ZXh0KHsgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9
KSIpOworc2hvdWxkQmVOb25OdWxsKCJhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmli
dXRlcygpIik7CitzaG91bGRCZSgiYXR0cmlicy5kZXB0aCIsICJ0cnVlIik7CitzaG91bGRCZSgi
YXR0cmlicy5hbHBoYSIsICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwgInRy
dWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOworc2hvdWxkQmUo
ImF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKwogc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU2
Mzk4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBQQVNTIGNvbnRleHQuZ2V0
UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRl
eHQuU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCkgaXMgY29udGV4dC5LRUVQCiBQQVNTIGNv
bnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUykg
aXMgY29udGV4dC5LRUVQCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJ
TF9CQUNLX1JFRikgaXMgMAotUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5D
SUxfQklUUykgaXMgMAorUEFTUyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxf
QklUUykgPiAwIGlzIHRydWUKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVO
Q0lMX0NMRUFSX1ZBTFVFKSBpcyAwCiBQQVNTIGNvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQu
U1RFTkNJTF9GQUlMKSBpcyBjb250ZXh0LktFRVAKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIo
Y29udGV4dC5TVEVOQ0lMX0ZVTkMpIGlzIGNvbnRleHQuQUxXQVlTCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAkocmV2aXNpb24gNTYz
OTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBlbHNlIHsKICAgICAvLyBGSVhNRTogQ3Vy
cmVudCBXZWJLaXQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgd3JvbmcgdmFsdWUgKGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg0MikKICAgICAvL3Nob3VsZEJl
KCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19WQUxVRV9NQVNLKScs
ICcweEZGRkZGRkZGJyk7CiAgICAgLy9zaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29u
dGV4dC5TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLKScsICcweEZGRkZGRkZGJyk7Ci0gICAgc2hvdWxk
QmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CSVRTKScsICcwJyk7Cisg
ICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CSVRTKSA+
IDAnLCAndHJ1ZScpOwogICAgIHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0
LlNURU5DSUxfQ0xFQVJfVkFMVUUpJywgJzAnKTsKICAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQ
YXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0ZBSUwpJywgJ2NvbnRleHQuS0VFUCcpOwogICAgIHNo
b3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRlVOQyknLCAnY29u
dGV4dC5BTFdBWVMnKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52114</attachid>
            <date>2010-03-30 18:29:19 -0700</date>
            <delta_ts>2010-03-31 11:03:40 -0700</delta_ts>
            <desc>revised patch : fixed the changeLog</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="35517"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52187</attachid>
            <date>2010-03-31 11:03:40 -0700</date>
            <delta_ts>2010-03-31 15:15:10 -0700</delta_ts>
            <desc>revised patch: responding to Darin Fisher&apos;s review.</desc>
            <filename>fbo.patch</filename>
            <type>text/plain</type>
            <size>57209</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDMtMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0MTYKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEt
ZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOiBGaXggYW4gaW5kZXggYnVnLgorICAg
ICAgICAoV2ViQ29yZTo6VjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dENhbGxiYWNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBBZGQgbWVt
YmVycy9mdW5jdGlvbnMgZm9yIG11bHRpc2FtcGxpbmcvc3RlbmNpbCBidWZmZXIgcHVycG9zZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oOiBBZGQgR3Jh
cGhpY3NDb250ZXh0M0QgYXMgYSBtZW1iZXIgb2YgQ2FudmFzM0RMYXllci4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbTogQWRkIG11bHRpc2FtcGxpbmcg
c3VwcG9ydC4KKyAgICAgICAgKC1bQ2FudmFzM0RMYXllciBkcmF3SW5DR0xDb250ZXh0OnBpeGVs
Rm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOiBIb29rIHVwIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3JlYXRpb24gY29kZSBmb3IgTWFjLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbTogQWRqdXN0IHRvIG1vZGlmaWVkIENh
bnZhczNETGF5ZXIgaW5pdCBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNB
OjpzZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QpOgorCiAyMDEwLTAzLTIzICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgdHlwb3MuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTYzOTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVuCiAgICAg
aWYgKGNvbnRleHRJZCA9PSAiZXhwZXJpbWVudGFsLXdlYmdsIiB8fCBjb250ZXh0SWQgPT0gIndl
YmtpdC0zZCIpIHsKICAgICAgICAgYXR0cnMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpjcmVh
dGUoKTsKICAgICAgICAgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogd2ViR0xBdHRycyA9IHN0YXRp
Y19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycy5nZXQoKSk7Ci0gICAgICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzBdLT5Jc09iamVjdCgpKSB7CisgICAgICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGpzQXR0cnMgPSBhcmdzWzFdLT5Ub09iamVjdCgpOwog
ICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBhbHBoYSA9IHY4OjpTdHJpbmc6Ok5l
dygiYWxwaGEiKTsKICAgICAgICAgICAgIGlmIChqc0F0dHJzLT5IYXMoYWxwaGEpKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNp
b24gNTYzOTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0IHsgcmV0
dXJuIE51bGxQbGF0Zm9ybTNET2JqZWN0OyB9CiAjZW5kaWYKICAgICAgICAgdm9pZCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIC8v
IFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxpdCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3Vs
YXIgRkJPLgorICAgICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CisjZW5kaWYKKwogICAgICAg
ICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5
cGVzCiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgICAgICBpbnQg
c2l6ZUluQnl0ZXMoaW50IHR5cGUpOwpAQCAtNzA4LDYgKzcxMywxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFscGhhT3As
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KTsKIAorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyBy
ZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAorICAgICAgICAvLyBpbiBwYXJ0
aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBv
cgorICAgICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0
aWVzIG9mIHRoZSBPcGVuR0wKKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgICAgIHZv
aWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisjZW5kaWYKKwogICAgICAgICBpbnQgbV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodDsKICAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAt
NzE3LDcgKzczMCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENHTENvbnRleHRP
YmogbV9jb250ZXh0T2JqOwogICAgICAgICBHTHVpbnQgbV90ZXh0dXJlOwogICAgICAgICBHTHVp
bnQgbV9mYm87Ci0gICAgICAgIEdMdWludCBtX2RlcHRoQnVmZmVyOworICAgICAgICBHTHVpbnQg
bV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAgICAgICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZC
TyBpcyBib3VuZAorICAgICAgICBHTHVpbnQgbV9ib3VuZEZCTzsKKworICAgICAgICAvLyBGb3Ig
bXVsdGlzYW1wbGluZworICAgICAgICBHTHVpbnQgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICAgICAg
R0x1aW50IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgICAgIEdMdWludCBt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisKICAgICAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBz
eW50aGVzaXplR0xFcnJvcigpLgogICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPiBt
X3N5bnRoZXRpY0Vycm9yczsKICNlbmRpZiAgICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCShyZXZpc2lvbiA1NjM5OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTYgKzMyLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBH
cmFwaGljc0xheWVyOworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogfQogCiBAaW50ZXJm
YWNlIENhbnZhczNETGF5ZXIgOiBDQU9wZW5HTExheWVyIAogewogICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwogICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwogICAgIEdMdWludCBt
X3RleHR1cmU7CiB9CiAKLS0gKGlkKWluaXRXaXRoQ29udGV4dDooQ0dMQ29udGV4dE9iailjb250
ZXh0IHRleHR1cmU6KEdMdWludCl0ZXh0dXJlOworLSAoaWQpaW5pdFdpdGhDb250ZXh0OihXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRCopY29udGV4dDsKIAogLSAoQ0dJbWFnZVJlZiljb3B5SW1h
Z2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZTsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1t
CShyZXZpc2lvbiA1NjM5OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZh
czNETGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDEwICs0MSwxMSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVudGF0aW9uIENhbnZhczNETGF5ZXIKIAotLShpZClp
bml0V2l0aENvbnRleHQ6KENHTENvbnRleHRPYmopY29udGV4dCB0ZXh0dXJlOihHTHVpbnQpdGV4
dHVyZQorLShpZClpbml0V2l0aENvbnRleHQ6KEdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0CiB7
Ci0gICAgbV9jb250ZXh0T2JqID0gY29udGV4dDsKLSAgICBtX3RleHR1cmUgPSB0ZXh0dXJlOwor
ICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jb250ZXh0T2JqID0gc3RhdGljX2Nhc3Q8
Q0dMQ29udGV4dE9iaj4oY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAg
ICBtX3RleHR1cmUgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KGNvbnRleHQtPnBsYXRmb3JtVGV4dHVy
ZSgpKTsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIHJldHVybiBzZWxmOwogfQpAQCAt
NzAsOCArNzEsOCBAQCAtKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvCiAK
IC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWdsQ29udGV4dCBwaXhlbEZv
cm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1lOihDRlRpbWVJ
bnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6KGNvbnN0IENWVGltZVN0YW1wICopdGlt
ZVN0YW1wCiB7Ci0gICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBn
bEZpbmlzaCgpOworICAgIG1fY29udGV4dC0+cHJlcGFyZVRleHR1cmUoKTsKKwogICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KGdsQ29udGV4dCk7CiAKICAgICBDR1JlY3QgZnJhbWUgPSBbc2VsZiBm
cmFtZV07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShyZXZpc2lvbiA1NjM5OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODYsMTggKzg2LDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQz
RChHcmEKICAgICAsIG1fY29udGV4dE9iaigwKQogICAgICwgbV90ZXh0dXJlKDApCiAgICAgLCBt
X2ZibygwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIoMCkKKyAgICAsIG1fYm91bmRGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAg
ICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVDb2xvckJ1ZmZlcigwKQogewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRha2UgaW50byBh
Y2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVkCi0gICAgLy8gY29udGV4dCBjcmVhdGlvbiBhdHRy
aWJ1dGVzLCBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kCi0gICAgLy8gYW50aWFsaWFzLCBhbmQg
ZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIGFuZCBjb3VsZCBub3QgYmUgaG9ub3JlZAotICAgIC8vIGJh
c2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIE9wZW5HTCBpbXBsZW1lbnRhdGlvbi4KLSAg
ICBtX2F0dHJzLmFscGhhID0gdHJ1ZTsKLSAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKLSAgICBt
X2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKLSAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwot
ICAgIG1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKLQogICAgIFZlY3RvcjxDR0xQ
aXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhl
bEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRzID0gMDsKQEAgLTE0NSw2
ICsxMzksOCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAg
Ly8gU2V0IHRoZSBjdXJyZW50IGNvbnRleHQgdG8gdGhlIG9uZSBnaXZlbiB0byB1cy4KICAgICBD
R0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwogICAgIAorICAgIHZhbGlkYXRlQXR0
cmlidXRlcygpOworCiAgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bwogICAg
IDo6Z2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKQEAgLTE1MiwyMCArMTQ4LDI1IEBAIEdyYXBoaWNzQ29u
dGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CiAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsK
ICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVApOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4
LCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKICAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CiAgICAgCiAgICAgLy8gY3JlYXRlIGFuIEZCTwogICAg
IDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwogICAgIAotICAgIDo6Z2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKLSAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQs
IDEsIDEpOwotICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IDApOwotICAgIAotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
LCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0
aEJ1ZmZlcik7CisgICAgbV9ib3VuZEZCTyA9IG1fZmJvOworICAgIGlmICghbV9hdHRycy5hbnRp
YWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKKyAgICAgICAgOjpn
bEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKworICAgIC8v
IGNyZWF0ZSBhbiBtdWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
KyAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAg
ICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAg
ICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgfQogICAgIAogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwog
fQpAQCAtMTc0LDE0ICsxNzUsNDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiB7CiAgICAgaWYgKG1fY29udGV4dE9iaikgewogICAgICAgICBDR0xTZXRDdXJyZW50
Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmIG1fZGVwdGhCdWZmZXIpOwogICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1f
dGV4dHVyZSk7CisgICAgICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICAgICAg
OjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAg
ICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgfQogICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiAgICAg
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95Q29udGV4dCht
X2NvbnRleHRPYmopOwogICAgIH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBjb25zdCBjaGFyKiBleHRlbnNpb25zID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSk7CisgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBpZiAoc3RkOjpzdHJzdHIoZXh0ZW5zaW9u
cywgIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7CisgICAgICAgICAgICBpZiAoIW1f
YXR0cnMuZGVwdGgpCisgICAgICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3Ig
PSB0cnVlOworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRp
YWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsK
KyAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAg
IGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFz
dGQ6OnN0cnN0cihleHRlbnNpb25zLCAiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikp
CisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0KKyAgICAvLyBG
SVhNRTogaW5zdGVhZCBvZiBlbmZvcmNpbmcgcHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZSwgaW1w
bGVtZW50IHRoZQorICAgIC8vIGNvcnJlY3QgYmVoYXZpb3Igd2hlbiBwcmVtdWx0aXBsaWVkQWxw
aGEgPSBmYWxzZSBpcyByZXF1ZXN0ZWQuCisgICAgbV9hdHRycy5wcmVtdWx0aXBsaWVkQWxwaGEg
PSB0cnVlOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQo
KQogewogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CkBAIC0yMDYsMjQg
KzIzOSw4NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAg
CiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAKKyAgICBHTHVp
bnQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAgICAg
ICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwg
fHwgbV9hdHRycy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMg
d2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBT
ZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCisgICAgICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwgJiYgbV9hdHRycy5kZXB0aCkKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOworICAg
IH0KKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKworICAgIC8vIHJlc2l6ZSBt
dWx0aXNhbXBsZSBGQk8KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xp
bnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExF
U19FWFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3Rk
OjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhT
YW1wbGVDb3VudCkKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7Cisg
ICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxl
RkJPKTsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAo
bV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0
ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlm
IChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAg
ICAgfQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCAwKTsKKyAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJV
RkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0K
ICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOwotICAgIAotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsK
LSAgICAKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
MCk7CiAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwot
ICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVy
KTsKLSAgICBHTGVudW0gc3RhdHVzID0gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xf
RlJBTUVCVUZGRVJfRVhUKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFX0VYVCkgeworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBp
ZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkpIHsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQorICAgICAgICAgICAgOjpnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNI
TUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Cisg
ICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJf
RVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKICAgICAgICAgLy8gRklYTUU6
IGNsZWFudXAKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKLSAgICA6OmdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7CisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7
CisKKyAgICBHTGVudW0gY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAo
bV9hdHRycy5kZXB0aCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7
CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5D
SUxfQlVGRkVSX0JJVDsKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKICAgICA6OmdsRmx1c2go
KTsKIH0KIApAQCAtMjM3LDYgKzMzMiwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW5zdXJlQ29u
dGV4dChDR0xDb250CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJB
V19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVY
VCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3Vu
ZEZCTyk7CisgICAgICAgIDo6Z2xGaW5pc2goKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQogewogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKQEAgLTI2OCw3ICszNzUsMTUgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcih1bnNpZwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBi
dWZmZXIpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQodGFyZ2V0LCAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdM
dWludCkgYnVmZmVyLT5vYmplY3QoKSA6IG1fZmJvKTsKKyAgICBHTHVpbnQgZmJvOworICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5vYmplY3QoKSkKKyAgICAgICAgZmJvID0gKEdMdWludClidWZm
ZXItPm9iamVjdCgpOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFsaWFz
ID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8p
IHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAg
IG1fYm91bmRGQk8gPSBmYm87CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciog
cmVuZGVyYnVmZmVyKQpAQCAtNjc2LDggKzc5MSwyNCBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+
IEdyYXBoaWNzQ29udGV4dDNECiAgICAgaWYgKHR5cGUgIT0gR0xfVU5TSUdORURfQllURSB8fCBm
b3JtYXQgIT0gR0xfUkdCQSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAorICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9t
dWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4
LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CiAgICAgUmVmUHRyPFdl
YkdMVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3Jl
YXRlKHdpZHRoICogaGVpZ2h0ICogNCk7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCAoR0x2b2lkKikgYXJyYXktPmRhdGEoKSk7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVGQk8pOworICAgIGlmICghbV9hdHRycy5hbHBoYSkgeworICAgICAgICAvLyBJZiBhbHBo
YSBpcyBvZmYsIGJ5IGRlZmF1bHQgZ2xSZWFkUGl4ZWxzIHNob3VsZCBzZXQgdGhlIGFscGhhIHRv
IDI1NSBpbnN0ZWFkIG9mIDAuCisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHVudGlsIDo6Z2xS
ZWFkUGl4ZWxzIGZpeGVzIGl0cyBiZWhhdmlvci4KKyAgICAgICAgR0x1Ynl0ZSogZGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KGFycmF5LT5kYXRhKCkpOworICAgICAgICB1bnNpZ25l
ZCBieXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMzsgaSA8IGJ5dGVMZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgICAgIGRhdGFbaV0gPSAy
NTU7CisgICAgfQogICAgIHJldHVybiBhcnJheTsgICAgCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0JKHJldmlzaW9uIDU2
Mzk4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzE2LDcgKzE3MTYsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6c2V0Q29udGVudHNUb0dyYXBoCiAKICAgICBpZiAobV9wbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEICE9IE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEICYmIG1fcGxhdGZvcm1UZXh0dXJl
ICE9IE51bGxQbGF0Zm9ybTNET2JqZWN0KSB7CiAgICAgICAgIC8vIGNyZWF0ZSB0aGUgaW5uZXIg
M2QgbGF5ZXIKLSAgICAgICAgbV9jb250ZW50c0xheWVyLmFkb3B0TlMoW1tDYW52YXMzRExheWVy
IGFsbG9jXSBpbml0V2l0aENvbnRleHQ6c3RhdGljX2Nhc3Q8Q0dMQ29udGV4dE9iaj4obV9wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKSB0ZXh0dXJlOnN0YXRpY19jYXN0PEdMdWludD4obV9wbGF0
Zm9ybVRleHR1cmUpXSk7CisgICAgICAgIG1fY29udGVudHNMYXllci5hZG9wdE5TKFtbQ2FudmFz
M0RMYXllciBhbGxvY10gaW5pdFdpdGhDb250ZXh0OmNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0
M0QqPihncmFwaGljc0NvbnRleHQzRCldKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIFttX2Nv
bnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIjNEIExheWVyIl07CiAjZW5kaWYKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gNTY0MzEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDMtMjMgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBIb29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQg
Y3JlYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzM0MTYKKworICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsLmNwcDogSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5HTCBjb250ZXh0
IGNyZWF0aW9uIGNvZGUgZm9yIENocm9tZS4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6On5XZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlc2hhcGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWFkQmFja0Zy
YW1lYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6cmVhZFBpeGVscyk6IERlYWwgd2l0aCB3cm9uZyByZXR1cm5lZCBh
bHBoYSB2YWx1ZXMgaW4gTWFjLgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmg6IEFkZCBhIGZ1bmN0aW9uLgorCiAyMDEwLTAzLTIzICBLZW5uZXRoIFJ1c3Nl
bGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNTYzOTgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjIsNyArMTIyLDEwIEBAIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OldlYkdyYXAK
ICAgICA6IG1faW5pdGlhbGl6ZWQoZmFsc2UpCiAgICAgLCBtX3RleHR1cmUoMCkKICAgICAsIG1f
ZmJvKDApCi0gICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cigwKQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiAgICAg
LCBtX2JvdW5kRkJPKDApCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCiAgICAg
LCBtX3NjYW5saW5lKDApCkBAIC0xNTAsNyArMTUzLDE1IEBAIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6On5XZWJHcmEKICAgICBpZiAobV9pbml0aWFsaXplZCkgewogICAgICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICNpZm5kZWYgUkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cK
LSAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAg
ICAgICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgICAgIGdsRGVsZXRl
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAg
ICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAg
ICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEs
ICZtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICht
X2F0dHJpYnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICAg
ICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgICAgIH0KICAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKICNpZmRl
ZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKICAgICAgICAgaWYgKG1fc2NhbmxpbmUpCkBA
IC0xODIsMTYgKzE5Myw2IEBAIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6On5XZWJH
cmEKIAogYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppbml0aWFsaXplKFdl
YkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiB7Ci0gICAgLy8gRklY
TUU6IHdlIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQKLSAg
ICAvLyBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBh
bmQKLSAgICAvLyBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgYW5kIGNvdWxk
IG5vdCBiZSBob25vcmVkCi0gICAgLy8gYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUg
T3BlbkdMIGltcGxlbWVudGF0aW9uLgotICAgIG1fYXR0cmlidXRlcy5hbHBoYSA9IHRydWU7Ci0g
ICAgbV9hdHRyaWJ1dGVzLmRlcHRoID0gdHJ1ZTsKLSAgICBtX2F0dHJpYnV0ZXMuc3RlbmNpbCA9
IGZhbHNlOwotICAgIG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICBtX2F0dHJp
YnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKLQogI2lmIE9TKFdJTkRPV1MpCiAgICAg
V05EQ0xBU1Mgd2M7CiAgICAgaWYgKCFHZXRDbGFzc0luZm8oR2V0TW9kdWxlSGFuZGxlKDApLCBM
IkNBTlZBU0dMIiwgJndjKSkgewpAQCAtMzc0LDEwICszNzUsNDAgQEAgYm9vbCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjppbgogICAgICAgICBzX2luaXRpYWxpemVkR0xFVyA9IHRy
dWU7CiAgICAgfQogCisgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKyAgICB2YWxpZGF0
ZUF0dHJpYnV0ZXMoKTsKKwogICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIHJldHVybiB0
cnVlOwogfQogCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnZhbGlkYXRl
QXR0cmlidXRlcygpCit7CisgICAgY29uc3QgY2hhciogZXh0ZW5zaW9ucyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKTsKKworICAgIGlm
IChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkgeworICAgICAgICBpZiAoc3RkOjpzdHJzdHIoZXh0ZW5z
aW9ucywgIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7CisgICAgICAgICAgICBpZiAo
IW1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZXMuZGVwdGgg
PSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYXR0cmlidXRlcy5zdGVuY2ls
ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAg
ICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAg
IC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3Ig
aXMgTlZJRElBLgorICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAgICAgaWYgKCFzdGQ6
OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKKyAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBm
YWxzZTsKKyNlbmRpZgorICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIXN0ZDo6c3Ryc3Ry
KGV4dGVuc2lvbnMsICJHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkKKyAgICAgICAg
ICAgIG1fYXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICB9CisgICAgLy8gRklYTUU6
IGluc3RlYWQgb2YgZW5mb3JjaW5nIHByZW11bHRpcGxpZWRBbHBoYSA9IHRydWUsIGltcGxlbWVu
dCB0aGUKKyAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIHdoZW4gcHJlbXVsdGlwbGllZEFscGhhID0g
ZmFsc2UgaXMgcmVxdWVzdGVkLgorICAgIG1fYXR0cmlidXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEg
PSB0cnVlOworfQorCiBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om1ha2VD
b250ZXh0Q3VycmVudCgpCiB7CiAjaWYgT1MoV0lORE9XUykKQEAgLTQ2MywyMyArNDk0LDg4IEBA
IHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmUKICAgICAgICAgbV90ZXh0
dXJlID0gY3JlYXRlVGV4dHVyZU9iamVjdCh0YXJnZXQpOwogICAgICAgICAvLyBHZW5lcmF0ZSB0
aGUgZnJhbWVidWZmZXIgb2JqZWN0CiAgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZt
X2Zibyk7Ci0gICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZXB0aCBidWZmZXIKLSAgICAgICAgZ2xH
ZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgZ2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIG1fYm91bmRG
Qk8gPSBtX2ZibzsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXB0aCB8fCBtX2F0dHJpYnV0
ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0
aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAvLyBHZW5lcmF0ZSB0aGUgbXVsdGlzYW1wbGUgZnJh
bWVidWZmZXIgb2JqZWN0CisgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Cisg
ICAgICAgICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Cisg
ICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOworICAgICAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87
CisgICAgICAgICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoIHx8IG1fYXR0cmli
dXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KICAgICB9CiAKLSAg
ICAvLyBSZWFsbG9jYXRlIHRoZSBjb2xvciBhbmQgZGVwdGggYnVmZmVycwotICAgIGdsQmluZFRl
eHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIEdM
X1JHQkE4LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
LSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgMCk7CisgICAgR0xpbnQgaW50ZXJuYWxDb2xvckZv
cm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICBp
ZiAobV9hdHRyaWJ1dGVzLmFscGhhKSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBH
TF9SR0JBODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OworICAgICAgICBjb2xvckZvcm1h
dCA9IEdMX1JHQjsKKyAgICB9CisgICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2lsIHx8IG1fYXR0
cmlidXRlcy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hl
cmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBTZWUg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKG1fYXR0
cmlidXRlcy5zdGVuY2lsICYmIG1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhf
Q09NUE9ORU5UOworICAgIH0KKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKwor
ICAgIC8vIFJlc2l6ZSBtdWx0aXNhbXBsaW5nIEZCTworICAgIGlmIChtX2F0dHJpYnV0ZXMuYW50
aWFsaWFzKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICBnbEdldElu
dGVnZXJ2KEdMX01BWF9TQU1QTEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgR0xp
bnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIGlm
IChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0
b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIH0KKyAgICAgICAgZ2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcik7CisgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IG1fYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgZ2xCaW5kUmVuZGVyYnVm
ZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkK
KyAgICAgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobV9hdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0K
KyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwor
ICAgICAgICBHTGVudW0gc3RhdHVzID0gZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEVfRVhUKSB7CisgICAgICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDNEOiBtdWx0
aXNhbXBsaW5nIGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRlXG4iKTsKIAotICAgIGdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIG1fYm91bmRGQk8g
PSBtX2ZibzsKLSAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwg
bV9kZXB0aEJ1ZmZlcik7Ci0gICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZ2xCaW5k
UmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICAgICAgLy8g
RklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICB9
CisgICAgfQogCisgICAgLy8gUmVzaXplIHJlZ3VsYXIgRkJPCisgICAgaWYgKG1fYm91bmRGQk8g
IT0gbV9mYm8pIHsKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9CisgICAg
Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIG1fdGV4dHVyZSk7CisgICAgZ2xUZXhJbWFnZTJEKHRhcmdl
dCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIDApOwogICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIHRhcmdldCwgbV90ZXh0
dXJlLCAwKTsKLSAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhCdWZmZXIpOworICAgIGdsQmluZFRleHR1cmUodGFyZ2V0LCAwKTsKKyAgICBpZiAoIW1fYXR0
cmlidXRlcy5hbnRpYWxpYXMgJiYgKG1fYXR0cmlidXRlcy5zdGVuY2lsIHx8IG1fYXR0cmlidXRl
cy5kZXB0aCkpIHsKKyAgICAgICAgZ2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9y
YWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAg
ICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAg
IGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBU
SF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwg
MCk7CisgICAgfQogICAgIEdMZW51bSBzdGF0dXMgPSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQoR0xfRlJBTUVCVUZGRVJfRVhUKTsKICAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFX0VYVCkgewogICAgICAgICBwcmludGYoIldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6IGZyYW1lYnVmZmVyIHdhcyBpbmNvbXBsZXRlXG4iKTsKQEAgLTQ4Nyw2ICs1ODMs
OSBAQCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlCiAgICAgICAgIC8v
IEZJWE1FOiBjbGVhbnVwLgogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIH0KKworICAg
IGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKICNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5H
X1dJTkRPVwogCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCkBAIC00OTcsOCAr
NTk2LDEyIEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmUKICAgICBt
X3NjYW5saW5lID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKICNlbmRpZiAvLyBGTElQ
X0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKIAotICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCk7Ci0KKyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Cisg
ICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RF
TkNJTF9CVUZGRVJfQklUOworICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgIGNs
ZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIGdsQ2xlYXIoY2xlYXJNYXNrKTsK
IH0KIAogI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQpAQCAtNTQyLDkgKzY0NSwx
OSBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlCiAgICAgLy8gdmVy
dGljYWwgZmxpcCBpcyBvbmx5IGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGFueXdheSB1bnRpbCBDaHJv
bWUKICAgICAvLyBpcyBmdWxseSBHUFUgY29tcG9zaXRlZCwgaXQgd2Fzbid0IHdvcnRoIHRoZSBj
b21wbGV4aXR5LgogCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IChtX2JvdW5kRkJPICE9IG1f
ZmJvKTsKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTzsK
KyAgICBpZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
ICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7
CisgICAgICAgIGdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY2FjaGVkV2lkdGgsIG1fY2Fj
aGVkSGVpZ2h0LCAwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xfQ09MT1Jf
QlVGRkVSX0JJVCwgR0xfTElORUFSKTsKICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAg
ICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgZ2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIH0KKyAgICB9CiAjaWYg
UExBVEZPUk0oU0tJQSkKICAgICBnbFJlYWRQaXhlbHMoMCwgMCwgbV9jYWNoZWRXaWR0aCwgbV9j
YWNoZWRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CiAjZWxpZiBQ
TEFURk9STShDRykKQEAgLTY4Myw5ICs3OTYsMTEgQEAgdm9pZCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpiaQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmICgh
ZnJhbWVidWZmZXIpCi0gICAgICAgIGZyYW1lYnVmZmVyID0gbV9mYm87Ci0gICAgZ2xCaW5kRnJh
bWVidWZmZXJFWFQodGFyZ2V0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgbV9ib3VuZEZCTyA9IGZyYW1l
YnVmZmVyOworICAgICAgICBmcmFtZWJ1ZmZlciA9IChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzID8g
bV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZnJhbWVidWZmZXIgIT0gbV9ib3Vu
ZEZCTykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZyYW1lYnVmZmVy
KTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IGZyYW1lYnVmZmVyOworICAgIH0KIH0KIAogREVMRUdB
VEVfVE9fR0xfMihiaW5kUmVuZGVyYnVmZmVyLCBCaW5kUmVuZGVyYnVmZmVyRVhULCB1bnNpZ25l
ZCBsb25nLCBXZWJHTElkKQpAQCAtOTgyLDcgKzEwOTcsMzQgQEAgREVMRUdBVEVfVE9fR0xfMihw
aXhlbFN0b3JlaSwgUGl4ZWxTdG9yZQogCiBERUxFR0FURV9UT19HTF8yKHBvbHlnb25PZmZzZXQs
IFBvbHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQogCi1ERUxFR0FURV9UT19HTF83KHJlYWRQ
aXhlbHMsIFJlYWRQaXhlbHMsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQqKQordm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQs
IHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogcGl4ZWxzKQoreworI2lmbmRlZiBSRU5ERVJfVE9f
REVCVUdHSU5HX1dJTkRPVworICAgIGlmIChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIGds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAg
ICAgIGdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwg
eSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIp
OworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKKyAgICB9CisjZW5kaWYKKyAgICBnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworI2lmIFBMQVRGT1JNKENHKQorICAgIGlmICghbV9hdHRy
aWJ1dGVzLmFscGhhKSB7CisgICAgICAgIC8vIElmIGFscGhhIGlzIG9mZiwgYnkgZGVmYXVsdCBn
bFJlYWRQaXhlbHMgc2hvdWxkIHNldCB0aGUgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAg
ICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdW50aWwgZ2xSZWFkUGl4ZWxzIGZpeGVzIGl0cyBiZWhh
dmlvci4KKyAgICAgICAgLy8gUGl4ZWxzIGFyZSBzdG9yZWQgaW4gV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheSwgd2hpY2ggaXMgdW5zaWduZWQgY2hhciBhcnJheS4KKyAgICAgICAgdW5zaWduZWQgY2hh
ciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7CisgICAg
ICAgIC8vIEZJWE1FOiB0YWtlIGludG8gYWNjb3VudCBwYWNrIGFsaWdubWVudC4KKyAgICAgICAg
dW5zaWduZWQgbG9uZyBieXRlTGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiA0ICogc2l6ZW9mKHVu
c2lnbmVkIGNoYXIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDM7IGkgPCBieXRl
TGVuZ3RoOyBpICs9IDQpCisgICAgICAgICAgICBkYXRhW2ldID0gMjU1OworICAgIH0KKyNlbmRp
ZgorI2lmbmRlZiBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVworICAgIGlmIChtX2F0dHJpYnV0
ZXMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAg
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyNl
bmRpZgorfQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlbGVhc2VT
aGFkZXJDb21waWxlcigpCiB7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkocmV2aXNpb24gNTYzOTgpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjY0LDkgKzI2NCwxNCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pbml0
aWFsaXplZDsKICAgICB1bnNpZ25lZCBpbnQgbV90ZXh0dXJlOwogICAgIHVuc2lnbmVkIGludCBt
X2ZibzsKLSAgICB1bnNpZ25lZCBpbnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQg
bV9kZXB0aFN0ZW5jaWxCdWZmZXI7CiAgICAgdW5zaWduZWQgaW50IG1fY2FjaGVkV2lkdGgsIG1f
Y2FjaGVkSGVpZ2h0OwogCisgICAgLy8gRm9yIG11bHRpc2FtcGxpbmcKKyAgICB1bnNpZ25lZCBp
bnQgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICB1bnNpZ25lZCBpbnQgbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
OworCiAgICAgLy8gRm9yIHRyYWNraW5nIHdoaWNoIEZCTyBpcyBib3VuZAogICAgIHVuc2lnbmVk
IGludCBtX2JvdW5kRkJPOwogCkBAIC0yNzcsNiArMjgyLDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKICNlbmRpZgogCisgICAgLy8g
VGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBh
dHRyaWJ1dGVzLCBpbgorICAgIC8vIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBh
bmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yIGNvdWxkCisgICAgLy8gbm90IGJlIGhvbm9yZWQg
YmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgor
ICAgIHZvaWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CisKICAgICAvLyBOb3RlOiB3ZSBhcmVuJ3Qg
Y3VycmVudGx5IHVzaW5nIHRoaXMgaW5mb3JtYXRpb24sIGJ1dCB3ZSB3aWxsCiAgICAgLy8gbmVl
ZCB0byBpbiBvcmRlciB0byB2ZXJpZnkgdGhhdCBhbGwgZW5hYmxlZCB2ZXJ0ZXggYXJyYXlzIGhh
dmUKICAgICAvLyBhIHZhbGlkIGJ1ZmZlciBib3VuZCAtLSB0byBhdm9pZCBjcmFzaGVzIG9uIGNl
cnRhaW4gY2FyZHMuCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NjQzMSkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTAzLTIzICBaaGVu
eWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSG9vayB1cCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIHRvIE9wZW5H
TCBjb250ZXh0IGNyZWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMzNDE2CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250
ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMt
YWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDogV2ViR0wgY29u
dGV4dCBhdHRyaWJ1dGVzIGJlaGF2aW9yIGNoYW5nZWQgd2l0aCB0aGlzIGZpeC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRtbDogRGl0dG8uCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dDogU3RlbmNp
bCBidWZmZXIgaXMgZW5hYmxlZCwgdGh1cyBTdGVuY2lsIEJpdHMgaXMgbm8gbG9uZ2VyIDAuCisg
ICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWw6IERpdHRvLgorCiAy
MDEwLTAzLTIzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxp
YXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9j
b250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisgICAgICAgCitWZXJpZnkgV2ViR0xD
b250ZXh0QXR0cmlidXRlcyBhcmUgd29ya2luZyBhcyBzcGVjaWZpZWQsIGluY2x1ZGluZyBhbHBo
YSwgZGVwdGgsIHN0ZW5jaWwsIGFudGlhbGlhcywgYnV0IG5vdCBwcmVtdWx0aXBsaWVkQWxwaGEK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNiA6IEhvb2sgdXAgV2ViR0xD
b250ZXh0QXR0cmlidXRlcyB0byBPcGVuR0wgY29udGV4dCBjcmVhdGlvbiBjb2RlCitUZXN0aW5n
IGFscGhhID0gdHJ1ZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9uJywgeyBhbHBoYTog
dHJ1ZSwgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBb
IDAsIDAsIDAsIDAgXSwgMSwgMCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzID0g
d2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0
dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQor
UEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJz
LmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxw
aGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3RpbmcgYWxwaGEgPSBm
YWxzZQorUEFTUyB3ZWJHTCA9IGdldFdlYkdMKCdhbHBoYU9mZicsIHsgYWxwaGE6IGZhbHNlLCBk
ZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwg
MCwgMCBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5n
ZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5h
bHBoYSBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBj
b250ZXh0QXR0cmlicy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlh
bGlhcyBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMg
dHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3JyZWN0Q29sb3IKK1Rlc3RpbmcgZGVwdGggPSB0cnVlCitQ
QVNTIHdlYkdMID0gZ2V0V2ViR0woJ2RlcHRoT24nLCB7IHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxp
YXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29u
dGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgor
UEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFs
cGhhIGlzIHRydWUKK1BBU1MgY29udGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBj
b250ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJl
bXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0
aW5nIGRlcHRoID0gZmFsc2UKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnZGVwdGhPZmYnLCB7IGRl
cHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAwLCAwLCAw
LCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicyA9IHdlYkdMLmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNTIGNvbnRleHRBdHRyaWJzLmRl
cHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIHRydWUKK1BBU1MgY29u
dGV4dEF0dHJpYnMuc3RlbmNpbCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbnRpYWxp
YXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRy
dWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5nIHN0ZW5jaWwgPSB0cnVlCitQ
QVNTIHdlYkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxPbicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2ls
OiB0cnVlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24t
bnVsbC4KK1BBU1MgY29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygp
IGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyB0cnVlCitQQVNTIGNv
bnRleHRBdHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBjb250ZXh0QXR0cmlicy5hbHBoYSBp
cyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyBpcyBmYWxzZQorUEFTUyBjb250
ZXh0QXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQorUEFTUyBwaXhlbCBpcyBjb3Jy
ZWN0Q29sb3IKK1Rlc3Rpbmcgc3RlbmNpbCA9IGZhbHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0wo
J3N0ZW5jaWxPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczog
ZmFsc2UgfSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIGlzIG5vbi1udWxsLgorUEFTUyBjb250ZXh0
QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCitQQVNT
IGNvbnRleHRBdHRyaWJzLmRlcHRoIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLnN0ZW5j
aWwgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMuYWxwaGEgaXMgdHJ1ZQorUEFTUyBjb250
ZXh0QXR0cmlicy5hbnRpYWxpYXMgaXMgZmFsc2UKK1BBU1MgY29udGV4dEF0dHJpYnMucHJlbXVs
dGlwbGllZEFscGhhIGlzIHRydWUKK1BBU1MgcGl4ZWwgaXMgY29ycmVjdENvbG9yCitUZXN0aW5n
IGFudGlhbGlhcyA9IHRydWUKK1BBU1Mgd2ViR0wgPSBnZXRXZWJHTCgnYW50aWFsaWFzT24nLCB7
IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiB0
cnVlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1MgY29udGV4dEF0
dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxsLgorUEFTUyBj
b250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmlicy5zdGVuY2ls
IGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIGZhbHNlCitQQVNTIGNvbnRl
eHRBdHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyA9
PSBmYWxzZSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSBp
cyB0cnVlCitQQVNTIHBpeGVsWzBdID09IDI1NSB8fCBwaXhlbFswXSA9PSAwIGlzIGZhbHNlCitU
ZXN0aW5nIGFudGlhbGlhcyA9IGZhbHNlCitQQVNTIHdlYkdMID0gZ2V0V2ViR0woJ2FudGlhbGlh
c09mZicsIHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiBmYWxzZSwgYWxwaGE6IGZhbHNlLCBhbnRp
YWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSBpcyBub24tbnVsbC4KK1BBU1Mg
Y29udGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5vbi1udWxs
LgorUEFTUyBjb250ZXh0QXR0cmlicy5kZXB0aCBpcyBmYWxzZQorUEFTUyBjb250ZXh0QXR0cmli
cy5zdGVuY2lsIGlzIGZhbHNlCitQQVNTIGNvbnRleHRBdHRyaWJzLmFscGhhIGlzIGZhbHNlCitQ
QVNTIGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGNvbnRleHRBdHRyaWJzLmFu
dGlhbGlhcyA9PSBmYWxzZSBpcyB0cnVlCitQQVNTIGNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxp
ZWRBbHBoYSBpcyB0cnVlCitQQVNTIHBpeGVsWzBdID09IDI1NSB8fCBwaXhlbFswXSA9PSAwIGlz
IHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMt
YWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3Rl
bmNpbC1hbnRpYWxpYXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlh
cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMCBAQAorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBpZD0idnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzMg
cG9zOworYXR0cmlidXRlIHZlYzQgY29sb3JJbjsKK3ZhcnlpbmcgdmVjNCBjb2xvcjsKKwordm9p
ZCBtYWluKCkKK3sKKyAgICBjb2xvciA9IGNvbG9ySW47CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0
KHBvcy54eXosIDEuMCk7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlw
ZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Cit2YXJ5aW5nIHZlYzQgY29sb3I7CisKK3ZvaWQgbWFp
bigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlw
dD4KK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKworLy8gVGhlc2UgZm91ciBkZWNs
YXJhdGlvbnMgbmVlZCB0byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIgdG8gc2VlIHRoZW0KK3Zh
ciB3ZWJHTCA9IG51bGw7Cit2YXIgY29udGV4dEF0dHJpYnMgPSBudWxsOwordmFyIHBpeGVsID0g
WzAsIDAsIDAsIDFdOwordmFyIGNvcnJlY3RDb2xvciA9IG51bGw7CisKK2Z1bmN0aW9uIGluaXQo
KQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJHTEVuYWJsZWQi
LCAiMSIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICBk
ZXNjcmlwdGlvbignVmVyaWZ5IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgYXJlIHdvcmtpbmcgYXMg
c3BlY2lmaWVkLCBpbmNsdWRpbmcgYWxwaGEsIGRlcHRoLCBzdGVuY2lsLCBhbnRpYWxpYXMsIGJ1
dCBub3QgcHJlbXVsdGlwbGllZEFscGhhJyk7CisKKyAgICBkZWJ1ZygnUmVncmVzc2lvbiB0ZXN0
IGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM0
MTYiPmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQxNjwvYT4gOiA8
Y29kZT5Ib29rIHVwIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgdG8gT3BlbkdMIGNvbnRleHQgY3Jl
YXRpb24gY29kZTwvY29kZT4nKTsKKyAgICAKKyAgICBydW5UZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IGdldFdlYkdMKGNhbnZhc05hbWUsIGNvbnRleHRBdHRyaWJzLCBjbGVhckNvbG9yLCBjbGVhckRl
cHRoLCBjbGVhclN0ZW5jaWwpCit7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGNhbnZhc05hbWUpOworICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCJleHBl
cmltZW50YWwtd2ViZ2wiLCBjb250ZXh0QXR0cmlicyk7CisgICAgaWYgKCFnbCkgeworICAgICAg
ICBhbGVydCgiTm8gV2ViR0wgY29udGV4dCBmb3VuZCIpOworICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9CisgICAgdmFyIGFjdHVhbENvbnRleHRBdHRyaWJzID0gZ2wuZ2V0Q29udGV4dEF0dHJp
YnV0ZXMoKTsKKyAgICAKKyAgICAvLyBBZGQgYSBjb25zb2xlCisgICAgZ2wuY29uc29sZSA9ICgi
Y29uc29sZSIgaW4gd2luZG93KSA/IHdpbmRvdy5jb25zb2xlIDogeyBsb2c6IGZ1bmN0aW9uKCkg
eyB9IH07CisKKyAgICAvLyBjcmVhdGUgb3VyIHNoYWRlcnMKKyAgICB2YXIgdmVydGV4U2hhZGVy
ID0gbG9hZFNoYWRlcihnbCwgInZzaGFkZXIiKTsKKyAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBs
b2FkU2hhZGVyKGdsLCAiZnNoYWRlciIpOworCisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIWZy
YWdtZW50U2hhZGVyKQorICAgICAgICByZXR1cm4gbnVsbDsKKworICAgIC8vIENyZWF0ZSB0aGUg
cHJvZ3JhbSBvYmplY3QKKyAgICBnbC5wcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworCisg
ICAgaWYgKCFnbC5wcm9ncmFtKQorICAgICAgICByZXR1cm4gbnVsbDsKKworICAgIC8vIEF0dGFj
aCBvdXIgdHdvIHNoYWRlcnMgdG8gdGhlIHByb2dyYW0KKyAgICBnbC5hdHRhY2hTaGFkZXIoZ2wu
cHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIoZ2wucHJvZ3JhbSwg
ZnJhZ21lbnRTaGFkZXIpOworCisgICAgLy8gQmluZCBhdHRyaWJ1dGVzCisgICAgdmFyIGF0dHJp
YnMgPSBbICJwb3MiLCAiY29sb3JJbiIgXTsKKyAgICBmb3IgKHZhciBpIGluIGF0dHJpYnMpCisg
ICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihnbC5wcm9ncmFtLCBpLCBhdHRyaWJzW2ldKTsK
KworICAgIC8vIExpbmsgdGhlIHByb2dyYW0KKyAgICBnbC5saW5rUHJvZ3JhbShnbC5wcm9ncmFt
KTsKKworICAgIC8vIENoZWNrIHRoZSBsaW5rIHN0YXR1cworICAgIHZhciBsaW5rZWQgPSBnbC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKGdsLnByb2dyYW0sIGdsLkxJTktfU1RBVFVTKTsKKyAgICBpZiAo
IWxpbmtlZCkgeworICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBsaW5r
CisgICAgICAgIHZhciBlcnJvciA9IGdsLmdldFByb2dyYW1JbmZvTG9nIChnbC5wcm9ncmFtKTsK
KyAgICAgICAgZ2wuY29uc29sZS5sb2coIkVycm9yIGluIHByb2dyYW0gbGlua2luZzoiK2Vycm9y
KTsKKworICAgICAgICBnbC5kZWxldGVQcm9ncmFtKGdsLnByb2dyYW0pOworICAgICAgICBnbC5k
ZWxldGVQcm9ncmFtKGZyYWdtZW50U2hhZGVyKTsKKyAgICAgICAgZ2wuZGVsZXRlUHJvZ3JhbSh2
ZXJ0ZXhTaGFkZXIpOworCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIGdsLnVz
ZVByb2dyYW0oZ2wucHJvZ3JhbSk7CisKKyAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0s
IGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOworICAgIGdsLmNs
ZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgZ2wuY2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7
CisgICAgZ2wuZW5hYmxlKGdsLkRFUFRIX1RFU1QpOworICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lM
X1RFU1QpOworICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZG
RVJfQklUIHwgZ2wuU1RFTkNJTF9CVUZGRVJfQklUKTsKKworICAgIHJldHVybiBnbDsKK30KKwor
ZnVuY3Rpb24gZHJhd0FuZFJlYWRQaXhlbChnbCwgdmVydGljZXMsIGNvbG9ycywgeCwgeSkKK3sK
KyAgICB2YXIgY29sb3JPZmZzZXQgPSB2ZXJ0aWNlcy5ieXRlTGVuZ3RoOworCisgICAgdmFyIHZi
byA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVS
LCB2Ym8pOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvck9mZnNldCAr
IGNvbG9ycy5ieXRlTGVuZ3RoLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0
YShnbC5BUlJBWV9CVUZGRVIsIDAsIHZlcnRpY2VzKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGds
LkFSUkFZX0JVRkZFUiwgY29sb3JPZmZzZXQsIGNvbG9ycyk7CisKKyAgICBnbC52ZXJ0ZXhBdHRy
aWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2wuZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCA0LCBnbC5V
TlNJR05FRF9CWVRFLCB0cnVlLCAwLCBjb2xvck9mZnNldCk7CisgICAgZ2wuZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoMSk7CisKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgdmVy
dGljZXMubGVuZ3RoIC8gMyk7CisKKyAgICByZXR1cm4gZ2wucmVhZFBpeGVscyh4LCB5LCAxLCAx
LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFKTsKK30KKworZnVuY3Rpb24gdGVzdEFscGhhKGFs
cGhhKQoreworICAgIGRlYnVnKCJUZXN0aW5nIGFscGhhID0gIiArIGFscGhhKTsKKyAgICBpZiAo
YWxwaGEpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnYWxwaGFP
bicsIHsgYWxwaGE6IHRydWUsIGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlh
czogZmFsc2UgfSwgWyAwLCAwLCAwLCAwIF0sIDEsIDApIik7CisgICAgZWxzZQorICAgICAgICBz
aG91bGRCZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ2FscGhhT2ZmJywgeyBhbHBoYTogZmFs
c2UsIGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSwgWyAw
LCAwLCAwLCAwIF0sIDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0QXR0cmli
cyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgiY29udGV4
dEF0dHJpYnMuYWxwaGEiLCAoYWxwaGEgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAgc2hvdWxk
QmUoImNvbnRleHRBdHRyaWJzLmRlcHRoIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRl
eHRBdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJp
YnMuYW50aWFsaWFzIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnBy
ZW11bHRpcGxpZWRBbHBoYSIsICJ0cnVlIik7CisKKyAgICB2YXIgYnVmID0gd2ViR0wucmVhZFBp
eGVscygwLCAwLCAxLCAxLCB3ZWJHTC5SR0JBLCB3ZWJHTC5VTlNJR05FRF9CWVRFKTsKKyAgICBw
aXhlbFswXSA9IGJ1ZlswXTsKKyAgICBwaXhlbFsxXSA9IGJ1ZlsxXTsKKyAgICBwaXhlbFsyXSA9
IGJ1ZlsyXTsKKyAgICBwaXhlbFszXSA9IGJ1ZlszXTsKKyAgICBjb3JyZWN0Q29sb3IgPSAoYWxw
aGEgPyBbMCwgMCwgMCwgMF0gOiBbMCwgMCwgMCwgMjU1XSk7CisgICAgc2hvdWxkQmUoInBpeGVs
IiwgImNvcnJlY3RDb2xvciIpOworfQorCitmdW5jdGlvbiB0ZXN0RGVwdGgoZGVwdGgpCit7Cisg
ICAgZGVidWcoIlRlc3RpbmcgZGVwdGggPSAiICsgZGVwdGgpOworICAgIGlmIChkZXB0aCkKKyAg
ICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdkZXB0aE9uJywgeyBzdGVu
Y2lsOiBmYWxzZSwgYW50aWFsaWFzOiBmYWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsK
KyAgICBlbHNlCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnZGVw
dGhPZmYnLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFsc2Ug
fSwgWyAwLCAwLCAwLCAxIF0sIDEsIDApIik7CisgICAgc2hvdWxkQmVOb25OdWxsKCJjb250ZXh0
QXR0cmlicyA9IHdlYkdMLmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKKyAgICBzaG91bGRCZSgi
Y29udGV4dEF0dHJpYnMuZGVwdGgiLCAoZGVwdGggPyAidHJ1ZSIgOiAiZmFsc2UiKSk7CisgICAg
c2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFscGhhIiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgi
Y29udGV4dEF0dHJpYnMuc3RlbmNpbCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0
QXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJp
YnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKKworICAgIHdlYkdMLmRlcHRoRnVuYyh3
ZWJHTC5ORVZFUik7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsK
KyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAgMS4wLCAwLjAsCisgICAg
ICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAt
MS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOworICAgIHZhciBjb2xv
cnMgPSBuZXcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShbCisgICAgICAgIDI1NSwgMCwgMCwgMjU1
LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAg
ICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1
LCAwLCAwLCAyNTVdKTsKKworICAgIHZhciBidWYgPSBkcmF3QW5kUmVhZFBpeGVsKHdlYkdMLCB2
ZXJ0aWNlcywgY29sb3JzLCAwLCAwKTsKKyAgICBwaXhlbFswXSA9IGJ1ZlswXTsKKyAgICBwaXhl
bFsxXSA9IGJ1ZlsxXTsKKyAgICBwaXhlbFsyXSA9IGJ1ZlsyXTsKKyAgICBwaXhlbFszXSA9IGJ1
ZlszXTsKKyAgICBjb3JyZWN0Q29sb3IgPSAoZGVwdGggPyBbMCwgMCwgMCwgMjU1XSA6IFsyNTUs
IDAsIDAsIDI1NV0pOworICAgIHNob3VsZEJlKCJwaXhlbCIsICJjb3JyZWN0Q29sb3IiKTsKK30K
KworZnVuY3Rpb24gdGVzdFN0ZW5jaWwoc3RlbmNpbCkKK3sKKyAgICBkZWJ1ZygiVGVzdGluZyBz
dGVuY2lsID0gIiArIHN0ZW5jaWwpOworICAgIGlmIChzdGVuY2lsKQorICAgICAgICBzaG91bGRC
ZU5vbk51bGwoIndlYkdMID0gZ2V0V2ViR0woJ3N0ZW5jaWxPbicsIHsgZGVwdGg6IGZhbHNlLCBz
dGVuY2lsOiB0cnVlLCBhbnRpYWxpYXM6IGZhbHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIp
OworICAgIGVsc2UKKyAgICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdz
dGVuY2lsT2ZmJywgeyBkZXB0aDogZmFsc2UsIHN0ZW5jaWw6IGZhbHNlLCBhbnRpYWxpYXM6IGZh
bHNlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIHNob3VsZEJlTm9uTnVsbCgiY29u
dGV4dEF0dHJpYnMgPSB3ZWJHTC5nZXRDb250ZXh0QXR0cmlidXRlcygpIik7CisgICAgc2hvdWxk
QmUoImNvbnRleHRBdHRyaWJzLmRlcHRoIiwgKHN0ZW5jaWwgPyAidHJ1ZSIgOiAiZmFsc2UiKSk7
CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnN0ZW5jaWwiLCAoc3RlbmNpbCA/ICJ0cnVl
IiA6ICJmYWxzZSIpKTsKKyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMuYWxwaGEiLCAidHJ1
ZSIpOworICAgIHNob3VsZEJlKCJjb250ZXh0QXR0cmlicy5hbnRpYWxpYXMiLCAiZmFsc2UiKTsK
KyAgICBzaG91bGRCZSgiY29udGV4dEF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUi
KTsKKworICAgIHdlYkdMLmRlcHRoRnVuYyh3ZWJHTC5BTFdBWVMpOworCisgICAgd2ViR0wuc3Rl
bmNpbEZ1bmMod2ViR0wuTkVWRVIsIDEsIDEpOworICAgIHdlYkdMLnN0ZW5jaWxPcCh3ZWJHTC5L
RUVQLCB3ZWJHTC5LRUVQLCB3ZWJHTC5LRUVQKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBX
ZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAgMS4wLCAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwg
MS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgMS4wLCAw
LjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEuMCwgMC4wXSk7
CisgICAgdmFyIGNvbG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFsKKyAgICAgICAg
MjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAs
IDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1
LAorICAgICAgICAyNTUsIDAsIDAsIDI1NV0pOworCisgICAgdmFyIGJ1ZiA9IGRyYXdBbmRSZWFk
UGl4ZWwod2ViR0wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOworICAgIHBpeGVsWzBdID0gYnVm
WzBdOworICAgIHBpeGVsWzFdID0gYnVmWzFdOworICAgIHBpeGVsWzJdID0gYnVmWzJdOworICAg
IHBpeGVsWzNdID0gYnVmWzNdOworICAgIGNvcnJlY3RDb2xvciA9IChzdGVuY2lsID8gWzAsIDAs
IDAsIDI1NV0gOiBbMjU1LCAwLCAwLCAyNTVdKTsKKyAgICBzaG91bGRCZSgicGl4ZWwiLCAiY29y
cmVjdENvbG9yIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RBbnRpYWxpYXMoYW50aWFsaWFzKQorewor
ICAgIGRlYnVnKCJUZXN0aW5nIGFudGlhbGlhcyA9ICIgKyBhbnRpYWxpYXMpOworICAgIGlmIChh
bnRpYWxpYXMpCisgICAgICAgIHNob3VsZEJlTm9uTnVsbCgid2ViR0wgPSBnZXRXZWJHTCgnYW50
aWFsaWFzT24nLCB7IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwg
YW50aWFsaWFzOiB0cnVlIH0sIFsgMCwgMCwgMCwgMSBdLCAxLCAwKSIpOworICAgIGVsc2UKKyAg
ICAgICAgc2hvdWxkQmVOb25OdWxsKCJ3ZWJHTCA9IGdldFdlYkdMKCdhbnRpYWxpYXNPZmYnLCB7
IGRlcHRoOiBmYWxzZSwgc3RlbmNpbDogZmFsc2UsIGFscGhhOiBmYWxzZSwgYW50aWFsaWFzOiBm
YWxzZSB9LCBbIDAsIDAsIDAsIDEgXSwgMSwgMCkiKTsKKyAgICBzaG91bGRCZU5vbk51bGwoImNv
bnRleHRBdHRyaWJzID0gd2ViR0wuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSIpOworICAgIHNob3Vs
ZEJlKCJjb250ZXh0QXR0cmlicy5kZXB0aCIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJjb250
ZXh0QXR0cmlicy5zdGVuY2lsIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRy
aWJzLmFscGhhIiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLmFudGlh
bGlhcyA9PSB0cnVlIHx8IGNvbnRleHRBdHRyaWJzLmFudGlhbGlhcyA9PSBmYWxzZSIsICJ0cnVl
Iik7CisgICAgc2hvdWxkQmUoImNvbnRleHRBdHRyaWJzLnByZW11bHRpcGxpZWRBbHBoYSIsICJ0
cnVlIik7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAg
ICAgIDEuMCwgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIDEuMCwgMC4wLAorICAgICAgICAtMS4w
LCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgY29sb3JzID0gbmV3IFdlYkdMVW5zaWduZWRCeXRlQXJy
YXkoWworICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisg
ICAgICAgIDI1NSwgMCwgMCwgMjU1XSk7CisgICAgdmFyIGJ1ZiA9IGRyYXdBbmRSZWFkUGl4ZWwo
d2ViR0wsIHZlcnRpY2VzLCBjb2xvcnMsIDAsIDApOworICAgIHBpeGVsWzBdID0gYnVmWzBdOwor
ICAgIC8vIElmIGFudGlhbGlhcyBpcyByZXF1ZXN0ZWQgYnV0IG5vdCBzdXBwb3J0ZWQsIHdlIGZh
a2UgdGhlIGVmZmVjdC4KKyAgICBpZiAoYW50aWFsaWFzICYmICFjb250ZXh0QXR0cmlicy5hbnRp
YWxpYXMpCisgICAgICAgIHBpeGVsWzBdID0gMTI3OworICAgIHNob3VsZEJlKCJwaXhlbFswXSA9
PSAyNTUgfHwgcGl4ZWxbMF0gPT0gMCIsIChhbnRpYWxpYXMgPyAiZmFsc2UiIDogInRydWUiKSk7
Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworCisgICAgdGVzdEFscGhhKHRydWUpOworICAg
IHRlc3RBbHBoYShmYWxzZSk7CisgICAgdGVzdERlcHRoKHRydWUpOworICAgIHRlc3REZXB0aChm
YWxzZSk7CisgICAgdGVzdFN0ZW5jaWwodHJ1ZSk7CisgICAgdGVzdFN0ZW5jaWwoZmFsc2UpOwor
ICAgIHRlc3RBbnRpYWxpYXModHJ1ZSk7CisgICAgdGVzdEFudGlhbGlhcyhmYWxzZSk7CisKKyAg
ICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsK
KyAgICBlcGlsb2d1ZS5zcmMgPSAiLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7
CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlcGlsb2d1ZSk7Cit9CisKK2Z1bmN0aW9u
IGZpbmlzaCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iaW5pdCgpIj4KKzxjYW52YXMgaWQ9ImFscGhhT24i
IHdpZHRoPSIxcHgiIGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImFscGhhT2Zm
IiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJkZXB0aE9u
IiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJkZXB0aE9m
ZiIgd2lkdGg9IjFweCIgaGVpZ2h0PSIxcHgiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0ic3RlbmNp
bE9uIiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJzdGVu
Y2lsT2ZmIiB3aWR0aD0iMXB4IiBoZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSJh
bnRpYWxpYXNPbiIgd2lkdGg9IjJweCIgaGVpZ2h0PSIycHgiPjwvY2FudmFzPgorPGNhbnZhcyBp
ZD0iYW50aWFsaWFzT2ZmIiB3aWR0aD0iMnB4IiBoZWlnaHQ9IjJweCI+PC9jYW52YXM+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQt
YXR0cmlidXRlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTYz
OTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsOCBAQCBQQVNTIGNvbnRleHQg
PSBjcmVhdGUzRENvbnRleHQoKSBpcyBub24tCiBQQVNTIGF0dHJpYnMgPSBjb250ZXh0LmdldENv
bnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51bGwuCiBQQVNTIGF0dHJpYnMuZGVwdGggaXMgdHJ1
ZQogUEFTUyBhdHRyaWJzLmFscGhhIGlzIHRydWUKLVBBU1MgKGF0dHJpYnMuc3RlbmNpbCA9PSB0
cnVlIHx8IGF0dHJpYnMuc3RlbmNpbCA9PSBmYWxzZSkgaXMgdHJ1ZQotUEFTUyAoYXR0cmlicy5h
bnRpYWxpYXMgPT0gdHJ1ZSB8fCBhdHRyaWJzLmFudGlhbGlhcyA9PSBmYWxzZSkgaXMgdHJ1ZQor
UEFTUyBhdHRyaWJzLnN0ZW5jaWwgaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFudGlhbGlhcyA9PSB0
cnVlIHx8IGF0dHJpYnMuYW50aWFsaWFzID09IGZhbHNlIGlzIHRydWUKIFBBU1MgYXR0cmlicy5w
cmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQogVGVzdCBjdXN0b21pemVkIHZhbHVlcwogUEFTUyBj
b250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgc3RlbmNpbDogZmFsc2UsIGFudGlhbGlhczogZmFs
c2UgfSkgaXMgbm9uLW51bGwuCkBAIC0xOCw2ICsxOCwyMiBAQCBQQVNTIGF0dHJpYnMuYWxwaGEg
aXMgdHJ1ZQogUEFTUyBhdHRyaWJzLnN0ZW5jaWwgaXMgZmFsc2UKIFBBU1MgYXR0cmlicy5hbnRp
YWxpYXMgaXMgZmFsc2UKIFBBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQor
VGVzdCBjdXN0b21pemVkIHZhbHVlcworUEFTUyBjb250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsg
ZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlLCBhbnRpYWxpYXM6IGZhbHNlIH0pIGlzIG5vbi1u
dWxsLgorUEFTUyBhdHRyaWJzID0gY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpIGlzIG5v
bi1udWxsLgorUEFTUyBhdHRyaWJzLmRlcHRoIGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbHBoYSBp
cyB0cnVlCitQQVNTIGF0dHJpYnMuc3RlbmNpbCBpcyB0cnVlCitQQVNTIGF0dHJpYnMuYW50aWFs
aWFzIGlzIGZhbHNlCitQQVNTIGF0dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIGlzIHRydWUKK1Rl
c3QgY3VzdG9taXplZCB2YWx1ZXMKK1BBU1MgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dCh7IHBy
ZW11bHRpcGxpZWRBbHBoYTogZmFsc2UsIGFudGlhbGlhczogZmFsc2UgfSkgaXMgbm9uLW51bGwu
CitQQVNTIGF0dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkgaXMgbm9uLW51
bGwuCitQQVNTIGF0dHJpYnMuZGVwdGggaXMgdHJ1ZQorUEFTUyBhdHRyaWJzLmFscGhhIGlzIHRy
dWUKK1BBU1MgYXR0cmlicy5zdGVuY2lsIGlzIHRydWUKK1BBU1MgYXR0cmlicy5hbnRpYWxpYXMg
aXMgZmFsc2UKK1BBU1MgYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEgaXMgdHJ1ZQogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMuaHRt
bAkocmV2aXNpb24gNTYzOTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250
ZXh0LWF0dHJpYnV0ZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTgsOSArMTgsOSBAQCBzaG91
bGRCZU5vbk51bGwoImNvbnRleHQgPSBjcmVhdGUzRENvbnRlCiBzaG91bGRCZU5vbk51bGwoImF0
dHJpYnMgPSBjb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKIHNob3VsZEJlKCJhdHRy
aWJzLmRlcHRoIiwgInRydWUiKTsKIHNob3VsZEJlKCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsK
LS8vIFRoZSBmb2xsb3dpbmcgdHdvIGRlcGVuZCBvbiB3aGV0aGVyIHRoZSBpbXBsZW1lbnRhdGlv
biBhY3R1YWxseSBzdXBwb3J0cyB0aGVtCi1zaG91bGRCZSgiKGF0dHJpYnMuc3RlbmNpbCA9PSB0
cnVlIHx8IGF0dHJpYnMuc3RlbmNpbCA9PSBmYWxzZSkiLCAidHJ1ZSIpOwotc2hvdWxkQmUoIihh
dHRyaWJzLmFudGlhbGlhcyA9PSB0cnVlIHx8IGF0dHJpYnMuYW50aWFsaWFzID09IGZhbHNlKSIs
ICJ0cnVlIik7CitzaG91bGRCZSgiYXR0cmlicy5zdGVuY2lsIiwgInRydWUiKTsKKy8vIEFudGlh
bGlhcyBpcyByZXF1ZXN0ZWQgYnkgZGVmYXVsdCwgYnV0IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBz
dXBwb3J0ZWQuCitzaG91bGRCZSgiYXR0cmlicy5hbnRpYWxpYXMgPT0gdHJ1ZSB8fCBhdHRyaWJz
LmFudGlhbGlhcyA9PSBmYWxzZSIsICJ0cnVlIik7CiBzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0
aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOwogCiBkZWJ1ZyAoIlRlc3QgY3VzdG9taXplZCB2YWx1ZXMi
KTsKQEAgLTMyLDYgKzMyLDI2IEBAIHNob3VsZEJlKCJhdHRyaWJzLnN0ZW5jaWwiLCAiZmFsc2Ui
KTsKIHNob3VsZEJlKCJhdHRyaWJzLmFudGlhbGlhcyIsICJmYWxzZSIpOwogc2hvdWxkQmUoImF0
dHJpYnMucHJlbXVsdGlwbGllZEFscGhhIiwgInRydWUiKTsKIAorZGVidWcoIlRlc3QgY3VzdG9t
aXplZCB2YWx1ZXMiKTsKKy8vIChzdGVuY2lsID09IHRydWUgJiYgZGVwdGggPT0gZmFsc2UpIGlz
IG5vdCBzdXBwb3J0ZWQsIGRlZmF1bHQgZGVwdGggdG8gdHJ1ZQorc2hvdWxkQmVOb25OdWxsKCJj
b250ZXh0ID0gY3JlYXRlM0RDb250ZXh0KHsgZGVwdGg6IGZhbHNlLCBzdGVuY2lsOiB0cnVlLCBh
bnRpYWxpYXM6IGZhbHNlIH0pIik7CitzaG91bGRCZU5vbk51bGwoImF0dHJpYnMgPSBjb250ZXh0
LmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmRlcHRoIiwgInRy
dWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRy
aWJzLnN0ZW5jaWwiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYW50aWFsaWFzIiwgImZh
bHNlIik7CitzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1ZSIpOwor
CitkZWJ1ZygiVGVzdCBjdXN0b21pemVkIHZhbHVlcyIpOworLy8gKHByZW11bHRpcGxpZWRBbHBo
YSA9PSBmYWxzZSkgaXMgbm90IHN1cHBvcnRlZCwgZGVmYXVsdCB0byB0cnVlCitzaG91bGRCZU5v
bk51bGwoImNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoeyBwcmVtdWx0aXBsaWVkQWxwaGE6IGZh
bHNlLCBhbnRpYWxpYXM6IGZhbHNlIH0pIik7CitzaG91bGRCZU5vbk51bGwoImF0dHJpYnMgPSBj
b250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCkiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmRlcHRo
IiwgInRydWUiKTsKK3Nob3VsZEJlKCJhdHRyaWJzLmFscGhhIiwgInRydWUiKTsKK3Nob3VsZEJl
KCJhdHRyaWJzLnN0ZW5jaWwiLCAidHJ1ZSIpOworc2hvdWxkQmUoImF0dHJpYnMuYW50aWFsaWFz
IiwgImZhbHNlIik7CitzaG91bGRCZSgiYXR0cmlicy5wcmVtdWx0aXBsaWVkQWxwaGEiLCAidHJ1
ZSIpOworCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+CiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTYzOTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw3IEBAIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0kKIFBBU1MgY29u
dGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMKSBp
cyBjb250ZXh0LktFRVAKIFBBU1MgY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9QQVNTKSBpcyBjb250ZXh0LktFRVAKIFBBU1MgY29udGV4dC5nZXRQ
YXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0JBQ0tfUkVGKSBpcyAwCi1QQVNTIGNvbnRleHQuZ2V0
UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CSVRTKSBpcyAwCitQQVNTIGNvbnRleHQuZ2V0UGFy
YW1ldGVyKGNvbnRleHQuU1RFTkNJTF9CSVRTKSA+IDAgaXMgdHJ1ZQogUEFTUyBjb250ZXh0Lmdl
dFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQ0xFQVJfVkFMVUUpIGlzIDAKIFBBU1MgY29udGV4
dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5TVEVOQ0lMX0ZBSUwpIGlzIGNvbnRleHQuS0VFUAogUEFT
UyBjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRlVOQykgaXMgY29udGV4dC5B
TFdBWVMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1j
YWxscy5odG1sCShyZXZpc2lvbiA1NjM5OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2dsLWdldC1jYWxscy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIGVs
c2UgewogICAgIC8vIEZJWE1FOiBDdXJyZW50IFdlYktpdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5z
IHRoZSB3cm9uZyB2YWx1ZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMxODQyKQogICAgIC8vc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RF
TkNJTF9CQUNLX1ZBTFVFX01BU0spJywgJzB4RkZGRkZGRkYnKTsKICAgICAvL3Nob3VsZEJlKCdj
b250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfQkFDS19XUklURU1BU0spJywgJzB4
RkZGRkZGRkYnKTsKLSAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIoY29udGV4dC5T
VEVOQ0lMX0JJVFMpJywgJzAnKTsKKyAgICBzaG91bGRCZSgnY29udGV4dC5nZXRQYXJhbWV0ZXIo
Y29udGV4dC5TVEVOQ0lMX0JJVFMpID4gMCcsICd0cnVlJyk7CiAgICAgc2hvdWxkQmUoJ2NvbnRl
eHQuZ2V0UGFyYW1ldGVyKGNvbnRleHQuU1RFTkNJTF9DTEVBUl9WQUxVRSknLCAnMCcpOwogICAg
IHNob3VsZEJlKCdjb250ZXh0LmdldFBhcmFtZXRlcihjb250ZXh0LlNURU5DSUxfRkFJTCknLCAn
Y29udGV4dC5LRUVQJyk7CiAgICAgc2hvdWxkQmUoJ2NvbnRleHQuZ2V0UGFyYW1ldGVyKGNvbnRl
eHQuU1RFTkNJTF9GVU5DKScsICdjb250ZXh0LkFMV0FZUycpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>