<?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>40319</bug_id>
          
          <creation_ts>2010-06-08 12:02:16 -0700</creation_ts>
          <short_desc>Implement format conversions in texImage2D and texSubImage2D taking HTML data</short_desc>
          <delta_ts>2010-06-23 16:22:58 -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>All</rep_platform>
          <op_sys>All</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>40318</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>hausmann</cc>
    
    <cc>jarkko.j.sakkinen</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>235413</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 12:02:16 -0700</bug_when>
    <thetext>Per recent updates to the WebGL spec, texImage2D and texSubImage2D now take format and type arguments which imply that the source data is converted to the format specified by these arguments before transferring to the GL. These format conversions need to be implemented.

This bug depends on 40318.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241572</commentid>
    <comment_count>1</comment_count>
      <attachid>59448</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-22 17:50:06 -0700</bug_when>
    <thetext>Created attachment 59448
Patch

From the ChangeLog:

Generalized code supporting premultiplication of alpha and vertical flip to pack texture data into requested format and type. Handled incoming image data of various formats, RGBA and BGRA in particular, both to reduce the number of temporary copies during texture upload and to support premultiplying alpha for the texImage2D and texSubImage2D entry points taking ArrayBufferView in a subsequent bug. Added test case exercising all combinations of format/type combinations, premultiplication of alpha, and Image/ImageData upload. (Incorporated pnglib.js under fast/canvas/webgl/resources/ to be able to generate Image elements programmatically.) Tested in Safari on Mac OS X and in Chromium on Mac OS X, Windows and Linux.

Note to reviewers:

This is a large patch, but it is the smallest it can possibly be and still implement a self-contained unit of functionality. The test case is exhaustive and should exercise all of the new code paths, some of which have also been verified manually by modifiying some existing WebGL demos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241573</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 17:56:48 -0700</bug_when>
    <thetext>Attachment 59448 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/html/canvas/WebGLRenderingContext.cpp:3403:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/html/canvas/WebGLRenderingContext.cpp:3407:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 2 in 11 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>241575</commentid>
    <comment_count>3</comment_count>
      <attachid>59449</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-22 18:04:48 -0700</bug_when>
    <thetext>Created attachment 59449
Revised patch

Revised patch fixing style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242087</commentid>
    <comment_count>4</comment_count>
      <attachid>59449</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-23 14:34:59 -0700</bug_when>
    <thetext>Comment on attachment 59449
Revised patch

Some comments from over-the-shoulder review:

WebCore/platform/graphics/GraphicsContext3D.cpp:459
 +          if (destinationFormat == RGBA &amp;&amp; alphaOp == kAlphaDoNothing) {
must check sourceDataFormat == kSourceFormatRGBA8!

WebCore/platform/graphics/GraphicsContext3D.cpp:479
 +              switch (alphaOp) {
add case for kAlphaDoNothing in case sourceDataFormat is not RGBA8

LayoutTests/fast/canvas/webgl/tex-image-with-format-and-type.html:97
 +                  useImageData: (useImageData ? true : false),
Can just do !!useImageData</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242134</commentid>
    <comment_count>5</comment_count>
      <attachid>59571</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-23 16:08:37 -0700</bug_when>
    <thetext>Created attachment 59571
Revised patch

Addressed code review feedback.

Updated pnglib.js to latest version, which is now BSD licensed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242137</commentid>
    <comment_count>6</comment_count>
      <attachid>59571</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-23 16:14:54 -0700</bug_when>
    <thetext>Comment on attachment 59571
Revised patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242142</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-23 16:22:58 -0700</bug_when>
    <thetext>Committed r61715: &lt;http://trac.webkit.org/changeset/61715&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59448</attachid>
            <date>2010-06-22 17:50:06 -0700</date>
            <delta_ts>2010-06-22 18:04:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>texture-formats.patch</filename>
            <type>text/plain</type>
            <size>93879</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDYtMjIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBmb3JtYXQgY29udmVyc2lvbnMgaW4gdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2Uy
RCB0YWtpbmcgSFRNTCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MDMxOQorCisgICAgICAgIEdlbmVyYWxpemVkIGNvZGUgc3VwcG9ydGluZyBw
cmVtdWx0aXBsaWNhdGlvbiBvZiBhbHBoYSBhbmQKKyAgICAgICAgdmVydGljYWwgZmxpcCB0byBw
YWNrIHRleHR1cmUgZGF0YSBpbnRvIHJlcXVlc3RlZCBmb3JtYXQgYW5kIHR5cGUuCisgICAgICAg
IEhhbmRsZWQgaW5jb21pbmcgaW1hZ2UgZGF0YSBvZiB2YXJpb3VzIGZvcm1hdHMsIFJHQkEgYW5k
IEJHUkEgaW4KKyAgICAgICAgcGFydGljdWxhciwgYm90aCB0byByZWR1Y2UgdGhlIG51bWJlciBv
ZiB0ZW1wb3JhcnkgY29waWVzIGR1cmluZworICAgICAgICB0ZXh0dXJlIHVwbG9hZCBhbmQgdG8g
c3VwcG9ydCBwcmVtdWx0aXBseWluZyBhbHBoYSBmb3IgdGhlCisgICAgICAgIHRleEltYWdlMkQg
YW5kIHRleFN1YkltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBBcnJheUJ1ZmZlclZpZXcKKyAg
ICAgICAgaW4gYSBzdWJzZXF1ZW50IGJ1Zy4gQWRkZWQgdGVzdCBjYXNlIGV4ZXJjaXNpbmcgYWxs
IGNvbWJpbmF0aW9ucworICAgICAgICBvZiBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbnMsIHByZW11
bHRpcGxpY2F0aW9uIG9mIGFscGhhLCBhbmQKKyAgICAgICAgSW1hZ2UvSW1hZ2VEYXRhIHVwbG9h
ZC4gKEluY29ycG9yYXRlZCBwbmdsaWIuanMgdW5kZXIKKyAgICAgICAgZmFzdC9jYW52YXMvd2Vi
Z2wvcmVzb3VyY2VzLyB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIEltYWdlIGVsZW1lbnRzCisgICAg
ICAgIHByb2dyYW1tYXRpY2FsbHkuKSBUZXN0ZWQgaW4gU2FmYXJpIG9uIE1hYyBPUyBYIGFuZCBp
biBDaHJvbWl1bSBvbgorICAgICAgICBNYWMgT1MgWCwgV2luZG93cyBhbmQgTGludXguCisKKyAg
ICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10
eXBlLmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZmxpcFZlcnRpY2FsbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6ZG9VbnBhY2tpbmdBbmRQYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmRvUGFja2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bmFycm93SW50
ZXJuYWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNE
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YSk6CisKIDIwMTAtMDYtMjIgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYxNjQxKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzQ1LDMzICsxNzQ1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBv
bHlnb25PZmZzZQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMobG9uZyB4
LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKIHsKICAgICAvLyBW
YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzLgotICAgIHVuc2lnbmVkIGxvbmcgY29tcG9uZW50c1Bl
clBpeGVsID0gMDsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMUEhBOgotICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGNvbXBvbmVu
dHNQZXJQaXhlbCA9IDM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE6Ci0gICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgdW5zaWduZWQgbG9uZyBieXRlc1BlckNvbXBvbmVudCA9IDA7Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAg
Ynl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YodW5zaWduZWQgY2hhcik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgY29t
cG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgorICAgIHVuc2ln
bmVkIGxvbmcgY29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBpZiAo
IW1fY29udGV4dC0+Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwg
JmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0p
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk0NywxNyArMTkyMiwxOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFn
ZSogaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICAvLyBGSVhNRTogcGF5IGF0dGVudGlvbiB0byB0aGUgdXNlcidzIHN1cHBsaWVkIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQgYW5kIHR5cGUKLSAgICAvLyBGSVhNRTogcGF5IGF0dGVudGlvbiB0byBV
TlBBQ0tfUk9XX1dJRFRICi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwogICAgIGVjID0gMDsKICAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdl
RGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEsICZmb3JtYXQsICZpbnRl
cm5hbGZvcm1hdCkpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFn
ZSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLAot
ICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGRhdGEuZGF0YSgpLCBlYyk7CisgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBk
YXRhLmRhdGEoKSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCBtX3VucGFja0FsaWdubWVudCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGlu
dGVybmFsZm9ybWF0LApAQCAtMTk3MiwxOCArMTk0OCwxOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyRCh1CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIC8vIEZJWE1FOiBwYXkgYXR0
ZW50aW9uIHRvIHRoZSB1c2VyJ3Mgc3VwcGxpZWQgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCBhbmQg
dHlwZQogICAgIGVjID0gMDsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdElt
YWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhLCBkYXRhKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLAotICAgICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgZGF0YS5kYXRhKCksIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQg
IT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwKKyAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CisgICAgaWYg
KG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCkBAIC0yMDQ3LDcg
KzIwMjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAgICAg
cHJpbnRXYXJuaW5nVG9Db25zb2xlKCJDYWxsaW5nIG9ic29sZXRlIHRleEltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEltYWdlRGF0YSBwaXhlbHMsIEdMYm9vbGVhbiBmbGlwWSwg
R0xib29sZWFuIHByZW11bHRpcGx5QWxwaGEpIik7CiAgICAgZWMgPSAwOwogICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVs
cywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgaWYgKCFtX2NvbnRleHQt
PmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRh
KSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMDYsMTgg
KzIxODIsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIC8vIEZJ
WE1FOiBwYXkgYXR0ZW50aW9uIHRvIHRoZSB1c2VyJ3Mgc3VwcGxpZWQgZm9ybWF0IGFuZCB0eXBl
Ci0gICAgLy8gRklYTUU6IHBheSBhdHRlbnRpb24gdG8gVU5QQUNLX1JPV19XSURUSAogICAgIGVj
ID0gMDsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICB1bnNpZ25lZCBpbnQgaW50ZXJu
YWxmb3JtYXQ7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZs
aXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhLCAmZm9ybWF0LCAmaW50ZXJuYWxmb3JtYXQpKSB7
CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlw
ZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgZGF0YS5kYXRhKCksIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUs
IGRhdGEuZGF0YSgpLCBlYyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZz
ZXQsIHVuc2lnbmVkIHlvZmZzZXQsCkBAIC0yMjMxLDE3ICsyMjAzLDE0IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVk
IHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSog
cGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsK
LSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgLy8gRklYTUU6IHBheSBhdHRlbnRpb24gdG8g
dGhlIHVzZXIncyBzdXBwbGllZCBmb3JtYXQgYW5kIHR5cGUKICAgICBlYyA9IDA7CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEo
cGl4ZWxzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7
CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5
cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdGV4U3ViSW1hZ2UyREJh
c2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhl
bHMtPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgZGF0YS5kYXRhKCksIGVjKTsK
KyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CiB9
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQs
CkBAIC0yMzA1LDcgKzIyNzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyCiAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJDYWxsaW5nIG9ic29sZXRlIHRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEltYWdlRGF0YSBwaXhlbHMsIEdMYm9vbGVhbiBmbGlwWSwgR0xib29sZWFuIHBy
ZW11bHRpcGx5QWxwaGEpIik7CiAgICAgZWMgPSAwOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZmxpcFksIHBy
ZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFn
ZURhdGEocGl4ZWxzLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMzODksNiArMzM1OCwzNSBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9y
bWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7
CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgor
ICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAg
ICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82
XzUpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNF80XzRfNAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0zMzk3LDggKzMzOTUsMTYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKIHsKLSAgICBpZiAoaXNHTEVTMkNvbXBs
aWFudCgpKQorICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9ybWF0
IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgorICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBvaW50
cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQorICAgIC8vIHRlbXBvcmFyeSBk
YXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCisgICAg
aWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZvcm1hdCwgdHlwZSkpIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsK
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwIHx8IGxldmVsIDwgMCkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTM0MzgsNyArMzQ0NCw3
IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRU
eXBlKGZvcm1hdCwgdHlwZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKHVuc2lnbmVkIGxvbmcgbW9kZSkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShy
ZXZpc2lvbiA2MTY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwzMSArMzUsNzUgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlw
ZVBhcmFtZXRlcnModW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nKiBjb21wb25lbnRzUGVyUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogYnl0ZXNQZXJDb21wb25l
bnQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBTFBIQToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICAgICAgKmNvbXBv
bmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAg
ICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSA0Owor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEU6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZih1bnNpZ25lZCBj
aGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81
XzVfNV8xOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgKmJ5dGVz
UGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZSog
aW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGZsaXBZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiYgaW1hZ2VEYXRhLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBpbnRlcm5hbEZvcm1hdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
JiBkYXRhKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBB
bHBoYU9wIGFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7Ci0gICAgYm9vbCBoYXNBbHBoYUNoYW5u
ZWwgPSB0cnVlOwotICAgIGlmICghZ2V0SW1hZ2VEYXRhKGltYWdlLCBpbWFnZURhdGEsIHByZW11
bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgJmhhc0FscGhhQ2hhbm5lbCwgJmFs
cGhhT3AsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwcm9jZXNzSW1hZ2VE
YXRhKGltYWdlRGF0YS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICBpbWFnZS0+d2lkdGgo
KSwKLSAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgIGZsaXBZLAotICAgICAgICAgICAgICAgICAgICAgYWxwaGFPcCk7Ci0gICAgLy8gRm9y
IEdMRVMyIHRleCBmdW5jdGlvbnMsIGludGVybmFsZm9ybWF0IGhhcyB0byBtYXRjaCBmb3JtYXQu
Ci0gICAgKmludGVybmFsRm9ybWF0ID0gKmZvcm1hdDsKKyAgICBpZiAoIWdldEltYWdlRGF0YShp
bWFnZSwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChmbGlwWSkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbXBv
bmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgICAgIGlmICghY29tcHV0ZUZv
cm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudHNQZXJQaXhlbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gVGhlIGltYWdlIGRhdGEgaXMgdGln
aHRseSBwYWNrZWQsIGFuZCB3ZSB1cGxvYWQgaXQgYXMgc3VjaC4KKyAgICAgICAgdW5zaWduZWQg
aW50IHVucGFja0FsaWdubWVudCA9IDE7CisgICAgICAgIGZsaXBWZXJ0aWNhbGx5KGRhdGEuZGF0
YSgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50KTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiBp
bWFnZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGZsaXBZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHByZW11bHRpcGx5QWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKQEAgLTcwLDgzICsxMTQsNDY3IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEKICAgICBpbnQgaGVpZ2h0ID0g
aW1hZ2VEYXRhLT5oZWlnaHQoKTsKICAgICBpbnQgZGF0YUJ5dGVzID0gd2lkdGggKiBoZWlnaHQg
KiA0OwogICAgIGRhdGEucmVzaXplKGRhdGFCeXRlcyk7Ci0gICAgdWludDhfdCogZHN0ID0gZGF0
YS5kYXRhKCk7Ci0gICAgdWludDhfdCogc3JjID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+
ZGF0YSgpOwotICAgIG1lbWNweShkc3QsIHNyYywgZGF0YUJ5dGVzKTsKLSAgICBwcm9jZXNzSW1h
Z2VEYXRhKGRzdCwKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgZmxpcFksCi0gICAgICAgICAgICAg
ICAgICAgICBwcmVtdWx0aXBseUFscGhhID8ga0FscGhhRG9QcmVtdWx0aXBseSA6IGtBbHBoYURv
Tm90aGluZyk7CisgICAgaWYgKCFwYWNrUGl4ZWxzKGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkt
PmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAga1NvdXJjZUZvcm1hdFJHQkE4LAorICAgICAg
ICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGEgPyBrQWxwaGFEb1ByZW11bHRpcGx5IDoga0Fs
cGhhRG9Ob3RoaW5nLAorICAgICAgICAgICAgICAgICAgICBkYXRhLmRhdGEoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoZmxpcFkpIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBj
b21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OworICAgICAgICBpZiAoIWNvbXB1
dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4ZWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc1BlckNvbXBvbmVudCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFRoZSBpbWFnZSBkYXRhIGlz
IHRpZ2h0bHkgcGFja2VkLCBhbmQgd2UgdXBsb2FkIGl0IGFzIHN1Y2guCisgICAgICAgIHVuc2ln
bmVkIGludCB1bnBhY2tBbGlnbm1lbnQgPSAxOworICAgICAgICBmbGlwVmVydGljYWxseShkYXRh
LmRhdGEoKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50
c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHVu
cGFja0FsaWdubWVudCk7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpwcm9jZXNzSW1hZ2VEYXRhKHVpbnQ4X3QqIGltYWdlRGF0YSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwVmVydGljYWxs
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCBhbHBo
YU9wKQotewotICAgIHN3aXRjaCAoYWxwaGFPcCkgewotICAgIGNhc2Uga0FscGhhRG9QcmVtdWx0
aXBseToKLSAgICAgICAgcHJlbXVsdGlwbHlBbHBoYShpbWFnZURhdGEsIHdpZHRoICogaGVpZ2h0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6Ci0gICAgICAg
IHVubXVsdGlwbHlBbHBoYShpbWFnZURhdGEsIHdpZHRoICogaGVpZ2h0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpmbGlwVmVydGljYWxseSh2b2lkKiBpbWFnZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyUGl4ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxp
Z25tZW50KQoreworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHVuc2lnbmVkIGludCB2YWxpZFJvd0J5dGVzID0gd2lkdGggKiBieXRlc1BlclBpeGVsOwor
ICAgIHVuc2lnbmVkIGludCB0b3RhbFJvd0J5dGVzID0gdmFsaWRSb3dCeXRlczsKKyAgICB1bnNp
Z25lZCBpbnQgcmVtYWluZGVyID0gdmFsaWRSb3dCeXRlcyAlIHVucGFja0FsaWdubWVudDsKKyAg
ICBpZiAocmVtYWluZGVyKQorICAgICAgICB0b3RhbFJvd0J5dGVzICs9IHJlbWFpbmRlcjsKKyAg
ICB1aW50OF90KiB0ZW1wUm93ID0gbmV3IHVpbnQ4X3RbdmFsaWRSb3dCeXRlc107CisgICAgdWlu
dDhfdCogZGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihpbWFnZURhdGEpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBoZWlnaHQgLyAyOyBpKyspIHsKKyAgICAgICAgdWludDhfdCog
bG93Um93ID0gZGF0YSArICh0b3RhbFJvd0J5dGVzICogaSk7CisgICAgICAgIHVpbnQ4X3QqIGhp
Z2hSb3cgPSBkYXRhICsgKHRvdGFsUm93Qnl0ZXMgKiAoaGVpZ2h0IC0gaSAtIDEpKTsKKyAgICAg
ICAgbWVtY3B5KHRlbXBSb3csIGxvd1JvdywgdmFsaWRSb3dCeXRlcyk7CisgICAgICAgIG1lbWNw
eShsb3dSb3csIGhpZ2hSb3csIHZhbGlkUm93Qnl0ZXMpOworICAgICAgICBtZW1jcHkoaGlnaFJv
dywgdGVtcFJvdywgdmFsaWRSb3dCeXRlcyk7CiAgICAgfQorICAgIGRlbGV0ZVtdIHRlbXBSb3c7
Cit9CisKKy8vIFRoZXNlIGZ1bmN0aW9ucyBjYW4gbm90IGJlIHN0YXRpYywgb3IgZ2NjIHdpbGwg
bm90IGFsbG93IHRoZW0gdG8gYmUKKy8vIHVzZWQgYXMgdGVtcGxhdGUgcGFyYW1ldGVycy4gVXNl
IGFuIGFub255bW91cyBuYW1lc3BhY2UgdG8gcHJldmVudAorLy8gdGhlIG5lZWQgdG8gZGVjbGFy
ZSBwcm90b3R5cGVzIGZvciB0aGVtLgorbmFtZXNwYWNlIHsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBQaXhlbCB1bnBhY2tpbmcgcm91dGluZXMuCisKK3ZvaWQgdW5wYWNrUkdCOFRvUkdCQTgoY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBkZXN0aW5h
dGlvblswXSA9IHNvdXJjZVswXTsKKyAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsxXTsKKyAg
ICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXTsKKyAgICBkZXN0aW5hdGlvblszXSA9IDB4RkY7
Cit9CisKK3ZvaWQgdW5wYWNrQkdSQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMl07Cisg
ICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VbMV07CisgICAgZGVzdGluYXRpb25bMl0gPSBzb3Vy
Y2VbMF07CisgICAgZGVzdGluYXRpb25bM10gPSBzb3VyY2VbM107Cit9CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUGl4ZWwgcGFja2luZyByb3V0aW5lcy4KKy8vCisKK3ZvaWQgcGFja1JHQkE4VG9B
OChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGRl
c3RpbmF0aW9uWzBdID0gc291cmNlWzNdOworfQorCit2b2lkIHBhY2tSR0JBOFRvUjgoY29uc3Qg
dWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBkZXN0aW5hdGlv
blswXSA9IHNvdXJjZVswXTsKK30KKwordm9pZCBwYWNrUkdCQThUb1I4UHJlbXVsdGlwbHkoY29u
c3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKKyAgICB1aW50OF90IHNvdXJjZVIgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNjYWxl
RmFjdG9yKTsKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7Cit9CisKKy8vIEZJWE1FOiB0
aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KK3ZvaWQgcGFja1JHQkE4
VG9SOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlv
bikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8gc291cmNl
WzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3VyY2VSID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2FsZUZhY3Rvcik7Cisg
ICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOworfQorCit2b2lkIHBhY2tSR0JBOFRvUkE4KGNv
bnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZGVzdGlu
YXRpb25bMF0gPSBzb3VyY2VbMF07CisgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VbM107Cit9
CisKK3ZvaWQgcGFja1JHQkE4VG9SQThQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2Us
IHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNl
WzNdIC8gMjU1LjBmOworICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0b3IpOworICAgIGRlc3Rp
bmF0aW9uWzBdID0gc291cmNlUjsKKyAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVszXTsKK30K
KworLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgor
dm9pZCBwYWNrUkdCQThUb1JBOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291
cmNlWzNdID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3VyY2VS
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBz
Y2FsZUZhY3Rvcik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOworICAgIGRlc3RpbmF0
aW9uWzFdID0gc291cmNlWzNdOworfQorCit2b2lkIHBhY2tSR0JBOFRvUkdCOChjb25zdCB1aW50
OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3RpbmF0aW9uWzBd
ID0gc291cmNlWzBdOworICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOworICAgIGRlc3Rp
bmF0aW9uWzJdID0gc291cmNlWzJdOworfQorCit2b2lkIHBhY2tSR0JBOFRvUkdCOFByZW11bHRp
cGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAg
ZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CisgICAgdWludDhfdCBzb3Vy
Y2VSID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkg
KiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWlu
dDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNv
dXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOwor
ICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlRzsKKyAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJj
ZUI7Cit9CisKKy8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVt
b3ZlZC4KK3ZvaWQgcGFja1JHQkE4VG9SR0I4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4w
ZiAvIChzb3VyY2VbM10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKKyAgICB1aW50OF90
IHNvdXJjZVIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNl
WzBdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAg
ICB1aW50OF90IHNvdXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc291cmNlWzJdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJj
ZVI7CisgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VHOworICAgIGRlc3RpbmF0aW9uWzJdID0g
c291cmNlQjsKK30KKwordm9pZCBwYWNrUkdCQThUb1JHQkE4UHJlbXVsdGlwbHkoY29uc3QgdWlu
dDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZh
Y3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKKyAgICB1aW50OF90IHNvdXJjZVIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNjYWxlRmFjdG9y
KTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2Fz
dDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUIg
PSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzJdKSAqIHNj
YWxlRmFjdG9yKTsKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7CisgICAgZGVzdGluYXRp
b25bMV0gPSBzb3VyY2VHOworICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlQjsKK30KKworLy8g
RklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgordm9pZCBw
YWNrUkdCQThUb1JHQkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2Vb
M10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKKyAgICB1aW50OF90IHNvdXJjZVIgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNjYWxl
RmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0
aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNv
dXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzJd
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7CisgICAgZGVz
dGluYXRpb25bMV0gPSBzb3VyY2VHOworICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlQjsKKyAg
ICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKK30KKwordm9pZCBwYWNrUkdCQThUb1Vuc2ln
bmVkU2hvcnQ0NDQ0KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9u
KQoreworICAgICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVswXSAmIDB4RjApIDw8IDgpCisgICAg
ICAgICAgICAgICAgICAgIHwgKChzb3VyY2VbMV0gJiAweEYwKSA8PCA0KQorICAgICAgICAgICAg
ICAgICAgICB8IChzb3VyY2VbMl0gJiAweEYwKQorICAgICAgICAgICAgICAgICAgICB8IChzb3Vy
Y2VbM10gPj4gNCkpOworfQorCit2b2lkIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDRQcmVt
dWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbikKK3sK
KyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKKyAgICB1aW50OF90
IHNvdXJjZVIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNl
WzBdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1
aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAg
ICB1aW50OF90IHNvdXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc291cmNlWzJdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAqZGVzdGluYXRpb24gPSAoKChzb3Vy
Y2VSICYgMHhGMCkgPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgfCAoKHNvdXJjZUcgJiAweEYw
KSA8PCA0KQorICAgICAgICAgICAgICAgICAgICB8IChzb3VyY2VCICYgMHhGMCkKKyAgICAgICAg
ICAgICAgICAgICAgfCAoc291cmNlWzNdID4+IDQpKTsKK30KKworLy8gRklYTUU6IHRoaXMgcm91
dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgordm9pZCBwYWNrUkdCQThUb1Vuc2ln
bmVkU2hvcnQ0NDQ0VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBk
ZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNd
ID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3VyY2VSID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2FsZUZh
Y3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3Vy
Y2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsyXSkg
KiBzY2FsZUZhY3Rvcik7CisgICAgKmRlc3RpbmF0aW9uID0gKCgoc291cmNlUiAmIDB4RjApIDw8
IDgpCisgICAgICAgICAgICAgICAgICAgIHwgKChzb3VyY2VHICYgMHhGMCkgPDwgNCkKKyAgICAg
ICAgICAgICAgICAgICAgfCAoc291cmNlQiAmIDB4RjApCisgICAgICAgICAgICAgICAgICAgIHwg
KHNvdXJjZVszXSA+PiA0KSk7Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NTU1
MShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbikKK3sKKyAgICAq
ZGVzdGluYXRpb24gPSAoKChzb3VyY2VbMF0gJiAweEY4KSA8PCA4KQorICAgICAgICAgICAgICAg
ICAgICB8ICgoc291cmNlWzFdICYgMHhGOCkgPDwgMykKKyAgICAgICAgICAgICAgICAgICAgfCAo
KHNvdXJjZVsyXSAmIDB4RjgpID4+IDIpCisgICAgICAgICAgICAgICAgICAgIHwgKHNvdXJjZVsz
XSA+PiA3KSk7Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NTU1MVByZW11bHRp
cGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uKQoreworICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOworICAgIHVpbnQ4X3Qgc291
cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0p
ICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOworICAgIHVp
bnQ4X3Qgc291cmNlQiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihz
b3VyY2VbMl0pICogc2NhbGVGYWN0b3IpOworICAgICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVIg
JiAweEY4KSA8PCA4KQorICAgICAgICAgICAgICAgICAgICB8ICgoc291cmNlRyAmIDB4RjgpIDw8
IDMpCisgICAgICAgICAgICAgICAgICAgIHwgKChzb3VyY2VCICYgMHhGOCkgPj4gMikKKyAgICAg
ICAgICAgICAgICAgICAgfCAoc291cmNlWzNdID4+IDcpKTsKK30KKworLy8gRklYTUU6IHRoaXMg
cm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgordm9pZCBwYWNrUkdCQThUb1Vu
c2lnbmVkU2hvcnQ1NTUxVW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90
KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNl
WzNdID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3VyY2VSID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2Fs
ZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBz
b3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsy
XSkgKiBzY2FsZUZhY3Rvcik7CisgICAgKmRlc3RpbmF0aW9uID0gKCgoc291cmNlUiAmIDB4Rjgp
IDw8IDgpCisgICAgICAgICAgICAgICAgICAgIHwgKChzb3VyY2VHICYgMHhGOCkgPDwgMykKKyAg
ICAgICAgICAgICAgICAgICAgfCAoKHNvdXJjZUIgJiAweEY4KSA+PiAyKQorICAgICAgICAgICAg
ICAgICAgICB8IChzb3VyY2VbM10gPj4gNykpOworfQorCit2b2lkIHBhY2tSR0JBOFRvVW5zaWdu
ZWRTaG9ydDU2NShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbikK
K3sKKyAgICAqZGVzdGluYXRpb24gPSAoKChzb3VyY2VbMF0gJiAweEY4KSA8PCA4KQorICAgICAg
ICAgICAgICAgICAgICB8ICgoc291cmNlWzFdICYgMHhGQykgPDwgMykKKyAgICAgICAgICAgICAg
ICAgICAgfCAoKHNvdXJjZVsyXSAmIDB4RjgpID4+IDMpKTsKK30KKwordm9pZCBwYWNrUkdCQThU
b1Vuc2lnbmVkU2hvcnQ1NjVQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQx
Nl90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAv
IDI1NS4wZjsKKyAgICB1aW50OF90IHNvdXJjZVIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0
aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNv
dXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFd
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzJdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAq
ZGVzdGluYXRpb24gPSAoKChzb3VyY2VSICYgMHhGOCkgPDwgOCkKKyAgICAgICAgICAgICAgICAg
ICAgfCAoKHNvdXJjZUcgJiAweEZDKSA8PCAzKQorICAgICAgICAgICAgICAgICAgICB8ICgoc291
cmNlQiAmIDB4RjgpID4+IDMpKTsKK30KKworLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3Nz
eSBhbmQgbXVzdCBiZSByZW1vdmVkLgordm9pZCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVV
bm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uKQor
eworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2VbM10gPyBzb3VyY2VbM10g
LyAyNTUuMGYgOiAxLjBmKTsKKyAgICB1aW50OF90IHNvdXJjZVIgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1
aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4o
c291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUIgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzJdKSAqIHNjYWxlRmFjdG9y
KTsKKyAgICAqZGVzdGluYXRpb24gPSAoKChzb3VyY2VSICYgMHhGOCkgPDwgOCkKKyAgICAgICAg
ICAgICAgICAgICAgfCAoKHNvdXJjZUcgJiAweEZDKSA8PCAzKQorICAgICAgICAgICAgICAgICAg
ICB8ICgoc291cmNlQiAmIDB4RjgpID4+IDMpKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCiAKLSAgICBpZiAoZmxpcFZlcnRpY2FsbHkgJiYgd2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAg
ICAgIGludCByb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICAgICAgdWludDhfdCogdGVtcFJvdyA9
IG5ldyB1aW50OF90W3Jvd0J5dGVzXTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGhlaWdodCAvIDI7IGkrKykgewotICAgICAgICAgICAgdWludDhfdCogbG93Um93ID0gaW1hZ2VE
YXRhICsgKHJvd0J5dGVzICogaSk7Ci0gICAgICAgICAgICB1aW50OF90KiBoaWdoUm93ID0gaW1h
Z2VEYXRhICsgKHJvd0J5dGVzICogKGhlaWdodCAtIGkgLSAxKSk7Ci0gICAgICAgICAgICBtZW1j
cHkodGVtcFJvdywgbG93Um93LCByb3dCeXRlcyk7Ci0gICAgICAgICAgICBtZW1jcHkobG93Um93
LCBoaWdoUm93LCByb3dCeXRlcyk7Ci0gICAgICAgICAgICBtZW1jcHkoaGlnaFJvdywgdGVtcFJv
dywgcm93Qnl0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZVtdIHRlbXBSb3c7CisvLyBU
aGlzIGlzIHVzZWQgd2hlbmV2ZXIgdW5wYWNraW5nIGlzIG5lY2Vzc2FyeTsgaS5lLiwgdGhlIHNv
dXJjZSBkYXRhCisvLyBpcyBub3QgaW4gUkdCQTggZm9ybWF0LgordGVtcGxhdGU8dHlwZW5hbWUg
U291cmNlVHlwZSwgdHlwZW5hbWUgRGVzdFR5cGUsCisgICAgICAgICB2b2lkIHVucGFja2luZ0Z1
bmMoY29uc3QgU291cmNlVHlwZSosIHVpbnQ4X3QqKSwKKyAgICAgICAgIHZvaWQgcGFja2luZ0Z1
bmMoY29uc3QgdWludDhfdCosIERlc3RUeXBlKik+CitzdGF0aWMgdm9pZCBkb1VucGFja2luZ0Fu
ZFBhY2tpbmcoY29uc3QgU291cmNlVHlwZSogc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtRWxlbWVudHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdFR5cGUqIGRlc3RpbmF0aW9u
RGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVz
dGluYXRpb25FbGVtZW50c1BlclBpeGVsKQoreworICAgIGNvbnN0IFNvdXJjZVR5cGUqIGVuZFBv
aW50ZXIgPSBzb3VyY2VEYXRhICsgbnVtRWxlbWVudHM7CisgICAgdWludDhfdCB0ZW1wb3JhcnlS
R0JBRGF0YVs0XTsKKyAgICB3aGlsZSAoc291cmNlRGF0YSA8IGVuZFBvaW50ZXIpIHsKKyAgICAg
ICAgdW5wYWNraW5nRnVuYyhzb3VyY2VEYXRhLCB0ZW1wb3JhcnlSR0JBRGF0YSk7CisgICAgICAg
IHBhY2tpbmdGdW5jKHRlbXBvcmFyeVJHQkFEYXRhLCBkZXN0aW5hdGlvbkRhdGEpOworICAgICAg
ICBzb3VyY2VEYXRhICs9IHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWw7CisgICAgICAgIGRlc3RpbmF0
aW9uRGF0YSArPSBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWw7CiAgICAgfQogfQogCi0vLyBQ
cmVtdWx0aXBseSBhbHBoYSBpbnRvIGNvbG9yIGNoYW5uZWxzLgotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cHJlbXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBp
eGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBpeGVsczsgaisrKSB7Ci0gICAg
ICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0KmorMF0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGcg
PSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0
KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGEgPSByZ2JhRGF0YVs0KmorM10gLyAyNTUu
MGY7Ci0gICAgICAgIHJnYmFEYXRhWzQqaiswXSA9ICh1bnNpZ25lZCBjaGFyKSAociAqIGEgKiAy
NTUuMGYpOwotICAgICAgICByZ2JhRGF0YVs0KmorMV0gPSAodW5zaWduZWQgY2hhcikgKGcgKiBh
ICogMjU1LjBmKTsKLSAgICAgICAgcmdiYURhdGFbNCpqKzJdID0gKHVuc2lnbmVkIGNoYXIpIChi
ICogYSAqIDI1NS4wZik7CisvLyBUaGlzIGhhbmRsZXMgYWxsIGNvbnZlcnNpb25zIHdpdGggYSBm
YXN0ZXIgcGF0aCBmb3IgUkdCQTggc291cmNlIGRhdGEuCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3Vy
Y2VUeXBlLCB0eXBlbmFtZSBEZXN0VHlwZSwgdm9pZCBwYWNraW5nRnVuYyhjb25zdCBTb3VyY2VU
eXBlKiwgRGVzdFR5cGUqKT4KK3N0YXRpYyB2b2lkIGRvUGFja2luZyhjb25zdCBTb3VyY2VUeXBl
KiBzb3VyY2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpT
b3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IG51bUVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLAorICAgICAgICAgICAgICAgICAgICAgIERlc3RU
eXBlKiBkZXN0aW5hdGlvbkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCkKK3sKKyAgICBzd2l0Y2ggKHNvdXJjZURhdGFG
b3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjprU291cmNlRm9ybWF0UkdCQTg6
IHsKKyAgICAgICAgY29uc3QgU291cmNlVHlwZSogZW5kUG9pbnRlciA9IHNvdXJjZURhdGEgKyBu
dW1FbGVtZW50czsKKyAgICAgICAgd2hpbGUgKHNvdXJjZURhdGEgPCBlbmRQb2ludGVyKSB7Cisg
ICAgICAgICAgICBwYWNraW5nRnVuYyhzb3VyY2VEYXRhLCBkZXN0aW5hdGlvbkRhdGEpOworICAg
ICAgICAgICAgc291cmNlRGF0YSArPSBzb3VyY2VFbGVtZW50c1BlclBpeGVsOworICAgICAgICAg
ICAgZGVzdGluYXRpb25EYXRhICs9IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbDsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
a1NvdXJjZUZvcm1hdFJHQjg6IHsKKyAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPFNvdXJj
ZVR5cGUsIERlc3RUeXBlLCB1bnBhY2tSR0I4VG9SR0JBOCwgcGFja2luZ0Z1bmM+KHNvdXJjZURh
dGEsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbkRhdGEs
IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjprU291cmNlRm9ybWF0QkdSQTg6IHsKKyAgICAgICAg
ZG9VbnBhY2tpbmdBbmRQYWNraW5nPFNvdXJjZVR5cGUsIERlc3RUeXBlLCB1bnBhY2tCR1JBOFRv
UkdCQTgsIHBhY2tpbmdGdW5jPihzb3VyY2VEYXRhLCBudW1FbGVtZW50cywgc291cmNlRWxlbWVu
dHNQZXJQaXhlbCwgZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwp
OworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogfQogCi0vLyBSZW1vdmUgcHJlbXVsdGlw
bGllZCBhbHBoYSBmcm9tIGNvbG9yIGNoYW5uZWxzLgotLy8gRklYTUU6IHRoaXMgaXMgbG9zc3ku
IE11c3QgcmV0cmlldmUgb3JpZ2luYWwgdmFsdWVzIGZyb20gSFRNTEltYWdlRWxlbWVudC4KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVubXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2Jh
RGF0YSwgaW50IG51bVBpeGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBpeGVs
czsgaisrKSB7Ci0gICAgICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0KmorMF0gLyAyNTUuMGY7Ci0g
ICAgICAgIGZsb2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0
IGIgPSByZ2JhRGF0YVs0KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGEgPSByZ2JhRGF0
YVs0KmorM10gLyAyNTUuMGY7Ci0gICAgICAgIGlmIChhID4gMC4wZikgewotICAgICAgICAgICAg
ciAvPSBhOwotICAgICAgICAgICAgZyAvPSBhOwotICAgICAgICAgICAgYiAvPSBhOwotICAgICAg
ICAgICAgciA9IChyID4gMS4wZikgPyAxLjBmIDogcjsKLSAgICAgICAgICAgIGcgPSAoZyA+IDEu
MGYpID8gMS4wZiA6IGc7Ci0gICAgICAgICAgICBiID0gKGIgPiAxLjBmKSA/IDEuMGYgOiBiOwot
ICAgICAgICAgICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIpIChyICogMjU1LjBm
KTsKLSAgICAgICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBjaGFyKSAoZyAqIDI1
NS4wZik7Ci0gICAgICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWduZWQgY2hhcikgKGIg
KiAyNTUuMGYpOworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyhjb25zdCB1aW50
OF90KiBzb3VyY2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbkZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3Rp
bmF0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCBh
bHBoYU9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBkZXN0aW5h
dGlvbkRhdGEpCit7CisgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwgPSA0
OworICAgIHVuc2lnbmVkIGludCBudW1FbGVtZW50cyA9IHdpZHRoICogaGVpZ2h0ICogc291cmNl
RWxlbWVudHNQZXJQaXhlbDsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uVHlwZSkgeworICAgIGNh
c2UgVU5TSUdORURfQllURTogeworICAgICAgICB1aW50OF90KiBkZXN0aW5hdGlvbiA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpOworICAgICAgICBpZiAoZGVzdGluYXRp
b25Gb3JtYXQgPT0gUkdCQSAmJiBhbHBoYU9wID09IGtBbHBoYURvTm90aGluZykgeworICAgICAg
ICAgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkuCisgICAgICAgICAgICBtZW1jcHkoZGVz
dGluYXRpb25EYXRhLCBzb3VyY2VEYXRhLCBudW1FbGVtZW50cyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAg
ICAgIGNhc2UgUkdCOgorICAgICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgICAg
ICBjYXNlIGtBbHBoYURvTm90aGluZzoKKyAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhf
dCwgdWludDhfdCwgcGFja1JHQkE4VG9SR0I4Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0
LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDMpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrQWxwaGFEb1ByZW11bHRp
cGx5OgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdC
QThUb1JHQjhQcmVtdWx0aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxl
bWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAzKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga0FscGhhRG9Vbm11bHRpcGx5OgorICAg
ICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdCQThUb1JHQjhV
bm11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291
cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDMpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkdC
QToKKyAgICAgICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAgICAgICAgICAgY2FzZSBrQWxw
aGFEb1ByZW11bHRpcGx5OgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50
OF90LCBwYWNrUkdCQThUb1JHQkE4UHJlbXVsdGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFG
b3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwg
NCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtBbHBoYURvVW5t
dWx0aXBseToKKyAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDhfdCwgcGFj
a1JHQkE4VG9SR0JBOFVubXVsdGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51
bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgNCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQUxQSEE6CisgICAgICAgICAgICAvLyBGcm9tIHRoZSBkZXNrdG9wIE9w
ZW5HTCBjb252ZXJzaW9uIHJ1bGVzIChPcGVuR0wgMi4xCisgICAgICAgICAgICAvLyBzcGVjaWZp
Y2F0aW9uLCBUYWJsZSAzLjE1KSwgdGhlIGFscGhhIGNoYW5uZWwgaXMgY2hvc2VuCisgICAgICAg
ICAgICAvLyBmcm9tIHRoZSBSR0JBIGRhdGEuCisgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhf
dCwgdWludDhfdCwgcGFja1JHQkE4VG9BOD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwg
bnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExVTUlOQU5DRToKKyAgICAgICAgICAgIC8v
IEZyb20gdGhlIGRlc2t0b3AgT3BlbkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKKyAg
ICAgICAgICAgIC8vIHNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgcmVkIGNoYW5uZWwg
aXMgY2hvc2VuCisgICAgICAgICAgICAvLyBmcm9tIHRoZSBSR0JBIGRhdGEuCisgICAgICAgICAg
ICBzd2l0Y2ggKGFscGhhT3ApIHsKKyAgICAgICAgICAgIGNhc2Uga0FscGhhRG9Ob3RoaW5nOgor
ICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdCQThUb1I4
Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVu
dHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBrQWxwaGFEb1ByZW11bHRpcGx5OgorICAgICAgICAgICAgICAgIGRvUGFj
a2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdCQThUb1I4UHJlbXVsdGlwbHk+KHNvdXJjZURh
dGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVs
LCBkZXN0aW5hdGlvbiwgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIGtBbHBoYURvVW5tdWx0aXBseToKKyAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhf
dCwgdWludDhfdCwgcGFja1JHQkE4VG9SOFVubXVsdGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURh
dGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlv
biwgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICAvLyBG
cm9tIHRoZSBkZXNrdG9wIE9wZW5HTCBjb252ZXJzaW9uIHJ1bGVzIChPcGVuR0wgMi4xCisgICAg
ICAgICAgICAvLyBzcGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE1KSwgdGhlIHJlZCBhbmQgYWxwaGEg
Y2hhbm5lbHMKKyAgICAgICAgICAgIC8vIGFyZSBjaG9zZW4gZnJvbSB0aGUgUkdCQSBkYXRhLgor
ICAgICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgICAgICBjYXNlIGtBbHBoYURv
Tm90aGluZzoKKyAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDhfdCwgcGFj
a1JHQkE4VG9SQTg+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBz
b3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIGtBbHBoYURvUHJlbXVsdGlwbHk6CisgICAgICAgICAg
ICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvUkE4UHJlbXVsdGlw
bHk+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVt
ZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIGtBbHBoYURvVW5tdWx0aXBseToKKyAgICAgICAgICAgICAgICBkb1Bh
Y2tpbmc8dWludDhfdCwgdWludDhfdCwgcGFja1JHQkE4VG9SQThVbm11bHRpcGx5Pihzb3VyY2VE
YXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhl
bCwgZGVzdGluYXRpb24sIDIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgVU5TSUdORURfU0hPUlRfNF80XzRfNDogeworICAgICAgICB1aW50MTZfdCogZGVz
dGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50MTZfdCo+KGRlc3RpbmF0aW9uRGF0YSk7CisgICAg
ICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAgICAgICBjYXNlIGtBbHBoYURvTm90aGluZzoKKyAg
ICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50MTZfdCwgcGFja1JHQkE4VG9VbnNpZ25l
ZFNob3J0NDQ0ND4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNv
dXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIGtBbHBoYURvUHJlbXVsdGlwbHk6CisgICAgICAgICAgICBkb1BhY2tp
bmc8dWludDhfdCwgdWludDE2X3QsIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDRQcmVtdWx0
aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVs
ZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIGtBbHBoYURvVW5tdWx0aXBseToKKyAgICAgICAgICAgIGRvUGFja2luZzx1aW50
OF90LCB1aW50MTZfdCwgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NFVubXVsdGlwbHk+KHNv
dXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1Bl
clBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
ICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBVTlNJR05FRF9TSE9SVF81XzVfNV8xOiB7
CisgICAgICAgIHVpbnQxNl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQxNl90Kj4o
ZGVzdGluYXRpb25EYXRhKTsKKyAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgIGNh
c2Uga0FscGhhRG9Ob3RoaW5nOgorICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQx
Nl90LCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxPihzb3VyY2VEYXRhLCBzb3VyY2VEYXRh
Rm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24s
IDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0FscGhhRG9QcmVtdWx0aXBs
eToKKyAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50MTZfdCwgcGFja1JHQkE4VG9V
bnNpZ25lZFNob3J0NTU1MVByZW11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0
LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0FscGhhRG9Vbm11bHRpcGx5OgorICAg
ICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQxNl90LCBwYWNrUkdCQThUb1Vuc2lnbmVk
U2hvcnQ1NTUxVW5tdWx0aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxl
bWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFVO
U0lHTkVEX1NIT1JUXzVfNl81OiB7CisgICAgICAgIHVpbnQxNl90KiBkZXN0aW5hdGlvbiA9IHN0
YXRpY19jYXN0PHVpbnQxNl90Kj4oZGVzdGluYXRpb25EYXRhKTsKKyAgICAgICAgc3dpdGNoIChh
bHBoYU9wKSB7CisgICAgICAgIGNhc2Uga0FscGhhRG9Ob3RoaW5nOgorICAgICAgICAgICAgZG9Q
YWNraW5nPHVpbnQ4X3QsIHVpbnQxNl90LCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjU+KHNv
dXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1Bl
clBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBrQWxwaGFEb1ByZW11bHRpcGx5OgorICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVp
bnQxNl90LCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVQcmVtdWx0aXBseT4oc291cmNlRGF0
YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWws
IGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtBbHBo
YURvVW5tdWx0aXBseToKKyAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50MTZfdCwg
cGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NTY1VW5tdWx0aXBseT4oc291cmNlRGF0YSwgc291cmNl
RGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0
aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgJKHJldmlzaW9uIDYxNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTIsNDkgKzQ1Miw1OSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAg
ICAgICBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOwogCisgICAgICAgIGJvb2wgaXNHTEVTMkNv
bXBsaWFudCgpIGNvbnN0OworCiAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyBI
ZWxwZXJzIGZvciB0ZXh0dXJlIHVwbG9hZGluZy4KKyAgICAgICAgLy8gSGVscGVycyBmb3IgdGV4
dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgogICAgICAgICAvLwogCi0gICAgICAg
IC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2UgaW50byB0aGUgcGFz
c2VkCi0gICAgICAgIC8vIFZlY3Rvciwgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5
QWxwaGEgZmxhZ3MuCi0gICAgICAgIC8vIFJldHVybnMgdGhlIGFwcGxpY2FibGUgT3BlbkdMIGZv
cm1hdCBhbmQgaW50ZXJuYWxGb3JtYXQgZm9yCi0gICAgICAgIC8vIHRoZSBzdWJzZXF1ZW50IGds
VGV4SW1hZ2UyRCBvciBnbFRleFN1YkltYWdlMkQgY2FsbC4KLSAgICAgICAgLy8gUmV0dXJucyB0
cnVlIHVwb24gc3VjY2Vzcy4KKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIGNvbXBvbmVudHMgcGVy
IHBpeGVsIGFuZCBieXRlcyBwZXIgY29tcG9uZW50CisgICAgICAgIC8vIGZvciB0aGUgZ2l2ZW4g
Zm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLiBSZXR1cm5zIGZhbHNlIGlmCisgICAgICAgIC8v
IGVpdGhlciB3YXMgYW4gaW52YWxpZCBlbnVtLgorICAgICAgICBib29sIGNvbXB1dGVGb3JtYXRB
bmRUeXBlUGFyYW1ldGVycyh1bnNpZ25lZCBpbnQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogY29tcG9uZW50
c1BlclBpeGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nKiBieXRlc1BlckNvbXBvbmVudCk7CisKKyAgICAgICAgLy8gRXh0cmFjdHMg
dGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAor
ICAgICAgICAvLyBwYWNraW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4g
Zm9ybWF0IGFuZCB0eXBlLAorICAgICAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHBy
ZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQorICAgICAgICAvLyB1cG9uIHN1Y2Nl
c3MuCiAgICAgICAgIGJvb2wgZXh0cmFjdEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZsaXBZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBpbWFnZURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQqIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCogaW50ZXJuYWxGb3JtYXQpOwotCi0gICAgICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50
cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZAotICAgICAgICAvLyBWZWN0
b3IsIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLgotICAgICAg
ICAvLyBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKKworICAgICAgICAvLyBFeHRyYWN0cyB0aGUg
Y29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAor
ICAgICAgICAvLyBwYWNraW5nIHRoZSBwaXhlbCBkYXRhIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4g
Zm9ybWF0IGFuZCB0eXBlLAorICAgICAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHBy
ZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQorICAgICAgICAvLyB1cG9uIHN1Y2Nl
c3MuCiAgICAgICAgIGJvb2wgZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEqLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmbGlwWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSk7CiAKLSAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBnaXZlbiBpbWFnZSBk
YXRhIGluIHByZXBhcmF0aW9uIGZvciB1cGxvYWRpbmcKLSAgICAgICAgLy8gdmlhIHRleEltYWdl
MkQgb3IgdGV4U3ViSW1hZ2UyRC4gVGhlIGlucHV0IGRhdGEgbXVzdCBiZSBpbgotICAgICAgICAv
LyA0LWNvbXBvbmVudCBmb3JtYXQgd2l0aCB0aGUgYWxwaGEgY2hhbm5lbCBsYXN0IChpLmUuLCBS
R0JBCi0gICAgICAgIC8vIG9yIEJHUkEpLCB0aWdodGx5IHBhY2tlZCwgd2l0aCBubyBzcGFjZSBi
ZXR3ZWVuIHJvd3MuCi0KLSAgICAgICAgZW51bSBBbHBoYU9wIHsKLSAgICAgICAgICAgIGtBbHBo
YURvTm90aGluZyA9IDAsCi0gICAgICAgICAgICBrQWxwaGFEb1ByZW11bHRpcGx5ID0gMSwKLSAg
ICAgICAgICAgIGtBbHBoYURvVW5tdWx0aXBseSA9IDIKKyAgICAgICAgLy8gRmxpcHMgdGhlIGdp
dmVuIGltYWdlIGRhdGEgdmVydGljYWxseSwgaW4tcGxhY2UuCisgICAgICAgIHZvaWQgZmxpcFZl
cnRpY2FsbHkodm9pZCogaW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRl
c1BlclBpeGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bnBh
Y2tBbGlnbm1lbnQpOworCisgICAgICAgIC8vIEF0dGVtcHQgdG8gZW51bWVyYXRlIGFsbCBwb3Nz
aWJsZSBuYXRpdmUgaW1hZ2UgZm9ybWF0cyB0bworICAgICAgICAvLyByZWR1Y2UgdGhlIGFtb3Vu
dCBvZiB0ZW1wb3JhcnkgYWxsb2NhdGlvbnMgZHVyaW5nIHRleHR1cmUKKyAgICAgICAgLy8gdXBs
b2FkaW5nLiBUaGlzIGVudW0gbXVzdCBiZSBwdWJsaWMgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZAor
ICAgICAgICAvLyBieSBub24tbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICAgICAgZW51bSBTb3VyY2VE
YXRhRm9ybWF0IHsKKyAgICAgICAgICAgIGtTb3VyY2VGb3JtYXRSR0JBOCwKKyAgICAgICAgICAg
IGtTb3VyY2VGb3JtYXRSR0I4LAorICAgICAgICAgICAga1NvdXJjZUZvcm1hdEJHUkE4CiAgICAg
ICAgIH07CiAKLSAgICAgICAgdm9pZCBwcm9jZXNzSW1hZ2VEYXRhKHVpbnQ4X3QqIGltYWdlRGF0
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmbGlwVmVydGljYWxseSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFscGhhT3AgYWxwaGFPcCk7Ci0KLSAgICAgICAgYm9vbCBpc0dMRVMyQ29tcGxp
YW50KCkgY29uc3Q7Ci0KICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIC8vIEVudHJ5
IHBvaW50cyBmb3IgV2ViR0wuCiAgICAgICAgIC8vCkBAIC03MDMsMzMgKzcxMyw0OSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZTogICAgICAgIAogICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRChBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93KTsKIAotICAg
ICAgICAvLyBIZWxwZXJzIGZvciB0ZXh0dXJlIHVwbG9hZGluZy4KLSAgICAgICAgdm9pZCBwcmVt
dWx0aXBseUFscGhhKHVuc2lnbmVkIGNoYXIqIHJnYmFEYXRhLCBpbnQgbnVtUGl4ZWxzKTsKLSAg
ICAgICAgdm9pZCB1bm11bHRpcGx5QWxwaGEodWludDhfdCogaW1hZ2VEYXRhLCBpbnQgbnVtUGl4
ZWxzKTsKLQogICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1l
bnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KICAgICAgICAgLy8KLSAgICAgICAgLy8gR2V0cyB0aGUg
ZGF0YSBmb3IgdGhlIGdpdmVuIEltYWdlIGludG8gb3V0cHV0VmVjdG9yLAotICAgICAgICAvLyB3
aXRob3V0IGRvaW5nIGFueSBwcm9jZXNzaW5nIG9mIHRoZSBkYXRhICh2ZXJ0aWNhbCBmbGlwIG9y
Ci0gICAgICAgIC8vIG90aGVyd2lzZSkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIHByZW11bHRp
cGx5QWxwaGEgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHVzZXIgd2lsbCBldmVudHVhbGx5Ci0gICAg
ICAgIC8vIHdhbnQgdGhlIGFscGhhIGNoYW5uZWwgbXVsdGlwbGllZCBpbnRvIHRoZSBjb2xvciBj
aGFubmVscy4KKyAgICAgICAgLy8gR2V0cyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIEltYWdlIGlu
dG8gb3V0cHV0VmVjdG9yIGluIHRoZQorICAgICAgICAvLyBmb3JtYXQgc3BlY2lmaWVkIGJ5IHRo
ZSAoT3BlbkdMLXN0eWxlKSBmb3JtYXQgYW5kIHR5cGUKKyAgICAgICAgLy8gYXJndW1lbnRzLiBE
ZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIG91dHB1dFZlY3RvciBjb250YWlucworICAgICAgICAv
LyB1aW50OF90LCBpZiB0aGUgZm9ybWF0IGFuZCB0eXBlIHNwZWNpZnkgcGFja2VkIHBpeGVscywg
dGhlbgorICAgICAgICAvLyBpdCB3aWxsIGVzc2VudGlhbGx5IGNvbnRhaW4gdWludDE2X3QgYWZ0
ZXIgdGhlIGV4dHJhY3Rpb24KKyAgICAgICAgLy8gcHJvY2Vzcy4KICAgICAgICAgLy8KLSAgICAg
ICAgLy8gVGhlIG91dCBwYXJhbWV0ZXIgaGFzQWxwaGFDaGFubmVsIGluZGljYXRlcyB3aGV0aGVy
IHRoZQotICAgICAgICAvLyBpbWFnZSBhY3R1YWxseSBoYWQgYW4gYWxwaGEgY2hhbm5lbC4KKyAg
ICAgICAgLy8gSWYgcHJlbXVsdGlwbHlBbHBoYSBpcyB0cnVlLCB0aGUgYWxwaGEgY2hhbm5lbCwg
aWYgYW55LAorICAgICAgICAvLyB3aWxsIGJlIG11bHRpcGxpZWQgaW50byB0aGUgY29sb3IgY2hh
bm5lbHMgZHVyaW5nIHRoZQorICAgICAgICAvLyBleHRyYWN0aW9uIHByb2Nlc3MuIFRoaXMgcHJl
bXVsdGlwbGljYXRpb24gb2NjdXJzIGJlZm9yZQorICAgICAgICAvLyBhbnkgcGFja2luZyBvZiBw
aXhlbCBkYXRhLgogICAgICAgICAvLwotICAgICAgICAvLyBUaGUgb3V0IHBhcmFtZXRlciBuZWVk
ZWRBbHBoYU9wIHNob3VsZCBiZSBwYXNzZWQgdG8gYQotICAgICAgICAvLyBzdWJzZXF1ZW50IGNh
bGwgb2YgcHJvY2Vzc0ltYWdlRGF0YS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIG91dCBw
YXJhbWV0ZXIgZm9ybWF0IHNob3VsZCBiZSBwYXNzZWQgdG8gc3Vic2VxdWVudAotICAgICAgICAv
LyBpbnZvY2F0aW9ucyBvZiB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJELgorICAgICAgICAv
LyBObyB2ZXJ0aWNhbCBmbGlwIG9mIHRoZSBpbWFnZSBkYXRhIGlzIHBlcmZvcm1lZCBieSB0aGlz
CisgICAgICAgIC8vIG1ldGhvZC4KICAgICAgICAgYm9vbCBnZXRJbWFnZURhdGEoSW1hZ2UqIGlt
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZl
Y3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCogaGFzQWxwaGFDaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBB
bHBoYU9wKiBuZWVkZWRBbHBoYU9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQqIGZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiYgb3V0cHV0VmVjdG9yKTsKKworICAgICAgICAvLyBQb3NzaWJsZSBhbHBoYSBvcGVyYXRpb25z
IHRoYXQgbWF5IG5lZWQgdG8gb2NjdXIgZHVyaW5nCisgICAgICAgIC8vIHBpeGVsIHBhY2tpbmcu
IEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11c3QKKyAgICAgICAgLy8g
YmUgcmVtb3ZlZC4KKyAgICAgICAgZW51bSBBbHBoYU9wIHsKKyAgICAgICAgICAgIGtBbHBoYURv
Tm90aGluZyA9IDAsCisgICAgICAgICAgICBrQWxwaGFEb1ByZW11bHRpcGx5ID0gMSwKKyAgICAg
ICAgICAgIGtBbHBoYURvVW5tdWx0aXBseSA9IDIKKyAgICAgICAgfTsKKworICAgICAgICAvLyBI
ZWxwZXIgZm9yIGdldEltYWdlRGF0YSB3aGljaCBpbXBsZW1lbnRzIHBhY2tpbmcgb2YgcGl4ZWwK
KyAgICAgICAgLy8gZGF0YSBpbnRvIHRoZSBzcGVjaWZpZWQgT3BlbkdMIGRlc3RpbmF0aW9uIGZv
cm1hdCBhbmQgdHlwZS4KKyAgICAgICAgLy8gU291cmNlIGRhdGEgbXVzdCBiZSBpbiBSR0JBIGZv
cm1hdCB3aXRoIG5vIGdhcHMgYmV0d2VlbgorICAgICAgICAvLyByb3dzLiBEZXN0aW5hdGlvbiBk
YXRhIHdpbGwgaGF2ZSBubyBnYXBzIGJldHdlZW4gcm93cy4KKyAgICAgICAgYm9vbCBwYWNrUGl4
ZWxzKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBT
b3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0
aW9uRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0
aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AgYWxwaGFPcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSk7CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVk
IGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkocmV2aXNpb24gNjE2
NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91
dHB1dFZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sKiBoYXNBbHBoYUNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWxwaGFPcCogbmVlZGVkQWxwaGFPcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBpZiAoIWlt
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MiwxNiArNTEsMTAgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW50IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwogICAgIGludCBoZWlnaHQg
PSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOwotICAgIGludCByb3dCeXRlcyA9IHdpZHRoICog
NDsKLSAgICBDR0ltYWdlQWxwaGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1h
Z2UpOwotICAgICpoYXNBbHBoYUNoYW5uZWwgPSAoaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9uZQot
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25l
U2tpcEZpcnN0KTsKLSAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgKmhhc0FscGhhQ2hhbm5l
bCkKLSAgICAgICAgLy8gRklYTUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRo
ZSBwcmVtdWx0aXBsaWNhdGlvbiBzdGVwCi0gICAgICAgICpuZWVkZWRBbHBoYU9wID0ga0FscGhh
RG9Vbm11bHRpcGx5OwotICAgICpmb3JtYXQgPSBSR0JBOwotICAgIG91dHB1dFZlY3Rvci5yZXNp
emUoaGVpZ2h0ICogcm93Qnl0ZXMpOworICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgZ2V0IHJpZCBv
ZiB0aGlzIHRlbXBvcmFyeSBjb3B5IHdoZXJlIHBvc3NpYmxlLgorICAgIGludCB0ZW1wUm93Qnl0
ZXMgPSB3aWR0aCAqIDQ7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBWZWN0b3I7CisgICAgdGVt
cFZlY3Rvci5yZXNpemUoaGVpZ2h0ICogdGVtcFJvd0J5dGVzKTsKICAgICAvLyBUcnkgdG8gcmV1
c2UgdGhlIGNvbG9yIHNwYWNlIGZyb20gdGhlIGltYWdlIHRvIHByZXNlcnZlIGl0cyBjb2xvcnMu
CiAgICAgLy8gU29tZSBpbWFnZXMgdXNlIGEgY29sb3Igc3BhY2UgKHN1Y2ggYXMgaW5kZXhlZCkg
dW5zdXBwb3J0ZWQgYnkgdGhlIGJpdG1hcCBjb250ZXh0LgogICAgIENHQ29sb3JTcGFjZVJlZiBj
b2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3BhY2UoY2dJbWFnZSk7CkBAIC03OSwyMCArNzIs
MzYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgICAgICBy
ZWxlYXNlQ29sb3JTcGFjZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBDR0Nv
bnRleHRSZWYgdG1wQ29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShvdXRwdXRWZWN0b3Iu
ZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoLCBoZWlnaHQsIDgsIHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRMYXN0KTsKKyAgICBDR0NvbnRleHRSZWYgdGVtcENvbnRleHQgPSBDR0JpdG1hcENvbnRl
eHRDcmVhdGUodGVtcFZlY3Rvci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDgsIHRlbXBSb3dCeXRlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
b3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IGNoYW5nZSB0aGlzIQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Qp
OwogICAgIGlmIChyZWxlYXNlQ29sb3JTcGFjZSkKICAgICAgICAgQ0dDb2xvclNwYWNlUmVsZWFz
ZShjb2xvclNwYWNlKTsKLSAgICBpZiAoIXRtcENvbnRleHQpCisgICAgaWYgKCF0ZW1wQ29udGV4
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0bXBD
b250ZXh0LCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UodG1wQ29u
dGV4dCwKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUodGVtcENvbnRleHQsIGtDR0JsZW5kTW9k
ZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZSh0ZW1wQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dSZWN0TWFrZSgwLCAwLCBzdGF0aWNfY2FzdDxDR0Zsb2F0Pih3aWR0aCks
IHN0YXRpY19jYXN0PENHRmxvYXQ+KGhlaWdodCkpLAogICAgICAgICAgICAgICAgICAgICAgICBj
Z0ltYWdlKTsKLSAgICBDR0NvbnRleHRSZWxlYXNlKHRtcENvbnRleHQpOwotICAgIHJldHVybiB0
cnVlOworICAgIENHQ29udGV4dFJlbGVhc2UodGVtcENvbnRleHQpOworICAgIC8vIFBhY2sgdGhl
IHBpeGVsIGRhdGEgaW50byB0aGUgb3V0cHV0IHZlY3Rvci4KKyAgICB1bnNpZ25lZCBsb25nIGNv
bXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgaWYgKCFjb21wdXRlRm9y
bWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAm
Ynl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IHJvd0J5
dGVzID0gd2lkdGggKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKKyAg
ICBvdXRwdXRWZWN0b3IucmVzaXplKGhlaWdodCAqIHJvd0J5dGVzKTsKKyAgICBDR0ltYWdlQWxw
aGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1hZ2UpOworICAgIGJvb2wgaGFz
QWxwaGFDaGFubmVsID0gKGluZm8gIT0ga0NHSW1hZ2VBbHBoYU5vbmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZp
cnN0KTsKKyAgICBBbHBoYU9wIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7CisgICAg
aWYgKCFwcmVtdWx0aXBseUFscGhhICYmIGhhc0FscGhhQ2hhbm5lbCkKKyAgICAgICAgLy8gRklY
TUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRoZSBwcmVtdWx0aXBsaWNhdGlv
biBzdGVwLgorICAgICAgICBuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Vbm11bHRpcGx5OworICAg
IHJldHVybiBwYWNrUGl4ZWxzKHRlbXBWZWN0b3IuZGF0YSgpLCBrU291cmNlRm9ybWF0UkdCQTgs
IHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBuZWVk
ZWRBbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKIH0KIAogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJl
dmlzaW9uIDYxNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyMCwxMSArMTYyMCwxMCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvCiB9CiAKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaGFzQWxwaGFDaGFubmVs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFs
cGhhT3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
KiBmb3JtYXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTYzMiwxNyArMTYzMSwxNCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRJbWFnZURhdGEoSW1hCiAgICAgaWYgKCFuYXRpdmVQaXhtYXApCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICpoYXNBbHBoYUNoYW5uZWwgPSB0cnVlOwotICAgICpmb3JtYXQgPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTsKLQotICAgICpuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Ob3Ro
aW5nOworICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGluZzsKICAgICBp
ZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgKmhhc0FscGhhQ2hhbm5lbCkKLSAgICAgICAgKm5lZWRl
ZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7Ci0gCisgICAgICAgIC8vIEZJWE1FOiBtdXN0
IGZldGNoIHRoZSBpbWFnZSBkYXRhIGJlZm9yZSB0aGUgcHJlbXVsdGlwbGljYXRpb24gc3RlcAor
ICAgICAgICBuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Vbm11bHRpcGx5OwogICAgIFFJbWFnZSBu
YXRpdmVJbWFnZSA9IG5hdGl2ZVBpeG1hcC0+dG9JbWFnZSgpLmNvbnZlcnRUb0Zvcm1hdChRSW1h
Z2U6OkZvcm1hdF9BUkdCMzIpOwotICAgIG91dHB1dFZlY3Rvci5hcHBlbmQobmF0aXZlSW1hZ2Uu
cmdiU3dhcHBlZCgpLmJpdHMoKSwgbmF0aXZlSW1hZ2UuYnl0ZUNvdW50KCkpOwotCi0gICAgcmV0
dXJuIHRydWU7CisgICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShuYXRpdmVJbWFnZS5ieXRlQ291bnQo
KSk7CisgICAgcmV0dXJuIHBhY2tQaXhlbHMobmF0aXZlSW1hZ2UucmdiU3dhcHBlZCgpLmJpdHMo
KSwga1NvdXJjZUZvcm1hdFJHQkE4LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAor
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0
VmVjdG9yLmRhdGEoKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCShyZXZpc2lvbiA2
MTY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQz
RFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTAgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBp
bWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4mIG91dHB1dFZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sKiBoYXNBbHBoYUNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWxwaGFPcCogbmVlZGVkQWxwaGFPcCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBp
ZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MCwxOCArNTksMTIgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgIEFTU0VSVChyb3dCeXRl
cyA9PSBza2lhSW1hZ2UtPndpZHRoKCkgKiA0KTsKICAgICB1aW50OF90KiBwaXhlbHMgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihza2lhSW1hZ2UtPmdldFBpeGVscygpKTsKICAgICBvdXRw
dXRWZWN0b3IucmVzaXplKHJvd0J5dGVzICogaGVpZ2h0KTsKLSAgICBpbnQgc2l6ZSA9IHJvd0J5
dGVzICogaGVpZ2h0OwotICAgIG1lbWNweShvdXRwdXRWZWN0b3IuZGF0YSgpLCBwaXhlbHMsIHNp
emUpOwotICAgICpoYXNBbHBoYUNoYW5uZWwgPSB0cnVlOworICAgIEFscGhhT3AgbmVlZGVkQWxw
aGFPcCA9IGtBbHBoYURvTm90aGluZzsKICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCiAgICAg
ICAgIC8vIEZJWE1FOiBtdXN0IGZldGNoIHRoZSBpbWFnZSBkYXRhIGJlZm9yZSB0aGUgcHJlbXVs
dGlwbGljYXRpb24gc3RlcAotICAgICAgICAqbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvVW5tdWx0
aXBseTsKLSAgICAvLyBDb252ZXJ0IGZyb20gQkdSQSB0byBSR0JBLiBGSVhNRTogYWRkIEdMX0JH
UkEgZXh0ZW5zaW9uIHN1cHBvcnQKLSAgICAvLyB0byBhbGwgdW5kZXJseWluZyBPcGVuR0wgaW1w
bGVtZW50YXRpb25zLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KQotICAg
ICAgICBzdGQ6OnN3YXAob3V0cHV0VmVjdG9yW2ldLCBvdXRwdXRWZWN0b3JbaSArIDJdKTsKLSAg
ICAqZm9ybWF0ID0gUkdCQTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgbmVlZGVkQWxwaGFP
cCA9IGtBbHBoYURvVW5tdWx0aXBseTsKKyAgICByZXR1cm4gcGFja1BpeGVscyhwaXhlbHMsIGtT
b3VyY2VGb3JtYXRCR1JBOCwgc2tpYUltYWdlLT53aWR0aCgpLCBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0
YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE2
NDEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MSBAQAorMjAxMC0wNi0yMiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGZv
cm1hdCBjb252ZXJzaW9ucyBpbiB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIHRha2luZyBI
VE1MIGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQwMzE5CisKKyAgICAgICAgR2VuZXJhbGl6ZWQgY29kZSBzdXBwb3J0aW5nIHByZW11bHRpcGxp
Y2F0aW9uIG9mIGFscGhhIGFuZAorICAgICAgICB2ZXJ0aWNhbCBmbGlwIHRvIHBhY2sgdGV4dHVy
ZSBkYXRhIGludG8gcmVxdWVzdGVkIGZvcm1hdCBhbmQgdHlwZS4KKyAgICAgICAgSGFuZGxlZCBp
bmNvbWluZyBpbWFnZSBkYXRhIG9mIHZhcmlvdXMgZm9ybWF0cywgUkdCQSBhbmQgQkdSQSBpbgor
ICAgICAgICBwYXJ0aWN1bGFyLCBib3RoIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHRlbXBvcmFy
eSBjb3BpZXMgZHVyaW5nCisgICAgICAgIHRleHR1cmUgdXBsb2FkIGFuZCB0byBzdXBwb3J0IHBy
ZW11bHRpcGx5aW5nIGFscGhhIGZvciB0aGUKKyAgICAgICAgdGV4SW1hZ2UyRCBhbmQgdGV4U3Vi
SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEFycmF5QnVmZmVyVmlldworICAgICAgICBpbiBh
IHN1YnNlcXVlbnQgYnVnLiBBZGRlZCB0ZXN0IGNhc2UgZXhlcmNpc2luZyBhbGwgY29tYmluYXRp
b25zCisgICAgICAgIG9mIGZvcm1hdC90eXBlIGNvbWJpbmF0aW9ucywgcHJlbXVsdGlwbGljYXRp
b24gb2YgYWxwaGEsIGFuZAorICAgICAgICBJbWFnZS9JbWFnZURhdGEgdXBsb2FkLiAoSW5jb3Jw
b3JhdGVkIHBuZ2xpYi5qcyB1bmRlcgorICAgICAgICBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJj
ZXMvIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgSW1hZ2UgZWxlbWVudHMKKyAgICAgICAgcHJvZ3Jh
bW1hdGljYWxseS4pIFRlc3RlZCBpbiBTYWZhcmkgb24gTWFjIE9TIFggYW5kIGluIENocm9taXVt
IG9uCisgICAgICAgIE1hYyBPUyBYLCBXaW5kb3dzIGFuZCBMaW51eC4KKworICAgICAgICBUZXN0
OiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2Utd2l0aC1mb3JtYXQtYW5kLXR5cGUuaHRtbAor
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3BuZ2xpYi5qczogQWRkZWQu
CisgICAgICAgICgpOgorICAgICAgICAoLik6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
dGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLmh0
bWw6IEFkZGVkLgorCiAyMDEwLTA2LTIyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBObyByZXZpZXcsIHNraXBwaW5nIHRlc3QgZHVlIHRvIHJldmVhbGVkIGJ1ZyBp
biBDbGlwYm9hcmRRdC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1p
bWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBl
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3RleC1pbWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTM3IEBACitWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2Uy
RCBjb2RlIHBhdGhzIHRha2luZyBIVE1MIGRhdGEgd2l0aCBhbGwgZm9ybWF0L3R5cGUgY29tYmlu
YXRpb25zCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUmVncmVzc2lvbiB0ZXN0IGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMTkgOiBJbXBsZW1l
bnQgZm9ybWF0IGNvbnZlcnNpb25zIGluIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFr
aW5nIEhUTUwgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BB
U1MgUkdCQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBk
YXRhCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBSR0JBL1VO
U0lHTkVEX1NIT1JUXzRfNF80XzQgbXVzdCBkcm9wIGxvdyBmb3VyIGJpdHMgb2YgcHJlY2lzaW9u
CitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBSR0JBL1VOU0lH
TkVEX1NIT1JUXzVfNV81XzEgbXVzdCBkcm9wIGxvdyB0aHJlZSBiaXRzIG9mIHByZWNpc2lvbgor
VGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgUkdCL1VOU0lHTkVE
X0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4
SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFJHQi9VTlNJR05FRF9TSE9SVF81XzZf
NSBtdXN0IGRyb3AgbG93IHR3byBvciB0aHJlZSBiaXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0
ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgQUxQSEEvVU5TSUdORURfQllURSBz
aG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJE
IHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUgc2hvdWxk
IG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRo
IEltYWdlIGF0IDI1NngxCitQQVNTIExVTUlOQU5DRV9BTFBIQS9VTlNJR05FRF9CWVRFIHNob3Vs
ZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQg
d2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50
YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIElt
YWdlIGF0IDI1NngxCitQQVNTIFJHQkEvVU5TSUdORURfU0hPUlRfNF80XzRfNCBtdXN0IGRyb3Ag
bG93IGZvdXIgYml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIElt
YWdlIGF0IDI1NngxCitQQVNTIFJHQkEvVU5TSUdORURfU0hPUlRfNV81XzVfMSBtdXN0IGRyb3Ag
bG93IHRocmVlIGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJ
bWFnZSBhdCAyNTZ4MQorUEFTUyBSR0IvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVs
bCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQg
MjU2eDEKK1BBU1MgUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81IG11c3QgZHJvcCBsb3cgdHdvIG9y
IHRocmVlIGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFn
ZSBhdCAyNTZ4MQorUEFTUyBBTFBIQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxs
IHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAy
NTZ4MQorUEFTUyBMVU1JTkFOQ0UvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBw
cmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2
eDEKK1BBU1MgTFVNSU5BTkNFX0FMUEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1
bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBh
dCAyNTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJl
Y2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4
MQorUEFTUyBSR0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgbXVzdCBkcm9wIGxvdyBmb3VyIGJp
dHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2
eDEKK1BBU1MgUkdCQS9VTlNJR05FRF9TSE9SVF81XzVfNV8xIG11c3QgZHJvcCBsb3cgdGhyZWUg
Yml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAy
NTZ4MQorUEFTUyBSR0IvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNp
b24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQ
QVNTIFJHQi9VTlNJR05FRF9TSE9SVF81XzZfNSBtdXN0IGRyb3AgbG93IHR3byBvciB0aHJlZSBi
aXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1
NngxCitQQVNTIEFMUEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lz
aW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQor
UEFTUyBMVU1JTkFOQ0UvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNp
b24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQ
QVNTIExVTUlOQU5DRV9BTFBIQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHBy
ZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQg
MjU2eDEKK1BBU1MgUkdCQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNp
c2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2
eDEKK1BBU1MgUkdCQS9VTlNJR05FRF9TSE9SVF80XzRfNF80IG11c3QgZHJvcCBsb3cgZm91ciBi
aXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0
IDI1NngxCitQQVNTIFJHQkEvVU5TSUdORURfU0hPUlRfNV81XzVfMSBtdXN0IGRyb3AgbG93IHRo
cmVlIGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURh
dGEgYXQgMjU2eDEKK1BBU1MgUkdCL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwg
cHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBh
dCAyNTZ4MQorUEFTUyBSR0IvVU5TSUdORURfU0hPUlRfNV82XzUgbXVzdCBkcm9wIGxvdyB0d28g
b3IgdGhyZWUgYml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIElt
YWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBBTFBIQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFp
biBmdWxsIHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFn
ZURhdGEgYXQgMjU2eDEKK1BBU1MgTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50
YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIElt
YWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURSBzaG91
bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdp
dGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdp
dGggUkdCQS9VTlNJR05FRF9CWVRFCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAy
NTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1Nngx
CitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEvVU5TSUdORURf
U0hPUlRfNV81XzVfMQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BB
U1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX0JZVEUK
K1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVN
VUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQi9VTlNJR05FRF9TSE9SVF81XzZfNQorVGVzdGlu
ZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZ
X0FMUEhBX1dFQkdMIHdpdGggQUxQSEEvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJE
IHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdM
IHdpdGggTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIElt
YWdlIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIExV
TUlOQU5DRV9BTFBIQS9VTlNJR05FRF9CWVRFCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJ
bWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBS
R0JBL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1
NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEvVU5TSUdO
RURfU0hPUlRfNF80XzRfNAorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2
eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05F
RF9TSE9SVF81XzVfNV8xCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4
MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURf
QllURQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5Q
QUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81
CitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tf
UFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBBTFBIQS9VTlNJR05FRF9CWVRFCitUZXN0aW5n
IHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQ
TFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0UvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhT
dWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMIHdpdGggTFVNSU5BTkNFX0FMUEhBL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4
SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlf
QUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3
aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VC
R0wgd2l0aCBSR0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3
aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VC
R0wgd2l0aCBSR0JBL1VOU0lHTkVEX1NIT1JUXzVfNV81XzEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3
aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VC
R0wgd2l0aCBSR0IvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VE
YXRhIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJH
Qi9VTlNJR05FRF9TSE9SVF81XzZfNQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRh
IGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIEFMUEhB
L1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4
MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0UvVU5T
SUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQ
QVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIExVTUlOQU5DRV9BTFBIQS9V
TlNJR05FRF9CWVRFCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2
eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05F
RF9CWVRFCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BB
U1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9TSE9S
VF80XzRfNF80CitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEK
K1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9T
SE9SVF81XzVfNV8xCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2
eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVE
X0JZVEUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFT
UyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURfU0hPUlRf
NV82XzUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFT
UyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBBTFBIQS9VTlNJR05FRF9CWVRF
CitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1MgVU5Q
QUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUK
K1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBB
Q0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURf
QllURQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS13aXRoLWZvcm1h
dC1hbmQtdHlwZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3RleC1pbWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10
eXBlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTY4IEBACis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wbmdsaWIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvdXRpbHMzZC5qcyI+IDwvc2NyaXB0PgorPHNjcmlwdCBpZD0idnNo
YWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzMgZ19Qb3NpdGlv
bjsKK2F0dHJpYnV0ZSB2ZWMyIGdfVGV4Q29vcmQwOworCit2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7
CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGdfUG9zaXRpb24ueCwg
Z19Qb3NpdGlvbi55LCBnX1Bvc2l0aW9uLnosIDEuMCk7CisgICAgdGV4Q29vcmQgPSBnX1RleENv
b3JkMDsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRl
ci94LWZyYWdtZW50Ij4KK3VuaWZvcm0gc2FtcGxlcjJEIHRleDsKK3ZhcnlpbmcgdmVjMiB0ZXhD
b29yZDsKKwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4
LCB0ZXhDb29yZCk7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciBnbCA9IG51bGw7Cit2
YXIgdGV4dHVyZUxvYyA9IG51bGw7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gSGFybmVzcworCit2YXIgdGVzdENhc2VzID0gW107CisKK2Z1
bmN0aW9uIGluaXQoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRX
ZWJHTEVuYWJsZWQiLCAiMSIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAg
ICB9CisKKyAgICBkZXNjcmlwdGlvbignVmVyaWZ5IHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdl
MkQgY29kZSBwYXRocyB0YWtpbmcgSFRNTCBkYXRhIHdpdGggYWxsIGZvcm1hdC90eXBlIGNvbWJp
bmF0aW9ucycpOworCisgICAgZGVidWcoJ1JlZ3Jlc3Npb24gdGVzdCBmb3IgPGEgaHJlZj0iaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzE5Ij5odHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMTk8L2E+IDogPGNvZGU+SW1wbGVtZW50IGZv
cm1hdCBjb252ZXJzaW9ucyBpbiB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIHRha2luZyBI
VE1MIGRhdGE8L2NvZGU+Jyk7CisKKyAgICBnbCA9IGluaXRXZWJHTCgiZXhhbXBsZSIsICJ2c2hh
ZGVyIiwgImZzaGFkZXIiLCBbICJnX1Bvc2l0aW9uIiwgImdfVGV4Q29vcmQwIiBdLCBbIDAsIDAs
IDAsIDEgXSwgMSk7CisgICAgZ2wuZGlzYWJsZShnbC5CTEVORCk7CisKKyAgICB0ZXh0dXJlTG9j
ID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKGdsLnByb2dyYW0sICJ0ZXgiKTsKKworICAgIHZhciB2
ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAgMS4wLCAgMS4wLCAwLjAs
CisgICAgICAgIC0xLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAg
ICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAg
IDEuMCwgLTEuMCwgMC4wXSk7CisgICAgdmFyIHRleENvb3JkcyA9IG5ldyBXZWJHTEZsb2F0QXJy
YXkoWworICAgICAgICAxLjAsIDEuMCwKKyAgICAgICAgMC4wLCAxLjAsCisgICAgICAgIDAuMCwg
MC4wLAorICAgICAgICAxLjAsIDEuMCwKKyAgICAgICAgMC4wLCAwLjAsCisgICAgICAgIDEuMCwg
MC4wXSk7CisgICAgdmFyIHRleENvb3JkT2Zmc2V0ID0gdmVydGljZXMuYnl0ZUxlbmd0aDsKKwor
ICAgIHZhciB2Ym8gPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFS
UkFZX0JVRkZFUiwgdmJvKTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwKKyAg
ICAgICAgICAgICAgICAgIHRleENvb3JkT2Zmc2V0ICsgdGV4Q29vcmRzLmJ5dGVMZW5ndGgsCisg
ICAgICAgICAgICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShn
bC5BUlJBWV9CVUZGRVIsIDAsIHZlcnRpY2VzKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFS
UkFZX0JVRkZFUiwgdGV4Q29vcmRPZmZzZXQsIHRleENvb3Jkcyk7CisKKyAgICBnbC5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGds
LkZMT0FULCBnbC5GQUxTRSwgMCwgMCk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
MSk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZ2wuRkFMU0Us
IDAsIHRleENvb3JkT2Zmc2V0KTsKKworICAgIGluaXRpYWxpemVUZXN0cygpOworfQorCitmdW5j
dGlvbiBpbml0aWFsaXplVGVzdHMoKQoreworICAgIC8vIFZlcmlmeSB0aGF0IHVwbG9hZGluZyB0
byBwYWNrZWQgcGl4ZWwgZm9ybWF0cyBwZXJmb3JtcyB0aGUKKyAgICAvLyByZXF1aXJlZCBjb252
ZXJzaW9uIGFuZCBhc3NvY2lhdGVkIGxvc3Mgb2YgcHJlY2lzaW9uLgorICAgIGZvciAodmFyIHVz
ZUltYWdlRGF0YSA9IDA7IHVzZUltYWdlRGF0YSA8IDI7ICsrdXNlSW1hZ2VEYXRhKSB7CisgICAg
ICAgIGZvciAodmFyIHVzZVRleFN1YkltYWdlMkQgPSAwOyB1c2VUZXhTdWJJbWFnZTJEIDwgMjsg
Kyt1c2VUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAg
ICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAodXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZhbHNlKSwK
KyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAodXNlVGV4U3ViSW1hZ2UyRCA/IHRy
dWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAg
ICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9wYXF1ZUdy
YXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisg
ICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICAgICAgICAgICAgIHR5cGU6IGds
LlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGFsbENoYW5uZWxzSW5j
cmVhc2VCeU5vTW9yZVRoYW4sCisgICAgICAgICAgICAgICAgdGhyZXNob2xkOiAxLAorICAgICAg
ICAgICAgICAgIG51bU9jY3VycmVuY2VzOiAxLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
OiAiUkdCQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBk
YXRhIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAg
ICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAodXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZhbHNlKSwK
KyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAodXNlVGV4U3ViSW1hZ2UyRCA/IHRy
dWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAg
ICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9wYXF1ZUdy
YXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisg
ICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICAgICAgICAgICAgIHR5cGU6IGds
LlVOU0lHTkVEX1NIT1JUXzRfNF80XzQsCisgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGFsbENo
YW5uZWxzSW5jcmVhc2VCeUF0TGVhc3QsCisgICAgICAgICAgICAgICAgdGhyZXNob2xkOiAxNSwK
KyAgICAgICAgICAgICAgICBudW1PY2N1cnJlbmNlczogMTAsCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb246ICJSR0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgbXVzdCBkcm9wIGxvdyBmb3Vy
IGJpdHMgb2YgcHJlY2lzaW9uIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2Fz
ZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAodXNlSW1hZ2VEYXRhID8g
dHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAodXNlVGV4
U3ViSW1hZ2UyRCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwK
KyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBn
ZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlB
bHBoYTogZmFsc2UsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICAgICAg
ICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsCisgICAgICAgICAgICAgICAg
dmVyaWZpZXI6IGFsbENoYW5uZWxzSW5jcmVhc2VCeUF0TGVhc3QsCisgICAgICAgICAgICAgICAg
dGhyZXNob2xkOiA3LAorICAgICAgICAgICAgICAgIG51bU9jY3VycmVuY2VzOiAyMCwKKyAgICAg
ICAgICAgICAgICBkZXNjcmlwdGlvbjogIlJHQkEvVU5TSUdORURfU0hPUlRfNV81XzVfMSBtdXN0
IGRyb3AgbG93IHRocmVlIGJpdHMgb2YgcHJlY2lzaW9uIgorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAo
dXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJ
bWFnZTJEOiAodXNlVGV4U3ViSW1hZ2UyRCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAg
ICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAg
ICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5S
R0IsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAg
ICAgICB2ZXJpZmllcjogYWxsQ2hhbm5lbHNJbmNyZWFzZUJ5Tm9Nb3JlVGhhbiwKKyAgICAgICAg
ICAgICAgICB0aHJlc2hvbGQ6IDEsCisgICAgICAgICAgICAgICAgbnVtT2NjdXJyZW5jZXM6IDEs
CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJSR0IvVU5TSUdORURfQllURSBzaG91bGQg
bWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YSIKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgdGVzdENhc2VzLnB1c2goeworICAgICAgICAgICAgICAgIHVzZUltYWdlRGF0YTogKHVz
ZUltYWdlRGF0YSA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgdXNlVGV4U3ViSW1h
Z2UyRDogKHVzZVRleFN1YkltYWdlMkQgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAg
IHdpZHRoOiAyNTYsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxLAorICAgICAgICAgICAgICAg
IGdlbmVyYXRvcjogZ2VuZXJhdGVPcGFxdWVHcmF5c2NhbGVSYW1wLAorICAgICAgICAgICAgICAg
IHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLAorICAgICAgICAgICAgICAgIGZvcm1hdDogZ2wuUkdC
LAorICAgICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81LAorICAgICAg
ICAgICAgICAgIHZlcmlmaWVyOiBhbGxDaGFubmVsc0luY3JlYXNlQnlBdExlYXN0LAorICAgICAg
ICAgICAgICAgIHRocmVzaG9sZDogMywKKyAgICAgICAgICAgICAgICBudW1PY2N1cnJlbmNlczog
MjAsCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJSR0IvVU5TSUdORURfU0hPUlRfNV82
XzUgbXVzdCBkcm9wIGxvdyB0d28gb3IgdGhyZWUgYml0cyBvZiBwcmVjaXNpb24iCisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1
c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAg
ICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8gdHJ1ZSA6IGZhbHNlKSwK
KyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwK
KyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlVHJhbnNsdWNlbnRHcmF5c2NhbGVS
YW1wLAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLAorICAgICAgICAg
ICAgICAgIGZvcm1hdDogZ2wuQUxQSEEsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdO
RURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogYWxwaGFDaGFubmVsSW5jcmVhc2Vz
QnlOb01vcmVUaGFuLAorICAgICAgICAgICAgICAgIHRocmVzaG9sZDogMSwKKyAgICAgICAgICAg
ICAgICBudW1PY2N1cnJlbmNlczogMSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFM
UEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEi
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAg
ICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2UpLAorICAg
ICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8gdHJ1ZSA6
IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhl
aWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlT3BhcXVlR3JheXNj
YWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSwKKyAgICAg
ICAgICAgICAgICBmb3JtYXQ6IGdsLkxVTUlOQU5DRSwKKyAgICAgICAgICAgICAgICB0eXBlOiBn
bC5VTlNJR05FRF9CWVRFLAorICAgICAgICAgICAgICAgIHZlcmlmaWVyOiBhbGxDaGFubmVsc0lu
Y3JlYXNlQnlOb01vcmVUaGFuLAorICAgICAgICAgICAgICAgIHRocmVzaG9sZDogMSwKKyAgICAg
ICAgICAgICAgICBudW1PY2N1cnJlbmNlczogMSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
bjogIkxVTUlOQU5DRS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lv
biBvZiBkYXRhIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7
CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAodXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZh
bHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAodXNlVGV4U3ViSW1hZ2Uy
RCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAg
ICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9w
YXF1ZUdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogZmFs
c2UsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5MVU1JTkFOQ0VfQUxQSEEsCisgICAgICAg
ICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJpZmll
cjogYWxsQ2hhbm5lbHNJbmNyZWFzZUJ5Tm9Nb3JlVGhhbiwKKyAgICAgICAgICAgICAgICB0aHJl
c2hvbGQ6IDEsCisgICAgICAgICAgICAgICAgbnVtT2NjdXJyZW5jZXM6IDEsCisgICAgICAgICAg
ICAgICAgZGVzY3JpcHRpb246ICJMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURSBzaG91bGQg
bWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YSIKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoYXQgc2V0dGluZyB0aGUgVU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMIHBpeGVsCisgICAgLy8gc3RvcmUgcGFyYW1ldGVyIGFuZCBzZW5k
aW5nIGRvd24gYSB6ZXJvIGFscGhhIGNhdXNlcyB0aGUgY29sb3IKKyAgICAvLyBjaGFubmVscyB0
byBnbyB0byB6ZXJvLgorICAgIGZvciAodmFyIHVzZUltYWdlRGF0YSA9IDA7IHVzZUltYWdlRGF0
YSA8IDI7ICsrdXNlSW1hZ2VEYXRhKSB7CisgICAgICAgIGZvciAodmFyIHVzZVRleFN1YkltYWdl
MkQgPSAwOyB1c2VUZXhTdWJJbWFnZTJEIDwgMjsgKyt1c2VUZXhTdWJJbWFnZTJEKSB7CisgICAg
ICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAo
dXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJ
bWFnZTJEOiAodXNlVGV4U3ViSW1hZ2UyRCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAg
ICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAgICAgICAg
ICAgICAgICBwcmVtdWx0aXBseUFscGhhOiB0cnVlLAorICAgICAgICAgICAgICAgIGZvcm1hdDog
Z2wuUkdCQSwKKyAgICAgICAgICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICAg
ICAgICAgICAgIHZlcmlmaWVyOiBjb2xvckNoYW5uZWxzQXJlWmVybywKKyAgICAgICAgICAgICAg
ICBkZXNjcmlwdGlvbjogIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEv
VU5TSUdORURfQllURSIKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2VzLnB1
c2goeworICAgICAgICAgICAgICAgIHVzZUltYWdlRGF0YTogKHVzZUltYWdlRGF0YSA/IHRydWUg
OiBmYWxzZSksCisgICAgICAgICAgICAgICAgdXNlVGV4U3ViSW1hZ2UyRDogKHVzZVRleFN1Yklt
YWdlMkQgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAg
ICAgICAgICAgICAgaGVpZ2h0OiAxLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJh
dGVUcmFuc3BhcmVudEdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlB
bHBoYTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgICAgICAg
ICAgICAgdHlwZTogZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNCwKKyAgICAgICAgICAgICAgICB2
ZXJpZmllcjogY29sb3JDaGFubmVsc0FyZVplcm8sCisgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b246ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNo
KHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDog
ZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFn
ZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAg
ICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRl
VHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxw
aGE6IHRydWUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICAgICAgICAg
ICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsCisgICAgICAgICAgICAgICAgdmVy
aWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJvLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
OiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9TSE9S
VF81XzVfNV8xIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7
CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAodXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZh
bHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAodXNlVGV4U3ViSW1hZ2Uy
RCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAg
ICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZVRy
YW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhh
OiB0cnVlLAorICAgICAgICAgICAgICAgIGZvcm1hdDogZ2wuUkdCLAorICAgICAgICAgICAgICAg
IHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGNvbG9y
Q2hhbm5lbHNBcmVaZXJvLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVU5QQUNLX1BS
RU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX0JZVEUiCisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJ
bWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAg
IHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAg
ICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1w
LAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6IHRydWUsCisgICAgICAgICAgICAg
ICAgZm9ybWF0OiBnbC5SR0IsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfU0hP
UlRfNV82XzUsCisgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJv
LAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhB
X1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81IgorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRh
OiAodXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhT
dWJJbWFnZTJEOiAodXNlVGV4U3ViSW1hZ2UyRCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAg
ICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAgICAg
ICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiB0cnVlLAorICAgICAgICAgICAgICAgIGZvcm1h
dDogZ2wuQUxQSEEsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAg
ICAgICAgICAgICAgICB2ZXJpZmllcjogY29sb3JDaGFubmVsc0FyZVplcm8sCisgICAgICAgICAg
ICAgICAgZGVzY3JpcHRpb246ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBB
TFBIQS9VTlNJR05FRF9CWVRFIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2Fz
ZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAodXNlSW1hZ2VEYXRhID8g
dHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAodXNlVGV4
U3ViSW1hZ2UyRCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwK
KyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBn
ZW5lcmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0
aXBseUFscGhhOiB0cnVlLAorICAgICAgICAgICAgICAgIGZvcm1hdDogZ2wuTFVNSU5BTkNFLAor
ICAgICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAg
dmVyaWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJvLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uOiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggTFVNSU5BTkNFL1VOU0lH
TkVEX0JZVEUiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsK
KyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFs
c2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJE
ID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAg
ICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlVHJh
bnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6
IHRydWUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5MVU1JTkFOQ0VfQUxQSEEsCisgICAg
ICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJp
ZmllcjogY29sb3JDaGFubmVsc0FyZVplcm8sCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246
ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0VfQUxQSEEvVU5T
SUdORURfQllURSIKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
UHJvZHVjZSBkYXRhIGZvciBhbGwgdGVzdGNhc2VzLiBCZWNhdXNlIHdlIGxvYWQgaW1hZ2VzLCBz
b21lIG9mCisgICAgLy8gdGhlc2UgbWF5IGdlbmVyYXRlIHRoZWlyIGRhdGEgYXN5bmNocm9ub3Vz
bHkuCisgICAgZ2VuZXJhdGVUZXN0RGF0YSgpOworfQorCitmdW5jdGlvbiBnZW5lcmF0ZVRlc3RE
YXRhKCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RDYXNlcy5sZW5ndGg7IGkrKykg
eworICAgICAgICB2YXIgdGVzdENhc2UgPSB0ZXN0Q2FzZXNbaV07CisgICAgICAgIHZhciB3cmFw
cGVyID0gbnVsbDsKKyAgICAgICAgaWYgKHRlc3RDYXNlLnVzZUltYWdlRGF0YSkKKyAgICAgICAg
ICAgIHdyYXBwZXIgPSBuZXcgSW1hZ2VEYXRhV3JhcHBlcih0ZXN0Q2FzZS53aWR0aCwgdGVzdENh
c2UuaGVpZ2h0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgd3JhcHBlciA9IG5ldyBJbWFn
ZVdyYXBwZXIodGVzdENhc2Uud2lkdGgsIHRlc3RDYXNlLmhlaWdodCk7CisgICAgICAgIHRlc3RD
YXNlLndyYXBwZXIgPSB3cmFwcGVyOworICAgICAgICB0ZXN0Q2FzZS5nZW5lcmF0b3Iod3JhcHBl
cik7CisgICAgICAgIHRlc3RDYXNlLndyYXBwZXIuZ2VuZXJhdGVEYXRhKCk7CisgICAgfQorCisg
ICAgLy8gU2VlIHdoZXRoZXIgd2UgbmVlZCB0byBydW4gdGhlIHRlc3RzLCBpbiBjYXNlIGFsbCBv
ZiB0aGVtCisgICAgLy8gZ2VuZXJhdGVkIHRoZWlyIHJlc3VsdHMgc3luY2hyb25vdXNseS4KKyAg
ICBtYXliZVJ1blRlc3RzKCk7Cit9CisKK3ZhciByYW5UZXN0cyA9IGZhbHNlOworCitmdW5jdGlv
biBtYXliZVJ1blRlc3RzKCkKK3sKKyAgICBpZiAoIXJhblRlc3RzKQorICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGlmICghdGVz
dENhc2VzW2ldLndyYXBwZXIuZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICBy
YW5UZXN0cyA9IHRydWU7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RDYXNlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgcnVuT25lVGVzdCh0ZXN0Q2FzZXNbaV0pOworCisgICAgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzY3JpcHQiKTsKKyAgICBlcGlsb2d1ZS5vbmxvYWQgPSBmaW5pc2g7CisgICAgZXBp
bG9ndWUuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiOworICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworfQorCitmdW5jdGlvbiB0ZXN0Q2Fz
ZVRvU3RyaW5nKHRlc3RDYXNlKQoreworICAgIHJldHVybiAodGVzdENhc2UudXNlVGV4U3ViSW1h
Z2UyRCA/ICJ0ZXhTdWJJbWFnZTJEIiA6ICJ0ZXhJbWFnZTJEIikgKworICAgICAgICAgICAgIiB3
aXRoICIgKyAodGVzdENhc2UudXNlSW1hZ2VEYXRhID8gIkltYWdlRGF0YSIgOiAiSW1hZ2UiKSAr
CisgICAgICAgICAgICAiIGF0ICIgKyB0ZXN0Q2FzZS53aWR0aCArICJ4IiArIHRlc3RDYXNlLmhl
aWdodDsKK30KKworZnVuY3Rpb24gcnVuT25lVGVzdCh0ZXN0Q2FzZSkKK3sKKyAgICBkZWJ1Zygi
VGVzdGluZyAiICsgdGVzdENhc2VUb1N0cmluZyh0ZXN0Q2FzZSkpOworICAgIHZhciBkYXRhID0g
dGVzdENhc2Uud3JhcHBlci5kYXRhOworICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQg
fCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1
cmUoKTsKKyAgICAvLyBCaW5kIHRoZSB0ZXh0dXJlIHRvIHRleHR1cmUgdW5pdCAwLgorICAgIGds
LmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIC8vIFNldCB1cCB0ZXh0
dXJlIHBhcmFtZXRlcnMuCisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5U
RVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wu
VEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICAvLyBT
ZXQgdXAgcGl4ZWwgc3RvcmUgcGFyYW1ldGVycy4KKyAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBB
Q0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRlc3RDYXNlLnByZW11bHRpcGx5QWxwaGEpOwor
ICAgIC8vIFVwbG9hZCB0aGUgaW1hZ2UgaW50byB0aGUgdGV4dHVyZS4KKyAgICBpZiAodGVzdENh
c2UudXNlVGV4U3ViSW1hZ2UyRCkgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSB0ZXh0dXJl
IHRvIGJsYWNrIGZpcnN0LgorICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAs
IHRlc3RDYXNlLmZvcm1hdCwgdGVzdENhc2Uud2lkdGgsIHRlc3RDYXNlLmhlaWdodCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0Q2FzZS5mb3JtYXQsIHRlc3RDYXNlLnR5cGUsIG51bGwp
OworICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHRlc3RD
YXNlLmZvcm1hdCwgdGVzdENhc2UudHlwZSwgZGF0YSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0ZXN0Q2FzZS5mb3JtYXQsIHRlc3RDYXNl
LmZvcm1hdCwgdGVzdENhc2UudHlwZSwgZGF0YSk7CisgICAgfQorCisgICAgLy8gUG9pbnQgdGhl
IHVuaWZvcm0gc2FtcGxlciB0byB0ZXh0dXJlIHVuaXQgMC4KKyAgICBnbC51bmlmb3JtMWkodGV4
dHVyZUxvYywgMCk7CisgICAgLy8gRHJhdyB0aGUgdHJpYW5nbGVzLgorICAgIGdsLmRyYXdBcnJh
eXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKKyAgICAvLyBDbGVhbiB1cCB0aGUgdGV4dHVyZS4KKyAg
ICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpOworCisgICAgLy8gUmVhZCBiYWNrIHRoZSByZW5k
ZXJpbmcgcmVzdWx0cy4KKyAgICBidWYgPSBuZXcgVWludDhBcnJheSh0ZXN0Q2FzZS53aWR0aCAq
IHRlc3RDYXNlLmhlaWdodCAqIDQpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgdGVzdENhc2Uu
d2lkdGgsIHRlc3RDYXNlLmhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsK
KyAgICAvLyBSdW4gdGhlIHZlcmlmaWNhdGlvbiByb3V0aW5lLgorICAgIGlmICh0ZXN0Q2FzZS52
ZXJpZmllcihidWYsIHRlc3RDYXNlLnRocmVzaG9sZCwgdGVzdENhc2UubnVtT2NjdXJyZW5jZXMp
KQorICAgICAgICB0ZXN0UGFzc2VkKHRlc3RDYXNlLmRlc2NyaXB0aW9uKTsKKyAgICBlbHNlCisg
ICAgICAgIHRlc3RGYWlsZWQodGVzdENhc2UuZGVzY3JpcHRpb24pOworfQorCitmdW5jdGlvbiBm
aW5pc2goKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFdyYXBwZXJzIGZvciBwcm9ncmFtbWF0aWMgY29uc3RydWN0aW9uIG9mIElt
YWdlIGFuZCBJbWFnZURhdGEKKy8vCisKK2Z1bmN0aW9uIEltYWdlV3JhcHBlcih3aWR0aCwgaGVp
Z2h0KQoreworICAgIHRoaXMucG5nQnVpbGRlcl8gPSBuZXcgUE5HbGliKHdpZHRoLCBoZWlnaHQs
IDI1Nik7Cit9CisKK0ltYWdlV3JhcHBlci5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpcy5wbmdCdWlsZGVyXy53aWR0aDsKK307CisKK0ltYWdlV3JhcHBl
ci5wcm90b3R5cGUuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucG5n
QnVpbGRlcl8uaGVpZ2h0OworfTsKKworSW1hZ2VXcmFwcGVyLnByb3RvdHlwZS5zZXRQaXhlbCA9
IGZ1bmN0aW9uKHgsIHksIHIsIGcsIGIsIGEpIHsKKyAgICB0aGlzLnBuZ0J1aWxkZXJfLmJ1ZmZl
clt0aGlzLnBuZ0J1aWxkZXJfLmluZGV4KHgsIHkpXSA9IHRoaXMucG5nQnVpbGRlcl8uY29sb3Io
ciwgZywgYiwgYSk7Cit9OworCisvLyBHZW5lcmF0ZXMgZGF0YSBpbnRvICJkYXRhIiBwcm9wZXJ0
eSwgcG9zc2libHkgYXN5bmNocm9ub3VzbHkuCitJbWFnZVdyYXBwZXIucHJvdG90eXBlLmdlbmVy
YXRlRGF0YSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB0aGF0ID0gdGhpczsKKyAgICB2YXIgaW1n
ID0gbmV3IEltYWdlKCk7CisgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGF0LmRhdGEgPSBpbWc7CisgICAgICAgIG1heWJlUnVuVGVzdHMoKTsKKyAgICB9OworICAgIGlt
Zy5zcmMgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIgKyB0aGlzLnBuZ0J1aWxkZXJfLmdldEJh
c2U2NCgpOworfTsKKworZnVuY3Rpb24gSW1hZ2VEYXRhV3JhcHBlcih3aWR0aCwgaGVpZ2h0KQor
eworICAgIGlmICghSW1hZ2VEYXRhV3JhcHBlci50ZW1wQ2FudmFzKSB7CisgICAgICAgIEltYWdl
RGF0YVdyYXBwZXIudGVtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIp
OworICAgIH0KKyAgICB0aGlzLmltYWdlRGF0YV8gPSBJbWFnZURhdGFXcmFwcGVyLnRlbXBDYW52
YXMuZ2V0Q29udGV4dCgiMmQiKS5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7Cit9CisK
K0ltYWdlRGF0YVdyYXBwZXIudGVtcENhbnZhcyA9IG51bGw7CisKK0ltYWdlRGF0YVdyYXBwZXIu
cHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW1hZ2VE
YXRhXy53aWR0aDsKK307CisKK0ltYWdlRGF0YVdyYXBwZXIucHJvdG90eXBlLmdldEhlaWdodCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmltYWdlRGF0YV8uaGVpZ2h0OworfTsKKwor
SW1hZ2VEYXRhV3JhcHBlci5wcm90b3R5cGUuc2V0UGl4ZWwgPSBmdW5jdGlvbih4LCB5LCByLCBn
LCBiLCBhKSB7CisgICAgdmFyIGluZGV4ID0gNCAqICh0aGlzLmltYWdlRGF0YV8ud2lkdGggKiB5
ICsgeCk7CisgICAgdGhpcy5pbWFnZURhdGFfLmRhdGFbaW5kZXhdID0gcjsKKyAgICB0aGlzLmlt
YWdlRGF0YV8uZGF0YVtpbmRleCArIDFdID0gZzsKKyAgICB0aGlzLmltYWdlRGF0YV8uZGF0YVtp
bmRleCArIDJdID0gYjsKKyAgICB0aGlzLmltYWdlRGF0YV8uZGF0YVtpbmRleCArIDNdID0gYTsK
K307CisKK0ltYWdlRGF0YVdyYXBwZXIucHJvdG90eXBlLmdlbmVyYXRlRGF0YSA9IGZ1bmN0aW9u
KCkgeworICAgIHRoaXMuZGF0YSA9IHRoaXMuaW1hZ2VEYXRhXzsKKyAgICBtYXliZVJ1blRlc3Rz
KCk7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbG9yIHJhbXAgZ2VuZXJhdGlvbiBmdW5j
dGlvbnMKKy8vCisKK2Z1bmN0aW9uIGdlbmVyYXRlT3BhcXVlR3JheXNjYWxlUmFtcCh3cmFwcGVy
KQoreworICAgIHZhciB3aWR0aCA9IHdyYXBwZXIuZ2V0V2lkdGgoKTsKKyAgICB2YXIgaGVpZ2h0
ID0gd3JhcHBlci5nZXRIZWlnaHQoKTsKKyAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyAr
K3gpIHsKKyAgICAgICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZCgyNTUuMCAqIHggLyB3aWR0aCk7
CisgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpCisgICAgICAgICAgICB3
cmFwcGVyLnNldFBpeGVsKHgsIHksIHZhbHVlLCB2YWx1ZSwgdmFsdWUsIDI1NSk7CisgICAgfQor
fQorCitmdW5jdGlvbiBnZW5lcmF0ZVRyYW5zbHVjZW50R3JheXNjYWxlUmFtcCh3cmFwcGVyKQor
eworICAgIHZhciB3aWR0aCA9IHdyYXBwZXIuZ2V0V2lkdGgoKTsKKyAgICB2YXIgaGVpZ2h0ID0g
d3JhcHBlci5nZXRIZWlnaHQoKTsKKyAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gp
IHsKKyAgICAgICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZCgyNTUuMCAqIHggLyB3aWR0aCk7Cisg
ICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpCisgICAgICAgICAgICB3cmFw
cGVyLnNldFBpeGVsKHgsIHksIHZhbHVlLCB2YWx1ZSwgdmFsdWUsIHZhbHVlKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIGdlbmVyYXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wKHdyYXBwZXIpCit7
CisgICAgdmFyIHdpZHRoID0gd3JhcHBlci5nZXRXaWR0aCgpOworICAgIHZhciBoZWlnaHQgPSB3
cmFwcGVyLmdldEhlaWdodCgpOworICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7ICsreCkg
eworICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKDI1NS4wICogeCAvIHdpZHRoKTsKKyAg
ICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkKKyAgICAgICAgICAgIHdyYXBw
ZXIuc2V0UGl4ZWwoeCwgeSwgdmFsdWUsIHZhbHVlLCB2YWx1ZSwgMCk7CisgICAgfQorfQorCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFZlcmlmaWNhdGlvbiByb3V0aW5lcworLy8KKworZnVuY3Rpb24g
YWxsQ2hhbm5lbHNJbmNyZWFzZUJ5Tm9Nb3JlVGhhbihhcnJheSwgdGhyZXNob2xkLCBudW1PY2N1
cnJlbmNlcykgeworICAgIHZhciBudW1Gb3VuZCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDQ7IGkg
PCBhcnJheS5sZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBq
KyspCisgICAgICAgICAgICBpZiAoYXJyYXlbaSArIGpdIC0gYXJyYXlbaSArIGogLSA0XSA+IHRo
cmVzaG9sZCkKKyAgICAgICAgICAgICAgICArK251bUZvdW5kOworCisgICAgcmV0dXJuIG51bUZv
dW5kIDwgbnVtT2NjdXJyZW5jZXM7Cit9CisKK2Z1bmN0aW9uIGFscGhhQ2hhbm5lbEluY3JlYXNl
c0J5Tm9Nb3JlVGhhbihhcnJheSwgdGhyZXNob2xkLCBudW1PY2N1cnJlbmNlcykgeworICAgIHZh
ciBudW1Gb3VuZCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDc7IGkgPCBhcnJheS5sZW5ndGg7IGkg
Kz0gNCkKKyAgICAgICAgaWYgKGFycmF5W2ldIC0gYXJyYXlbaSAtIDRdID4gdGhyZXNob2xkKQor
ICAgICAgICAgICAgKytudW1Gb3VuZDsKKworICAgIHJldHVybiBudW1Gb3VuZCA8IG51bU9jY3Vy
cmVuY2VzOworfQorCitmdW5jdGlvbiBhbGxDaGFubmVsc0luY3JlYXNlQnlBdExlYXN0KGFycmF5
LCB0aHJlc2hvbGQsIG51bU9jY3VycmVuY2VzKSB7CisgICAgdmFyIG51bUZvdW5kID0gMDsKKyAg
ICBmb3IgKHZhciBpID0gNDsgaSA8IGFycmF5Lmxlbmd0aDsgaSArPSA0KQorICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IDQ7ICsraikKKyAgICAgICAgICAgIGlmIChhcnJheVtpICsgal0gLSBh
cnJheVtpICsgaiAtIDRdID4gdGhyZXNob2xkKQorICAgICAgICAgICAgICAgICsrbnVtRm91bmQ7
CisKKyAgICByZXR1cm4gbnVtRm91bmQgPiBudW1PY2N1cnJlbmNlczsKK30KKworZnVuY3Rpb24g
Y29sb3JDaGFubmVsc0FyZVplcm8oYXJyYXksIHRocmVzaG9sZCwgbnVtT2NjdXJyZW5jZXMpIHsK
KyAgICB2YXIgcGFzc2VkID0gdHJ1ZTsKKyAgICB2YXIgbnVtRmFpbHVyZXMgPSAwOworCisgICAg
Zm9yICh2YXIgaSA9IDQ7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCAzOyArK2opCisgICAgICAgICAgICBpZiAoYXJyYXlbaSArIGpdICE9IDAp
IHsKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAo
KytudW1GYWlsdXJlcyA8IDUpCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgIGFycmF5WyIg
KyBpICsgIl0gc2hvdWxkIGhhdmUgYmVlbiAwLCB3YXMgIiArIGFycmF5W2ldKTsKKyAgICAgICAg
ICAgIH0KKworICAgIHJldHVybiBwYXNzZWQ7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJpbml0KCkiPgorPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjI1NnB4IiBo
ZWlnaHQ9IjFweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9wbmdsaWIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3BuZ2xpYi5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9wbmdsaWIuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA3IEBACisvKioKKyogQSBoYW5keSBjbGFzcyB0byBj
YWxjdWxhdGUgY29sb3IgdmFsdWVzLgorKgorKiBAdmVyc2lvbiAxLjAKKyogQGF1dGhvciBSb2Jl
cnQgRWlzZWxlIDxyb2JlcnRAeGFyZy5vcmc+CisqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAy
MDEwLCBSb2JlcnQgRWlzZWxlCisqIEBsaW5rIGh0dHA6Ly93d3cueGFyZy5vcmcvMjAxMC8wMy9n
ZW5lcmF0ZS1jbGllbnQtc2lkZS1wbmctZmlsZXMtdXNpbmctamF2YXNjcmlwdC8KKyogQGxpY2Vu
c2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocCBHTlUgUHVi
bGljIExpY2Vuc2UKKyoKKyovCisKKyhmdW5jdGlvbigpIHsKKworCS8vIGhlbHBlciBmdW5jdGlv
bnMgZm9yIHRoYXQgY3R4CisJZnVuY3Rpb24gd3JpdGUoYnVmZmVyLCBvZmZzKSB7CisJCWZvciAo
dmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQlmb3IgKHZhciBqID0g
MDsgaiA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGorKykgeworCQkJCWJ1ZmZlcltvZmZzKytdID0g
YXJndW1lbnRzW2ldLmNoYXJBdChqKTsKKwkJCX0KKwkJfQorCX0KKworCWZ1bmN0aW9uIGJ5dGUy
KHcpIHsKKwkJcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKHcgPj4gOCkgJiAyNTUsIHcgJiAy
NTUpOworCX0KKworCWZ1bmN0aW9uIGJ5dGU0KHcpIHsKKwkJcmV0dXJuIFN0cmluZy5mcm9tQ2hh
ckNvZGUoKHcgPj4gMjQpICYgMjU1LCAodyA+PiAxNikgJiAyNTUsICh3ID4+IDgpICYgMjU1LCB3
ICYgMjU1KTsKKwl9CisKKwlmdW5jdGlvbiBieXRlMmxzYih3KSB7CisJCXJldHVybiBTdHJpbmcu
ZnJvbUNoYXJDb2RlKHcgJiAyNTUsICh3ID4+IDgpICYgMjU1KTsKKwl9CisKKwl3aW5kb3cuUE5H
bGliID0gZnVuY3Rpb24od2lkdGgsaGVpZ2h0LGRlcHRoKSB7CisKKwkJdGhpcy53aWR0aCAgID0g
d2lkdGg7CisJCXRoaXMuaGVpZ2h0ICA9IGhlaWdodDsKKwkJdGhpcy5kZXB0aCAgID0gZGVwdGg7
CisKKwkJLy8gcGl4ZWwgZGF0YSBhbmQgcm93IGZpbHRlciBpZGVudGlmaWVyIHNpemUKKwkJdGhp
cy5waXhfc2l6ZSA9IGhlaWdodCAqICh3aWR0aCArIDEpOworCisJCS8vIGRlZmxhdGUgaGVhZGVy
LCBwaXhfc2l6ZSwgYmxvY2sgaGVhZGVycywgYWRsZXIzMiBjaGVja3N1bQorCQl0aGlzLmRhdGFf
c2l6ZSA9IDIgKyB0aGlzLnBpeF9zaXplICsgNSAqIE1hdGguZmxvb3IoKDB4ZmZmZSArIHRoaXMu
cGl4X3NpemUpIC8gMHhmZmZmKSArIDQ7CisKKwkJLy8gb2Zmc2V0cyBhbmQgc2l6ZXMgb2YgUG5n
IGNodW5rcworCQl0aGlzLmloZHJfb2ZmcyA9IDA7CQkJCQkJCQkJLy8gSUhEUiBvZmZzZXQgYW5k
IHNpemUKKwkJdGhpcy5paGRyX3NpemUgPSA0ICsgNCArIDEzICsgNDsKKwkJdGhpcy5wbHRlX29m
ZnMgPSB0aGlzLmloZHJfb2ZmcyArIHRoaXMuaWhkcl9zaXplOwkvLyBQTFRFIG9mZnNldCBhbmQg
c2l6ZQorCQl0aGlzLnBsdGVfc2l6ZSA9IDQgKyA0ICsgMyAqIGRlcHRoICsgNDsKKwkJdGhpcy50
cm5zX29mZnMgPSB0aGlzLnBsdGVfb2ZmcyArIHRoaXMucGx0ZV9zaXplOwkvLyB0Uk5TIG9mZnNl
dCBhbmQgc2l6ZQorCQl0aGlzLnRybnNfc2l6ZSA9IDQgKyA0ICsgZGVwdGggKyA0OworCQl0aGlz
LmlkYXRfb2ZmcyA9IHRoaXMudHJuc19vZmZzICsgdGhpcy50cm5zX3NpemU7CS8vIElEQVQgb2Zm
c2V0IGFuZCBzaXplCisJCXRoaXMuaWRhdF9zaXplID0gNCArIDQgKyB0aGlzLmRhdGFfc2l6ZSAr
IDQ7CisJCXRoaXMuaWVuZF9vZmZzID0gdGhpcy5pZGF0X29mZnMgKyB0aGlzLmlkYXRfc2l6ZTsJ
Ly8gSUVORCBvZmZzZXQgYW5kIHNpemUKKwkJdGhpcy5pZW5kX3NpemUgPSA0ICsgNCArIDQ7CisJ
CXRoaXMuYnVmZmVyX3NpemUgID0gdGhpcy5pZW5kX29mZnMgKyB0aGlzLmllbmRfc2l6ZTsJLy8g
dG90YWwgUE5HIHNpemUKKworCQl0aGlzLmJ1ZmZlciAgPSBuZXcgQXJyYXkoKTsKKwkJdGhpcy5w
YWxldHRlID0gbmV3IE9iamVjdCgpOworCQl0aGlzLnBpbmRleCAgPSAwOworCisJCXZhciBfY3Jj
MzIgPSBuZXcgQXJyYXkoKTsKKworCQkvLyBpbml0aWFsaXplIGJ1ZmZlciB3aXRoIHplcm8gYnl0
ZXMKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1ZmZlcl9zaXplOyBpKyspIHsKKwkJCXRo
aXMuYnVmZmVyW2ldID0gIlx4MDAiOworCQl9CisKKwkJLy8gaW5pdGlhbGl6ZSBub24temVybyBl
bGVtZW50cworCQl3cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy5paGRyX29mZnMsIGJ5dGU0KHRoaXMu
aWhkcl9zaXplIC0gMTIpLCAnSUhEUicsIGJ5dGU0KHdpZHRoKSwgYnl0ZTQoaGVpZ2h0KSwgIlx4
MDhceDAzIik7CisJCXdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLnBsdGVfb2ZmcywgYnl0ZTQodGhp
cy5wbHRlX3NpemUgLSAxMiksICdQTFRFJyk7CisJCXdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLnRy
bnNfb2ZmcywgYnl0ZTQodGhpcy50cm5zX3NpemUgLSAxMiksICd0Uk5TJyk7CisJCXdyaXRlKHRo
aXMuYnVmZmVyLCB0aGlzLmlkYXRfb2ZmcywgYnl0ZTQodGhpcy5pZGF0X3NpemUgLSAxMiksICdJ
REFUJyk7CisJCXdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLmllbmRfb2ZmcywgYnl0ZTQodGhpcy5p
ZW5kX3NpemUgLSAxMiksICdJRU5EJyk7CisKKwkJLy8gaW5pdGlhbGl6ZSBkZWZsYXRlIGhlYWRl
cgorCQl2YXIgaGVhZGVyID0gKCg4ICsgKDcgPDwgNCkpIDw8IDgpIHwgKDMgPDwgNik7CisJCWhl
YWRlcis9IDMxIC0gKGhlYWRlciAlIDMxKTsKKworCQl3cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy5p
ZGF0X29mZnMgKyA4LCBieXRlMihoZWFkZXIpKTsKKworCQkvLyBpbml0aWFsaXplIGRlZmxhdGUg
YmxvY2sgaGVhZGVycworCQlmb3IgKHZhciBpID0gMDsgKGkgPDwgMTYpIC0gMSA8IHRoaXMucGl4
X3NpemU7IGkrKykgeworCQkJdmFyIHNpemUsIGJpdHM7CisJCQlpZiAoaSArIDB4ZmZmZiA8IHRo
aXMucGl4X3NpemUpIHsKKwkJCQlzaXplID0gMHhmZmZmOworCQkJCWJpdHMgPSAiXHgwMCI7CisJ
CQl9IGVsc2UgeworCQkJCXNpemUgPSB0aGlzLnBpeF9zaXplIC0gKGkgPDwgMTYpIC0gaTsKKwkJ
CQliaXRzID0gIlx4MDEiOworCQkJfQorCQkJd3JpdGUodGhpcy5idWZmZXIsIHRoaXMuaWRhdF9v
ZmZzICsgOCArIDIgKyAoaSA8PCAxNikgKyAoaSA8PCAyKSwgYml0cywgYnl0ZTJsc2Ioc2l6ZSks
IGJ5dGUybHNiKH5zaXplKSk7CisJCX0KKworCQkvKiBDcmVhdGUgY3JjMzIgbG9va3VwIHRhYmxl
ICovCisJCWZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCXZhciBjID0gaTsKKwkJ
CWZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB7CisJCQkJaWYgKGMgJiAxKSB7CisJCQkJCWMg
PSAtMzA2Njc0OTEyIF4gKChjID4+IDEpICYgMHg3ZmZmZmZmZik7CisJCQkJfSBlbHNlIHsKKwkJ
CQkJYyA9IChjID4+IDEpICYgMHg3ZmZmZmZmZjsKKwkJCQl9CisJCQl9CisJCQlfY3JjMzJbaV0g
PSBjOworCQl9CisKKwkJLy8gY29tcHV0ZSB0aGUgaW5kZXggaW50byBhIHBuZyBmb3IgYSBnaXZl
biBwaXhlbAorCQl0aGlzLmluZGV4ID0gZnVuY3Rpb24oeCx5KSB7CisJCQl2YXIgaSA9IHkgKiAo
dGhpcy53aWR0aCArIDEpICsgeCArIDE7CisJCQl2YXIgaiA9IHRoaXMuaWRhdF9vZmZzICsgOCAr
IDIgKyA1ICogTWF0aC5mbG9vcigoaSAvIDB4ZmZmZikgKyAxKSArIGk7CisJCQlyZXR1cm4gajsK
KwkJfQorCisJCS8vIGNvbnZlcnQgYSBjb2xvciBhbmQgYnVpbGQgdXAgdGhlIHBhbGV0dGUKKwkJ
dGhpcy5jb2xvciA9IGZ1bmN0aW9uKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSB7CisKKwkJCWFs
cGhhID0gYWxwaGEgPj0gMCA/IGFscGhhIDogMjU1OworCQkJdmFyIGNvbG9yID0gKCgoKChhbHBo
YSA8PCA4KSB8IHJlZCkgPDwgOCkgfCBncmVlbikgPDwgOCkgfCBibHVlOworCisJCQlpZiAodHlw
ZW9mIHRoaXMucGFsZXR0ZVtjb2xvcl0gPT0gInVuZGVmaW5lZCIpIHsKKwkJCQlpZiAodGhpcy5w
aW5kZXggPT0gdGhpcy5kZXB0aCkgcmV0dXJuICJceDAwIjsKKworCQkJCXZhciBuZHggPSB0aGlz
LnBsdGVfb2ZmcyArIDggKyAzICogdGhpcy5waW5kZXg7CisKKwkJCQl0aGlzLmJ1ZmZlcltuZHgg
KyAwXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocmVkKTsKKwkJCQl0aGlzLmJ1ZmZlcltuZHggKyAx
XSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZ3JlZW4pOworCQkJCXRoaXMuYnVmZmVyW25keCArIDJd
ID0gU3RyaW5nLmZyb21DaGFyQ29kZShibHVlKTsKKwkJCQl0aGlzLmJ1ZmZlclt0aGlzLnRybnNf
b2Zmcys4K3RoaXMucGluZGV4XSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYWxwaGEpOworCisJCQkJ
dGhpcy5wYWxldHRlW2NvbG9yXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5waW5kZXgrKyk7
CisJCQl9CisJCQlyZXR1cm4gdGhpcy5wYWxldHRlW2NvbG9yXTsKKwkJfQorCisJCS8vIG91dHB1
dCBhIFBORyBzdHJpbmcsIEJhc2U2NCBlbmNvZGVkCisJCXRoaXMuZ2V0QmFzZTY0ID0gZnVuY3Rp
b24oKSB7CisKKwkJCXZhciBzID0gdGhpcy5nZXREdW1wKCk7CisKKwkJCXZhciBjaCA9ICJBQkNE
RUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4
OSsvPSI7CisJCQl2YXIgYzEsIGMyLCBjMywgZTEsIGUyLCBlMywgZTQ7CisJCQl2YXIgbCA9IHMu
bGVuZ3RoOworCQkJdmFyIGkgPSAwOworCQkJdmFyIHIgPSAiIjsKKworCQkJZG8geworCQkJCWMx
ID0gcy5jaGFyQ29kZUF0KGkpOworCQkJCWUxID0gYzEgPj4gMjsKKwkJCQljMiA9IHMuY2hhckNv
ZGVBdChpKzEpOworCQkJCWUyID0gKChjMSAmIDMpIDw8IDQpIHwgKGMyID4+IDQpOworCQkJCWMz
ID0gcy5jaGFyQ29kZUF0KGkrMik7CisJCQkJaWYgKGwgPCBpKzIpIHsgZTMgPSA2NDsgfSBlbHNl
IHsgZTMgPSAoKGMyICYgMHhmKSA8PCAyKSB8IChjMyA+PiA2KTsgfQorCQkJCWlmIChsIDwgaSsz
KSB7IGU0ID0gNjQ7IH0gZWxzZSB7IGU0ID0gYzMgJiAweDNmOyB9CisJCQkJcis9IGNoLmNoYXJB
dChlMSkgKyBjaC5jaGFyQXQoZTIpICsgY2guY2hhckF0KGUzKSArIGNoLmNoYXJBdChlNCk7CisJ
CQl9IHdoaWxlICgoaSs9IDMpIDwgbCk7CisJCQlyZXR1cm4gcjsKKwkJfQorCisJCS8vIG91dHB1
dCBhIFBORyBzdHJpbmcKKwkJdGhpcy5nZXREdW1wID0gZnVuY3Rpb24oKSB7CisKKwkJCS8vIGNv
bXB1dGUgYWRsZXIzMiBvZiBvdXRwdXQgcGl4ZWxzICsgcm93IGZpbHRlciBieXRlcworCQkJdmFy
IEJBU0UgPSA2NTUyMTsgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KKwkJ
CXZhciBOTUFYID0gNTU1MjsgIC8qIE5NQVggaXMgdGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1
bihuKzEpLzIgKyAobisxKShCQVNFLTEpIDw9IDJeMzItMSAqLworCQkJdmFyIHMxID0gMTsKKwkJ
CXZhciBzMiA9IDA7CisJCQl2YXIgbiA9IE5NQVg7CisKKwkJCWZvciAodmFyIHkgPSAwOyB5IDwg
dGhpcy5oZWlnaHQ7IHkrKykgeworCQkJCWZvciAodmFyIHggPSAtMTsgeCA8IHRoaXMud2lkdGg7
IHgrKykgeworCQkJCQlzMSs9IHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgoeCwgeSldLmNoYXJDb2Rl
QXQoMCk7CisJCQkJCXMyKz0gczE7CisJCQkJCWlmICgobi09IDEpID09IDApIHsKKwkJCQkJCXMx
JT0gQkFTRTsKKwkJCQkJCXMyJT0gQkFTRTsKKwkJCQkJCW4gPSBOTUFYOworCQkJCQl9CisJCQkJ
fQorCQkJfQorCQkJczElPSBCQVNFOworCQkJczIlPSBCQVNFOworCQkJd3JpdGUodGhpcy5idWZm
ZXIsIHRoaXMuaWRhdF9vZmZzICsgdGhpcy5pZGF0X3NpemUgLSA4LCBieXRlNCgoczIgPDwgMTYp
IHwgczEpKTsKKworCQkJLy8gY29tcHV0ZSBjcmMzMiBvZiB0aGUgUE5HIGNodW5rcworCQkJZnVu
Y3Rpb24gY3JjMzIocG5nLCBvZmZzLCBzaXplKSB7CisJCQkJdmFyIGNyYyA9IC0xOworCQkJCWZv
ciAodmFyIGkgPSA0OyBpIDwgc2l6ZS00OyBpICs9IDEpIHsKKwkJCQkJY3JjID0gX2NyYzMyWyhj
cmMgXiBwbmdbb2ZmcytpXS5jaGFyQ29kZUF0KDApKSAmIDB4ZmZdIF4gKChjcmMgPj4gOCkgJiAw
eDAwZmZmZmZmKTsKKwkJCQl9CisJCQkJd3JpdGUocG5nLCBvZmZzK3NpemUtNCwgYnl0ZTQoY3Jj
IF4gLTEpKTsKKwkJCX0KKworCQkJY3JjMzIodGhpcy5idWZmZXIsIHRoaXMuaWhkcl9vZmZzLCB0
aGlzLmloZHJfc2l6ZSk7CisJCQljcmMzMih0aGlzLmJ1ZmZlciwgdGhpcy5wbHRlX29mZnMsIHRo
aXMucGx0ZV9zaXplKTsKKwkJCWNyYzMyKHRoaXMuYnVmZmVyLCB0aGlzLnRybnNfb2ZmcywgdGhp
cy50cm5zX3NpemUpOworCQkJY3JjMzIodGhpcy5idWZmZXIsIHRoaXMuaWRhdF9vZmZzLCB0aGlz
LmlkYXRfc2l6ZSk7CisJCQljcmMzMih0aGlzLmJ1ZmZlciwgdGhpcy5pZW5kX29mZnMsIHRoaXMu
aWVuZF9zaXplKTsKKworCQkJLy8gY29udmVydCBQTkcgdG8gc3RyaW5nCisJCQlyZXR1cm4gIlwy
MTFQTkdcclxuXDAzMlxuIit0aGlzLmJ1ZmZlci5qb2luKCcnKTsKKwkJfQorCX0KKworfSkoKTsK
</data>
<flag name="commit-queue"
          id="46301"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59449</attachid>
            <date>2010-06-22 18:04:48 -0700</date>
            <delta_ts>2010-06-23 16:08:37 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>texture-formats.patch</filename>
            <type>text/plain</type>
            <size>93710</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDYtMjIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBmb3JtYXQgY29udmVyc2lvbnMgaW4gdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2Uy
RCB0YWtpbmcgSFRNTCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MDMxOQorCisgICAgICAgIEdlbmVyYWxpemVkIGNvZGUgc3VwcG9ydGluZyBw
cmVtdWx0aXBsaWNhdGlvbiBvZiBhbHBoYSBhbmQKKyAgICAgICAgdmVydGljYWwgZmxpcCB0byBw
YWNrIHRleHR1cmUgZGF0YSBpbnRvIHJlcXVlc3RlZCBmb3JtYXQgYW5kIHR5cGUuCisgICAgICAg
IEhhbmRsZWQgaW5jb21pbmcgaW1hZ2UgZGF0YSBvZiB2YXJpb3VzIGZvcm1hdHMsIFJHQkEgYW5k
IEJHUkEgaW4KKyAgICAgICAgcGFydGljdWxhciwgYm90aCB0byByZWR1Y2UgdGhlIG51bWJlciBv
ZiB0ZW1wb3JhcnkgY29waWVzIGR1cmluZworICAgICAgICB0ZXh0dXJlIHVwbG9hZCBhbmQgdG8g
c3VwcG9ydCBwcmVtdWx0aXBseWluZyBhbHBoYSBmb3IgdGhlCisgICAgICAgIHRleEltYWdlMkQg
YW5kIHRleFN1YkltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBBcnJheUJ1ZmZlclZpZXcKKyAg
ICAgICAgaW4gYSBzdWJzZXF1ZW50IGJ1Zy4gQWRkZWQgdGVzdCBjYXNlIGV4ZXJjaXNpbmcgYWxs
IGNvbWJpbmF0aW9ucworICAgICAgICBvZiBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbnMsIHByZW11
bHRpcGxpY2F0aW9uIG9mIGFscGhhLCBhbmQKKyAgICAgICAgSW1hZ2UvSW1hZ2VEYXRhIHVwbG9h
ZC4gKEluY29ycG9yYXRlZCBwbmdsaWIuanMgdW5kZXIKKyAgICAgICAgZmFzdC9jYW52YXMvd2Vi
Z2wvcmVzb3VyY2VzLyB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIEltYWdlIGVsZW1lbnRzCisgICAg
ICAgIHByb2dyYW1tYXRpY2FsbHkuKSBUZXN0ZWQgaW4gU2FmYXJpIG9uIE1hYyBPUyBYIGFuZCBp
biBDaHJvbWl1bSBvbgorICAgICAgICBNYWMgT1MgWCwgV2luZG93cyBhbmQgTGludXguCisKKyAg
ICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10
eXBlLmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZmxpcFZlcnRpY2FsbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6ZG9VbnBhY2tpbmdBbmRQYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmRvUGFja2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bmFycm93SW50
ZXJuYWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNE
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YSk6CisKIDIwMTAtMDYtMjIgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYxNjQxKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzQ1LDMzICsxNzQ1LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBv
bHlnb25PZmZzZQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMobG9uZyB4
LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKIHsKICAgICAvLyBW
YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzLgotICAgIHVuc2lnbmVkIGxvbmcgY29tcG9uZW50c1Bl
clBpeGVsID0gMDsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMUEhBOgotICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgPSAxOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGNvbXBvbmVu
dHNQZXJQaXhlbCA9IDM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE6Ci0gICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgdW5zaWduZWQgbG9uZyBieXRlc1BlckNvbXBvbmVudCA9IDA7Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAg
Ynl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2YodW5zaWduZWQgY2hhcik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgY29t
cG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAgICAgYnl0ZXNQZXJDb21wb25lbnQgPSBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgorICAgIHVuc2ln
bmVkIGxvbmcgY29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBpZiAo
IW1fY29udGV4dC0+Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwg
JmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkgewogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0p
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk0NywxNyArMTkyMiwxOCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFn
ZSogaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAg
ICAvLyBGSVhNRTogcGF5IGF0dGVudGlvbiB0byB0aGUgdXNlcidzIHN1cHBsaWVkIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQgYW5kIHR5cGUKLSAgICAvLyBGSVhNRTogcGF5IGF0dGVudGlvbiB0byBV
TlBBQ0tfUk9XX1dJRFRICi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwogICAgIGVjID0gMDsKICAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdl
RGF0YShpbWFnZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEsICZmb3JtYXQsICZpbnRl
cm5hbGZvcm1hdCkpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFn
ZSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwogICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLAot
ICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGRhdGEuZGF0YSgpLCBlYyk7CisgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBk
YXRhLmRhdGEoKSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCBtX3VucGFja0FsaWdubWVudCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGlu
dGVybmFsZm9ybWF0LApAQCAtMTk3MiwxOCArMTk0OCwxOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyRCh1CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIC8vIEZJWE1FOiBwYXkgYXR0
ZW50aW9uIHRvIHRoZSB1c2VyJ3Mgc3VwcGxpZWQgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCBhbmQg
dHlwZQogICAgIGVjID0gMDsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdElt
YWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhLCBkYXRhKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLAotICAgICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSwgZGF0YS5kYXRhKCksIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQg
IT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwKKyAg
ICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CisgICAgaWYg
KG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCkBAIC0yMDQ3LDcg
KzIwMjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAgICAg
cHJpbnRXYXJuaW5nVG9Db25zb2xlKCJDYWxsaW5nIG9ic29sZXRlIHRleEltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEltYWdlRGF0YSBwaXhlbHMsIEdMYm9vbGVhbiBmbGlwWSwg
R0xib29sZWFuIHByZW11bHRpcGx5QWxwaGEpIik7CiAgICAgZWMgPSAwOwogICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVs
cywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgaWYgKCFtX2NvbnRleHQt
PmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRh
KSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyMDYsMTgg
KzIxODIsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIC8vIEZJ
WE1FOiBwYXkgYXR0ZW50aW9uIHRvIHRoZSB1c2VyJ3Mgc3VwcGxpZWQgZm9ybWF0IGFuZCB0eXBl
Ci0gICAgLy8gRklYTUU6IHBheSBhdHRlbnRpb24gdG8gVU5QQUNLX1JPV19XSURUSAogICAgIGVj
ID0gMDsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICB1bnNpZ25lZCBpbnQgaW50ZXJu
YWxmb3JtYXQ7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZs
aXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhLCAmZm9ybWF0LCAmaW50ZXJuYWxmb3JtYXQpKSB7
CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlw
ZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgZGF0YS5kYXRhKCksIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUs
IGRhdGEuZGF0YSgpLCBlYyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZz
ZXQsIHVuc2lnbmVkIHlvZmZzZXQsCkBAIC0yMjMxLDE3ICsyMjAzLDE0IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVk
IHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSog
cGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsK
LSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgLy8gRklYTUU6IHBheSBhdHRlbnRpb24gdG8g
dGhlIHVzZXIncyBzdXBwbGllZCBmb3JtYXQgYW5kIHR5cGUKICAgICBlYyA9IDA7CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEo
cGl4ZWxzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7
CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5
cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdGV4U3ViSW1hZ2UyREJh
c2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhl
bHMtPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgZGF0YS5kYXRhKCksIGVjKTsK
KyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CiB9
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQs
CkBAIC0yMzA1LDcgKzIyNzQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyCiAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJDYWxsaW5nIG9ic29sZXRlIHRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEltYWdlRGF0YSBwaXhlbHMsIEdMYm9vbGVhbiBmbGlwWSwgR0xib29sZWFuIHBy
ZW11bHRpcGx5QWxwaGEpIik7CiAgICAgZWMgPSAwOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZmxpcFksIHBy
ZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFn
ZURhdGEocGl4ZWxzLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewogICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMzODksNiArMzM1OCwzNSBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9y
bWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6
CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7
CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgor
ICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAg
ICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82
XzUpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNF80XzRfNAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0zMzk3LDYgKzMzOTUsMTIgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKIHsKKyAgICAvLyBXZSBhYnNvbHV0ZWx5
IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KKyAgICAv
LyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxs
IHByb2R1Y2UKKyAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9u
LCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5k
VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoaXNH
TEVTMkNvbXBsaWFudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMzQzOCw3ICszNDQy
LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFu
ZFR5cGUoZm9ybWF0LCB0eXBlKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUodW5zaWduZWQgbG9uZyBtb2RlKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJ
KHJldmlzaW9uIDYxNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMxICszNSw3NSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRU
eXBlUGFyYW1ldGVycyh1bnNpZ25lZCBpbnQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcqIGNvbXBvbmVudHNQZXJQaXhlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKiBieXRlc1BlckNvbXBv
bmVudCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFMUEhBOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgICAgICAqY29t
cG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0g
MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAg
ICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURToKKyAgICAgICAgKmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVuc2lnbmVk
IGNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNV81XzE6CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwgPSAxOworICAgICAgICAqYnl0
ZXNQZXJDb21wb25lbnQgPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKEltYWdl
KiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZmxpcFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBpbWFnZURhdGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGludGVybmFsRm9ybWF0
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4mIGRhdGEpCiB7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEFscGhhT3AgYWxwaGFPcCA9IGtBbHBoYURvTm90aGluZzsKLSAgICBib29sIGhhc0FscGhhQ2hh
bm5lbCA9IHRydWU7Ci0gICAgaWYgKCFnZXRJbWFnZURhdGEoaW1hZ2UsIGltYWdlRGF0YSwgcHJl
bXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAmaGFzQWxwaGFDaGFubmVsLCAm
YWxwaGFPcCwgZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHByb2Nlc3NJbWFn
ZURhdGEoaW1hZ2VEYXRhLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgIGltYWdlLT53aWR0
aCgpLAotICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgZmxpcFksCi0gICAgICAgICAgICAgICAgICAgICBhbHBoYU9wKTsKLSAgICAvLyBG
b3IgR0xFUzIgdGV4IGZ1bmN0aW9ucywgaW50ZXJuYWxmb3JtYXQgaGFzIHRvIG1hdGNoIGZvcm1h
dC4KLSAgICAqaW50ZXJuYWxGb3JtYXQgPSAqZm9ybWF0OworICAgIGlmICghZ2V0SW1hZ2VEYXRh
KGltYWdlLCBmb3JtYXQsIHR5cGUsIHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGZsaXBZKSB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY29t
cG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKKyAgICAgICAgaWYgKCFjb21wdXRl
Rm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcG9uZW50c1BlclBpeGVsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNQZXJDb21wb25lbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBUaGUgaW1hZ2UgZGF0YSBpcyB0
aWdodGx5IHBhY2tlZCwgYW5kIHdlIHVwbG9hZCBpdCBhcyBzdWNoLgorICAgICAgICB1bnNpZ25l
ZCBpbnQgdW5wYWNrQWxpZ25tZW50ID0gMTsKKyAgICAgICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5k
YXRhKCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICB1bnBhY2tBbGlnbm1lbnQpOworICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZURhdGEq
IGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZmxpcFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQpAQCAtNzAsODMgKzExNCw0NjcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YQogICAgIGludCBoZWlnaHQg
PSBpbWFnZURhdGEtPmhlaWdodCgpOwogICAgIGludCBkYXRhQnl0ZXMgPSB3aWR0aCAqIGhlaWdo
dCAqIDQ7CiAgICAgZGF0YS5yZXNpemUoZGF0YUJ5dGVzKTsKLSAgICB1aW50OF90KiBkc3QgPSBk
YXRhLmRhdGEoKTsKLSAgICB1aW50OF90KiBzcmMgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgp
LT5kYXRhKCk7Ci0gICAgbWVtY3B5KGRzdCwgc3JjLCBkYXRhQnl0ZXMpOwotICAgIHByb2Nlc3NJ
bWFnZURhdGEoZHN0LAotICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICBmbGlwWSwKLSAgICAgICAgICAg
ICAgICAgICAgIHByZW11bHRpcGx5QWxwaGEgPyBrQWxwaGFEb1ByZW11bHRpcGx5IDoga0FscGhh
RG9Ob3RoaW5nKTsKKyAgICBpZiAoIXBhY2tQaXhlbHMoaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEo
KS0+ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBrU291cmNlRm9ybWF0UkdCQTgsCisgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYSA/IGtBbHBoYURvUHJlbXVsdGlwbHkgOiBr
QWxwaGFEb05vdGhpbmcsCisgICAgICAgICAgICAgICAgICAgIGRhdGEuZGF0YSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChmbGlwWSkgeworICAgICAgICB1bnNpZ25lZCBsb25n
IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgICAgIGlmICghY29t
cHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudHNQZXJQaXhlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gVGhlIGltYWdlIGRhdGEg
aXMgdGlnaHRseSBwYWNrZWQsIGFuZCB3ZSB1cGxvYWQgaXQgYXMgc3VjaC4KKyAgICAgICAgdW5z
aWduZWQgaW50IHVucGFja0FsaWdubWVudCA9IDE7CisgICAgICAgIGZsaXBWZXJ0aWNhbGx5KGRh
dGEuZGF0YSgpLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBjb21wb25l
bnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
dW5wYWNrQWxpZ25tZW50KTsKKyAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnByb2Nlc3NJbWFnZURhdGEodWludDhfdCogaW1hZ2VEYXRhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBWZXJ0aWNh
bGx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBoYU9wIGFs
cGhhT3ApCi17Ci0gICAgc3dpdGNoIChhbHBoYU9wKSB7Ci0gICAgY2FzZSBrQWxwaGFEb1ByZW11
bHRpcGx5OgotICAgICAgICBwcmVtdWx0aXBseUFscGhhKGltYWdlRGF0YSwgd2lkdGggKiBoZWln
aHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtBbHBoYURvVW5tdWx0aXBseToKLSAgICAg
ICAgdW5tdWx0aXBseUFscGhhKGltYWdlRGF0YSwgd2lkdGggKiBoZWlnaHQpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmZsaXBWZXJ0aWNhbGx5KHZvaWQqIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJQaXhlbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB1bnBhY2tB
bGlnbm1lbnQpCit7CisgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorICAgICAgICByZXR1cm47
CisgICAgdW5zaWduZWQgaW50IHZhbGlkUm93Qnl0ZXMgPSB3aWR0aCAqIGJ5dGVzUGVyUGl4ZWw7
CisgICAgdW5zaWduZWQgaW50IHRvdGFsUm93Qnl0ZXMgPSB2YWxpZFJvd0J5dGVzOworICAgIHVu
c2lnbmVkIGludCByZW1haW5kZXIgPSB2YWxpZFJvd0J5dGVzICUgdW5wYWNrQWxpZ25tZW50Owor
ICAgIGlmIChyZW1haW5kZXIpCisgICAgICAgIHRvdGFsUm93Qnl0ZXMgKz0gcmVtYWluZGVyOwor
ICAgIHVpbnQ4X3QqIHRlbXBSb3cgPSBuZXcgdWludDhfdFt2YWxpZFJvd0J5dGVzXTsKKyAgICB1
aW50OF90KiBkYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGltYWdlRGF0YSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGhlaWdodCAvIDI7IGkrKykgeworICAgICAgICB1aW50OF90
KiBsb3dSb3cgPSBkYXRhICsgKHRvdGFsUm93Qnl0ZXMgKiBpKTsKKyAgICAgICAgdWludDhfdCog
aGlnaFJvdyA9IGRhdGEgKyAodG90YWxSb3dCeXRlcyAqIChoZWlnaHQgLSBpIC0gMSkpOworICAg
ICAgICBtZW1jcHkodGVtcFJvdywgbG93Um93LCB2YWxpZFJvd0J5dGVzKTsKKyAgICAgICAgbWVt
Y3B5KGxvd1JvdywgaGlnaFJvdywgdmFsaWRSb3dCeXRlcyk7CisgICAgICAgIG1lbWNweShoaWdo
Um93LCB0ZW1wUm93LCB2YWxpZFJvd0J5dGVzKTsKICAgICB9CisgICAgZGVsZXRlW10gdGVtcFJv
dzsKK30KKworLy8gVGhlc2UgZnVuY3Rpb25zIGNhbiBub3QgYmUgc3RhdGljLCBvciBnY2Mgd2ls
bCBub3QgYWxsb3cgdGhlbSB0byBiZQorLy8gdXNlZCBhcyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiBV
c2UgYW4gYW5vbnltb3VzIG5hbWVzcGFjZSB0byBwcmV2ZW50CisvLyB0aGUgbmVlZCB0byBkZWNs
YXJlIHByb3RvdHlwZXMgZm9yIHRoZW0uCituYW1lc3BhY2UgeworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFBpeGVsIHVucGFja2luZyByb3V0aW5lcy4KKwordm9pZCB1bnBhY2tSR0I4VG9SR0JBOChj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3Rp
bmF0aW9uWzBdID0gc291cmNlWzBdOworICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOwor
ICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlWzJdOworICAgIGRlc3RpbmF0aW9uWzNdID0gMHhG
RjsKK30KKwordm9pZCB1bnBhY2tCR1JBOFRvUkdCQTgoY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVsyXTsK
KyAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsxXTsKKyAgICBkZXN0aW5hdGlvblsyXSA9IHNv
dXJjZVswXTsKKyAgICBkZXN0aW5hdGlvblszXSA9IHNvdXJjZVszXTsKK30KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBQaXhlbCBwYWNraW5nIHJvdXRpbmVzLgorLy8KKwordm9pZCBwYWNrUkdCQThU
b0E4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAg
ZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbM107Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9SOChjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3RpbmF0
aW9uWzBdID0gc291cmNlWzBdOworfQorCit2b2lkIHBhY2tSR0JBOFRvUjhQcmVtdWx0aXBseShj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0
IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOworICAgIHVpbnQ4X3Qgc291cmNlUiA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2Nh
bGVGYWN0b3IpOworICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlUjsKK30KKworLy8gRklYTUU6
IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgordm9pZCBwYWNrUkdC
QThUb1I4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0
aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2VbM10gPyBzb3Vy
Y2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKKyAgICB1aW50OF90IHNvdXJjZVIgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNjYWxlRmFjdG9yKTsK
KyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9SQTgo
Y29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBkZXN0
aW5hdGlvblswXSA9IHNvdXJjZVswXTsKKyAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVszXTsK
K30KKwordm9pZCBwYWNrUkdCQThUb1JBOFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3Vy
Y2VbM10gLyAyNTUuMGY7CisgICAgdWludDhfdCBzb3VyY2VSID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgZGVz
dGluYXRpb25bMF0gPSBzb3VyY2VSOworICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzNdOwor
fQorCisvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQu
Cit2b2lkIHBhY2tSR0JBOFRvUkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVp
bnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChz
b3VyY2VbM10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKKyAgICB1aW50OF90IHNvdXJj
ZVIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAq
IHNjYWxlRmFjdG9yKTsKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7CisgICAgZGVzdGlu
YXRpb25bMV0gPSBzb3VyY2VbM107Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9SR0I4KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZGVzdGluYXRpb25b
MF0gPSBzb3VyY2VbMF07CisgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VbMV07CisgICAgZGVz
dGluYXRpb25bMl0gPSBzb3VyY2VbMl07Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9SR0I4UHJlbXVs
dGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKKyAgICB1aW50OF90IHNv
dXJjZVIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBd
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1
aW50OF90IHNvdXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4o
c291cmNlWzJdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7
CisgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VHOworICAgIGRlc3RpbmF0aW9uWzJdID0gc291
cmNlQjsKK30KKworLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSBy
ZW1vdmVkLgordm9pZCBwYWNrUkdCQThUb1JHQjhVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNv
dXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAx
LjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOworICAgIHVpbnQ4
X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3Vy
Y2VbMF0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOwor
ICAgIHVpbnQ4X3Qgc291cmNlQiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZs
b2F0Pihzb3VyY2VbMl0pICogc2NhbGVGYWN0b3IpOworICAgIGRlc3RpbmF0aW9uWzBdID0gc291
cmNlUjsKKyAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZUc7CisgICAgZGVzdGluYXRpb25bMl0g
PSBzb3VyY2VCOworfQorCit2b2lkIHBhY2tSR0JBOFRvUkdCQThQcmVtdWx0aXBseShjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOworICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0
b3IpOworICAgIHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19j
YXN0PGZsb2F0Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNl
QiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMl0pICog
c2NhbGVGYWN0b3IpOworICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlUjsKKyAgICBkZXN0aW5h
dGlvblsxXSA9IHNvdXJjZUc7CisgICAgZGVzdGluYXRpb25bMl0gPSBzb3VyY2VCOworfQorCisv
LyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCit2b2lk
IHBhY2tSR0JBOFRvUkdCQThVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhf
dCogZGVzdGluYXRpb24pCit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJj
ZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOworICAgIHVpbnQ4X3Qgc291cmNlUiA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2Nh
bGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qg
c291cmNlQiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2Vb
Ml0pICogc2NhbGVGYWN0b3IpOworICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlUjsKKyAgICBk
ZXN0aW5hdGlvblsxXSA9IHNvdXJjZUc7CisgICAgZGVzdGluYXRpb25bMl0gPSBzb3VyY2VCOwor
ICAgIGRlc3RpbmF0aW9uWzNdID0gc291cmNlWzNdOworfQorCit2b2lkIHBhY2tSR0JBOFRvVW5z
aWduZWRTaG9ydDQ0NDQoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRp
b24pCit7CisgICAgKmRlc3RpbmF0aW9uID0gKCgoc291cmNlWzBdICYgMHhGMCkgPDwgOCkKKyAg
ICAgICAgICAgICAgICAgICAgfCAoKHNvdXJjZVsxXSAmIDB4RjApIDw8IDQpCisgICAgICAgICAg
ICAgICAgICAgIHwgKHNvdXJjZVsyXSAmIDB4RjApCisgICAgICAgICAgICAgICAgICAgIHwgKHNv
dXJjZVszXSA+PiA0KSk7Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NFBy
ZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uKQor
eworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNdIC8gMjU1LjBmOworICAgIHVpbnQ4
X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3Vy
Y2VbMF0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOwor
ICAgIHVpbnQ4X3Qgc291cmNlQiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZs
b2F0Pihzb3VyY2VbMl0pICogc2NhbGVGYWN0b3IpOworICAgICpkZXN0aW5hdGlvbiA9ICgoKHNv
dXJjZVIgJiAweEYwKSA8PCA4KQorICAgICAgICAgICAgICAgICAgICB8ICgoc291cmNlRyAmIDB4
RjApIDw8IDQpCisgICAgICAgICAgICAgICAgICAgIHwgKHNvdXJjZUIgJiAweEYwKQorICAgICAg
ICAgICAgICAgICAgICB8IChzb3VyY2VbM10gPj4gNCkpOworfQorCisvLyBGSVhNRTogdGhpcyBy
b3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCit2b2lkIHBhY2tSR0JBOFRvVW5z
aWduZWRTaG9ydDQ0NDRVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3Qq
IGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3VyY2Vb
M10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKKyAgICB1aW50OF90IHNvdXJjZVIgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNjYWxl
RmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0
aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNv
dXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzJd
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICAqZGVzdGluYXRpb24gPSAoKChzb3VyY2VSICYgMHhGMCkg
PDwgOCkKKyAgICAgICAgICAgICAgICAgICAgfCAoKHNvdXJjZUcgJiAweEYwKSA8PCA0KQorICAg
ICAgICAgICAgICAgICAgICB8IChzb3VyY2VCICYgMHhGMCkKKyAgICAgICAgICAgICAgICAgICAg
fCAoc291cmNlWzNdID4+IDQpKTsKK30KKwordm9pZCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ1
NTUxKGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9uKQoreworICAg
ICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVswXSAmIDB4RjgpIDw8IDgpCisgICAgICAgICAgICAg
ICAgICAgIHwgKChzb3VyY2VbMV0gJiAweEY4KSA8PCAzKQorICAgICAgICAgICAgICAgICAgICB8
ICgoc291cmNlWzJdICYgMHhGOCkgPj4gMikKKyAgICAgICAgICAgICAgICAgICAgfCAoc291cmNl
WzNdID4+IDcpKTsKK30KKwordm9pZCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NTUxUHJlbXVs
dGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24pCit7Cisg
ICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CisgICAgdWludDhfdCBz
b3VyY2VSID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsw
XSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAg
dWludDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHNvdXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgKmRlc3RpbmF0aW9uID0gKCgoc291cmNl
UiAmIDB4RjgpIDw8IDgpCisgICAgICAgICAgICAgICAgICAgIHwgKChzb3VyY2VHICYgMHhGOCkg
PDwgMykKKyAgICAgICAgICAgICAgICAgICAgfCAoKHNvdXJjZUIgJiAweEY4KSA+PiAyKQorICAg
ICAgICAgICAgICAgICAgICB8IChzb3VyY2VbM10gPj4gNykpOworfQorCisvLyBGSVhNRTogdGhp
cyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCit2b2lkIHBhY2tSR0JBOFRv
VW5zaWduZWRTaG9ydDU1NTFVbm11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2
X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gMS4wZiAvIChzb3Vy
Y2VbM10gPyBzb3VyY2VbM10gLyAyNTUuMGYgOiAxLjBmKTsKKyAgICB1aW50OF90IHNvdXJjZVIg
PSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAqIHNj
YWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90
IHNvdXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNl
WzJdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAqZGVzdGluYXRpb24gPSAoKChzb3VyY2VSICYgMHhG
OCkgPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgfCAoKHNvdXJjZUcgJiAweEY4KSA8PCAzKQor
ICAgICAgICAgICAgICAgICAgICB8ICgoc291cmNlQiAmIDB4RjgpID4+IDIpCisgICAgICAgICAg
ICAgICAgICAgIHwgKHNvdXJjZVszXSA+PiA3KSk7Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9VbnNp
Z25lZFNob3J0NTY1KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDE2X3QqIGRlc3RpbmF0aW9u
KQoreworICAgICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVswXSAmIDB4RjgpIDw8IDgpCisgICAg
ICAgICAgICAgICAgICAgIHwgKChzb3VyY2VbMV0gJiAweEZDKSA8PCAzKQorICAgICAgICAgICAg
ICAgICAgICB8ICgoc291cmNlWzJdICYgMHhGOCkgPj4gMykpOworfQorCit2b2lkIHBhY2tSR0JB
OFRvVW5zaWduZWRTaG9ydDU2NVByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWlu
dDE2X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gc291cmNlWzNd
IC8gMjU1LjBmOworICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qg
c291cmNlRyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2Vb
MV0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlQiA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMl0pICogc2NhbGVGYWN0b3IpOworICAg
ICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVIgJiAweEY4KSA8PCA4KQorICAgICAgICAgICAgICAg
ICAgICB8ICgoc291cmNlRyAmIDB4RkMpIDw8IDMpCisgICAgICAgICAgICAgICAgICAgIHwgKChz
b3VyY2VCICYgMHhGOCkgPj4gMykpOworfQorCisvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxv
c3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQuCit2b2lkIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU2
NVVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24p
Cit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVsz
XSAvIDI1NS4wZiA6IDEuMGYpOworICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0b3IpOworICAg
IHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0
Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlQiA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMl0pICogc2NhbGVGYWN0
b3IpOworICAgICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVIgJiAweEY4KSA8PCA4KQorICAgICAg
ICAgICAgICAgICAgICB8ICgoc291cmNlRyAmIDB4RkMpIDw8IDMpCisgICAgICAgICAgICAgICAg
ICAgIHwgKChzb3VyY2VCICYgMHhGOCkgPj4gMykpOworfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKIAotICAgIGlmIChmbGlwVmVydGljYWxseSAmJiB3aWR0aCAmJiBoZWlnaHQpIHsKLSAg
ICAgICAgaW50IHJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgICAgICB1aW50OF90KiB0ZW1wUm93
ID0gbmV3IHVpbnQ4X3Rbcm93Qnl0ZXNdOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaGVpZ2h0IC8gMjsgaSsrKSB7Ci0gICAgICAgICAgICB1aW50OF90KiBsb3dSb3cgPSBpbWFn
ZURhdGEgKyAocm93Qnl0ZXMgKiBpKTsKLSAgICAgICAgICAgIHVpbnQ4X3QqIGhpZ2hSb3cgPSBp
bWFnZURhdGEgKyAocm93Qnl0ZXMgKiAoaGVpZ2h0IC0gaSAtIDEpKTsKLSAgICAgICAgICAgIG1l
bWNweSh0ZW1wUm93LCBsb3dSb3csIHJvd0J5dGVzKTsKLSAgICAgICAgICAgIG1lbWNweShsb3dS
b3csIGhpZ2hSb3csIHJvd0J5dGVzKTsKLSAgICAgICAgICAgIG1lbWNweShoaWdoUm93LCB0ZW1w
Um93LCByb3dCeXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlW10gdGVtcFJvdzsKKy8v
IFRoaXMgaXMgdXNlZCB3aGVuZXZlciB1bnBhY2tpbmcgaXMgbmVjZXNzYXJ5OyBpLmUuLCB0aGUg
c291cmNlIGRhdGEKKy8vIGlzIG5vdCBpbiBSR0JBOCBmb3JtYXQuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEZXN0VHlwZSwKKyAgICAgICAgIHZvaWQgdW5wYWNraW5n
RnVuYyhjb25zdCBTb3VyY2VUeXBlKiwgdWludDhfdCopLAorICAgICAgICAgdm9pZCBwYWNraW5n
RnVuYyhjb25zdCB1aW50OF90KiwgRGVzdFR5cGUqKT4KK3N0YXRpYyB2b2lkIGRvVW5wYWNraW5n
QW5kUGFja2luZyhjb25zdCBTb3VyY2VUeXBlKiBzb3VyY2VEYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1FbGVtZW50cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJQaXhl
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0VHlwZSogZGVzdGluYXRp
b25EYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBk
ZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWwpCit7CisgICAgY29uc3QgU291cmNlVHlwZSogZW5k
UG9pbnRlciA9IHNvdXJjZURhdGEgKyBudW1FbGVtZW50czsKKyAgICB1aW50OF90IHRlbXBvcmFy
eVJHQkFEYXRhWzRdOworICAgIHdoaWxlIChzb3VyY2VEYXRhIDwgZW5kUG9pbnRlcikgeworICAg
ICAgICB1bnBhY2tpbmdGdW5jKHNvdXJjZURhdGEsIHRlbXBvcmFyeVJHQkFEYXRhKTsKKyAgICAg
ICAgcGFja2luZ0Z1bmModGVtcG9yYXJ5UkdCQURhdGEsIGRlc3RpbmF0aW9uRGF0YSk7CisgICAg
ICAgIHNvdXJjZURhdGEgKz0gc291cmNlRWxlbWVudHNQZXJQaXhlbDsKKyAgICAgICAgZGVzdGlu
YXRpb25EYXRhICs9IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbDsKICAgICB9CiB9CiAKLS8v
IFByZW11bHRpcGx5IGFscGhhIGludG8gY29sb3IgY2hhbm5lbHMuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwcmVtdWx0aXBseUFscGhhKHVuc2lnbmVkIGNoYXIqIHJnYmFEYXRhLCBpbnQgbnVt
UGl4ZWxzKQotewotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtUGl4ZWxzOyBqKyspIHsKLSAg
ICAgICAgZmxvYXQgciA9IHJnYmFEYXRhWzQqaiswXSAvIDI1NS4wZjsKLSAgICAgICAgZmxvYXQg
ZyA9IHJnYmFEYXRhWzQqaisxXSAvIDI1NS4wZjsKLSAgICAgICAgZmxvYXQgYiA9IHJnYmFEYXRh
WzQqaisyXSAvIDI1NS4wZjsKLSAgICAgICAgZmxvYXQgYSA9IHJnYmFEYXRhWzQqaiszXSAvIDI1
NS4wZjsKLSAgICAgICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIpIChyICogYSAq
IDI1NS4wZik7Ci0gICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBjaGFyKSAoZyAq
IGEgKiAyNTUuMGYpOwotICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWduZWQgY2hhcikg
KGIgKiBhICogMjU1LjBmKTsKKy8vIFRoaXMgaGFuZGxlcyBhbGwgY29udmVyc2lvbnMgd2l0aCBh
IGZhc3RlciBwYXRoIGZvciBSR0JBOCBzb3VyY2UgZGF0YS4KK3RlbXBsYXRlPHR5cGVuYW1lIFNv
dXJjZVR5cGUsIHR5cGVuYW1lIERlc3RUeXBlLCB2b2lkIHBhY2tpbmdGdW5jKGNvbnN0IFNvdXJj
ZVR5cGUqLCBEZXN0VHlwZSopPgorc3RhdGljIHZvaWQgZG9QYWNraW5nKGNvbnN0IFNvdXJjZVR5
cGUqIHNvdXJjZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OlNvdXJjZURhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbnVtRWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAgRGVz
dFR5cGUqIGRlc3RpbmF0aW9uRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKQoreworICAgIHN3aXRjaCAoc291cmNlRGF0
YUZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OmtTb3VyY2VGb3JtYXRSR0JB
ODogeworICAgICAgICBjb25zdCBTb3VyY2VUeXBlKiBlbmRQb2ludGVyID0gc291cmNlRGF0YSAr
IG51bUVsZW1lbnRzOworICAgICAgICB3aGlsZSAoc291cmNlRGF0YSA8IGVuZFBvaW50ZXIpIHsK
KyAgICAgICAgICAgIHBhY2tpbmdGdW5jKHNvdXJjZURhdGEsIGRlc3RpbmF0aW9uRGF0YSk7Cisg
ICAgICAgICAgICBzb3VyY2VEYXRhICs9IHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWw7CisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkRhdGEgKz0gZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjprU291cmNlRm9ybWF0UkdCODogeworICAgICAgICBkb1VucGFja2luZ0FuZFBhY2tpbmc8U291
cmNlVHlwZSwgRGVzdFR5cGUsIHVucGFja1JHQjhUb1JHQkE4LCBwYWNraW5nRnVuYz4oc291cmNl
RGF0YSwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uRGF0
YSwgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OmtTb3VyY2VGb3JtYXRCR1JBODogeworICAgICAg
ICBkb1VucGFja2luZ0FuZFBhY2tpbmc8U291cmNlVHlwZSwgRGVzdFR5cGUsIHVucGFja0JHUkE4
VG9SR0JBOCwgcGFja2luZ0Z1bmM+KHNvdXJjZURhdGEsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVt
ZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhl
bCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiB9CiAKLS8vIFJlbW92ZSBwcmVtdWx0
aXBsaWVkIGFscGhhIGZyb20gY29sb3IgY2hhbm5lbHMuCi0vLyBGSVhNRTogdGhpcyBpcyBsb3Nz
eS4gTXVzdCByZXRyaWV2ZSBvcmlnaW5hbCB2YWx1ZXMgZnJvbSBIVE1MSW1hZ2VFbGVtZW50Lgot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5tdWx0aXBseUFscGhhKHVuc2lnbmVkIGNoYXIqIHJn
YmFEYXRhLCBpbnQgbnVtUGl4ZWxzKQotewotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtUGl4
ZWxzOyBqKyspIHsKLSAgICAgICAgZmxvYXQgciA9IHJnYmFEYXRhWzQqaiswXSAvIDI1NS4wZjsK
LSAgICAgICAgZmxvYXQgZyA9IHJnYmFEYXRhWzQqaisxXSAvIDI1NS4wZjsKLSAgICAgICAgZmxv
YXQgYiA9IHJnYmFEYXRhWzQqaisyXSAvIDI1NS4wZjsKLSAgICAgICAgZmxvYXQgYSA9IHJnYmFE
YXRhWzQqaiszXSAvIDI1NS4wZjsKLSAgICAgICAgaWYgKGEgPiAwLjBmKSB7Ci0gICAgICAgICAg
ICByIC89IGE7Ci0gICAgICAgICAgICBnIC89IGE7Ci0gICAgICAgICAgICBiIC89IGE7Ci0gICAg
ICAgICAgICByID0gKHIgPiAxLjBmKSA/IDEuMGYgOiByOwotICAgICAgICAgICAgZyA9IChnID4g
MS4wZikgPyAxLjBmIDogZzsKLSAgICAgICAgICAgIGIgPSAoYiA+IDEuMGYpID8gMS4wZiA6IGI7
Ci0gICAgICAgICAgICByZ2JhRGF0YVs0KmorMF0gPSAodW5zaWduZWQgY2hhcikgKHIgKiAyNTUu
MGYpOwotICAgICAgICAgICAgcmdiYURhdGFbNCpqKzFdID0gKHVuc2lnbmVkIGNoYXIpIChnICog
MjU1LjBmKTsKLSAgICAgICAgICAgIHJnYmFEYXRhWzQqaisyXSA9ICh1bnNpZ25lZCBjaGFyKSAo
YiAqIDI1NS4wZik7Citib29sIEdyYXBoaWNzQ29udGV4dDNEOjpwYWNrUGl4ZWxzKGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uRm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVz
dGluYXRpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBoYU9w
IGFscGhhT3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3Rp
bmF0aW9uRGF0YSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc291cmNlRWxlbWVudHNQZXJQaXhlbCA9
IDQ7CisgICAgdW5zaWduZWQgaW50IG51bUVsZW1lbnRzID0gd2lkdGggKiBoZWlnaHQgKiBzb3Vy
Y2VFbGVtZW50c1BlclBpeGVsOworICAgIHN3aXRjaCAoZGVzdGluYXRpb25UeXBlKSB7CisgICAg
Y2FzZSBVTlNJR05FRF9CWVRFOiB7CisgICAgICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGRlc3RpbmF0aW9uRGF0YSk7CisgICAgICAgIGlmIChkZXN0aW5h
dGlvbkZvcm1hdCA9PSBSR0JBICYmIGFscGhhT3AgPT0ga0FscGhhRG9Ob3RoaW5nKSB7CisgICAg
ICAgICAgICAvLyBObyBjb252ZXJzaW9uIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgIG1lbWNweShk
ZXN0aW5hdGlvbkRhdGEsIHNvdXJjZURhdGEsIG51bUVsZW1lbnRzKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoZGVzdGluYXRpb25Gb3JtYXQpIHsKKyAg
ICAgICAgY2FzZSBSR0I6CisgICAgICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKKyAgICAgICAg
ICAgIGNhc2Uga0FscGhhRG9Ob3RoaW5nOgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50
OF90LCB1aW50OF90LCBwYWNrUkdCQThUb1JHQjg+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3Jt
YXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMyk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtBbHBoYURvUHJlbXVs
dGlwbHk6CisgICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tS
R0JBOFRvUkdCOFByZW11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1F
bGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDMpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6Cisg
ICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvUkdC
OFVubXVsdGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBz
b3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMyk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBS
R0JBOgorICAgICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgICAgICBjYXNlIGtB
bHBoYURvUHJlbXVsdGlwbHk6CisgICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVp
bnQ4X3QsIHBhY2tSR0JBOFRvUkdCQThQcmVtdWx0aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0
YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9u
LCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga0FscGhhRG9V
bm11bHRpcGx5OgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBw
YWNrUkdCQThUb1JHQkE4VW5tdWx0aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwg
bnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCA0KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBTFBIQToKKyAgICAgICAgICAgIC8vIEZyb20gdGhlIGRlc2t0b3Ag
T3BlbkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKKyAgICAgICAgICAgIC8vIHNwZWNp
ZmljYXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgYWxwaGEgY2hhbm5lbCBpcyBjaG9zZW4KKyAgICAg
ICAgICAgIC8vIGZyb20gdGhlIFJHQkEgZGF0YS4KKyAgICAgICAgICAgIGRvUGFja2luZzx1aW50
OF90LCB1aW50OF90LCBwYWNrUkdCQThUb0E4Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0
LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFVNSU5BTkNFOgorICAgICAgICAgICAg
Ly8gRnJvbSB0aGUgZGVza3RvcCBPcGVuR0wgY29udmVyc2lvbiBydWxlcyAoT3BlbkdMIDIuMQor
ICAgICAgICAgICAgLy8gc3BlY2lmaWNhdGlvbiwgVGFibGUgMy4xNSksIHRoZSByZWQgY2hhbm5l
bCBpcyBjaG9zZW4KKyAgICAgICAgICAgIC8vIGZyb20gdGhlIFJHQkEgZGF0YS4KKyAgICAgICAg
ICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAgICAgICAgICAgY2FzZSBrQWxwaGFEb05vdGhpbmc6
CisgICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRv
Ujg+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVt
ZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIGtBbHBoYURvUHJlbXVsdGlwbHk6CisgICAgICAgICAgICAgICAgZG9Q
YWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvUjhQcmVtdWx0aXBseT4oc291cmNl
RGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4
ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2Uga0FscGhhRG9Vbm11bHRpcGx5OgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50
OF90LCB1aW50OF90LCBwYWNrUkdCQThUb1I4VW5tdWx0aXBseT4oc291cmNlRGF0YSwgc291cmNl
RGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0
aW9uLCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIExVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIC8v
IEZyb20gdGhlIGRlc2t0b3AgT3BlbkdMIGNvbnZlcnNpb24gcnVsZXMgKE9wZW5HTCAyLjEKKyAg
ICAgICAgICAgIC8vIHNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTUpLCB0aGUgcmVkIGFuZCBhbHBo
YSBjaGFubmVscworICAgICAgICAgICAgLy8gYXJlIGNob3NlbiBmcm9tIHRoZSBSR0JBIGRhdGEu
CisgICAgICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKKyAgICAgICAgICAgIGNhc2Uga0FscGhh
RG9Ob3RoaW5nOgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBw
YWNrUkdCQThUb1JBOD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMs
IHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAyKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga0FscGhhRG9QcmVtdWx0aXBseToKKyAgICAgICAg
ICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDhfdCwgcGFja1JHQkE4VG9SQThQcmVtdWx0
aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVs
ZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAyKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2Uga0FscGhhRG9Vbm11bHRpcGx5OgorICAgICAgICAgICAgICAgIGRv
UGFja2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdCQThUb1JBOFVubXVsdGlwbHk+KHNvdXJj
ZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBp
eGVsLCBkZXN0aW5hdGlvbiwgMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBVTlNJR05FRF9TSE9SVF80XzRfNF80OiB7CisgICAgICAgIHVpbnQxNl90KiBk
ZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQxNl90Kj4oZGVzdGluYXRpb25EYXRhKTsKKyAg
ICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgIGNhc2Uga0FscGhhRG9Ob3RoaW5nOgor
ICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQxNl90LCBwYWNrUkdCQThUb1Vuc2ln
bmVkU2hvcnQ0NDQ0Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywg
c291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2Uga0FscGhhRG9QcmVtdWx0aXBseToKKyAgICAgICAgICAgIGRvUGFj
a2luZzx1aW50OF90LCB1aW50MTZfdCwgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NDQ0NFByZW11
bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNl
RWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2Uga0FscGhhRG9Vbm11bHRpcGx5OgorICAgICAgICAgICAgZG9QYWNraW5nPHVp
bnQ4X3QsIHVpbnQxNl90LCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0VW5tdWx0aXBseT4o
c291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRz
UGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFVOU0lHTkVEX1NIT1JUXzVfNV81XzE6
IHsKKyAgICAgICAgdWludDE2X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDE2X3Qq
PihkZXN0aW5hdGlvbkRhdGEpOworICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKKyAgICAgICAg
Y2FzZSBrQWxwaGFEb05vdGhpbmc6CisgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWlu
dDE2X3QsIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTE+KHNvdXJjZURhdGEsIHNvdXJjZURh
dGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlv
biwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQWxwaGFEb1ByZW11bHRp
cGx5OgorICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQxNl90LCBwYWNrUkdCQThU
b1Vuc2lnbmVkU2hvcnQ1NTUxUHJlbXVsdGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3Jt
YXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6Cisg
ICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDE2X3QsIHBhY2tSR0JBOFRvVW5zaWdu
ZWRTaG9ydDU1NTFVbm11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1F
bGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
VU5TSUdORURfU0hPUlRfNV82XzU6IHsKKyAgICAgICAgdWludDE2X3QqIGRlc3RpbmF0aW9uID0g
c3RhdGljX2Nhc3Q8dWludDE2X3QqPihkZXN0aW5hdGlvbkRhdGEpOworICAgICAgICBzd2l0Y2gg
KGFscGhhT3ApIHsKKyAgICAgICAgY2FzZSBrQWxwaGFEb05vdGhpbmc6CisgICAgICAgICAgICBk
b1BhY2tpbmc8dWludDhfdCwgdWludDE2X3QsIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU2NT4o
c291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRz
UGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGtBbHBoYURvUHJlbXVsdGlwbHk6CisgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwg
dWludDE2X3QsIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU2NVByZW11bHRpcGx5Pihzb3VyY2VE
YXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhl
bCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga0Fs
cGhhRG9Vbm11bHRpcGx5OgorICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQxNl90
LCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ1NjVVbm11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3Vy
Y2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGlu
YXRpb24sIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAkocmV2aXNpb24gNjE2NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Miw0OSArNDUyLDU5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCiAg
ICAgICAgIGludCBzaXplSW5CeXRlcyhpbnQgdHlwZSk7CiAKKyAgICAgICAgYm9vbCBpc0dMRVMy
Q29tcGxpYW50KCkgY29uc3Q7CisKICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIC8v
IEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nLgorICAgICAgICAvLyBIZWxwZXJzIGZvciB0
ZXh0dXJlIHVwbG9hZGluZyBhbmQgcGl4ZWwgcmVhZGJhY2suCiAgICAgICAgIC8vCiAKLSAgICAg
ICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSBpbnRvIHRoZSBw
YXNzZWQKLSAgICAgICAgLy8gVmVjdG9yLCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlw
bHlBbHBoYSBmbGFncy4KLSAgICAgICAgLy8gUmV0dXJucyB0aGUgYXBwbGljYWJsZSBPcGVuR0wg
Zm9ybWF0IGFuZCBpbnRlcm5hbEZvcm1hdCBmb3IKLSAgICAgICAgLy8gdGhlIHN1YnNlcXVlbnQg
Z2xUZXhJbWFnZTJEIG9yIGdsVGV4U3ViSW1hZ2UyRCBjYWxsLgotICAgICAgICAvLyBSZXR1cm5z
IHRydWUgdXBvbiBzdWNjZXNzLgorICAgICAgICAvLyBDb21wdXRlcyB0aGUgY29tcG9uZW50cyBw
ZXIgcGl4ZWwgYW5kIGJ5dGVzIHBlciBjb21wb25lbnQKKyAgICAgICAgLy8gZm9yIHRoZSBnaXZl
biBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uIFJldHVybnMgZmFsc2UgaWYKKyAgICAgICAg
Ly8gZWl0aGVyIHdhcyBhbiBpbnZhbGlkIGVudW0uCisgICAgICAgIGJvb2wgY29tcHV0ZUZvcm1h
dEFuZFR5cGVQYXJhbWV0ZXJzKHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKiBjb21wb25l
bnRzUGVyUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcqIGJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAgICAgICAvLyBFeHRyYWN0
cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIGludG8gdGhlIHBhc3NlZCBWZWN0b3Is
CisgICAgICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZl
biBmb3JtYXQgYW5kIHR5cGUsCisgICAgICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQg
cHJlbXVsdGlwbHlBbHBoYSBmbGFncy4gUmV0dXJucyB0cnVlCisgICAgICAgIC8vIHVwb24gc3Vj
Y2Vzcy4KICAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZmxpcFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4mIGltYWdlRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCogZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50KiBpbnRlcm5hbEZvcm1hdCk7Ci0KLSAgICAgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRl
bnRzIG9mIHRoZSBnaXZlbiBJbWFnZURhdGEgaW50byB0aGUgcGFzc2VkCi0gICAgICAgIC8vIFZl
Y3Rvciwgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuCi0gICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOworCisgICAgICAgIC8vIEV4dHJhY3RzIHRo
ZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3Is
CisgICAgICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZl
biBmb3JtYXQgYW5kIHR5cGUsCisgICAgICAgIC8vIGFuZCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQg
cHJlbXVsdGlwbHlBbHBoYSBmbGFncy4gUmV0dXJucyB0cnVlCisgICAgICAgIC8vIHVwb24gc3Vj
Y2Vzcy4KICAgICAgICAgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlRGF0YSosCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZsaXBZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBwcmVtdWx0aXBseUFscGhhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKTsKIAotICAgICAgICAvLyBQcm9jZXNzZXMgdGhlIGdpdmVuIGltYWdl
IGRhdGEgaW4gcHJlcGFyYXRpb24gZm9yIHVwbG9hZGluZwotICAgICAgICAvLyB2aWEgdGV4SW1h
Z2UyRCBvciB0ZXhTdWJJbWFnZTJELiBUaGUgaW5wdXQgZGF0YSBtdXN0IGJlIGluCi0gICAgICAg
IC8vIDQtY29tcG9uZW50IGZvcm1hdCB3aXRoIHRoZSBhbHBoYSBjaGFubmVsIGxhc3QgKGkuZS4s
IFJHQkEKLSAgICAgICAgLy8gb3IgQkdSQSksIHRpZ2h0bHkgcGFja2VkLCB3aXRoIG5vIHNwYWNl
IGJldHdlZW4gcm93cy4KLQotICAgICAgICBlbnVtIEFscGhhT3AgewotICAgICAgICAgICAga0Fs
cGhhRG9Ob3RoaW5nID0gMCwKLSAgICAgICAgICAgIGtBbHBoYURvUHJlbXVsdGlwbHkgPSAxLAot
ICAgICAgICAgICAga0FscGhhRG9Vbm11bHRpcGx5ID0gMgorICAgICAgICAvLyBGbGlwcyB0aGUg
Z2l2ZW4gaW1hZ2UgZGF0YSB2ZXJ0aWNhbGx5LCBpbi1wbGFjZS4KKyAgICAgICAgdm9pZCBmbGlw
VmVydGljYWxseSh2b2lkKiBpbWFnZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5
dGVzUGVyUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHVu
cGFja0FsaWdubWVudCk7CisKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBlbnVtZXJhdGUgYWxsIHBv
c3NpYmxlIG5hdGl2ZSBpbWFnZSBmb3JtYXRzIHRvCisgICAgICAgIC8vIHJlZHVjZSB0aGUgYW1v
dW50IG9mIHRlbXBvcmFyeSBhbGxvY2F0aW9ucyBkdXJpbmcgdGV4dHVyZQorICAgICAgICAvLyB1
cGxvYWRpbmcuIFRoaXMgZW51bSBtdXN0IGJlIHB1YmxpYyBiZWNhdXNlIGl0IGlzIGFjY2Vzc2Vk
CisgICAgICAgIC8vIGJ5IG5vbi1tZW1iZXIgZnVuY3Rpb25zLgorICAgICAgICBlbnVtIFNvdXJj
ZURhdGFGb3JtYXQgeworICAgICAgICAgICAga1NvdXJjZUZvcm1hdFJHQkE4LAorICAgICAgICAg
ICAga1NvdXJjZUZvcm1hdFJHQjgsCisgICAgICAgICAgICBrU291cmNlRm9ybWF0QkdSQTgKICAg
ICAgICAgfTsKIAotICAgICAgICB2b2lkIHByb2Nlc3NJbWFnZURhdGEodWludDhfdCogaW1hZ2VE
YXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGZsaXBWZXJ0aWNhbGx5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wKTsKLQotICAgICAgICBib29sIGlzR0xFUzJDb21w
bGlhbnQoKSBjb25zdDsKLQogICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgLy8gRW50
cnkgcG9pbnRzIGZvciBXZWJHTC4KICAgICAgICAgLy8KQEAgLTcwMywzMyArNzEzLDQ5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOiAgICAgICAgCiAgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEKEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpOwogCi0g
ICAgICAgIC8vIEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nLgotICAgICAgICB2b2lkIHBy
ZW11bHRpcGx5QWxwaGEodW5zaWduZWQgY2hhciogcmdiYURhdGEsIGludCBudW1QaXhlbHMpOwot
ICAgICAgICB2b2lkIHVubXVsdGlwbHlBbHBoYSh1aW50OF90KiBpbWFnZURhdGEsIGludCBudW1Q
aXhlbHMpOwotCiAgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxl
bWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgogICAgICAgICAvLwotICAgICAgICAvLyBHZXRzIHRo
ZSBkYXRhIGZvciB0aGUgZ2l2ZW4gSW1hZ2UgaW50byBvdXRwdXRWZWN0b3IsCi0gICAgICAgIC8v
IHdpdGhvdXQgZG9pbmcgYW55IHByb2Nlc3Npbmcgb2YgdGhlIGRhdGEgKHZlcnRpY2FsIGZsaXAg
b3IKLSAgICAgICAgLy8gb3RoZXJ3aXNlKS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gcHJlbXVs
dGlwbHlBbHBoYSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciB3aWxsIGV2ZW50dWFsbHkKLSAg
ICAgICAgLy8gd2FudCB0aGUgYWxwaGEgY2hhbm5lbCBtdWx0aXBsaWVkIGludG8gdGhlIGNvbG9y
IGNoYW5uZWxzLgorICAgICAgICAvLyBHZXRzIHRoZSBkYXRhIGZvciB0aGUgZ2l2ZW4gSW1hZ2Ug
aW50byBvdXRwdXRWZWN0b3IgaW4gdGhlCisgICAgICAgIC8vIGZvcm1hdCBzcGVjaWZpZWQgYnkg
dGhlIChPcGVuR0wtc3R5bGUpIGZvcm1hdCBhbmQgdHlwZQorICAgICAgICAvLyBhcmd1bWVudHMu
IERlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgb3V0cHV0VmVjdG9yIGNvbnRhaW5zCisgICAgICAg
IC8vIHVpbnQ4X3QsIGlmIHRoZSBmb3JtYXQgYW5kIHR5cGUgc3BlY2lmeSBwYWNrZWQgcGl4ZWxz
LCB0aGVuCisgICAgICAgIC8vIGl0IHdpbGwgZXNzZW50aWFsbHkgY29udGFpbiB1aW50MTZfdCBh
ZnRlciB0aGUgZXh0cmFjdGlvbgorICAgICAgICAvLyBwcm9jZXNzLgogICAgICAgICAvLwotICAg
ICAgICAvLyBUaGUgb3V0IHBhcmFtZXRlciBoYXNBbHBoYUNoYW5uZWwgaW5kaWNhdGVzIHdoZXRo
ZXIgdGhlCi0gICAgICAgIC8vIGltYWdlIGFjdHVhbGx5IGhhZCBhbiBhbHBoYSBjaGFubmVsLgor
ICAgICAgICAvLyBJZiBwcmVtdWx0aXBseUFscGhhIGlzIHRydWUsIHRoZSBhbHBoYSBjaGFubmVs
LCBpZiBhbnksCisgICAgICAgIC8vIHdpbGwgYmUgbXVsdGlwbGllZCBpbnRvIHRoZSBjb2xvciBj
aGFubmVscyBkdXJpbmcgdGhlCisgICAgICAgIC8vIGV4dHJhY3Rpb24gcHJvY2Vzcy4gVGhpcyBw
cmVtdWx0aXBsaWNhdGlvbiBvY2N1cnMgYmVmb3JlCisgICAgICAgIC8vIGFueSBwYWNraW5nIG9m
IHBpeGVsIGRhdGEuCiAgICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBvdXQgcGFyYW1ldGVyIG5l
ZWRlZEFscGhhT3Agc2hvdWxkIGJlIHBhc3NlZCB0byBhCi0gICAgICAgIC8vIHN1YnNlcXVlbnQg
Y2FsbCBvZiBwcm9jZXNzSW1hZ2VEYXRhLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgb3V0
IHBhcmFtZXRlciBmb3JtYXQgc2hvdWxkIGJlIHBhc3NlZCB0byBzdWJzZXF1ZW50Ci0gICAgICAg
IC8vIGludm9jYXRpb25zIG9mIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQuCisgICAgICAg
IC8vIE5vIHZlcnRpY2FsIGZsaXAgb2YgdGhlIGltYWdlIGRhdGEgaXMgcGVyZm9ybWVkIGJ5IHRo
aXMKKyAgICAgICAgLy8gbWV0aG9kLgogICAgICAgICBib29sIGdldEltYWdlRGF0YShJbWFnZSog
aW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0
VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sKiBoYXNBbHBoYUNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IEFscGhhT3AqIG5lZWRlZEFscGhhT3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCogZm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+JiBvdXRwdXRWZWN0b3IpOworCisgICAgICAgIC8vIFBvc3NpYmxlIGFscGhhIG9wZXJhdGlv
bnMgdGhhdCBtYXkgbmVlZCB0byBvY2N1ciBkdXJpbmcKKyAgICAgICAgLy8gcGl4ZWwgcGFja2lu
Zy4gRklYTUU6IGtBbHBoYURvVW5tdWx0aXBseSBpcyBsb3NzeSBhbmQgbXVzdAorICAgICAgICAv
LyBiZSByZW1vdmVkLgorICAgICAgICBlbnVtIEFscGhhT3AgeworICAgICAgICAgICAga0FscGhh
RG9Ob3RoaW5nID0gMCwKKyAgICAgICAgICAgIGtBbHBoYURvUHJlbXVsdGlwbHkgPSAxLAorICAg
ICAgICAgICAga0FscGhhRG9Vbm11bHRpcGx5ID0gMgorICAgICAgICB9OworCisgICAgICAgIC8v
IEhlbHBlciBmb3IgZ2V0SW1hZ2VEYXRhIHdoaWNoIGltcGxlbWVudHMgcGFja2luZyBvZiBwaXhl
bAorICAgICAgICAvLyBkYXRhIGludG8gdGhlIHNwZWNpZmllZCBPcGVuR0wgZGVzdGluYXRpb24g
Zm9ybWF0IGFuZCB0eXBlLgorICAgICAgICAvLyBTb3VyY2UgZGF0YSBtdXN0IGJlIGluIFJHQkEg
Zm9ybWF0IHdpdGggbm8gZ2FwcyBiZXR3ZWVuCisgICAgICAgIC8vIHJvd3MuIERlc3RpbmF0aW9u
IGRhdGEgd2lsbCBoYXZlIG5vIGdhcHMgYmV0d2VlbiByb3dzLgorICAgICAgICBib29sIHBhY2tQ
aXhlbHMoY29uc3QgdWludDhfdCogc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFNvdXJjZURhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGlu
YXRpb25Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGlu
YXRpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCBhbHBoYU9wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCogZGVzdGluYXRpb25EYXRhKTsKIAogI2lmIFBMQVRG
T1JNKE1BQykKICAgICAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0
ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiA2
MTY0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxMCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYg
b3V0cHV0VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBbHBoYU9wKiBuZWVkZWRBbHBoYU9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUyLDE2ICs1MSwxMCBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbnQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7CiAgICAgaW50IGhlaWdo
dCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7Ci0gICAgaW50IHJvd0J5dGVzID0gd2lkdGgg
KiA0OwotICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUluZm8oY2dJ
bWFnZSk7Ci0gICAgKmhhc0FscGhhQ2hhbm5lbCA9IChpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25l
Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25lU2tp
cExhc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZm8gIT0ga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwRmlyc3QpOwotICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiAqaGFzQWxwaGFDaGFu
bmVsKQotICAgICAgICAvLyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2UgZGF0YSBiZWZvcmUg
dGhlIHByZW11bHRpcGxpY2F0aW9uIHN0ZXAKLSAgICAgICAgKm5lZWRlZEFscGhhT3AgPSBrQWxw
aGFEb1VubXVsdGlwbHk7Ci0gICAgKmZvcm1hdCA9IFJHQkE7Ci0gICAgb3V0cHV0VmVjdG9yLnJl
c2l6ZShoZWlnaHQgKiByb3dCeXRlcyk7CisgICAgLy8gRklYTUU6IHdlIHNob3VsZCBnZXQgcmlk
IG9mIHRoaXMgdGVtcG9yYXJ5IGNvcHkgd2hlcmUgcG9zc2libGUuCisgICAgaW50IHRlbXBSb3dC
eXRlcyA9IHdpZHRoICogNDsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcFZlY3RvcjsKKyAgICB0
ZW1wVmVjdG9yLnJlc2l6ZShoZWlnaHQgKiB0ZW1wUm93Qnl0ZXMpOwogICAgIC8vIFRyeSB0byBy
ZXVzZSB0aGUgY29sb3Igc3BhY2UgZnJvbSB0aGUgaW1hZ2UgdG8gcHJlc2VydmUgaXRzIGNvbG9y
cy4KICAgICAvLyBTb21lIGltYWdlcyB1c2UgYSBjb2xvciBzcGFjZSAoc3VjaCBhcyBpbmRleGVk
KSB1bnN1cHBvcnRlZCBieSB0aGUgYml0bWFwIGNvbnRleHQuCiAgICAgQ0dDb2xvclNwYWNlUmVm
IGNvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZShjZ0ltYWdlKTsKQEAgLTc5LDIwICs3
MiwzNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgICAg
IHJlbGVhc2VDb2xvclNwYWNlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIENH
Q29udGV4dFJlZiB0bXBDb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG91dHB1dFZlY3Rv
ci5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkdGgsIGhlaWdodCwgOCwgcm93Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpOworICAgIENHQ29udGV4dFJlZiB0ZW1wQ29udGV4dCA9IENHQml0bWFwQ29u
dGV4dENyZWF0ZSh0ZW1wVmVjdG9yLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgOCwgdGVtcFJvd0J5dGVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2xvclNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogY2hhbmdlIHRoaXMhCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCk7CiAgICAgaWYgKHJlbGVhc2VDb2xvclNwYWNlKQogICAgICAgICBDR0NvbG9yU3BhY2VSZWxl
YXNlKGNvbG9yU3BhY2UpOwotICAgIGlmICghdG1wQ29udGV4dCkKKyAgICBpZiAoIXRlbXBDb250
ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHRt
cENvbnRleHQsIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZSh0bXBD
b250ZXh0LAorICAgIENHQ29udGV4dFNldEJsZW5kTW9kZSh0ZW1wQ29udGV4dCwga0NHQmxlbmRN
b2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRlbXBDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICBDR1JlY3RNYWtlKDAsIDAsIHN0YXRpY19jYXN0PENHRmxvYXQ+KHdpZHRo
KSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oaGVpZ2h0KSksCiAgICAgICAgICAgICAgICAgICAgICAg
IGNnSW1hZ2UpOwotICAgIENHQ29udGV4dFJlbGVhc2UodG1wQ29udGV4dCk7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgQ0dDb250ZXh0UmVsZWFzZSh0ZW1wQ29udGV4dCk7CisgICAgLy8gUGFjayB0
aGUgcGl4ZWwgZGF0YSBpbnRvIHRoZSBvdXRwdXQgdmVjdG9yLgorICAgIHVuc2lnbmVkIGxvbmcg
Y29tcG9uZW50c1BlclBpeGVsLCBieXRlc1BlckNvbXBvbmVudDsKKyAgICBpZiAoIWNvbXB1dGVG
b3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWws
ICZieXRlc1BlckNvbXBvbmVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgcm93
Qnl0ZXMgPSB3aWR0aCAqIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50Owor
ICAgIG91dHB1dFZlY3Rvci5yZXNpemUoaGVpZ2h0ICogcm93Qnl0ZXMpOworICAgIENHSW1hZ2VB
bHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUluZm8oY2dJbWFnZSk7CisgICAgYm9vbCBo
YXNBbHBoYUNoYW5uZWwgPSAoaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9uZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIGluZm8gIT0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZm8gIT0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lw
Rmlyc3QpOworICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGluZzsKKyAg
ICBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYgaGFzQWxwaGFDaGFubmVsKQorICAgICAgICAvLyBG
SVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2UgZGF0YSBiZWZvcmUgdGhlIHByZW11bHRpcGxpY2F0
aW9uIHN0ZXAuCisgICAgICAgIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7Cisg
ICAgcmV0dXJuIHBhY2tQaXhlbHModGVtcFZlY3Rvci5kYXRhKCksIGtTb3VyY2VGb3JtYXRSR0JB
OCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5l
ZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwogfQogCiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAko
cmV2aXNpb24gNjE2NDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIwLDExICsxNjIwLDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm8KIH0KIAogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBoYXNBbHBoYUNoYW5u
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFPcCogbmVlZGVk
QWxwaGFPcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQqIGZvcm1hdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNjMyLDE3ICsxNjMxLDE0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEltYWdlRGF0YShJbWEKICAgICBpZiAoIW5hdGl2ZVBpeG1hcCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgKmhhc0FscGhhQ2hhbm5lbCA9IHRydWU7Ci0gICAgKmZvcm1hdCA9IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBOwotCi0gICAgKm5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05v
dGhpbmc7CisgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Ob3RoaW5nOwogICAg
IGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiAqaGFzQWxwaGFDaGFubmVsKQotICAgICAgICAqbmVl
ZGVkQWxwaGFPcCA9IGtBbHBoYURvVW5tdWx0aXBseTsKLSAKKyAgICAgICAgLy8gRklYTUU6IG11
c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRoZSBwcmVtdWx0aXBsaWNhdGlvbiBzdGVw
CisgICAgICAgIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgUUltYWdl
IG5hdGl2ZUltYWdlID0gbmF0aXZlUGl4bWFwLT50b0ltYWdlKCkuY29udmVydFRvRm9ybWF0KFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMik7Ci0gICAgb3V0cHV0VmVjdG9yLmFwcGVuZChuYXRpdmVJbWFn
ZS5yZ2JTd2FwcGVkKCkuYml0cygpLCBuYXRpdmVJbWFnZS5ieXRlQ291bnQoKSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBvdXRwdXRWZWN0b3IucmVzaXplKG5hdGl2ZUltYWdlLmJ5dGVDb3Vu
dCgpKTsKKyAgICByZXR1cm4gcGFja1BpeGVscyhuYXRpdmVJbWFnZS5yZ2JTd2FwcGVkKCkuYml0
cygpLCBrU291cmNlRm9ybWF0UkdCQTgsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRw
dXRWZWN0b3IuZGF0YSgpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAJKHJldmlzaW9u
IDYxNjQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dDNEU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2Uq
IGltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50
OF90PiYgb3V0cHV0VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbHBoYU9wKiBuZWVkZWRBbHBoYU9wLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCogZm9ybWF0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYwLDE4ICs1OSwxMiBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgQVNTRVJUKHJvd0J5
dGVzID09IHNraWFJbWFnZS0+d2lkdGgoKSAqIDQpOwogICAgIHVpbnQ4X3QqIHBpeGVscyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNraWFJbWFnZS0+Z2V0UGl4ZWxzKCkpOwogICAgIG91
dHB1dFZlY3Rvci5yZXNpemUocm93Qnl0ZXMgKiBoZWlnaHQpOwotICAgIGludCBzaXplID0gcm93
Qnl0ZXMgKiBoZWlnaHQ7Ci0gICAgbWVtY3B5KG91dHB1dFZlY3Rvci5kYXRhKCksIHBpeGVscywg
c2l6ZSk7Ci0gICAgKmhhc0FscGhhQ2hhbm5lbCA9IHRydWU7CisgICAgQWxwaGFPcCBuZWVkZWRB
bHBoYU9wID0ga0FscGhhRG9Ob3RoaW5nOwogICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKICAg
ICAgICAgLy8gRklYTUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRoZSBwcmVt
dWx0aXBsaWNhdGlvbiBzdGVwCi0gICAgICAgICpuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Vbm11
bHRpcGx5OwotICAgIC8vIENvbnZlcnQgZnJvbSBCR1JBIHRvIFJHQkEuIEZJWE1FOiBhZGQgR0xf
QkdSQSBleHRlbnNpb24gc3VwcG9ydAotICAgIC8vIHRvIGFsbCB1bmRlcmx5aW5nIE9wZW5HTCBp
bXBsZW1lbnRhdGlvbnMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpCi0g
ICAgICAgIHN0ZDo6c3dhcChvdXRwdXRWZWN0b3JbaV0sIG91dHB1dFZlY3RvcltpICsgMl0pOwot
ICAgICpmb3JtYXQgPSBSR0JBOwotICAgIHJldHVybiB0cnVlOworICAgICAgICBuZWVkZWRBbHBo
YU9wID0ga0FscGhhRG9Vbm11bHRpcGx5OworICAgIHJldHVybiBwYWNrUGl4ZWxzKHBpeGVscywg
a1NvdXJjZUZvcm1hdEJHUkE4LCBza2lhSW1hZ2UtPndpZHRoKCksIGhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5k
YXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
MTY0MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDMxIEBACisyMDEwLTA2LTIyICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
Zm9ybWF0IGNvbnZlcnNpb25zIGluIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5n
IEhUTUwgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDAzMTkKKworICAgICAgICBHZW5lcmFsaXplZCBjb2RlIHN1cHBvcnRpbmcgcHJlbXVsdGlw
bGljYXRpb24gb2YgYWxwaGEgYW5kCisgICAgICAgIHZlcnRpY2FsIGZsaXAgdG8gcGFjayB0ZXh0
dXJlIGRhdGEgaW50byByZXF1ZXN0ZWQgZm9ybWF0IGFuZCB0eXBlLgorICAgICAgICBIYW5kbGVk
IGluY29taW5nIGltYWdlIGRhdGEgb2YgdmFyaW91cyBmb3JtYXRzLCBSR0JBIGFuZCBCR1JBIGlu
CisgICAgICAgIHBhcnRpY3VsYXIsIGJvdGggdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgdGVtcG9y
YXJ5IGNvcGllcyBkdXJpbmcKKyAgICAgICAgdGV4dHVyZSB1cGxvYWQgYW5kIHRvIHN1cHBvcnQg
cHJlbXVsdGlwbHlpbmcgYWxwaGEgZm9yIHRoZQorICAgICAgICB0ZXhJbWFnZTJEIGFuZCB0ZXhT
dWJJbWFnZTJEIGVudHJ5IHBvaW50cyB0YWtpbmcgQXJyYXlCdWZmZXJWaWV3CisgICAgICAgIGlu
IGEgc3Vic2VxdWVudCBidWcuIEFkZGVkIHRlc3QgY2FzZSBleGVyY2lzaW5nIGFsbCBjb21iaW5h
dGlvbnMKKyAgICAgICAgb2YgZm9ybWF0L3R5cGUgY29tYmluYXRpb25zLCBwcmVtdWx0aXBsaWNh
dGlvbiBvZiBhbHBoYSwgYW5kCisgICAgICAgIEltYWdlL0ltYWdlRGF0YSB1cGxvYWQuIChJbmNv
cnBvcmF0ZWQgcG5nbGliLmpzIHVuZGVyCisgICAgICAgIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291
cmNlcy8gdG8gYmUgYWJsZSB0byBnZW5lcmF0ZSBJbWFnZSBlbGVtZW50cworICAgICAgICBwcm9n
cmFtbWF0aWNhbGx5LikgVGVzdGVkIGluIFNhZmFyaSBvbiBNYWMgT1MgWCBhbmQgaW4gQ2hyb21p
dW0gb24KKyAgICAgICAgTWFjIE9TIFgsIFdpbmRvd3MgYW5kIExpbnV4LgorCisgICAgICAgIFRl
c3Q6IGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS5odG1s
CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvcG5nbGliLmpzOiBBZGRl
ZC4KKyAgICAgICAgKCk6CisgICAgICAgICguKToKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC90ZXgtaW1hZ2Utd2l0aC1mb3JtYXQtYW5kLXR5cGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2Utd2l0aC1mb3JtYXQtYW5kLXR5cGUu
aHRtbDogQWRkZWQuCisKIDIwMTAtMDYtMjIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIE5vIHJldmlldywgc2tpcHBpbmcgdGVzdCBkdWUgdG8gcmV2ZWFsZWQgYnVn
IGluIENsaXBib2FyZFF0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4
LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2Utd2l0aC1mb3JtYXQtYW5kLXR5
cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMzcgQEAKK1ZlcmlmeSB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFn
ZTJEIGNvZGUgcGF0aHMgdGFraW5nIEhUTUwgZGF0YSB3aXRoIGFsbCBmb3JtYXQvdHlwZSBjb21i
aW5hdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitSZWdyZXNzaW9uIHRlc3Qg
Zm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDMxOSA6IEltcGxl
bWVudCBmb3JtYXQgY29udmVyc2lvbnMgaW4gdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCB0
YWtpbmcgSFRNTCBkYXRhCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQor
UEFTUyBSR0JBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9m
IGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFJHQkEv
VU5TSUdORURfU0hPUlRfNF80XzRfNCBtdXN0IGRyb3AgbG93IGZvdXIgYml0cyBvZiBwcmVjaXNp
b24KK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFJHQkEvVU5T
SUdORURfU0hPUlRfNV81XzVfMSBtdXN0IGRyb3AgbG93IHRocmVlIGJpdHMgb2YgcHJlY2lzaW9u
CitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBSR0IvVU5TSUdO
RURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0
ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgUkdCL1VOU0lHTkVEX1NIT1JUXzVf
Nl81IG11c3QgZHJvcCBsb3cgdHdvIG9yIHRocmVlIGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5n
IHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBBTFBIQS9VTlNJR05FRF9CWVRF
IHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleEltYWdl
MkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBMVU1JTkFOQ0UvVU5TSUdORURfQllURSBzaG91
bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdp
dGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgTFVNSU5BTkNFX0FMUEhBL1VOU0lHTkVEX0JZVEUgc2hv
dWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2Uy
RCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFJHQkEvVU5TSUdORURfQllURSBzaG91bGQgbWFp
bnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGgg
SW1hZ2UgYXQgMjU2eDEKK1BBU1MgUkdCQS9VTlNJR05FRF9TSE9SVF80XzRfNF80IG11c3QgZHJv
cCBsb3cgZm91ciBiaXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGgg
SW1hZ2UgYXQgMjU2eDEKK1BBU1MgUkdCQS9VTlNJR05FRF9TSE9SVF81XzVfNV8xIG11c3QgZHJv
cCBsb3cgdGhyZWUgYml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRo
IEltYWdlIGF0IDI1NngxCitQQVNTIFJHQi9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBm
dWxsIHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBh
dCAyNTZ4MQorUEFTUyBSR0IvVU5TSUdORURfU0hPUlRfNV82XzUgbXVzdCBkcm9wIGxvdyB0d28g
b3IgdGhyZWUgYml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIElt
YWdlIGF0IDI1NngxCitQQVNTIEFMUEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1
bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0
IDI1NngxCitQQVNTIExVTUlOQU5DRS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxs
IHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAy
NTZ4MQorUEFTUyBMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4g
ZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRh
IGF0IDI1NngxCitQQVNTIFJHQkEvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBw
cmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1
NngxCitQQVNTIFJHQkEvVU5TSUdORURfU0hPUlRfNF80XzRfNCBtdXN0IGRyb3AgbG93IGZvdXIg
Yml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAy
NTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgbXVzdCBkcm9wIGxvdyB0aHJl
ZSBiaXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0
IDI1NngxCitQQVNTIFJHQi9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNp
c2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEK
K1BBU1MgUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81IG11c3QgZHJvcCBsb3cgdHdvIG9yIHRocmVl
IGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQg
MjU2eDEKK1BBU1MgQUxQSEEvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVj
aXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1Nngx
CitQQVNTIExVTUlOQU5DRS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNp
c2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEK
K1BBU1MgTFVNSU5BTkNFX0FMUEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwg
cHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBh
dCAyNTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJl
Y2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAy
NTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgbXVzdCBkcm9wIGxvdyBmb3Vy
IGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEg
YXQgMjU2eDEKK1BBU1MgUkdCQS9VTlNJR05FRF9TSE9SVF81XzVfNV8xIG11c3QgZHJvcCBsb3cg
dGhyZWUgYml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdl
RGF0YSBhdCAyNTZ4MQorUEFTUyBSR0IvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVs
bCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2VEYXRh
IGF0IDI1NngxCitQQVNTIFJHQi9VTlNJR05FRF9TSE9SVF81XzZfNSBtdXN0IGRyb3AgbG93IHR3
byBvciB0aHJlZSBiaXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGgg
SW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIEFMUEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50
YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIElt
YWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBMVU1JTkFOQ0UvVU5TSUdORURfQllURSBzaG91bGQgbWFp
bnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGgg
SW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIExVTUlOQU5DRV9BTFBIQS9VTlNJR05FRF9CWVRFIHNo
b3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleEltYWdlMkQg
d2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wg
d2l0aCBSR0JBL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0
IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEvVU5T
SUdORURfU0hPUlRfNF80XzRfNAorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2
eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05F
RF9TSE9SVF81XzVfNV8xCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQor
UEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURfQllU
RQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BS
RU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81CitUZXN0
aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQ
TFlfQUxQSEFfV0VCR0wgd2l0aCBBTFBIQS9VTlNJR05FRF9CWVRFCitUZXN0aW5nIHRleEltYWdl
MkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VC
R0wgd2l0aCBMVU1JTkFOQ0UvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGgg
SW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGgg
TFVNSU5BTkNFX0FMUEhBL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRo
IEltYWdlIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRo
IFJHQkEvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQg
MjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJ
R05FRF9TSE9SVF80XzRfNF80CitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAy
NTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lH
TkVEX1NIT1JUXzVfNV81XzEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1
NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQi9VTlNJR05F
RF9CWVRFCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBV
TlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURfU0hPUlRfNV82
XzUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFVOUEFD
S19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIEFMUEhBL1VOU0lHTkVEX0JZVEUKK1Rlc3Rp
bmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxU
SVBMWV9BTFBIQV9XRUJHTCB3aXRoIExVTUlOQU5DRS9VTlNJR05FRF9CWVRFCitUZXN0aW5nIHRl
eFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlf
QUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURQorVGVzdGluZyB0
ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBM
WV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJE
IHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9X
RUJHTCB3aXRoIFJHQkEvVU5TSUdORURfU0hPUlRfNF80XzRfNAorVGVzdGluZyB0ZXhJbWFnZTJE
IHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9X
RUJHTCB3aXRoIFJHQkEvVU5TSUdORURfU0hPUlRfNV81XzVfMQorVGVzdGluZyB0ZXhJbWFnZTJE
IHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9X
RUJHTCB3aXRoIFJHQi9VTlNJR05FRF9CWVRFCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFn
ZURhdGEgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGgg
UkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81CitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZURh
dGEgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggQUxQ
SEEvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1
NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIExVTUlOQU5DRS9V
TlNJR05FRF9CWVRFCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEK
K1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggTFVNSU5BTkNFX0FMUEhB
L1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAy
NTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lH
TkVEX0JZVEUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQor
UEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4
MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lHTkVE
X1NIT1JUXzVfNV81XzEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAy
NTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdO
RURfQllURQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQ
QVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQi9VTlNJR05FRF9TSE9S
VF81XzZfNQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQ
QVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIEFMUEhBL1VOU0lHTkVEX0JZ
VEUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBV
TlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0UvVU5TSUdORURfQllU
RQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIFVO
UEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIExVTUlOQU5DRV9BTFBIQS9VTlNJR05F
RF9CWVRFCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9y
bWF0LWFuZC10eXBlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2Utd2l0aC1mb3JtYXQtYW5k
LXR5cGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NjggQEAKKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BuZ2xpYi5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy91dGlsczNkLmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2
c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBnX1Bvc2l0
aW9uOworYXR0cmlidXRlIHZlYzIgZ19UZXhDb29yZDA7CisKK3ZhcnlpbmcgdmVjMiB0ZXhDb29y
ZDsKKwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoZ19Qb3NpdGlvbi54
LCBnX1Bvc2l0aW9uLnksIGdfUG9zaXRpb24ueiwgMS4wKTsKKyAgICB0ZXhDb29yZCA9IGdfVGV4
Q29vcmQwOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hh
ZGVyL3gtZnJhZ21lbnQiPgordW5pZm9ybSBzYW1wbGVyMkQgdGV4OwordmFyeWluZyB2ZWMyIHRl
eENvb3JkOworCit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0
ZXgsIHRleENvb3JkKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIGdsID0gbnVsbDsK
K3ZhciB0ZXh0dXJlTG9jID0gbnVsbDsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIYXJuZXNzCisKK3ZhciB0ZXN0Q2FzZXMgPSBbXTsKKwor
ZnVuY3Rpb24gaW5pdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktp
dFdlYkdMRW5hYmxlZCIsICIxIik7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKworICAgIGRlc2NyaXB0aW9uKCdWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1h
Z2UyRCBjb2RlIHBhdGhzIHRha2luZyBIVE1MIGRhdGEgd2l0aCBhbGwgZm9ybWF0L3R5cGUgY29t
YmluYXRpb25zJyk7CisKKyAgICBkZWJ1ZygnUmVncmVzc2lvbiB0ZXN0IGZvciA8YSBocmVmPSJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMTkiPmh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDMxOTwvYT4gOiA8Y29kZT5JbXBsZW1lbnQg
Zm9ybWF0IGNvbnZlcnNpb25zIGluIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5n
IEhUTUwgZGF0YTwvY29kZT4nKTsKKworICAgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZz
aGFkZXIiLCAiZnNoYWRlciIsIFsgImdfUG9zaXRpb24iLCAiZ19UZXhDb29yZDAiIF0sIFsgMCwg
MCwgMCwgMSBdLCAxKTsKKyAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTsKKworICAgIHRleHR1cmVM
b2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24oZ2wucHJvZ3JhbSwgInRleCIpOworCisgICAgdmFy
IHZlcnRpY2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgICAxLjAsICAxLjAsIDAu
MCwKKyAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisg
ICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAg
ICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgdGV4Q29vcmRzID0gbmV3IFdlYkdMRmxvYXRB
cnJheShbCisgICAgICAgIDEuMCwgMS4wLAorICAgICAgICAwLjAsIDEuMCwKKyAgICAgICAgMC4w
LCAwLjAsCisgICAgICAgIDEuMCwgMS4wLAorICAgICAgICAwLjAsIDAuMCwKKyAgICAgICAgMS4w
LCAwLjBdKTsKKyAgICB2YXIgdGV4Q29vcmRPZmZzZXQgPSB2ZXJ0aWNlcy5ieXRlTGVuZ3RoOwor
CisgICAgdmFyIHZibyA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wu
QVJSQVlfQlVGRkVSLCB2Ym8pOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLAor
ICAgICAgICAgICAgICAgICAgdGV4Q29vcmRPZmZzZXQgKyB0ZXhDb29yZHMuYnl0ZUxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5idWZmZXJTdWJEYXRh
KGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wu
QVJSQVlfQlVGRkVSLCB0ZXhDb29yZE9mZnNldCwgdGV4Q29vcmRzKTsKKworICAgIGdsLmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMywg
Z2wuRkxPQVQsIGdsLkZBTFNFLCAwLCAwKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDIsIGdsLkZMT0FULCBnbC5GQUxT
RSwgMCwgdGV4Q29vcmRPZmZzZXQpOworCisgICAgaW5pdGlhbGl6ZVRlc3RzKCk7Cit9CisKK2Z1
bmN0aW9uIGluaXRpYWxpemVUZXN0cygpCit7CisgICAgLy8gVmVyaWZ5IHRoYXQgdXBsb2FkaW5n
IHRvIHBhY2tlZCBwaXhlbCBmb3JtYXRzIHBlcmZvcm1zIHRoZQorICAgIC8vIHJlcXVpcmVkIGNv
bnZlcnNpb24gYW5kIGFzc29jaWF0ZWQgbG9zcyBvZiBwcmVjaXNpb24uCisgICAgZm9yICh2YXIg
dXNlSW1hZ2VEYXRhID0gMDsgdXNlSW1hZ2VEYXRhIDwgMjsgKyt1c2VJbWFnZURhdGEpIHsKKyAg
ICAgICAgZm9yICh2YXIgdXNlVGV4U3ViSW1hZ2UyRCA9IDA7IHVzZVRleFN1YkltYWdlMkQgPCAy
OyArK3VzZVRleFN1YkltYWdlMkQpIHsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAg
ICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2Up
LAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8g
dHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAg
ICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlT3BhcXVl
R3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSwK
KyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgICAgICAgICAgICAgdHlwZTog
Z2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogYWxsQ2hhbm5lbHNJ
bmNyZWFzZUJ5Tm9Nb3JlVGhhbiwKKyAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDEsCisgICAg
ICAgICAgICAgICAgbnVtT2NjdXJyZW5jZXM6IDEsCisgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b246ICJSR0JBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9m
IGRhdGEiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAg
ICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2Up
LAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8g
dHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAg
ICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlT3BhcXVl
R3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSwK
KyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgICAgICAgICAgICAgdHlwZTog
Z2wuVU5TSUdORURfU0hPUlRfNF80XzRfNCwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogYWxs
Q2hhbm5lbHNJbmNyZWFzZUJ5QXRMZWFzdCwKKyAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDE1
LAorICAgICAgICAgICAgICAgIG51bU9jY3VycmVuY2VzOiAxMCwKKyAgICAgICAgICAgICAgICBk
ZXNjcmlwdGlvbjogIlJHQkEvVU5TSUdORURfU0hPUlRfNF80XzRfNCBtdXN0IGRyb3AgbG93IGZv
dXIgYml0cyBvZiBwcmVjaXNpb24iCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RD
YXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEg
PyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VU
ZXhTdWJJbWFnZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2
LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6
IGdlbmVyYXRlT3BhcXVlR3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBs
eUFscGhhOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgICAg
ICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMSwKKyAgICAgICAgICAgICAg
ICB2ZXJpZmllcjogYWxsQ2hhbm5lbHNJbmNyZWFzZUJ5QXRMZWFzdCwKKyAgICAgICAgICAgICAg
ICB0aHJlc2hvbGQ6IDcsCisgICAgICAgICAgICAgICAgbnVtT2NjdXJyZW5jZXM6IDIwLAorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiUkdCQS9VTlNJR05FRF9TSE9SVF81XzVfNV8xIG11
c3QgZHJvcCBsb3cgdGhyZWUgYml0cyBvZiBwcmVjaXNpb24iCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6
ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1
YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAg
ICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAg
ICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlT3BhcXVlR3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAg
ICAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IGds
LlJHQiwKKyAgICAgICAgICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICAgICAg
ICAgICAgIHZlcmlmaWVyOiBhbGxDaGFubmVsc0luY3JlYXNlQnlOb01vcmVUaGFuLAorICAgICAg
ICAgICAgICAgIHRocmVzaG9sZDogMSwKKyAgICAgICAgICAgICAgICBudW1PY2N1cnJlbmNlczog
MSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogIlJHQi9VTlNJR05FRF9CWVRFIHNob3Vs
ZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBkYXRhIgorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAo
dXNlSW1hZ2VEYXRhID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJ
bWFnZTJEOiAodXNlVGV4U3ViSW1hZ2UyRCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAg
ICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAg
ICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5S
R0IsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfU0hPUlRfNV82XzUsCisgICAg
ICAgICAgICAgICAgdmVyaWZpZXI6IGFsbENoYW5uZWxzSW5jcmVhc2VCeUF0TGVhc3QsCisgICAg
ICAgICAgICAgICAgdGhyZXNob2xkOiAzLAorICAgICAgICAgICAgICAgIG51bU9jY3VycmVuY2Vz
OiAyMCwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogIlJHQi9VTlNJR05FRF9TSE9SVF81
XzZfNSBtdXN0IGRyb3AgbG93IHR3byBvciB0aHJlZSBiaXRzIG9mIHByZWNpc2lvbiIKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2VzLnB1c2goeworICAgICAgICAgICAgICAg
IHVzZUltYWdlRGF0YTogKHVzZUltYWdlRGF0YSA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAg
ICAgICAgdXNlVGV4U3ViSW1hZ2UyRDogKHVzZVRleFN1YkltYWdlMkQgPyB0cnVlIDogZmFsc2Up
LAorICAgICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAx
LAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdGVUcmFuc2x1Y2VudEdyYXlzY2Fs
ZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisgICAgICAg
ICAgICAgICAgZm9ybWF0OiBnbC5BTFBIQSwKKyAgICAgICAgICAgICAgICB0eXBlOiBnbC5VTlNJ
R05FRF9CWVRFLAorICAgICAgICAgICAgICAgIHZlcmlmaWVyOiBhbHBoYUNoYW5uZWxJbmNyZWFz
ZXNCeU5vTW9yZVRoYW4sCisgICAgICAgICAgICAgICAgdGhyZXNob2xkOiAxLAorICAgICAgICAg
ICAgICAgIG51bU9jY3VycmVuY2VzOiAxLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAi
QUxQSEEvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0
YSIKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2VzLnB1c2goeworICAgICAg
ICAgICAgICAgIHVzZUltYWdlRGF0YTogKHVzZUltYWdlRGF0YSA/IHRydWUgOiBmYWxzZSksCisg
ICAgICAgICAgICAgICAgdXNlVGV4U3ViSW1hZ2UyRDogKHVzZVRleFN1YkltYWdlMkQgPyB0cnVl
IDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAgICAgICAgICAgICAg
aGVpZ2h0OiAxLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdGVPcGFxdWVHcmF5
c2NhbGVSYW1wLAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLAorICAg
ICAgICAgICAgICAgIGZvcm1hdDogZ2wuTFVNSU5BTkNFLAorICAgICAgICAgICAgICAgIHR5cGU6
IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGFsbENoYW5uZWxz
SW5jcmVhc2VCeU5vTW9yZVRoYW4sCisgICAgICAgICAgICAgICAgdGhyZXNob2xkOiAxLAorICAg
ICAgICAgICAgICAgIG51bU9jY3VycmVuY2VzOiAxLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uOiAiTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lz
aW9uIG9mIGRhdGEiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNo
KHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDog
ZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFn
ZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAg
ICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRl
T3BhcXVlR3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiBm
YWxzZSwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLkxVTUlOQU5DRV9BTFBIQSwKKyAgICAg
ICAgICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICAgICAgICAgICAgIHZlcmlm
aWVyOiBhbGxDaGFubmVsc0luY3JlYXNlQnlOb01vcmVUaGFuLAorICAgICAgICAgICAgICAgIHRo
cmVzaG9sZDogMSwKKyAgICAgICAgICAgICAgICBudW1PY2N1cnJlbmNlczogMSwKKyAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvbjogIkxVTUlOQU5DRV9BTFBIQS9VTlNJR05FRF9CWVRFIHNob3Vs
ZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBkYXRhIgorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBWZXJpZnkgdGhhdCBzZXR0aW5nIHRoZSBVTlBBQ0tfUFJF
TVVMVElQTFlfQUxQSEFfV0VCR0wgcGl4ZWwKKyAgICAvLyBzdG9yZSBwYXJhbWV0ZXIgYW5kIHNl
bmRpbmcgZG93biBhIHplcm8gYWxwaGEgY2F1c2VzIHRoZSBjb2xvcgorICAgIC8vIGNoYW5uZWxz
IHRvIGdvIHRvIHplcm8uCisgICAgZm9yICh2YXIgdXNlSW1hZ2VEYXRhID0gMDsgdXNlSW1hZ2VE
YXRhIDwgMjsgKyt1c2VJbWFnZURhdGEpIHsKKyAgICAgICAgZm9yICh2YXIgdXNlVGV4U3ViSW1h
Z2UyRCA9IDA7IHVzZVRleFN1YkltYWdlMkQgPCAyOyArK3VzZVRleFN1YkltYWdlMkQpIHsKKyAg
ICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6
ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1
YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAg
ICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAg
ICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAgICAg
ICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6IHRydWUsCisgICAgICAgICAgICAgICAgZm9ybWF0
OiBnbC5SR0JBLAorICAgICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAg
ICAgICAgICAgICAgdmVyaWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJvLAorICAgICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uOiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdC
QS9VTlNJR05FRF9CWVRFIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMu
cHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAodXNlSW1hZ2VEYXRhID8gdHJ1
ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAodXNlVGV4U3Vi
SW1hZ2UyRCA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAg
ICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5l
cmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBs
eUFscGhhOiB0cnVlLAorICAgICAgICAgICAgICAgIGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgICAg
ICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80LAorICAgICAgICAgICAgICAg
IHZlcmlmaWVyOiBjb2xvckNoYW5uZWxzQXJlWmVybywKKyAgICAgICAgICAgICAgICBkZXNjcmlw
dGlvbjogIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEvVU5TSUdORURf
U0hPUlRfNF80XzRfNCIKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2VzLnB1
c2goeworICAgICAgICAgICAgICAgIHVzZUltYWdlRGF0YTogKHVzZUltYWdlRGF0YSA/IHRydWUg
OiBmYWxzZSksCisgICAgICAgICAgICAgICAgdXNlVGV4U3ViSW1hZ2UyRDogKHVzZVRleFN1Yklt
YWdlMkQgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAg
ICAgICAgICAgICAgaGVpZ2h0OiAxLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJh
dGVUcmFuc3BhcmVudEdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlB
bHBoYTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgICAgICAg
ICAgICAgdHlwZTogZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMSwKKyAgICAgICAgICAgICAgICB2
ZXJpZmllcjogY29sb3JDaGFubmVsc0FyZVplcm8sCisgICAgICAgICAgICAgICAgZGVzY3JpcHRp
b246ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lHTkVEX1NI
T1JUXzVfNV81XzEiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNo
KHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDog
ZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFn
ZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAg
ICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRl
VHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxw
aGE6IHRydWUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0IsCisgICAgICAgICAgICAg
ICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogY29s
b3JDaGFubmVsc0FyZVplcm8sCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJVTlBBQ0tf
UFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURfQllURSIKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2VzLnB1c2goeworICAgICAgICAgICAgICAgIHVz
ZUltYWdlRGF0YTogKHVzZUltYWdlRGF0YSA/IHRydWUgOiBmYWxzZSksCisgICAgICAgICAgICAg
ICAgdXNlVGV4U3ViSW1hZ2UyRDogKHVzZVRleFN1YkltYWdlMkQgPyB0cnVlIDogZmFsc2UpLAor
ICAgICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxLAor
ICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdGVUcmFuc3BhcmVudEdyYXlzY2FsZVJh
bXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICBmb3JtYXQ6IGdsLlJHQiwKKyAgICAgICAgICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9T
SE9SVF81XzZfNSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogY29sb3JDaGFubmVsc0FyZVpl
cm8sCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQ
SEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURfU0hPUlRfNV82XzUiCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURh
dGE6ICh1c2VJbWFnZURhdGEgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRl
eFN1YkltYWdlMkQ6ICh1c2VUZXhTdWJJbWFnZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAg
ICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAg
ICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAg
ICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6IHRydWUsCisgICAgICAgICAgICAgICAgZm9y
bWF0OiBnbC5BTFBIQSwKKyAgICAgICAgICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAor
ICAgICAgICAgICAgICAgIHZlcmlmaWVyOiBjb2xvckNoYW5uZWxzQXJlWmVybywKKyAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvbjogIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRo
IEFMUEhBL1VOU0lHTkVEX0JZVEUiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RD
YXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICh1c2VJbWFnZURhdGEg
PyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICh1c2VU
ZXhTdWJJbWFnZTJEID8gdHJ1ZSA6IGZhbHNlKSwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2
LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6
IGdlbmVyYXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAgICAgICAgICAgICAgIHByZW11
bHRpcGx5QWxwaGE6IHRydWUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5MVU1JTkFOQ0Us
CisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAg
ICB2ZXJpZmllcjogY29sb3JDaGFubmVsc0FyZVplcm8sCisgICAgICAgICAgICAgICAgZGVzY3Jp
cHRpb246ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0UvVU5T
SUdORURfQllURSIKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2VzLnB1c2go
eworICAgICAgICAgICAgICAgIHVzZUltYWdlRGF0YTogKHVzZUltYWdlRGF0YSA/IHRydWUgOiBm
YWxzZSksCisgICAgICAgICAgICAgICAgdXNlVGV4U3ViSW1hZ2UyRDogKHVzZVRleFN1YkltYWdl
MkQgPyB0cnVlIDogZmFsc2UpLAorICAgICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAgICAg
ICAgICAgICAgaGVpZ2h0OiAxLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdGVU
cmFuc3BhcmVudEdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBo
YTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLkxVTUlOQU5DRV9BTFBIQSwKKyAg
ICAgICAgICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICAgICAgICAgICAgIHZl
cmlmaWVyOiBjb2xvckNoYW5uZWxzQXJlWmVybywKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlv
bjogIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIExVTUlOQU5DRV9BTFBIQS9V
TlNJR05FRF9CWVRFIgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBQcm9kdWNlIGRhdGEgZm9yIGFsbCB0ZXN0Y2FzZXMuIEJlY2F1c2Ugd2UgbG9hZCBpbWFnZXMs
IHNvbWUgb2YKKyAgICAvLyB0aGVzZSBtYXkgZ2VuZXJhdGUgdGhlaXIgZGF0YSBhc3luY2hyb25v
dXNseS4KKyAgICBnZW5lcmF0ZVRlc3REYXRhKCk7Cit9CisKK2Z1bmN0aW9uIGdlbmVyYXRlVGVz
dERhdGEoKQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdENhc2VzLmxlbmd0aDsgaSsr
KSB7CisgICAgICAgIHZhciB0ZXN0Q2FzZSA9IHRlc3RDYXNlc1tpXTsKKyAgICAgICAgdmFyIHdy
YXBwZXIgPSBudWxsOworICAgICAgICBpZiAodGVzdENhc2UudXNlSW1hZ2VEYXRhKQorICAgICAg
ICAgICAgd3JhcHBlciA9IG5ldyBJbWFnZURhdGFXcmFwcGVyKHRlc3RDYXNlLndpZHRoLCB0ZXN0
Q2FzZS5oZWlnaHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3cmFwcGVyID0gbmV3IElt
YWdlV3JhcHBlcih0ZXN0Q2FzZS53aWR0aCwgdGVzdENhc2UuaGVpZ2h0KTsKKyAgICAgICAgdGVz
dENhc2Uud3JhcHBlciA9IHdyYXBwZXI7CisgICAgICAgIHRlc3RDYXNlLmdlbmVyYXRvcih3cmFw
cGVyKTsKKyAgICAgICAgdGVzdENhc2Uud3JhcHBlci5nZW5lcmF0ZURhdGEoKTsKKyAgICB9CisK
KyAgICAvLyBTZWUgd2hldGhlciB3ZSBuZWVkIHRvIHJ1biB0aGUgdGVzdHMsIGluIGNhc2UgYWxs
IG9mIHRoZW0KKyAgICAvLyBnZW5lcmF0ZWQgdGhlaXIgcmVzdWx0cyBzeW5jaHJvbm91c2x5Lgor
ICAgIG1heWJlUnVuVGVzdHMoKTsKK30KKwordmFyIHJhblRlc3RzID0gZmFsc2U7CisKK2Z1bmN0
aW9uIG1heWJlUnVuVGVzdHMoKQoreworICAgIGlmICghcmFuVGVzdHMpCisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGVzdENhc2VzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgaWYgKCF0
ZXN0Q2FzZXNbaV0ud3JhcHBlci5kYXRhKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
IHJhblRlc3RzID0gdHJ1ZTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdENhc2VzLmxl
bmd0aDsgKytpKQorICAgICAgICBydW5PbmVUZXN0KHRlc3RDYXNlc1tpXSk7CisKKyAgICBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNjcmlwdCIpOworICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsKKyAgICBl
cGlsb2d1ZS5zcmMgPSAiLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7CisgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlcGlsb2d1ZSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RD
YXNlVG9TdHJpbmcodGVzdENhc2UpCit7CisgICAgcmV0dXJuICh0ZXN0Q2FzZS51c2VUZXhTdWJJ
bWFnZTJEID8gInRleFN1YkltYWdlMkQiIDogInRleEltYWdlMkQiKSArCisgICAgICAgICAgICAi
IHdpdGggIiArICh0ZXN0Q2FzZS51c2VJbWFnZURhdGEgPyAiSW1hZ2VEYXRhIiA6ICJJbWFnZSIp
ICsKKyAgICAgICAgICAgICIgYXQgIiArIHRlc3RDYXNlLndpZHRoICsgIngiICsgdGVzdENhc2Uu
aGVpZ2h0OworfQorCitmdW5jdGlvbiBydW5PbmVUZXN0KHRlc3RDYXNlKQoreworICAgIGRlYnVn
KCJUZXN0aW5nICIgKyB0ZXN0Q2FzZVRvU3RyaW5nKHRlc3RDYXNlKSk7CisgICAgdmFyIGRhdGEg
PSB0ZXN0Q2FzZS53cmFwcGVyLmRhdGE7CisgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJ
VCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4
dHVyZSgpOworICAgIC8vIEJpbmQgdGhlIHRleHR1cmUgdG8gdGV4dHVyZSB1bml0IDAuCisgICAg
Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgLy8gU2V0IHVwIHRl
eHR1cmUgcGFyYW1ldGVycy4KKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGds
LlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShn
bC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIC8v
IFNldCB1cCBwaXhlbCBzdG9yZSBwYXJhbWV0ZXJzLgorICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVO
UEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGVzdENhc2UucHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgLy8gVXBsb2FkIHRoZSBpbWFnZSBpbnRvIHRoZSB0ZXh0dXJlLgorICAgIGlmICh0ZXN0
Q2FzZS51c2VUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHRleHR1
cmUgdG8gYmxhY2sgZmlyc3QuCisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwg
MCwgdGVzdENhc2UuZm9ybWF0LCB0ZXN0Q2FzZS53aWR0aCwgdGVzdENhc2UuaGVpZ2h0LCAwLAor
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RDYXNlLmZvcm1hdCwgdGVzdENhc2UudHlwZSwgbnVs
bCk7CisgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgdGVz
dENhc2UuZm9ybWF0LCB0ZXN0Q2FzZS50eXBlLCBkYXRhKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHRlc3RDYXNlLmZvcm1hdCwgdGVzdENh
c2UuZm9ybWF0LCB0ZXN0Q2FzZS50eXBlLCBkYXRhKTsKKyAgICB9CisKKyAgICAvLyBQb2ludCB0
aGUgdW5pZm9ybSBzYW1wbGVyIHRvIHRleHR1cmUgdW5pdCAwLgorICAgIGdsLnVuaWZvcm0xaSh0
ZXh0dXJlTG9jLCAwKTsKKyAgICAvLyBEcmF3IHRoZSB0cmlhbmdsZXMuCisgICAgZ2wuZHJhd0Fy
cmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOworICAgIC8vIENsZWFuIHVwIHRoZSB0ZXh0dXJlLgor
ICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7CisKKyAgICAvLyBSZWFkIGJhY2sgdGhlIHJl
bmRlcmluZyByZXN1bHRzLgorICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHRlc3RDYXNlLndpZHRo
ICogdGVzdENhc2UuaGVpZ2h0ICogNCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCB0ZXN0Q2Fz
ZS53aWR0aCwgdGVzdENhc2UuaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYp
OworICAgIC8vIFJ1biB0aGUgdmVyaWZpY2F0aW9uIHJvdXRpbmUuCisgICAgaWYgKHRlc3RDYXNl
LnZlcmlmaWVyKGJ1ZiwgdGVzdENhc2UudGhyZXNob2xkLCB0ZXN0Q2FzZS5udW1PY2N1cnJlbmNl
cykpCisgICAgICAgIHRlc3RQYXNzZWQodGVzdENhc2UuZGVzY3JpcHRpb24pOworICAgIGVsc2UK
KyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0Q2FzZS5kZXNjcmlwdGlvbik7Cit9CisKK2Z1bmN0aW9u
IGZpbmlzaCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gV3JhcHBlcnMgZm9yIHByb2dyYW1tYXRpYyBjb25zdHJ1Y3Rpb24gb2Yg
SW1hZ2UgYW5kIEltYWdlRGF0YQorLy8KKworZnVuY3Rpb24gSW1hZ2VXcmFwcGVyKHdpZHRoLCBo
ZWlnaHQpCit7CisgICAgdGhpcy5wbmdCdWlsZGVyXyA9IG5ldyBQTkdsaWIod2lkdGgsIGhlaWdo
dCwgMjU2KTsKK30KKworSW1hZ2VXcmFwcGVyLnByb3RvdHlwZS5nZXRXaWR0aCA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiB0aGlzLnBuZ0J1aWxkZXJfLndpZHRoOworfTsKKworSW1hZ2VXcmFw
cGVyLnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5w
bmdCdWlsZGVyXy5oZWlnaHQ7Cit9OworCitJbWFnZVdyYXBwZXIucHJvdG90eXBlLnNldFBpeGVs
ID0gZnVuY3Rpb24oeCwgeSwgciwgZywgYiwgYSkgeworICAgIHRoaXMucG5nQnVpbGRlcl8uYnVm
ZmVyW3RoaXMucG5nQnVpbGRlcl8uaW5kZXgoeCwgeSldID0gdGhpcy5wbmdCdWlsZGVyXy5jb2xv
cihyLCBnLCBiLCBhKTsKK307CisKKy8vIEdlbmVyYXRlcyBkYXRhIGludG8gImRhdGEiIHByb3Bl
cnR5LCBwb3NzaWJseSBhc3luY2hyb25vdXNseS4KK0ltYWdlV3JhcHBlci5wcm90b3R5cGUuZ2Vu
ZXJhdGVEYXRhID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHRoYXQgPSB0aGlzOworICAgIHZhciBp
bWcgPSBuZXcgSW1hZ2UoKTsKKyAgICBpbWcub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoYXQuZGF0YSA9IGltZzsKKyAgICAgICAgbWF5YmVSdW5UZXN0cygpOworICAgIH07CisgICAg
aW1nLnNyYyA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsIiArIHRoaXMucG5nQnVpbGRlcl8uZ2V0
QmFzZTY0KCk7Cit9OworCitmdW5jdGlvbiBJbWFnZURhdGFXcmFwcGVyKHdpZHRoLCBoZWlnaHQp
Cit7CisgICAgaWYgKCFJbWFnZURhdGFXcmFwcGVyLnRlbXBDYW52YXMpIHsKKyAgICAgICAgSW1h
Z2VEYXRhV3JhcHBlci50ZW1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFz
Iik7CisgICAgfQorICAgIHRoaXMuaW1hZ2VEYXRhXyA9IEltYWdlRGF0YVdyYXBwZXIudGVtcENh
bnZhcy5nZXRDb250ZXh0KCIyZCIpLmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgaGVpZ2h0KTsKK30K
KworSW1hZ2VEYXRhV3JhcHBlci50ZW1wQ2FudmFzID0gbnVsbDsKKworSW1hZ2VEYXRhV3JhcHBl
ci5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5pbWFn
ZURhdGFfLndpZHRoOworfTsKKworSW1hZ2VEYXRhV3JhcHBlci5wcm90b3R5cGUuZ2V0SGVpZ2h0
ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW1hZ2VEYXRhXy5oZWlnaHQ7Cit9Owor
CitJbWFnZURhdGFXcmFwcGVyLnByb3RvdHlwZS5zZXRQaXhlbCA9IGZ1bmN0aW9uKHgsIHksIHIs
IGcsIGIsIGEpIHsKKyAgICB2YXIgaW5kZXggPSA0ICogKHRoaXMuaW1hZ2VEYXRhXy53aWR0aCAq
IHkgKyB4KTsKKyAgICB0aGlzLmltYWdlRGF0YV8uZGF0YVtpbmRleF0gPSByOworICAgIHRoaXMu
aW1hZ2VEYXRhXy5kYXRhW2luZGV4ICsgMV0gPSBnOworICAgIHRoaXMuaW1hZ2VEYXRhXy5kYXRh
W2luZGV4ICsgMl0gPSBiOworICAgIHRoaXMuaW1hZ2VEYXRhXy5kYXRhW2luZGV4ICsgM10gPSBh
OworfTsKKworSW1hZ2VEYXRhV3JhcHBlci5wcm90b3R5cGUuZ2VuZXJhdGVEYXRhID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5kYXRhID0gdGhpcy5pbWFnZURhdGFfOworICAgIG1heWJlUnVuVGVz
dHMoKTsKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29sb3IgcmFtcCBnZW5lcmF0aW9uIGZ1
bmN0aW9ucworLy8KKworZnVuY3Rpb24gZ2VuZXJhdGVPcGFxdWVHcmF5c2NhbGVSYW1wKHdyYXBw
ZXIpCit7CisgICAgdmFyIHdpZHRoID0gd3JhcHBlci5nZXRXaWR0aCgpOworICAgIHZhciBoZWln
aHQgPSB3cmFwcGVyLmdldEhlaWdodCgpOworICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7
ICsreCkgeworICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKDI1NS4wICogeCAvIHdpZHRo
KTsKKyAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkKKyAgICAgICAgICAg
IHdyYXBwZXIuc2V0UGl4ZWwoeCwgeSwgdmFsdWUsIHZhbHVlLCB2YWx1ZSwgMjU1KTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIGdlbmVyYXRlVHJhbnNsdWNlbnRHcmF5c2NhbGVSYW1wKHdyYXBwZXIp
Cit7CisgICAgdmFyIHdpZHRoID0gd3JhcHBlci5nZXRXaWR0aCgpOworICAgIHZhciBoZWlnaHQg
PSB3cmFwcGVyLmdldEhlaWdodCgpOworICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7ICsr
eCkgeworICAgICAgICB2YXIgdmFsdWUgPSBNYXRoLnJvdW5kKDI1NS4wICogeCAvIHdpZHRoKTsK
KyAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkKKyAgICAgICAgICAgIHdy
YXBwZXIuc2V0UGl4ZWwoeCwgeSwgdmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpOworICAgIH0K
K30KKworZnVuY3Rpb24gZ2VuZXJhdGVUcmFuc3BhcmVudEdyYXlzY2FsZVJhbXAod3JhcHBlcikK
K3sKKyAgICB2YXIgd2lkdGggPSB3cmFwcGVyLmdldFdpZHRoKCk7CisgICAgdmFyIGhlaWdodCA9
IHdyYXBwZXIuZ2V0SGVpZ2h0KCk7CisgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgKyt4
KSB7CisgICAgICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoMjU1LjAgKiB4IC8gd2lkdGgpOwor
ICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KQorICAgICAgICAgICAgd3Jh
cHBlci5zZXRQaXhlbCh4LCB5LCB2YWx1ZSwgdmFsdWUsIHZhbHVlLCAwKTsKKyAgICB9Cit9CisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gVmVyaWZpY2F0aW9uIHJvdXRpbmVzCisvLworCitmdW5jdGlv
biBhbGxDaGFubmVsc0luY3JlYXNlQnlOb01vcmVUaGFuKGFycmF5LCB0aHJlc2hvbGQsIG51bU9j
Y3VycmVuY2VzKSB7CisgICAgdmFyIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKHZhciBpID0gNDsg
aSA8IGFycmF5Lmxlbmd0aDsgaSArPSA0KQorICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7
IGorKykKKyAgICAgICAgICAgIGlmIChhcnJheVtpICsgal0gLSBhcnJheVtpICsgaiAtIDRdID4g
dGhyZXNob2xkKQorICAgICAgICAgICAgICAgICsrbnVtRm91bmQ7CisKKyAgICByZXR1cm4gbnVt
Rm91bmQgPCBudW1PY2N1cnJlbmNlczsKK30KKworZnVuY3Rpb24gYWxwaGFDaGFubmVsSW5jcmVh
c2VzQnlOb01vcmVUaGFuKGFycmF5LCB0aHJlc2hvbGQsIG51bU9jY3VycmVuY2VzKSB7CisgICAg
dmFyIG51bUZvdW5kID0gMDsKKyAgICBmb3IgKHZhciBpID0gNzsgaSA8IGFycmF5Lmxlbmd0aDsg
aSArPSA0KQorICAgICAgICBpZiAoYXJyYXlbaV0gLSBhcnJheVtpIC0gNF0gPiB0aHJlc2hvbGQp
CisgICAgICAgICAgICArK251bUZvdW5kOworCisgICAgcmV0dXJuIG51bUZvdW5kIDwgbnVtT2Nj
dXJyZW5jZXM7Cit9CisKK2Z1bmN0aW9uIGFsbENoYW5uZWxzSW5jcmVhc2VCeUF0TGVhc3QoYXJy
YXksIHRocmVzaG9sZCwgbnVtT2NjdXJyZW5jZXMpIHsKKyAgICB2YXIgbnVtRm91bmQgPSAwOwor
ICAgIGZvciAodmFyIGkgPSA0OyBpIDwgYXJyYXkubGVuZ3RoOyBpICs9IDQpCisgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgNDsgKytqKQorICAgICAgICAgICAgaWYgKGFycmF5W2kgKyBqXSAt
IGFycmF5W2kgKyBqIC0gNF0gPiB0aHJlc2hvbGQpCisgICAgICAgICAgICAgICAgKytudW1Gb3Vu
ZDsKKworICAgIHJldHVybiBudW1Gb3VuZCA+IG51bU9jY3VycmVuY2VzOworfQorCitmdW5jdGlv
biBjb2xvckNoYW5uZWxzQXJlWmVybyhhcnJheSwgdGhyZXNob2xkLCBudW1PY2N1cnJlbmNlcykg
eworICAgIHZhciBwYXNzZWQgPSB0cnVlOworICAgIHZhciBudW1GYWlsdXJlcyA9IDA7CisKKyAg
ICBmb3IgKHZhciBpID0gNDsgaSA8IGFycmF5Lmxlbmd0aDsgaSArPSA0KQorICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IDM7ICsraikKKyAgICAgICAgICAgIGlmIChhcnJheVtpICsgal0gIT0g
MCkgeworICAgICAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlm
ICgrK251bUZhaWx1cmVzIDwgNSkKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgYXJyYXlb
IiArIGkgKyAiXSBzaG91bGQgaGF2ZSBiZWVuIDAsIHdhcyAiICsgYXJyYXlbaV0pOworICAgICAg
ICAgICAgfQorCisgICAgcmV0dXJuIHBhc3NlZDsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9ImluaXQoKSI+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iMjU2cHgi
IGhlaWdodD0iMXB4Ij48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3BuZ2xpYi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvcG5nbGliLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3BuZ2xpYi5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDcgQEAKKy8qKgorKiBBIGhhbmR5IGNsYXNzIHRv
IGNhbGN1bGF0ZSBjb2xvciB2YWx1ZXMuCisqCisqIEB2ZXJzaW9uIDEuMAorKiBAYXV0aG9yIFJv
YmVydCBFaXNlbGUgPHJvYmVydEB4YXJnLm9yZz4KKyogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMp
IDIwMTAsIFJvYmVydCBFaXNlbGUKKyogQGxpbmsgaHR0cDovL3d3dy54YXJnLm9yZy8yMDEwLzAz
L2dlbmVyYXRlLWNsaWVudC1zaWRlLXBuZy1maWxlcy11c2luZy1qYXZhc2NyaXB0LworKiBAbGlj
ZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UucGhwIEdOVSBQ
dWJsaWMgTGljZW5zZQorKgorKi8KKworKGZ1bmN0aW9uKCkgeworCisJLy8gaGVscGVyIGZ1bmN0
aW9ucyBmb3IgdGhhdCBjdHgKKwlmdW5jdGlvbiB3cml0ZShidWZmZXIsIG9mZnMpIHsKKwkJZm9y
ICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCWZvciAodmFyIGog
PSAwOyBqIDwgYXJndW1lbnRzW2ldLmxlbmd0aDsgaisrKSB7CisJCQkJYnVmZmVyW29mZnMrK10g
PSBhcmd1bWVudHNbaV0uY2hhckF0KGopOworCQkJfQorCQl9CisJfQorCisJZnVuY3Rpb24gYnl0
ZTIodykgeworCQlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgodyA+PiA4KSAmIDI1NSwgdyAm
IDI1NSk7CisJfQorCisJZnVuY3Rpb24gYnl0ZTQodykgeworCQlyZXR1cm4gU3RyaW5nLmZyb21D
aGFyQ29kZSgodyA+PiAyNCkgJiAyNTUsICh3ID4+IDE2KSAmIDI1NSwgKHcgPj4gOCkgJiAyNTUs
IHcgJiAyNTUpOworCX0KKworCWZ1bmN0aW9uIGJ5dGUybHNiKHcpIHsKKwkJcmV0dXJuIFN0cmlu
Zy5mcm9tQ2hhckNvZGUodyAmIDI1NSwgKHcgPj4gOCkgJiAyNTUpOworCX0KKworCXdpbmRvdy5Q
TkdsaWIgPSBmdW5jdGlvbih3aWR0aCxoZWlnaHQsZGVwdGgpIHsKKworCQl0aGlzLndpZHRoICAg
PSB3aWR0aDsKKwkJdGhpcy5oZWlnaHQgID0gaGVpZ2h0OworCQl0aGlzLmRlcHRoICAgPSBkZXB0
aDsKKworCQkvLyBwaXhlbCBkYXRhIGFuZCByb3cgZmlsdGVyIGlkZW50aWZpZXIgc2l6ZQorCQl0
aGlzLnBpeF9zaXplID0gaGVpZ2h0ICogKHdpZHRoICsgMSk7CisKKwkJLy8gZGVmbGF0ZSBoZWFk
ZXIsIHBpeF9zaXplLCBibG9jayBoZWFkZXJzLCBhZGxlcjMyIGNoZWNrc3VtCisJCXRoaXMuZGF0
YV9zaXplID0gMiArIHRoaXMucGl4X3NpemUgKyA1ICogTWF0aC5mbG9vcigoMHhmZmZlICsgdGhp
cy5waXhfc2l6ZSkgLyAweGZmZmYpICsgNDsKKworCQkvLyBvZmZzZXRzIGFuZCBzaXplcyBvZiBQ
bmcgY2h1bmtzCisJCXRoaXMuaWhkcl9vZmZzID0gMDsJCQkJCQkJCQkvLyBJSERSIG9mZnNldCBh
bmQgc2l6ZQorCQl0aGlzLmloZHJfc2l6ZSA9IDQgKyA0ICsgMTMgKyA0OworCQl0aGlzLnBsdGVf
b2ZmcyA9IHRoaXMuaWhkcl9vZmZzICsgdGhpcy5paGRyX3NpemU7CS8vIFBMVEUgb2Zmc2V0IGFu
ZCBzaXplCisJCXRoaXMucGx0ZV9zaXplID0gNCArIDQgKyAzICogZGVwdGggKyA0OworCQl0aGlz
LnRybnNfb2ZmcyA9IHRoaXMucGx0ZV9vZmZzICsgdGhpcy5wbHRlX3NpemU7CS8vIHRSTlMgb2Zm
c2V0IGFuZCBzaXplCisJCXRoaXMudHJuc19zaXplID0gNCArIDQgKyBkZXB0aCArIDQ7CisJCXRo
aXMuaWRhdF9vZmZzID0gdGhpcy50cm5zX29mZnMgKyB0aGlzLnRybnNfc2l6ZTsJLy8gSURBVCBv
ZmZzZXQgYW5kIHNpemUKKwkJdGhpcy5pZGF0X3NpemUgPSA0ICsgNCArIHRoaXMuZGF0YV9zaXpl
ICsgNDsKKwkJdGhpcy5pZW5kX29mZnMgPSB0aGlzLmlkYXRfb2ZmcyArIHRoaXMuaWRhdF9zaXpl
OwkvLyBJRU5EIG9mZnNldCBhbmQgc2l6ZQorCQl0aGlzLmllbmRfc2l6ZSA9IDQgKyA0ICsgNDsK
KwkJdGhpcy5idWZmZXJfc2l6ZSAgPSB0aGlzLmllbmRfb2ZmcyArIHRoaXMuaWVuZF9zaXplOwkv
LyB0b3RhbCBQTkcgc2l6ZQorCisJCXRoaXMuYnVmZmVyICA9IG5ldyBBcnJheSgpOworCQl0aGlz
LnBhbGV0dGUgPSBuZXcgT2JqZWN0KCk7CisJCXRoaXMucGluZGV4ICA9IDA7CisKKwkJdmFyIF9j
cmMzMiA9IG5ldyBBcnJheSgpOworCisJCS8vIGluaXRpYWxpemUgYnVmZmVyIHdpdGggemVybyBi
eXRlcworCQlmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnVmZmVyX3NpemU7IGkrKykgeworCQkJ
dGhpcy5idWZmZXJbaV0gPSAiXHgwMCI7CisJCX0KKworCQkvLyBpbml0aWFsaXplIG5vbi16ZXJv
IGVsZW1lbnRzCisJCXdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLmloZHJfb2ZmcywgYnl0ZTQodGhp
cy5paGRyX3NpemUgLSAxMiksICdJSERSJywgYnl0ZTQod2lkdGgpLCBieXRlNChoZWlnaHQpLCAi
XHgwOFx4MDMiKTsKKwkJd3JpdGUodGhpcy5idWZmZXIsIHRoaXMucGx0ZV9vZmZzLCBieXRlNCh0
aGlzLnBsdGVfc2l6ZSAtIDEyKSwgJ1BMVEUnKTsKKwkJd3JpdGUodGhpcy5idWZmZXIsIHRoaXMu
dHJuc19vZmZzLCBieXRlNCh0aGlzLnRybnNfc2l6ZSAtIDEyKSwgJ3RSTlMnKTsKKwkJd3JpdGUo
dGhpcy5idWZmZXIsIHRoaXMuaWRhdF9vZmZzLCBieXRlNCh0aGlzLmlkYXRfc2l6ZSAtIDEyKSwg
J0lEQVQnKTsKKwkJd3JpdGUodGhpcy5idWZmZXIsIHRoaXMuaWVuZF9vZmZzLCBieXRlNCh0aGlz
LmllbmRfc2l6ZSAtIDEyKSwgJ0lFTkQnKTsKKworCQkvLyBpbml0aWFsaXplIGRlZmxhdGUgaGVh
ZGVyCisJCXZhciBoZWFkZXIgPSAoKDggKyAoNyA8PCA0KSkgPDwgOCkgfCAoMyA8PCA2KTsKKwkJ
aGVhZGVyKz0gMzEgLSAoaGVhZGVyICUgMzEpOworCisJCXdyaXRlKHRoaXMuYnVmZmVyLCB0aGlz
LmlkYXRfb2ZmcyArIDgsIGJ5dGUyKGhlYWRlcikpOworCisJCS8vIGluaXRpYWxpemUgZGVmbGF0
ZSBibG9jayBoZWFkZXJzCisJCWZvciAodmFyIGkgPSAwOyAoaSA8PCAxNikgLSAxIDwgdGhpcy5w
aXhfc2l6ZTsgaSsrKSB7CisJCQl2YXIgc2l6ZSwgYml0czsKKwkJCWlmIChpICsgMHhmZmZmIDwg
dGhpcy5waXhfc2l6ZSkgeworCQkJCXNpemUgPSAweGZmZmY7CisJCQkJYml0cyA9ICJceDAwIjsK
KwkJCX0gZWxzZSB7CisJCQkJc2l6ZSA9IHRoaXMucGl4X3NpemUgLSAoaSA8PCAxNikgLSBpOwor
CQkJCWJpdHMgPSAiXHgwMSI7CisJCQl9CisJCQl3cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy5pZGF0
X29mZnMgKyA4ICsgMiArIChpIDw8IDE2KSArIChpIDw8IDIpLCBiaXRzLCBieXRlMmxzYihzaXpl
KSwgYnl0ZTJsc2IofnNpemUpKTsKKwkJfQorCisJCS8qIENyZWF0ZSBjcmMzMiBsb29rdXAgdGFi
bGUgKi8KKwkJZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJdmFyIGMgPSBpOwor
CQkJZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCQlpZiAoYyAmIDEpIHsKKwkJCQkJ
YyA9IC0zMDY2NzQ5MTIgXiAoKGMgPj4gMSkgJiAweDdmZmZmZmZmKTsKKwkJCQl9IGVsc2Ugewor
CQkJCQljID0gKGMgPj4gMSkgJiAweDdmZmZmZmZmOworCQkJCX0KKwkJCX0KKwkJCV9jcmMzMltp
XSA9IGM7CisJCX0KKworCQkvLyBjb21wdXRlIHRoZSBpbmRleCBpbnRvIGEgcG5nIGZvciBhIGdp
dmVuIHBpeGVsCisJCXRoaXMuaW5kZXggPSBmdW5jdGlvbih4LHkpIHsKKwkJCXZhciBpID0geSAq
ICh0aGlzLndpZHRoICsgMSkgKyB4ICsgMTsKKwkJCXZhciBqID0gdGhpcy5pZGF0X29mZnMgKyA4
ICsgMiArIDUgKiBNYXRoLmZsb29yKChpIC8gMHhmZmZmKSArIDEpICsgaTsKKwkJCXJldHVybiBq
OworCQl9CisKKwkJLy8gY29udmVydCBhIGNvbG9yIGFuZCBidWlsZCB1cCB0aGUgcGFsZXR0ZQor
CQl0aGlzLmNvbG9yID0gZnVuY3Rpb24ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpIHsKKworCQkJ
YWxwaGEgPSBhbHBoYSA+PSAwID8gYWxwaGEgOiAyNTU7CisJCQl2YXIgY29sb3IgPSAoKCgoKGFs
cGhhIDw8IDgpIHwgcmVkKSA8PCA4KSB8IGdyZWVuKSA8PCA4KSB8IGJsdWU7CisKKwkJCWlmICh0
eXBlb2YgdGhpcy5wYWxldHRlW2NvbG9yXSA9PSAidW5kZWZpbmVkIikgeworCQkJCWlmICh0aGlz
LnBpbmRleCA9PSB0aGlzLmRlcHRoKSByZXR1cm4gIlx4MDAiOworCisJCQkJdmFyIG5keCA9IHRo
aXMucGx0ZV9vZmZzICsgOCArIDMgKiB0aGlzLnBpbmRleDsKKworCQkJCXRoaXMuYnVmZmVyW25k
eCArIDBdID0gU3RyaW5nLmZyb21DaGFyQ29kZShyZWQpOworCQkJCXRoaXMuYnVmZmVyW25keCAr
IDFdID0gU3RyaW5nLmZyb21DaGFyQ29kZShncmVlbik7CisJCQkJdGhpcy5idWZmZXJbbmR4ICsg
Ml0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJsdWUpOworCQkJCXRoaXMuYnVmZmVyW3RoaXMudHJu
c19vZmZzKzgrdGhpcy5waW5kZXhdID0gU3RyaW5nLmZyb21DaGFyQ29kZShhbHBoYSk7CisKKwkJ
CQl0aGlzLnBhbGV0dGVbY29sb3JdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnBpbmRleCsr
KTsKKwkJCX0KKwkJCXJldHVybiB0aGlzLnBhbGV0dGVbY29sb3JdOworCQl9CisKKwkJLy8gb3V0
cHV0IGEgUE5HIHN0cmluZywgQmFzZTY0IGVuY29kZWQKKwkJdGhpcy5nZXRCYXNlNjQgPSBmdW5j
dGlvbigpIHsKKworCQkJdmFyIHMgPSB0aGlzLmdldER1bXAoKTsKKworCQkJdmFyIGNoID0gIkFC
Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2
Nzg5Ky89IjsKKwkJCXZhciBjMSwgYzIsIGMzLCBlMSwgZTIsIGUzLCBlNDsKKwkJCXZhciBsID0g
cy5sZW5ndGg7CisJCQl2YXIgaSA9IDA7CisJCQl2YXIgciA9ICIiOworCisJCQlkbyB7CisJCQkJ
YzEgPSBzLmNoYXJDb2RlQXQoaSk7CisJCQkJZTEgPSBjMSA+PiAyOworCQkJCWMyID0gcy5jaGFy
Q29kZUF0KGkrMSk7CisJCQkJZTIgPSAoKGMxICYgMykgPDwgNCkgfCAoYzIgPj4gNCk7CisJCQkJ
YzMgPSBzLmNoYXJDb2RlQXQoaSsyKTsKKwkJCQlpZiAobCA8IGkrMikgeyBlMyA9IDY0OyB9IGVs
c2UgeyBlMyA9ICgoYzIgJiAweGYpIDw8IDIpIHwgKGMzID4+IDYpOyB9CisJCQkJaWYgKGwgPCBp
KzMpIHsgZTQgPSA2NDsgfSBlbHNlIHsgZTQgPSBjMyAmIDB4M2Y7IH0KKwkJCQlyKz0gY2guY2hh
ckF0KGUxKSArIGNoLmNoYXJBdChlMikgKyBjaC5jaGFyQXQoZTMpICsgY2guY2hhckF0KGU0KTsK
KwkJCX0gd2hpbGUgKChpKz0gMykgPCBsKTsKKwkJCXJldHVybiByOworCQl9CisKKwkJLy8gb3V0
cHV0IGEgUE5HIHN0cmluZworCQl0aGlzLmdldER1bXAgPSBmdW5jdGlvbigpIHsKKworCQkJLy8g
Y29tcHV0ZSBhZGxlcjMyIG9mIG91dHB1dCBwaXhlbHMgKyByb3cgZmlsdGVyIGJ5dGVzCisJCQl2
YXIgQkFTRSA9IDY1NTIxOyAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLwor
CQkJdmFyIE5NQVggPSA1NTUyOyAgLyogTk1BWCBpcyB0aGUgbGFyZ2VzdCBuIHN1Y2ggdGhhdCAy
NTVuKG4rMSkvMiArIChuKzEpKEJBU0UtMSkgPD0gMl4zMi0xICovCisJCQl2YXIgczEgPSAxOwor
CQkJdmFyIHMyID0gMDsKKwkJCXZhciBuID0gTk1BWDsKKworCQkJZm9yICh2YXIgeSA9IDA7IHkg
PCB0aGlzLmhlaWdodDsgeSsrKSB7CisJCQkJZm9yICh2YXIgeCA9IC0xOyB4IDwgdGhpcy53aWR0
aDsgeCsrKSB7CisJCQkJCXMxKz0gdGhpcy5idWZmZXJbdGhpcy5pbmRleCh4LCB5KV0uY2hhckNv
ZGVBdCgwKTsKKwkJCQkJczIrPSBzMTsKKwkJCQkJaWYgKChuLT0gMSkgPT0gMCkgeworCQkJCQkJ
czElPSBCQVNFOworCQkJCQkJczIlPSBCQVNFOworCQkJCQkJbiA9IE5NQVg7CisJCQkJCX0KKwkJ
CQl9CisJCQl9CisJCQlzMSU9IEJBU0U7CisJCQlzMiU9IEJBU0U7CisJCQl3cml0ZSh0aGlzLmJ1
ZmZlciwgdGhpcy5pZGF0X29mZnMgKyB0aGlzLmlkYXRfc2l6ZSAtIDgsIGJ5dGU0KChzMiA8PCAx
NikgfCBzMSkpOworCisJCQkvLyBjb21wdXRlIGNyYzMyIG9mIHRoZSBQTkcgY2h1bmtzCisJCQlm
dW5jdGlvbiBjcmMzMihwbmcsIG9mZnMsIHNpemUpIHsKKwkJCQl2YXIgY3JjID0gLTE7CisJCQkJ
Zm9yICh2YXIgaSA9IDQ7IGkgPCBzaXplLTQ7IGkgKz0gMSkgeworCQkJCQljcmMgPSBfY3JjMzJb
KGNyYyBeIHBuZ1tvZmZzK2ldLmNoYXJDb2RlQXQoMCkpICYgMHhmZl0gXiAoKGNyYyA+PiA4KSAm
IDB4MDBmZmZmZmYpOworCQkJCX0KKwkJCQl3cml0ZShwbmcsIG9mZnMrc2l6ZS00LCBieXRlNChj
cmMgXiAtMSkpOworCQkJfQorCisJCQljcmMzMih0aGlzLmJ1ZmZlciwgdGhpcy5paGRyX29mZnMs
IHRoaXMuaWhkcl9zaXplKTsKKwkJCWNyYzMyKHRoaXMuYnVmZmVyLCB0aGlzLnBsdGVfb2Zmcywg
dGhpcy5wbHRlX3NpemUpOworCQkJY3JjMzIodGhpcy5idWZmZXIsIHRoaXMudHJuc19vZmZzLCB0
aGlzLnRybnNfc2l6ZSk7CisJCQljcmMzMih0aGlzLmJ1ZmZlciwgdGhpcy5pZGF0X29mZnMsIHRo
aXMuaWRhdF9zaXplKTsKKwkJCWNyYzMyKHRoaXMuYnVmZmVyLCB0aGlzLmllbmRfb2ZmcywgdGhp
cy5pZW5kX3NpemUpOworCisJCQkvLyBjb252ZXJ0IFBORyB0byBzdHJpbmcKKwkJCXJldHVybiAi
XDIxMVBOR1xyXG5cMDMyXG4iK3RoaXMuYnVmZmVyLmpvaW4oJycpOworCQl9CisJfQorCit9KSgp
Owo=
</data>
<flag name="review"
          id="46303"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="46304"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59571</attachid>
            <date>2010-06-23 16:08:37 -0700</date>
            <delta_ts>2010-06-23 16:14:54 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>texture-formats.patch</filename>
            <type>text/plain</type>
            <size>93868</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcxMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTIgQEAKKzIwMTAtMDYtMjMgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBmb3JtYXQgY29udmVyc2lvbnMgaW4gdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2Uy
RCB0YWtpbmcgSFRNTCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MDMxOQorCisgICAgICAgIEdlbmVyYWxpemVkIGNvZGUgc3VwcG9ydGluZyBw
cmVtdWx0aXBsaWNhdGlvbiBvZiBhbHBoYSBhbmQKKyAgICAgICAgdmVydGljYWwgZmxpcCB0byBw
YWNrIHRleHR1cmUgZGF0YSBpbnRvIHJlcXVlc3RlZCBmb3JtYXQgYW5kIHR5cGUuCisgICAgICAg
IEhhbmRsZWQgaW5jb21pbmcgaW1hZ2UgZGF0YSBvZiB2YXJpb3VzIGZvcm1hdHMsIFJHQkEgYW5k
IEJHUkEgaW4KKyAgICAgICAgcGFydGljdWxhciwgYm90aCB0byByZWR1Y2UgdGhlIG51bWJlciBv
ZiB0ZW1wb3JhcnkgY29waWVzIGR1cmluZworICAgICAgICB0ZXh0dXJlIHVwbG9hZCBhbmQgdG8g
c3VwcG9ydCBwcmVtdWx0aXBseWluZyBhbHBoYSBmb3IgdGhlCisgICAgICAgIHRleEltYWdlMkQg
YW5kIHRleFN1YkltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBBcnJheUJ1ZmZlclZpZXcKKyAg
ICAgICAgaW4gYSBzdWJzZXF1ZW50IGJ1Zy4gQWRkZWQgdGVzdCBjYXNlIGV4ZXJjaXNpbmcgYWxs
IGNvbWJpbmF0aW9ucworICAgICAgICBvZiBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbnMsIHByZW11
bHRpcGxpY2F0aW9uIG9mIGFscGhhLCBhbmQKKyAgICAgICAgSW1hZ2UvSW1hZ2VEYXRhIHVwbG9h
ZC4gKEluY29ycG9yYXRlZCBwbmdsaWIuanMgdW5kZXIKKyAgICAgICAgZmFzdC9jYW52YXMvd2Vi
Z2wvcmVzb3VyY2VzLyB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIEltYWdlIGVsZW1lbnRzCisgICAg
ICAgIHByb2dyYW1tYXRpY2FsbHkuKSBUZXN0ZWQgaW4gU2FmYXJpIG9uIE1hYyBPUyBYIGFuZCBp
biBDaHJvbWl1bSBvbgorICAgICAgICBNYWMgT1MgWCwgV2luZG93cyBhbmQgTGludXguCisKKyAg
ICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10
eXBlLmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZmxpcFZlcnRpY2FsbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6ZG9VbnBhY2tpbmdBbmRQYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmRvUGFja2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVscyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjopOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bmFycm93SW50
ZXJuYWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNE
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YSk6CisKIDIwMTAtMDYtMjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA2MTcxMikK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc0NSwzMyArMTc0NSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpwb2x5Z29uT2Zmc2UKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGxv
bmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpCiB7CiAgICAg
Ly8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KLSAgICB1bnNpZ25lZCBsb25nIGNvbXBvbmVu
dHNQZXJQaXhlbCA9IDA7Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpBTFBIQToKLSAgICAgICAgY29tcG9uZW50c1BlclBpeGVsID0gMTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgICAgICBjb21w
b25lbnRzUGVyUGl4ZWwgPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOgotICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgPSA0OwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIHVuc2lnbmVkIGxvbmcgYnl0ZXNQZXJDb21wb25lbnQgPSAwOwotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAg
ICAgIGJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAg
IGNvbXBvbmVudHNQZXJQaXhlbCA9IDE7Ci0gICAgICAgIGJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKKyAgICB1
bnNpZ25lZCBsb25nIGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAg
aWYgKCFtX2NvbnRleHQtPmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5
cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NDcsMTcgKzE5MjIsMTggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwg
SW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgLy8gRklYTUU6IHBheSBhdHRlbnRpb24gdG8gdGhlIHVzZXIncyBzdXBwbGllZCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0IGFuZCB0eXBlCi0gICAgLy8gRklYTUU6IHBheSBhdHRlbnRpb24g
dG8gVU5QQUNLX1JPV19XSURUSAotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKICAgICBlYyA9IDA7
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJ
bWFnZURhdGEoaW1hZ2UsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhLCAmZm9ybWF0LCAm
aW50ZXJuYWxmb3JtYXQpKSB7CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEo
aW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChtX3VucGFja0Fs
aWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKICAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwg
MCwKLSAgICAgICAgICAgICAgICAgICBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBkYXRhLmRhdGEoKSwgZWMpOworICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgZGF0YS5kYXRhKCksIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25l
ZCBpbnRlcm5hbGZvcm1hdCwKQEAgLTE5NzIsMTggKzE5NDgsMTggQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJu
YWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9Q
QVJBTShmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAvLyBGSVhNRTogcGF5
IGF0dGVudGlvbiB0byB0aGUgdXNlcidzIHN1cHBsaWVkIGludGVybmFsZm9ybWF0LCBmb3JtYXQg
YW5kIHR5cGUKICAgICBlYyA9IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJh
Y3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwKLSAgICAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIGRhdGEuZGF0YSgpLCBlYyk7CisgICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAs
CisgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSwgZWMpOworICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVu
dCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LApAQCAtMjA0
Nyw3ICsyMDIzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQog
ICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiQ2FsbGluZyBvYnNvbGV0ZSB0ZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBJbWFnZURhdGEgcGl4ZWxzLCBHTGJvb2xlYW4gZmxp
cFksIEdMYm9vbGVhbiBwcmVtdWx0aXBseUFscGhhKSIpOwogICAgIGVjID0gMDsKICAgICBWZWN0
b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShw
aXhlbHMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgIGlmICghbV9jb250
ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwg
ZGF0YSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMjA2
LDE4ICsyMTgyLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBm
b3JtYXQsIHVuc2lnbmVkIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAv
LyBGSVhNRTogcGF5IGF0dGVudGlvbiB0byB0aGUgdXNlcidzIHN1cHBsaWVkIGZvcm1hdCBhbmQg
dHlwZQotICAgIC8vIEZJWE1FOiBwYXkgYXR0ZW50aW9uIHRvIFVOUEFDS19ST1dfV0lEVEgKICAg
ICBlYyA9IDA7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgdW5zaWduZWQgaW50IGlu
dGVybmFsZm9ybWF0OwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGltYWdl
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZGF0YSwgJmZvcm1hdCwgJmludGVybmFsZm9ybWF0
KSkgeworICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBmb3JtYXQs
IHR5cGUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewogICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUsIGRhdGEuZGF0YSgpLCBlYyk7CisgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0
eXBlLCBkYXRhLmRhdGEoKSwgZWMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4
b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LApAQCAtMjIzMSwxNyArMjIwMywxNCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNp
Z25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURh
dGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGZvcm1h
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIC8vIEZJWE1FOiBwYXkgYXR0ZW50aW9u
IHRvIHRoZSB1c2VyJ3Mgc3VwcGxpZWQgZm9ybWF0IGFuZCB0eXBlCiAgICAgZWMgPSAwOwogICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VE
YXRhKHBpeGVscywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRh
KSkgeworICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0
LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHRleFN1YkltYWdl
MkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwg
cGl4ZWxzLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGRhdGEuZGF0YSgpLCBl
Yyk7CisgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSwgZWMp
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zm
c2V0LApAQCAtMjMwNSw3ICsyMjc0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMgogICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiQ2FsbGluZyBvYnNvbGV0ZSB0
ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBJbWFnZURhdGEgcGl4ZWxzLCBHTGJvb2xlYW4gZmxpcFksIEdMYm9vbGVh
biBwcmVtdWx0aXBseUFscGhhKSIpOwogICAgIGVjID0gMDsKICAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZsaXBZ
LCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0
SW1hZ2VEYXRhKHBpeGVscywgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMzg5LDYgKzMzNTgsMzUg
QEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9m
IGZvcm1hdCBhbmQgdHlwZSBpcyBzdXBwb3J0ZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjoKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUK
KyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzRfNF80XzQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMzM5Nyw2ICszMzk1LDEyIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCiB7CisgICAgLy8gV2UgYWJzb2x1
dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uCisg
ICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4g
d2lsbCBwcm9kdWNlCisgICAgLy8gdGVtcG9yYXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBjb21iaW5h
dGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYg
KGlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTM0MzgsNyAr
MzQ0Miw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiB2YWxpZGF0ZVRleEZ1bmNGb3Jt
YXRBbmRUeXBlKGZvcm1hdCwgdHlwZSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKHVuc2lnbmVkIGxvbmcgbW9kZSkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCShyZXZpc2lvbiA2MTcxMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwzMSArMzUsNzUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0
QW5kVHlwZVBhcmFtZXRlcnModW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nKiBjb21wb25lbnRzUGVyUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogYnl0ZXNQZXJD
b21wb25lbnQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFBIQToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICAgICAg
KmNvbXBvbmVudHNQZXJQaXhlbCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhl
bCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoK
KyAgICAgICAgKmNvbXBvbmVudHNQZXJQaXhlbCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgICpjb21wb25lbnRzUGVyUGl4ZWwg
PSA0OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU6CisgICAgICAgICpieXRlc1BlckNvbXBvbmVudCA9IHNpemVvZih1bnNp
Z25lZCBjaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF81XzVfNV8xOgorICAgICAgICAqY29tcG9uZW50c1BlclBpeGVsID0gMTsKKyAgICAgICAg
KmJ5dGVzUGVyQ29tcG9uZW50ID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJ
bWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGZsaXBZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgaW1hZ2VEYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBpbnRlcm5hbEZv
cm1hdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+JiBkYXRhKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBBbHBoYU9wIGFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7Ci0gICAgYm9vbCBoYXNBbHBo
YUNoYW5uZWwgPSB0cnVlOwotICAgIGlmICghZ2V0SW1hZ2VEYXRhKGltYWdlLCBpbWFnZURhdGEs
IHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgJmhhc0FscGhhQ2hhbm5l
bCwgJmFscGhhT3AsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwcm9jZXNz
SW1hZ2VEYXRhKGltYWdlRGF0YS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICBpbWFnZS0+
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5oZWlnaHQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgIGZsaXBZLAotICAgICAgICAgICAgICAgICAgICAgYWxwaGFPcCk7Ci0gICAg
Ly8gRm9yIEdMRVMyIHRleCBmdW5jdGlvbnMsIGludGVybmFsZm9ybWF0IGhhcyB0byBtYXRjaCBm
b3JtYXQuCi0gICAgKmludGVybmFsRm9ybWF0ID0gKmZvcm1hdDsKKyAgICBpZiAoIWdldEltYWdl
RGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhLCBkYXRhKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChmbGlwWSkgeworICAgICAgICB1bnNpZ25lZCBsb25n
IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgICAgIGlmICghY29t
cHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudHNQZXJQaXhlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gVGhlIGltYWdlIGRhdGEg
aXMgdGlnaHRseSBwYWNrZWQsIGFuZCB3ZSB1cGxvYWQgaXQgYXMgc3VjaC4KKyAgICAgICAgdW5z
aWduZWQgaW50IHVucGFja0FsaWdubWVudCA9IDE7CisgICAgICAgIGZsaXBWZXJ0aWNhbGx5KGRh
dGEuZGF0YSgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50KTsKKyAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2VE
YXRhKiBpbWFnZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZsaXBZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKQEAgLTcwLDgzICsxMTQsNDgw
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEKICAgICBpbnQgaGVp
Z2h0ID0gaW1hZ2VEYXRhLT5oZWlnaHQoKTsKICAgICBpbnQgZGF0YUJ5dGVzID0gd2lkdGggKiBo
ZWlnaHQgKiA0OwogICAgIGRhdGEucmVzaXplKGRhdGFCeXRlcyk7Ci0gICAgdWludDhfdCogZHN0
ID0gZGF0YS5kYXRhKCk7Ci0gICAgdWludDhfdCogc3JjID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRh
dGEoKS0+ZGF0YSgpOwotICAgIG1lbWNweShkc3QsIHNyYywgZGF0YUJ5dGVzKTsKLSAgICBwcm9j
ZXNzSW1hZ2VEYXRhKGRzdCwKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAg
ICAgICAgICAgICAgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgZmxpcFksCi0gICAgICAg
ICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhID8ga0FscGhhRG9QcmVtdWx0aXBseSA6IGtB
bHBoYURvTm90aGluZyk7CisgICAgaWYgKCFwYWNrUGl4ZWxzKGltYWdlRGF0YS0+ZGF0YSgpLT5k
YXRhKCktPmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAga1NvdXJjZUZvcm1hdFJHQkE4LAor
ICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIHR5cGUsCisg
ICAgICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGEgPyBrQWxwaGFEb1ByZW11bHRpcGx5
IDoga0FscGhhRG9Ob3RoaW5nLAorICAgICAgICAgICAgICAgICAgICBkYXRhLmRhdGEoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZmxpcFkpIHsKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OworICAgICAgICBpZiAo
IWNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4ZWwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc1BlckNvbXBv
bmVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFRoZSBpbWFnZSBk
YXRhIGlzIHRpZ2h0bHkgcGFja2VkLCBhbmQgd2UgdXBsb2FkIGl0IGFzIHN1Y2guCisgICAgICAg
IHVuc2lnbmVkIGludCB1bnBhY2tBbGlnbm1lbnQgPSAxOworICAgICAgICBmbGlwVmVydGljYWxs
eShkYXRhLmRhdGEoKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29t
cG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgIHVucGFja0FsaWdubWVudCk7CisgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpwcm9jZXNzSW1hZ2VEYXRhKHVpbnQ4X3QqIGltYWdlRGF0YSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwVmVy
dGljYWxseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxwaGFP
cCBhbHBoYU9wKQotewotICAgIHN3aXRjaCAoYWxwaGFPcCkgewotICAgIGNhc2Uga0FscGhhRG9Q
cmVtdWx0aXBseToKLSAgICAgICAgcHJlbXVsdGlwbHlBbHBoYShpbWFnZURhdGEsIHdpZHRoICog
aGVpZ2h0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6Ci0g
ICAgICAgIHVubXVsdGlwbHlBbHBoYShpbWFnZURhdGEsIHdpZHRoICogaGVpZ2h0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Cit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpmbGlwVmVydGljYWxseSh2b2lkKiBpbWFnZURhdGEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyUGl4ZWws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdW5w
YWNrQWxpZ25tZW50KQoreworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0
dXJuOworICAgIHVuc2lnbmVkIGludCB2YWxpZFJvd0J5dGVzID0gd2lkdGggKiBieXRlc1BlclBp
eGVsOworICAgIHVuc2lnbmVkIGludCB0b3RhbFJvd0J5dGVzID0gdmFsaWRSb3dCeXRlczsKKyAg
ICB1bnNpZ25lZCBpbnQgcmVtYWluZGVyID0gdmFsaWRSb3dCeXRlcyAlIHVucGFja0FsaWdubWVu
dDsKKyAgICBpZiAocmVtYWluZGVyKQorICAgICAgICB0b3RhbFJvd0J5dGVzICs9IHJlbWFpbmRl
cjsKKyAgICB1aW50OF90KiB0ZW1wUm93ID0gbmV3IHVpbnQ4X3RbdmFsaWRSb3dCeXRlc107Cisg
ICAgdWludDhfdCogZGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihpbWFnZURhdGEpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoZWlnaHQgLyAyOyBpKyspIHsKKyAgICAgICAgdWlu
dDhfdCogbG93Um93ID0gZGF0YSArICh0b3RhbFJvd0J5dGVzICogaSk7CisgICAgICAgIHVpbnQ4
X3QqIGhpZ2hSb3cgPSBkYXRhICsgKHRvdGFsUm93Qnl0ZXMgKiAoaGVpZ2h0IC0gaSAtIDEpKTsK
KyAgICAgICAgbWVtY3B5KHRlbXBSb3csIGxvd1JvdywgdmFsaWRSb3dCeXRlcyk7CisgICAgICAg
IG1lbWNweShsb3dSb3csIGhpZ2hSb3csIHZhbGlkUm93Qnl0ZXMpOworICAgICAgICBtZW1jcHko
aGlnaFJvdywgdGVtcFJvdywgdmFsaWRSb3dCeXRlcyk7CiAgICAgfQorICAgIGRlbGV0ZVtdIHRl
bXBSb3c7Cit9CisKKy8vIFRoZXNlIGZ1bmN0aW9ucyBjYW4gbm90IGJlIHN0YXRpYywgb3IgZ2Nj
IHdpbGwgbm90IGFsbG93IHRoZW0gdG8gYmUKKy8vIHVzZWQgYXMgdGVtcGxhdGUgcGFyYW1ldGVy
cy4gVXNlIGFuIGFub255bW91cyBuYW1lc3BhY2UgdG8gcHJldmVudAorLy8gdGhlIG5lZWQgdG8g
ZGVjbGFyZSBwcm90b3R5cGVzIGZvciB0aGVtLgorbmFtZXNwYWNlIHsKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBQaXhlbCB1bnBhY2tpbmcgcm91dGluZXMuCisKK3ZvaWQgdW5wYWNrUkdCOFRvUkdC
QTgoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBk
ZXN0aW5hdGlvblswXSA9IHNvdXJjZVswXTsKKyAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsx
XTsKKyAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZVsyXTsKKyAgICBkZXN0aW5hdGlvblszXSA9
IDB4RkY7Cit9CisKK3ZvaWQgdW5wYWNrQkdSQThUb1JHQkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJj
ZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2Vb
Ml07CisgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VbMV07CisgICAgZGVzdGluYXRpb25bMl0g
PSBzb3VyY2VbMF07CisgICAgZGVzdGluYXRpb25bM10gPSBzb3VyY2VbM107Cit9CisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorLy8gUGl4ZWwgcGFja2luZyByb3V0aW5lcy4KKy8vCisKK3ZvaWQgcGFja1JH
QkE4VG9BOChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQorewor
ICAgIGRlc3RpbmF0aW9uWzBdID0gc291cmNlWzNdOworfQorCit2b2lkIHBhY2tSR0JBOFRvUjgo
Y29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBkZXN0
aW5hdGlvblswXSA9IHNvdXJjZVswXTsKK30KKwordm9pZCBwYWNrUkdCQThUb1I4UHJlbXVsdGlw
bHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBm
bG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKKyAgICB1aW50OF90IHNvdXJj
ZVIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBdKSAq
IHNjYWxlRmFjdG9yKTsKKyAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7Cit9CisKKy8vIEZJ
WE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KK3ZvaWQgcGFj
a1JHQkE4VG9SOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90KiBkZXN0
aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8g
c291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3VyY2VSID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2FsZUZhY3Rv
cik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOworfQorCit2b2lkIHBhY2tSR0JBOFRv
UkE4KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAg
ZGVzdGluYXRpb25bMF0gPSBzb3VyY2VbMF07CisgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2Vb
M107Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9SQThQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBz
b3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0g
c291cmNlWzNdIC8gMjU1LjBmOworICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0b3IpOworICAg
IGRlc3RpbmF0aW9uWzBdID0gc291cmNlUjsKKyAgICBkZXN0aW5hdGlvblsxXSA9IHNvdXJjZVsz
XTsKK30KKworLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBsb3NzeSBhbmQgbXVzdCBiZSByZW1v
dmVkLgordm9pZCBwYWNrUkdCQThUb1JBOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNl
LCB1aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYg
LyAoc291cmNlWzNdID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBz
b3VyY2VSID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsw
XSkgKiBzY2FsZUZhY3Rvcik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOworICAgIGRl
c3RpbmF0aW9uWzFdID0gc291cmNlWzNdOworfQorCit2b2lkIHBhY2tSR0JBOFRvUkdCOChjb25z
dCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3RpbmF0
aW9uWzBdID0gc291cmNlWzBdOworICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlWzFdOworICAg
IGRlc3RpbmF0aW9uWzJdID0gc291cmNlWzJdOworfQorCit2b2lkIHBhY2tSR0JBOFRvUkdCOFBy
ZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7
CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CisgICAgdWludDhf
dCBzb3VyY2VSID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJj
ZVswXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7Cisg
ICAgdWludDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHNvdXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3Vy
Y2VSOworICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlRzsKKyAgICBkZXN0aW5hdGlvblsyXSA9
IHNvdXJjZUI7Cit9CiAKLSAgICBpZiAoZmxpcFZlcnRpY2FsbHkgJiYgd2lkdGggJiYgaGVpZ2h0
KSB7Ci0gICAgICAgIGludCByb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICAgICAgdWludDhfdCog
dGVtcFJvdyA9IG5ldyB1aW50OF90W3Jvd0J5dGVzXTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGhlaWdodCAvIDI7IGkrKykgewotICAgICAgICAgICAgdWludDhfdCogbG93Um93
ID0gaW1hZ2VEYXRhICsgKHJvd0J5dGVzICogaSk7Ci0gICAgICAgICAgICB1aW50OF90KiBoaWdo
Um93ID0gaW1hZ2VEYXRhICsgKHJvd0J5dGVzICogKGhlaWdodCAtIGkgLSAxKSk7Ci0gICAgICAg
ICAgICBtZW1jcHkodGVtcFJvdywgbG93Um93LCByb3dCeXRlcyk7Ci0gICAgICAgICAgICBtZW1j
cHkobG93Um93LCBoaWdoUm93LCByb3dCeXRlcyk7Ci0gICAgICAgICAgICBtZW1jcHkoaGlnaFJv
dywgdGVtcFJvdywgcm93Qnl0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZVtdIHRlbXBS
b3c7CisvLyBGSVhNRTogdGhpcyByb3V0aW5lIGlzIGxvc3N5IGFuZCBtdXN0IGJlIHJlbW92ZWQu
Cit2b2lkIHBhY2tSR0JBOFRvUkdCOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1
aW50OF90KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAo
c291cmNlWzNdID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3Vy
Y2VSID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkg
KiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWlu
dDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNv
dXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOwor
ICAgIGRlc3RpbmF0aW9uWzFdID0gc291cmNlRzsKKyAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJj
ZUI7Cit9CisKKy8vIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gdGhlIHNvdXJjZSBmb3JtYXQgaXMg
ZGlmZmVyZW50IHRoYW4ga1NvdXJjZUZvcm1hdFJHQkE4Lgordm9pZCBwYWNrUkdCQThUb1JHQkE4
KGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZGVz
dGluYXRpb25bMF0gPSBzb3VyY2VbMF07CisgICAgZGVzdGluYXRpb25bMV0gPSBzb3VyY2VbMV07
CisgICAgZGVzdGluYXRpb25bMl0gPSBzb3VyY2VbMl07CisgICAgZGVzdGluYXRpb25bM10gPSBz
b3VyY2VbM107Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9SR0JBOFByZW11bHRpcGx5KGNvbnN0IHVp
bnQ4X3QqIHNvdXJjZSwgdWludDhfdCogZGVzdGluYXRpb24pCit7CisgICAgZmxvYXQgc2NhbGVG
YWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CisgICAgdWludDhfdCBzb3VyY2VSID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2FsZUZhY3Rv
cik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VC
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsyXSkgKiBz
Y2FsZUZhY3Rvcik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOworICAgIGRlc3RpbmF0
aW9uWzFdID0gc291cmNlRzsKKyAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZUI7Cit9CisKKy8v
IEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KK3ZvaWQg
cGFja1JHQkE4VG9SR0JBOFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50OF90
KiBkZXN0aW5hdGlvbikKK3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNl
WzNdID8gc291cmNlWzNdIC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3VyY2VSID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2Fs
ZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBz
b3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsy
XSkgKiBzY2FsZUZhY3Rvcik7CisgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOworICAgIGRl
c3RpbmF0aW9uWzFdID0gc291cmNlRzsKKyAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZUI7Cisg
ICAgZGVzdGluYXRpb25bM10gPSBzb3VyY2VbM107Cit9CisKK3ZvaWQgcGFja1JHQkE4VG9VbnNp
Z25lZFNob3J0NDQ0NChjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlv
bikKK3sKKyAgICAqZGVzdGluYXRpb24gPSAoKChzb3VyY2VbMF0gJiAweEYwKSA8PCA4KQorICAg
ICAgICAgICAgICAgICAgICB8ICgoc291cmNlWzFdICYgMHhGMCkgPDwgNCkKKyAgICAgICAgICAg
ICAgICAgICAgfCAoc291cmNlWzJdICYgMHhGMCkKKyAgICAgICAgICAgICAgICAgICAgfCAoc291
cmNlWzNdID4+IDQpKTsKK30KKwordm9pZCBwYWNrUkdCQThUb1Vuc2lnbmVkU2hvcnQ0NDQ0UHJl
bXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24pCit7
CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10gLyAyNTUuMGY7CisgICAgdWludDhf
dCBzb3VyY2VSID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJj
ZVswXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7Cisg
ICAgdWludDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHNvdXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgKmRlc3RpbmF0aW9uID0gKCgoc291
cmNlUiAmIDB4RjApIDw8IDgpCisgICAgICAgICAgICAgICAgICAgIHwgKChzb3VyY2VHICYgMHhG
MCkgPDwgNCkKKyAgICAgICAgICAgICAgICAgICAgfCAoc291cmNlQiAmIDB4RjApCisgICAgICAg
ICAgICAgICAgICAgIHwgKHNvdXJjZVszXSA+PiA0KSk7Cit9CisKKy8vIEZJWE1FOiB0aGlzIHJv
dXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KK3ZvaWQgcGFja1JHQkE4VG9VbnNp
Z25lZFNob3J0NDQ0NFVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCog
ZGVzdGluYXRpb24pCit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVsz
XSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOworICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVG
YWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRp
Y19jYXN0PGZsb2F0Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291
cmNlQiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMl0p
ICogc2NhbGVGYWN0b3IpOworICAgICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVIgJiAweEYwKSA8
PCA4KQorICAgICAgICAgICAgICAgICAgICB8ICgoc291cmNlRyAmIDB4RjApIDw8IDQpCisgICAg
ICAgICAgICAgICAgICAgIHwgKHNvdXJjZUIgJiAweEYwKQorICAgICAgICAgICAgICAgICAgICB8
IChzb3VyY2VbM10gPj4gNCkpOworfQorCit2b2lkIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU1
NTEoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24pCit7CisgICAg
KmRlc3RpbmF0aW9uID0gKCgoc291cmNlWzBdICYgMHhGOCkgPDwgOCkKKyAgICAgICAgICAgICAg
ICAgICAgfCAoKHNvdXJjZVsxXSAmIDB4RjgpIDw8IDMpCisgICAgICAgICAgICAgICAgICAgIHwg
KChzb3VyY2VbMl0gJiAweEY4KSA+PiAyKQorICAgICAgICAgICAgICAgICAgICB8IChzb3VyY2Vb
M10gPj4gNykpOworfQorCit2b2lkIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTFQcmVtdWx0
aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbikKK3sKKyAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSAvIDI1NS4wZjsKKyAgICB1aW50OF90IHNv
dXJjZVIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzBd
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICB1
aW50OF90IHNvdXJjZUIgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4o
c291cmNlWzJdKSAqIHNjYWxlRmFjdG9yKTsKKyAgICAqZGVzdGluYXRpb24gPSAoKChzb3VyY2VS
ICYgMHhGOCkgPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgfCAoKHNvdXJjZUcgJiAweEY4KSA8
PCAzKQorICAgICAgICAgICAgICAgICAgICB8ICgoc291cmNlQiAmIDB4RjgpID4+IDIpCisgICAg
ICAgICAgICAgICAgICAgIHwgKHNvdXJjZVszXSA+PiA3KSk7Cit9CisKKy8vIEZJWE1FOiB0aGlz
IHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KK3ZvaWQgcGFja1JHQkE4VG9V
bnNpZ25lZFNob3J0NTU1MVVubXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZf
dCogZGVzdGluYXRpb24pCit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJj
ZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOworICAgIHVpbnQ4X3Qgc291cmNlUiA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2Nh
bGVGYWN0b3IpOworICAgIHVpbnQ4X3Qgc291cmNlRyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0
YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMV0pICogc2NhbGVGYWN0b3IpOworICAgIHVpbnQ4X3Qg
c291cmNlQiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2Vb
Ml0pICogc2NhbGVGYWN0b3IpOworICAgICpkZXN0aW5hdGlvbiA9ICgoKHNvdXJjZVIgJiAweEY4
KSA8PCA4KQorICAgICAgICAgICAgICAgICAgICB8ICgoc291cmNlRyAmIDB4RjgpIDw8IDMpCisg
ICAgICAgICAgICAgICAgICAgIHwgKChzb3VyY2VCICYgMHhGOCkgPj4gMikKKyAgICAgICAgICAg
ICAgICAgICAgfCAoc291cmNlWzNdID4+IDcpKTsKK30KKwordm9pZCBwYWNrUkdCQThUb1Vuc2ln
bmVkU2hvcnQ1NjUoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50MTZfdCogZGVzdGluYXRpb24p
Cit7CisgICAgKmRlc3RpbmF0aW9uID0gKCgoc291cmNlWzBdICYgMHhGOCkgPDwgOCkKKyAgICAg
ICAgICAgICAgICAgICAgfCAoKHNvdXJjZVsxXSAmIDB4RkMpIDw8IDMpCisgICAgICAgICAgICAg
ICAgICAgIHwgKChzb3VyY2VbMl0gJiAweEY4KSA+PiAzKSk7Cit9CisKK3ZvaWQgcGFja1JHQkE4
VG9VbnNpZ25lZFNob3J0NTY1UHJlbXVsdGlwbHkoY29uc3QgdWludDhfdCogc291cmNlLCB1aW50
MTZfdCogZGVzdGluYXRpb24pCit7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBzb3VyY2VbM10g
LyAyNTUuMGY7CisgICAgdWludDhfdCBzb3VyY2VSID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBz
b3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsx
XSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CisgICAg
KmRlc3RpbmF0aW9uID0gKCgoc291cmNlUiAmIDB4RjgpIDw8IDgpCisgICAgICAgICAgICAgICAg
ICAgIHwgKChzb3VyY2VHICYgMHhGQykgPDwgMykKKyAgICAgICAgICAgICAgICAgICAgfCAoKHNv
dXJjZUIgJiAweEY4KSA+PiAzKSk7Cit9CisKKy8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9z
c3kgYW5kIG11c3QgYmUgcmVtb3ZlZC4KK3ZvaWQgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NTY1
VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQxNl90KiBkZXN0aW5hdGlvbikK
K3sKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IDEuMGYgLyAoc291cmNlWzNdID8gc291cmNlWzNd
IC8gMjU1LjBmIDogMS4wZik7CisgICAgdWludDhfdCBzb3VyY2VSID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVswXSkgKiBzY2FsZUZhY3Rvcik7CisgICAg
dWludDhfdCBzb3VyY2VHID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHNvdXJjZVsxXSkgKiBzY2FsZUZhY3Rvcik7CisgICAgdWludDhfdCBzb3VyY2VCID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsyXSkgKiBzY2FsZUZhY3Rv
cik7CisgICAgKmRlc3RpbmF0aW9uID0gKCgoc291cmNlUiAmIDB4RjgpIDw8IDgpCisgICAgICAg
ICAgICAgICAgICAgIHwgKChzb3VyY2VHICYgMHhGQykgPDwgMykKKyAgICAgICAgICAgICAgICAg
ICAgfCAoKHNvdXJjZUIgJiAweEY4KSA+PiAzKSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCisvLyBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgdW5wYWNraW5nIGlzIG5lY2Vzc2FyeTsg
aS5lLiwgdGhlIHNvdXJjZSBkYXRhCisvLyBpcyBub3QgaW4gUkdCQTggZm9ybWF0LgordGVtcGxh
dGU8dHlwZW5hbWUgU291cmNlVHlwZSwgdHlwZW5hbWUgRGVzdFR5cGUsCisgICAgICAgICB2b2lk
IHVucGFja2luZ0Z1bmMoY29uc3QgU291cmNlVHlwZSosIHVpbnQ4X3QqKSwKKyAgICAgICAgIHZv
aWQgcGFja2luZ0Z1bmMoY29uc3QgdWludDhfdCosIERlc3RUeXBlKik+CitzdGF0aWMgdm9pZCBk
b1VucGFja2luZ0FuZFBhY2tpbmcoY29uc3QgU291cmNlVHlwZSogc291cmNlRGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtRWxlbWVudHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1l
bnRzUGVyUGl4ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdFR5cGUq
IGRlc3RpbmF0aW9uRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZGVzdGluYXRpb25FbGVtZW50c1BlclBpeGVsKQoreworICAgIGNvbnN0IFNvdXJj
ZVR5cGUqIGVuZFBvaW50ZXIgPSBzb3VyY2VEYXRhICsgbnVtRWxlbWVudHM7CisgICAgdWludDhf
dCB0ZW1wb3JhcnlSR0JBRGF0YVs0XTsKKyAgICB3aGlsZSAoc291cmNlRGF0YSA8IGVuZFBvaW50
ZXIpIHsKKyAgICAgICAgdW5wYWNraW5nRnVuYyhzb3VyY2VEYXRhLCB0ZW1wb3JhcnlSR0JBRGF0
YSk7CisgICAgICAgIHBhY2tpbmdGdW5jKHRlbXBvcmFyeVJHQkFEYXRhLCBkZXN0aW5hdGlvbkRh
dGEpOworICAgICAgICBzb3VyY2VEYXRhICs9IHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWw7CisgICAg
ICAgIGRlc3RpbmF0aW9uRGF0YSArPSBkZXN0aW5hdGlvbkVsZW1lbnRzUGVyUGl4ZWw7CiAgICAg
fQogfQogCi0vLyBQcmVtdWx0aXBseSBhbHBoYSBpbnRvIGNvbG9yIGNoYW5uZWxzLgotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cHJlbXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2JhRGF0
YSwgaW50IG51bVBpeGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBpeGVsczsg
aisrKSB7Ci0gICAgICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0KmorMF0gLyAyNTUuMGY7Ci0gICAg
ICAgIGZsb2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGIg
PSByZ2JhRGF0YVs0KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGEgPSByZ2JhRGF0YVs0
KmorM10gLyAyNTUuMGY7Ci0gICAgICAgIHJnYmFEYXRhWzQqaiswXSA9ICh1bnNpZ25lZCBjaGFy
KSAociAqIGEgKiAyNTUuMGYpOwotICAgICAgICByZ2JhRGF0YVs0KmorMV0gPSAodW5zaWduZWQg
Y2hhcikgKGcgKiBhICogMjU1LjBmKTsKLSAgICAgICAgcmdiYURhdGFbNCpqKzJdID0gKHVuc2ln
bmVkIGNoYXIpIChiICogYSAqIDI1NS4wZik7CisvLyBUaGlzIGhhbmRsZXMgYWxsIGNvbnZlcnNp
b25zIHdpdGggYSBmYXN0ZXIgcGF0aCBmb3IgUkdCQTggc291cmNlIGRhdGEuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBTb3VyY2VUeXBlLCB0eXBlbmFtZSBEZXN0VHlwZSwgdm9pZCBwYWNraW5nRnVuYyhj
b25zdCBTb3VyY2VUeXBlKiwgRGVzdFR5cGUqKT4KK3N0YXRpYyB2b2lkIGRvUGFja2luZyhjb25z
dCBTb3VyY2VUeXBlKiBzb3VyY2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bUVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLAorICAgICAgICAgICAgICAg
ICAgICAgIERlc3RUeXBlKiBkZXN0aW5hdGlvbkRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCkKK3sKKyAgICBzd2l0Y2gg
KHNvdXJjZURhdGFGb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjprU291cmNl
Rm9ybWF0UkdCQTg6IHsKKyAgICAgICAgY29uc3QgU291cmNlVHlwZSogZW5kUG9pbnRlciA9IHNv
dXJjZURhdGEgKyBudW1FbGVtZW50czsKKyAgICAgICAgd2hpbGUgKHNvdXJjZURhdGEgPCBlbmRQ
b2ludGVyKSB7CisgICAgICAgICAgICBwYWNraW5nRnVuYyhzb3VyY2VEYXRhLCBkZXN0aW5hdGlv
bkRhdGEpOworICAgICAgICAgICAgc291cmNlRGF0YSArPSBzb3VyY2VFbGVtZW50c1BlclBpeGVs
OworICAgICAgICAgICAgZGVzdGluYXRpb25EYXRhICs9IGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQ
aXhlbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6a1NvdXJjZUZvcm1hdFJHQjg6IHsKKyAgICAgICAgZG9VbnBhY2tpbmdBbmRQ
YWNraW5nPFNvdXJjZVR5cGUsIERlc3RUeXBlLCB1bnBhY2tSR0I4VG9SR0JBOCwgcGFja2luZ0Z1
bmM+KHNvdXJjZURhdGEsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0
aW5hdGlvbkRhdGEsIGRlc3RpbmF0aW9uRWxlbWVudHNQZXJQaXhlbCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjprU291cmNlRm9ybWF0QkdSQTg6
IHsKKyAgICAgICAgZG9VbnBhY2tpbmdBbmRQYWNraW5nPFNvdXJjZVR5cGUsIERlc3RUeXBlLCB1
bnBhY2tCR1JBOFRvUkdCQTgsIHBhY2tpbmdGdW5jPihzb3VyY2VEYXRhLCBudW1FbGVtZW50cywg
c291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb25EYXRhLCBkZXN0aW5hdGlvbkVsZW1l
bnRzUGVyUGl4ZWwpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogfQogCi0vLyBSZW1v
dmUgcHJlbXVsdGlwbGllZCBhbHBoYSBmcm9tIGNvbG9yIGNoYW5uZWxzLgotLy8gRklYTUU6IHRo
aXMgaXMgbG9zc3kuIE11c3QgcmV0cmlldmUgb3JpZ2luYWwgdmFsdWVzIGZyb20gSFRNTEltYWdl
RWxlbWVudC4KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVubXVsdGlwbHlBbHBoYSh1bnNpZ25l
ZCBjaGFyKiByZ2JhRGF0YSwgaW50IG51bVBpeGVscykKLXsKLSAgICBmb3IgKGludCBqID0gMDsg
aiA8IG51bVBpeGVsczsgaisrKSB7Ci0gICAgICAgIGZsb2F0IHIgPSByZ2JhRGF0YVs0KmorMF0g
LyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0IGcgPSByZ2JhRGF0YVs0KmorMV0gLyAyNTUuMGY7Ci0g
ICAgICAgIGZsb2F0IGIgPSByZ2JhRGF0YVs0KmorMl0gLyAyNTUuMGY7Ci0gICAgICAgIGZsb2F0
IGEgPSByZ2JhRGF0YVs0KmorM10gLyAyNTUuMGY7Ci0gICAgICAgIGlmIChhID4gMC4wZikgewot
ICAgICAgICAgICAgciAvPSBhOwotICAgICAgICAgICAgZyAvPSBhOwotICAgICAgICAgICAgYiAv
PSBhOwotICAgICAgICAgICAgciA9IChyID4gMS4wZikgPyAxLjBmIDogcjsKLSAgICAgICAgICAg
IGcgPSAoZyA+IDEuMGYpID8gMS4wZiA6IGc7Ci0gICAgICAgICAgICBiID0gKGIgPiAxLjBmKSA/
IDEuMGYgOiBiOwotICAgICAgICAgICAgcmdiYURhdGFbNCpqKzBdID0gKHVuc2lnbmVkIGNoYXIp
IChyICogMjU1LjBmKTsKLSAgICAgICAgICAgIHJnYmFEYXRhWzQqaisxXSA9ICh1bnNpZ25lZCBj
aGFyKSAoZyAqIDI1NS4wZik7Ci0gICAgICAgICAgICByZ2JhRGF0YVs0KmorMl0gPSAodW5zaWdu
ZWQgY2hhcikgKGIgKiAyNTUuMGYpOworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cGFja1BpeGVs
cyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
aW5hdGlvbkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGRlc3RpbmF0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQWxwaGFPcCBhbHBoYU9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkKiBkZXN0aW5hdGlvbkRhdGEpCit7CisgICAgdW5zaWduZWQgaW50IHNvdXJjZUVsZW1lbnRz
UGVyUGl4ZWwgPSA0OworICAgIHVuc2lnbmVkIGludCBudW1FbGVtZW50cyA9IHdpZHRoICogaGVp
Z2h0ICogc291cmNlRWxlbWVudHNQZXJQaXhlbDsKKyAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uVHlw
ZSkgeworICAgIGNhc2UgVU5TSUdORURfQllURTogeworICAgICAgICB1aW50OF90KiBkZXN0aW5h
dGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkZXN0aW5hdGlvbkRhdGEpOworICAgICAgICBp
ZiAoc291cmNlRGF0YUZvcm1hdCA9PSBrU291cmNlRm9ybWF0UkdCQTggJiYgZGVzdGluYXRpb25G
b3JtYXQgPT0gUkdCQSAmJiBhbHBoYU9wID09IGtBbHBoYURvTm90aGluZykgeworICAgICAgICAg
ICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkuCisgICAgICAgICAgICBtZW1jcHkoZGVzdGlu
YXRpb25EYXRhLCBzb3VyY2VEYXRhLCBudW1FbGVtZW50cyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGRlc3RpbmF0aW9uRm9ybWF0KSB7CisgICAgICAg
IGNhc2UgUkdCOgorICAgICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgICAgICBj
YXNlIGtBbHBoYURvTm90aGluZzoKKyAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwg
dWludDhfdCwgcGFja1JHQkE4VG9SR0I4Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBu
dW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDMpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrQWxwaGFEb1ByZW11bHRpcGx5
OgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdCQThU
b1JHQjhQcmVtdWx0aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVu
dHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAzKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga0FscGhhRG9Vbm11bHRpcGx5OgorICAgICAg
ICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdCQThUb1JHQjhVbm11
bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNl
RWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDMpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkdCQToK
KyAgICAgICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAgICAgICAgICAgY2FzZSBrQWxwaGFE
b05vdGhpbmc6CisgICAgICAgICAgICAgICAgQVNTRVJUKHNvdXJjZURhdGFGb3JtYXQgIT0ga1Nv
dXJjZUZvcm1hdFJHQkE4KTsgLy8gSGFuZGxlZCBhYm92ZSB3aXRoIGZhc3QgY2FzZS4KKyAgICAg
ICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDhfdCwgcGFja1JHQkE4VG9SR0JBOD4o
c291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRz
UGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2Uga0FscGhhRG9QcmVtdWx0aXBseToKKyAgICAgICAgICAgICAgICBkb1BhY2tp
bmc8dWludDhfdCwgdWludDhfdCwgcGFja1JHQkE4VG9SR0JBOFByZW11bHRpcGx5Pihzb3VyY2VE
YXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhl
bCwgZGVzdGluYXRpb24sIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6CisgICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4
X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvUkdCQThVbm11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3Vy
Y2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGlu
YXRpb24sIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFMUEhBOgorICAgICAgICAgICAgLy8gRnJv
bSB0aGUgZGVza3RvcCBPcGVuR0wgY29udmVyc2lvbiBydWxlcyAoT3BlbkdMIDIuMQorICAgICAg
ICAgICAgLy8gc3BlY2lmaWNhdGlvbiwgVGFibGUgMy4xNSksIHRoZSBhbHBoYSBjaGFubmVsIGlz
IGNob3NlbgorICAgICAgICAgICAgLy8gZnJvbSB0aGUgUkdCQSBkYXRhLgorICAgICAgICAgICAg
ZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvQTg+KHNvdXJjZURhdGEsIHNv
dXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0
aW5hdGlvbiwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMVU1JTkFOQ0U6
CisgICAgICAgICAgICAvLyBGcm9tIHRoZSBkZXNrdG9wIE9wZW5HTCBjb252ZXJzaW9uIHJ1bGVz
IChPcGVuR0wgMi4xCisgICAgICAgICAgICAvLyBzcGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE1KSwg
dGhlIHJlZCBjaGFubmVsIGlzIGNob3NlbgorICAgICAgICAgICAgLy8gZnJvbSB0aGUgUkdCQSBk
YXRhLgorICAgICAgICAgICAgc3dpdGNoIChhbHBoYU9wKSB7CisgICAgICAgICAgICBjYXNlIGtB
bHBoYURvTm90aGluZzoKKyAgICAgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDhf
dCwgcGFja1JHQkE4VG9SOD4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVu
dHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga0FscGhhRG9QcmVtdWx0aXBseToKKyAgICAg
ICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDhfdCwgcGFja1JHQkE4VG9SOFByZW11
bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNl
RWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6CisgICAgICAgICAgICAgICAg
ZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvUjhVbm11bHRpcGx5Pihzb3Vy
Y2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQ
aXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFVNSU5BTkNFX0FMUEhBOgor
ICAgICAgICAgICAgLy8gRnJvbSB0aGUgZGVza3RvcCBPcGVuR0wgY29udmVyc2lvbiBydWxlcyAo
T3BlbkdMIDIuMQorICAgICAgICAgICAgLy8gc3BlY2lmaWNhdGlvbiwgVGFibGUgMy4xNSksIHRo
ZSByZWQgYW5kIGFscGhhIGNoYW5uZWxzCisgICAgICAgICAgICAvLyBhcmUgY2hvc2VuIGZyb20g
dGhlIFJHQkEgZGF0YS4KKyAgICAgICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAgICAgICAg
ICAgY2FzZSBrQWxwaGFEb05vdGhpbmc6CisgICAgICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4
X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvUkE4Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0
LCBudW1FbGVtZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrQWxwaGFEb1ByZW11bHRp
cGx5OgorICAgICAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50OF90LCBwYWNrUkdC
QThUb1JBOFByZW11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVt
ZW50cywgc291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6CisgICAg
ICAgICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQ4X3QsIHBhY2tSR0JBOFRvUkE4VW5t
dWx0aXBseT4oc291cmNlRGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJj
ZUVsZW1lbnRzUGVyUGl4ZWwsIGRlc3RpbmF0aW9uLCAyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6IHsKKyAgICAg
ICAgdWludDE2X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDE2X3QqPihkZXN0aW5h
dGlvbkRhdGEpOworICAgICAgICBzd2l0Y2ggKGFscGhhT3ApIHsKKyAgICAgICAgY2FzZSBrQWxw
aGFEb05vdGhpbmc6CisgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDE2X3QsIHBh
Y2tSR0JBOFRvVW5zaWduZWRTaG9ydDQ0NDQ+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQs
IG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQWxwaGFEb1ByZW11bHRpcGx5OgorICAg
ICAgICAgICAgZG9QYWNraW5nPHVpbnQ4X3QsIHVpbnQxNl90LCBwYWNrUkdCQThUb1Vuc2lnbmVk
U2hvcnQ0NDQ0UHJlbXVsdGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVs
ZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6CisgICAgICAgICAg
ICBkb1BhY2tpbmc8dWludDhfdCwgdWludDE2X3QsIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDQ0
NDRVbm11bHRpcGx5Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywg
c291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgVU5TSUdORURf
U0hPUlRfNV81XzVfMTogeworICAgICAgICB1aW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0aWNf
Y2FzdDx1aW50MTZfdCo+KGRlc3RpbmF0aW9uRGF0YSk7CisgICAgICAgIHN3aXRjaCAoYWxwaGFP
cCkgeworICAgICAgICBjYXNlIGtBbHBoYURvTm90aGluZzoKKyAgICAgICAgICAgIGRvUGFja2lu
Zzx1aW50OF90LCB1aW50MTZfdCwgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NTU1MT4oc291cmNl
RGF0YSwgc291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4
ZWwsIGRlc3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtB
bHBoYURvUHJlbXVsdGlwbHk6CisgICAgICAgICAgICBkb1BhY2tpbmc8dWludDhfdCwgdWludDE2
X3QsIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU1NTFQcmVtdWx0aXBseT4oc291cmNlRGF0YSwg
c291cmNlRGF0YUZvcm1hdCwgbnVtRWxlbWVudHMsIHNvdXJjZUVsZW1lbnRzUGVyUGl4ZWwsIGRl
c3RpbmF0aW9uLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtBbHBoYURv
VW5tdWx0aXBseToKKyAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50MTZfdCwgcGFj
a1JHQkE4VG9VbnNpZ25lZFNob3J0NTU1MVVubXVsdGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURh
dGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlv
biwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBVTlNJR05FRF9TSE9SVF81XzZfNTogeworICAgICAgICB1aW50MTZfdCog
ZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50MTZfdCo+KGRlc3RpbmF0aW9uRGF0YSk7Cisg
ICAgICAgIHN3aXRjaCAoYWxwaGFPcCkgeworICAgICAgICBjYXNlIGtBbHBoYURvTm90aGluZzoK
KyAgICAgICAgICAgIGRvUGFja2luZzx1aW50OF90LCB1aW50MTZfdCwgcGFja1JHQkE4VG9VbnNp
Z25lZFNob3J0NTY1Pihzb3VyY2VEYXRhLCBzb3VyY2VEYXRhRm9ybWF0LCBudW1FbGVtZW50cywg
c291cmNlRWxlbWVudHNQZXJQaXhlbCwgZGVzdGluYXRpb24sIDEpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2Uga0FscGhhRG9QcmVtdWx0aXBseToKKyAgICAgICAgICAgIGRvUGFj
a2luZzx1aW50OF90LCB1aW50MTZfdCwgcGFja1JHQkE4VG9VbnNpZ25lZFNob3J0NTY1UHJlbXVs
dGlwbHk+KHNvdXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VF
bGVtZW50c1BlclBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBrQWxwaGFEb1VubXVsdGlwbHk6CisgICAgICAgICAgICBkb1BhY2tpbmc8dWlu
dDhfdCwgdWludDE2X3QsIHBhY2tSR0JBOFRvVW5zaWduZWRTaG9ydDU2NVVubXVsdGlwbHk+KHNv
dXJjZURhdGEsIHNvdXJjZURhdGFGb3JtYXQsIG51bUVsZW1lbnRzLCBzb3VyY2VFbGVtZW50c1Bl
clBpeGVsLCBkZXN0aW5hdGlvbiwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2MTcxMikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDQ5ICs0
NjQsNTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBsaWtlIEdMX0ZMT0FULCBH
TF9JTlQsIGV0Yy4KICAgICAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKIAorICAgICAg
ICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKKwogICAgICAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgLy8gSGVscGVycyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcuCisgICAgICAgIC8v
IEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nIGFuZCBwaXhlbCByZWFkYmFjay4KICAgICAg
ICAgLy8KIAotICAgICAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIElt
YWdlIGludG8gdGhlIHBhc3NlZAotICAgICAgICAvLyBWZWN0b3IsIG9iZXlpbmcgdGhlIGZsaXBZ
IGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLgotICAgICAgICAvLyBSZXR1cm5zIHRoZSBhcHBs
aWNhYmxlIE9wZW5HTCBmb3JtYXQgYW5kIGludGVybmFsRm9ybWF0IGZvcgotICAgICAgICAvLyB0
aGUgc3Vic2VxdWVudCBnbFRleEltYWdlMkQgb3IgZ2xUZXhTdWJJbWFnZTJEIGNhbGwuCi0gICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCisgICAgICAgIC8vIENvbXB1dGVzIHRo
ZSBjb21wb25lbnRzIHBlciBwaXhlbCBhbmQgYnl0ZXMgcGVyIGNvbXBvbmVudAorICAgICAgICAv
LyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4gUmV0dXJucyBmYWxz
ZSBpZgorICAgICAgICAvLyBlaXRoZXIgd2FzIGFuIGludmFsaWQgZW51bS4KKyAgICAgICAgYm9v
bCBjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnModW5zaWduZWQgaW50IGZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcqIGNvbXBvbmVudHNQZXJQaXhlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogYnl0ZXNQZXJDb21wb25lbnQpOworCisgICAg
ICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2UgaW50byB0aGUg
cGFzc2VkIFZlY3RvciwKKyAgICAgICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRp
bmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKKyAgICAgICAgLy8gYW5kIG9iZXlpbmcg
dGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLiBSZXR1cm5zIHRydWUKKyAgICAg
ICAgLy8gdXBvbiBzdWNjZXNzLgogICAgICAgICBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2Uq
IGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgaW1hZ2VEYXRhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50KiBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQqIGludGVybmFsRm9ybWF0KTsKLQotICAgICAgICAvLyBFeHRy
YWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlRGF0YSBpbnRvIHRoZSBwYXNzZWQK
LSAgICAgICAgLy8gVmVjdG9yLCBvYmV5aW5nIHRoZSBmbGlwWSBhbmQgcHJlbXVsdGlwbHlBbHBo
YSBmbGFncy4KLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICAgICAg
Ly8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZURhdGEgaW50byB0aGUg
cGFzc2VkIFZlY3RvciwKKyAgICAgICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRp
bmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKKyAgICAgICAgLy8gYW5kIG9iZXlpbmcg
dGhlIGZsaXBZIGFuZCBwcmVtdWx0aXBseUFscGhhIGZsYWdzLiBSZXR1cm5zIHRydWUKKyAgICAg
ICAgLy8gdXBvbiBzdWNjZXNzLgogICAgICAgICBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2VE
YXRhKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogCi0gICAgICAgIC8vIFByb2Nlc3NlcyB0
aGUgZ2l2ZW4gaW1hZ2UgZGF0YSBpbiBwcmVwYXJhdGlvbiBmb3IgdXBsb2FkaW5nCi0gICAgICAg
IC8vIHZpYSB0ZXhJbWFnZTJEIG9yIHRleFN1YkltYWdlMkQuIFRoZSBpbnB1dCBkYXRhIG11c3Qg
YmUgaW4KLSAgICAgICAgLy8gNC1jb21wb25lbnQgZm9ybWF0IHdpdGggdGhlIGFscGhhIGNoYW5u
ZWwgbGFzdCAoaS5lLiwgUkdCQQotICAgICAgICAvLyBvciBCR1JBKSwgdGlnaHRseSBwYWNrZWQs
IHdpdGggbm8gc3BhY2UgYmV0d2VlbiByb3dzLgotCi0gICAgICAgIGVudW0gQWxwaGFPcCB7Ci0g
ICAgICAgICAgICBrQWxwaGFEb05vdGhpbmcgPSAwLAotICAgICAgICAgICAga0FscGhhRG9QcmVt
dWx0aXBseSA9IDEsCi0gICAgICAgICAgICBrQWxwaGFEb1VubXVsdGlwbHkgPSAyCisgICAgICAg
IC8vIEZsaXBzIHRoZSBnaXZlbiBpbWFnZSBkYXRhIHZlcnRpY2FsbHksIGluLXBsYWNlLgorICAg
ICAgICB2b2lkIGZsaXBWZXJ0aWNhbGx5KHZvaWQqIGltYWdlRGF0YSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgYnl0ZXNQZXJQaXhlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50KTsKKworICAgICAgICAvLyBBdHRlbXB0IHRvIGVu
dW1lcmF0ZSBhbGwgcG9zc2libGUgbmF0aXZlIGltYWdlIGZvcm1hdHMgdG8KKyAgICAgICAgLy8g
cmVkdWNlIHRoZSBhbW91bnQgb2YgdGVtcG9yYXJ5IGFsbG9jYXRpb25zIGR1cmluZyB0ZXh0dXJl
CisgICAgICAgIC8vIHVwbG9hZGluZy4gVGhpcyBlbnVtIG11c3QgYmUgcHVibGljIGJlY2F1c2Ug
aXQgaXMgYWNjZXNzZWQKKyAgICAgICAgLy8gYnkgbm9uLW1lbWJlciBmdW5jdGlvbnMuCisgICAg
ICAgIGVudW0gU291cmNlRGF0YUZvcm1hdCB7CisgICAgICAgICAgICBrU291cmNlRm9ybWF0UkdC
QTgsCisgICAgICAgICAgICBrU291cmNlRm9ybWF0UkdCOCwKKyAgICAgICAgICAgIGtTb3VyY2VG
b3JtYXRCR1JBOAogICAgICAgICB9OwogCi0gICAgICAgIHZvaWQgcHJvY2Vzc0ltYWdlRGF0YSh1
aW50OF90KiBpbWFnZURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFZlcnRpY2FsbHksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBbHBoYU9wIGFscGhhT3ApOwotCi0gICAgICAgIGJv
b2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OwotCiAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
ICAgICAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgogICAgICAgICAvLwpAQCAtNzE1LDMz
ICs3MjUsNDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6ICAgICAgICAKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdyk7CiAKLSAgICAgICAgLy8gSGVscGVycyBmb3IgdGV4dHVyZSB1cGxvYWRpbmcuCi0g
ICAgICAgIHZvaWQgcHJlbXVsdGlwbHlBbHBoYSh1bnNpZ25lZCBjaGFyKiByZ2JhRGF0YSwgaW50
IG51bVBpeGVscyk7Ci0gICAgICAgIHZvaWQgdW5tdWx0aXBseUFscGhhKHVpbnQ4X3QqIGltYWdl
RGF0YSwgaW50IG51bVBpeGVscyk7Ci0KICAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHBy
b3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAgICAgIC8vCi0gICAg
ICAgIC8vIEdldHMgdGhlIGRhdGEgZm9yIHRoZSBnaXZlbiBJbWFnZSBpbnRvIG91dHB1dFZlY3Rv
ciwKLSAgICAgICAgLy8gd2l0aG91dCBkb2luZyBhbnkgcHJvY2Vzc2luZyBvZiB0aGUgZGF0YSAo
dmVydGljYWwgZmxpcCBvcgotICAgICAgICAvLyBvdGhlcndpc2UpLgotICAgICAgICAvLwotICAg
ICAgICAvLyBwcmVtdWx0aXBseUFscGhhIGluZGljYXRlcyB3aGV0aGVyIHRoZSB1c2VyIHdpbGwg
ZXZlbnR1YWxseQotICAgICAgICAvLyB3YW50IHRoZSBhbHBoYSBjaGFubmVsIG11bHRpcGxpZWQg
aW50byB0aGUgY29sb3IgY2hhbm5lbHMuCisgICAgICAgIC8vIEdldHMgdGhlIGRhdGEgZm9yIHRo
ZSBnaXZlbiBJbWFnZSBpbnRvIG91dHB1dFZlY3RvciBpbiB0aGUKKyAgICAgICAgLy8gZm9ybWF0
IHNwZWNpZmllZCBieSB0aGUgKE9wZW5HTC1zdHlsZSkgZm9ybWF0IGFuZCB0eXBlCisgICAgICAg
IC8vIGFyZ3VtZW50cy4gRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBvdXRwdXRWZWN0b3IgY29u
dGFpbnMKKyAgICAgICAgLy8gdWludDhfdCwgaWYgdGhlIGZvcm1hdCBhbmQgdHlwZSBzcGVjaWZ5
IHBhY2tlZCBwaXhlbHMsIHRoZW4KKyAgICAgICAgLy8gaXQgd2lsbCBlc3NlbnRpYWxseSBjb250
YWluIHVpbnQxNl90IGFmdGVyIHRoZSBleHRyYWN0aW9uCisgICAgICAgIC8vIHByb2Nlc3MuCiAg
ICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBvdXQgcGFyYW1ldGVyIGhhc0FscGhhQ2hhbm5lbCBp
bmRpY2F0ZXMgd2hldGhlciB0aGUKLSAgICAgICAgLy8gaW1hZ2UgYWN0dWFsbHkgaGFkIGFuIGFs
cGhhIGNoYW5uZWwuCisgICAgICAgIC8vIElmIHByZW11bHRpcGx5QWxwaGEgaXMgdHJ1ZSwgdGhl
IGFscGhhIGNoYW5uZWwsIGlmIGFueSwKKyAgICAgICAgLy8gd2lsbCBiZSBtdWx0aXBsaWVkIGlu
dG8gdGhlIGNvbG9yIGNoYW5uZWxzIGR1cmluZyB0aGUKKyAgICAgICAgLy8gZXh0cmFjdGlvbiBw
cm9jZXNzLiBUaGlzIHByZW11bHRpcGxpY2F0aW9uIG9jY3VycyBiZWZvcmUKKyAgICAgICAgLy8g
YW55IHBhY2tpbmcgb2YgcGl4ZWwgZGF0YS4KICAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIG91
dCBwYXJhbWV0ZXIgbmVlZGVkQWxwaGFPcCBzaG91bGQgYmUgcGFzc2VkIHRvIGEKLSAgICAgICAg
Ly8gc3Vic2VxdWVudCBjYWxsIG9mIHByb2Nlc3NJbWFnZURhdGEuCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIFRoZSBvdXQgcGFyYW1ldGVyIGZvcm1hdCBzaG91bGQgYmUgcGFzc2VkIHRvIHN1YnNl
cXVlbnQKLSAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1h
Z2UyRC4KKyAgICAgICAgLy8gTm8gdmVydGljYWwgZmxpcCBvZiB0aGUgaW1hZ2UgZGF0YSBpcyBw
ZXJmb3JtZWQgYnkgdGhpcworICAgICAgICAvLyBtZXRob2QuCiAgICAgICAgIGJvb2wgZ2V0SW1h
Z2VEYXRhKEltYWdlKiBpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGhhc0FscGhhQ2hhbm5lbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgQWxwaGFPcCogbmVlZGVkQWxwaGFPcCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50KiBmb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3Rvcik7CisKKyAgICAgICAgLy8gUG9zc2libGUg
YWxwaGEgb3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZworICAgICAgICAv
LyBwaXhlbCBwYWNraW5nLiBGSVhNRToga0FscGhhRG9Vbm11bHRpcGx5IGlzIGxvc3N5IGFuZCBt
dXN0CisgICAgICAgIC8vIGJlIHJlbW92ZWQuCisgICAgICAgIGVudW0gQWxwaGFPcCB7CisgICAg
ICAgICAgICBrQWxwaGFEb05vdGhpbmcgPSAwLAorICAgICAgICAgICAga0FscGhhRG9QcmVtdWx0
aXBseSA9IDEsCisgICAgICAgICAgICBrQWxwaGFEb1VubXVsdGlwbHkgPSAyCisgICAgICAgIH07
CisKKyAgICAgICAgLy8gSGVscGVyIGZvciBnZXRJbWFnZURhdGEgd2hpY2ggaW1wbGVtZW50cyBw
YWNraW5nIG9mIHBpeGVsCisgICAgICAgIC8vIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIE9wZW5H
TCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCisgICAgICAgIC8vIFNvdXJjZSBkYXRhIG11
c3QgYmUgaW4gUkdCQSBmb3JtYXQgd2l0aCBubyBnYXBzIGJldHdlZW4KKyAgICAgICAgLy8gcm93
cy4gRGVzdGluYXRpb24gZGF0YSB3aWxsIGhhdmUgbm8gZ2FwcyBiZXR3ZWVuIHJvd3MuCisgICAg
ICAgIGJvb2wgcGFja1BpeGVscyhjb25zdCB1aW50OF90KiBzb3VyY2VEYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICAgU291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBkZXN0aW5hdGlvbkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBkZXN0aW5hdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBBbHBoYU9w
IGFscGhhT3AsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBkZXN0aW5hdGlvbkRhdGEp
OwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUg
dXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAJKHJldmlzaW9uIDYxNzEyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDEwIEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCogaGFzQWxwaGFDaGFubmVsLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFscGhhT3AsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBmb3JtYXQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3Ip
CiB7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTIsMTYgKzUx
LDEwIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWEKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGludCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKTsK
ICAgICBpbnQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKLSAgICBpbnQgcm93
Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgQ0dJbWFnZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdl
dEFscGhhSW5mbyhjZ0ltYWdlKTsKLSAgICAqaGFzQWxwaGFDaGFubmVsID0gKGluZm8gIT0ga0NH
SW1hZ2VBbHBoYU5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGluZm8gIT0ga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwTGFzdAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5mbyAhPSBr
Q0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdCk7Ci0gICAgaWYgKCFwcmVtdWx0aXBseUFscGhhICYm
ICpoYXNBbHBoYUNoYW5uZWwpCi0gICAgICAgIC8vIEZJWE1FOiBtdXN0IGZldGNoIHRoZSBpbWFn
ZSBkYXRhIGJlZm9yZSB0aGUgcHJlbXVsdGlwbGljYXRpb24gc3RlcAotICAgICAgICAqbmVlZGVk
QWxwaGFPcCA9IGtBbHBoYURvVW5tdWx0aXBseTsKLSAgICAqZm9ybWF0ID0gUkdCQTsKLSAgICBv
dXRwdXRWZWN0b3IucmVzaXplKGhlaWdodCAqIHJvd0J5dGVzKTsKKyAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIGdldCByaWQgb2YgdGhpcyB0ZW1wb3JhcnkgY29weSB3aGVyZSBwb3NzaWJsZS4KKyAg
ICBpbnQgdGVtcFJvd0J5dGVzID0gd2lkdGggKiA0OworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1w
VmVjdG9yOworICAgIHRlbXBWZWN0b3IucmVzaXplKGhlaWdodCAqIHRlbXBSb3dCeXRlcyk7CiAg
ICAgLy8gVHJ5IHRvIHJldXNlIHRoZSBjb2xvciBzcGFjZSBmcm9tIHRoZSBpbWFnZSB0byBwcmVz
ZXJ2ZSBpdHMgY29sb3JzLgogICAgIC8vIFNvbWUgaW1hZ2VzIHVzZSBhIGNvbG9yIHNwYWNlIChz
dWNoIGFzIGluZGV4ZWQpIHVuc3VwcG9ydGVkIGJ5IHRoZSBiaXRtYXAgY29udGV4dC4KICAgICBD
R0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKGNnSW1hZ2Up
OwpAQCAtNzksMjAgKzcyLDM2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YShJbWEKICAgICAgICAgcmVsZWFzZUNvbG9yU3BhY2UgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgQ0dDb250ZXh0UmVmIHRtcENvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVh
dGUob3V0cHV0VmVjdG9yLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCA4LCByb3dCeXRlcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CisgICAgQ0dDb250ZXh0UmVmIHRlbXBDb250ZXh0
ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHRlbXBWZWN0b3IuZGF0YSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCA4
LCB0ZW1wUm93Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBjaGFuZ2UgdGhpcyEKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0KTsKICAgICBpZiAocmVsZWFzZUNvbG9yU3BhY2UpCiAgICAgICAgIENH
Q29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgaWYgKCF0bXBDb250ZXh0KQorICAg
IGlmICghdGVtcENvbnRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDR0NvbnRleHRT
ZXRCbGVuZE1vZGUodG1wQ29udGV4dCwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0
RHJhd0ltYWdlKHRtcENvbnRleHQsCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHRlbXBDb250
ZXh0LCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UodGVtcENvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgIENHUmVjdE1ha2UoMCwgMCwgc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4od2lkdGgpLCBzdGF0aWNfY2FzdDxDR0Zsb2F0PihoZWlnaHQpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgY2dJbWFnZSk7Ci0gICAgQ0dDb250ZXh0UmVsZWFzZSh0bXBDb250ZXh0
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDR0NvbnRleHRSZWxlYXNlKHRlbXBDb250ZXh0KTsK
KyAgICAvLyBQYWNrIHRoZSBwaXhlbCBkYXRhIGludG8gdGhlIG91dHB1dCB2ZWN0b3IuCisgICAg
dW5zaWduZWQgbG9uZyBjb21wb25lbnRzUGVyUGl4ZWwsIGJ5dGVzUGVyQ29tcG9uZW50OworICAg
IGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwgJmNvbXBv
bmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGludCByb3dCeXRlcyA9IHdpZHRoICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQ
ZXJDb21wb25lbnQ7CisgICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShoZWlnaHQgKiByb3dCeXRlcyk7
CisgICAgQ0dJbWFnZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdldEFscGhhSW5mbyhjZ0ltYWdl
KTsKKyAgICBib29sIGhhc0FscGhhQ2hhbm5lbCA9IChpbmZvICE9IGtDR0ltYWdlQWxwaGFOb25l
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5mbyAhPSBrQ0dJbWFnZUFscGhhTm9u
ZVNraXBMYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW5mbyAhPSBrQ0dJbWFn
ZUFscGhhTm9uZVNraXBGaXJzdCk7CisgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0ga0FscGhh
RG9Ob3RoaW5nOworICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiBoYXNBbHBoYUNoYW5uZWwp
CisgICAgICAgIC8vIEZJWE1FOiBtdXN0IGZldGNoIHRoZSBpbWFnZSBkYXRhIGJlZm9yZSB0aGUg
cHJlbXVsdGlwbGljYXRpb24gc3RlcC4KKyAgICAgICAgbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURv
VW5tdWx0aXBseTsKKyAgICByZXR1cm4gcGFja1BpeGVscyh0ZW1wVmVjdG9yLmRhdGEoKSwga1Nv
dXJjZUZvcm1hdFJHQkE4LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CiB9CiAKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCShyZXZpc2lvbiA2MTcxMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MjAsMTEg
KzE2MjAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3ludGhlc2l6ZUdMRXJybwogfQog
CiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0
VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVt
dWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wq
IGhhc0FscGhhQ2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
bHBoYU9wKiBuZWVkZWRBbHBoYU9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCogZm9ybWF0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAgIGlmICghaW1hZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2MzIsMTcgKzE2MzEsMTQgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgIGlmICghbmF0aXZlUGl4bWFwKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAqaGFzQWxwaGFDaGFubmVsID0gdHJ1ZTsKLSAg
ICAqZm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0KLSAgICAqbmVlZGVkQWxwaGFP
cCA9IGtBbHBoYURvTm90aGluZzsKKyAgICBBbHBoYU9wIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFE
b05vdGhpbmc7CiAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhICYmICpoYXNBbHBoYUNoYW5uZWwp
Ci0gICAgICAgICpuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Vbm11bHRpcGx5OwotIAorICAgICAg
ICAvLyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2UgZGF0YSBiZWZvcmUgdGhlIHByZW11bHRp
cGxpY2F0aW9uIHN0ZXAKKyAgICAgICAgbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvVW5tdWx0aXBs
eTsKICAgICBRSW1hZ2UgbmF0aXZlSW1hZ2UgPSBuYXRpdmVQaXhtYXAtPnRvSW1hZ2UoKS5jb252
ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKLSAgICBvdXRwdXRWZWN0b3IuYXBw
ZW5kKG5hdGl2ZUltYWdlLnJnYlN3YXBwZWQoKS5iaXRzKCksIG5hdGl2ZUltYWdlLmJ5dGVDb3Vu
dCgpKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUobmF0aXZl
SW1hZ2UuYnl0ZUNvdW50KCkpOworICAgIHJldHVybiBwYWNrUGl4ZWxzKG5hdGl2ZUltYWdlLnJn
YlN3YXBwZWQoKS5iaXRzKCksIGtTb3VyY2VGb3JtYXRSR0JBOCwgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRl
ZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lh
LmNwcAkocmV2aXNpb24gNjE3MTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDEw
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCogaGFzQWxwaGFDaGFubmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AqIG5lZWRlZEFscGhhT3AsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBmb3JtYXQpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRW
ZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjAs
MTggKzU5LDEyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWEKICAg
ICBBU1NFUlQocm93Qnl0ZXMgPT0gc2tpYUltYWdlLT53aWR0aCgpICogNCk7CiAgICAgdWludDhf
dCogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2tpYUltYWdlLT5nZXRQaXhl
bHMoKSk7CiAgICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShyb3dCeXRlcyAqIGhlaWdodCk7Ci0gICAg
aW50IHNpemUgPSByb3dCeXRlcyAqIGhlaWdodDsKLSAgICBtZW1jcHkob3V0cHV0VmVjdG9yLmRh
dGEoKSwgcGl4ZWxzLCBzaXplKTsKLSAgICAqaGFzQWxwaGFDaGFubmVsID0gdHJ1ZTsKKyAgICBB
bHBoYU9wIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7CiAgICAgaWYgKCFwcmVtdWx0
aXBseUFscGhhKQogICAgICAgICAvLyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2UgZGF0YSBi
ZWZvcmUgdGhlIHByZW11bHRpcGxpY2F0aW9uIHN0ZXAKLSAgICAgICAgKm5lZWRlZEFscGhhT3Ag
PSBrQWxwaGFEb1VubXVsdGlwbHk7Ci0gICAgLy8gQ29udmVydCBmcm9tIEJHUkEgdG8gUkdCQS4g
RklYTUU6IGFkZCBHTF9CR1JBIGV4dGVuc2lvbiBzdXBwb3J0Ci0gICAgLy8gdG8gYWxsIHVuZGVy
bHlpbmcgT3BlbkdMIGltcGxlbWVudGF0aW9ucy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7IGkgKz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKG91dHB1dFZlY3RvcltpXSwgb3V0cHV0VmVj
dG9yW2kgKyAyXSk7Ci0gICAgKmZvcm1hdCA9IFJHQkE7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7CisgICAgcmV0dXJuIHBhY2tQ
aXhlbHMocGl4ZWxzLCBrU291cmNlRm9ybWF0QkdSQTgsIHNraWFJbWFnZS0+d2lkdGgoKSwgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwg
b3V0cHV0VmVjdG9yLmRhdGEoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDYxNzEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDYtMjMgIEtlbm5ldGggUnVzc2VsbCAgPGtickBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCBmb3JtYXQgY29udmVyc2lvbnMgaW4gdGV4SW1hZ2UyRCBhbmQgdGV4U3Vi
SW1hZ2UyRCB0YWtpbmcgSFRNTCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MDMxOQorCisgICAgICAgIEdlbmVyYWxpemVkIGNvZGUgc3VwcG9y
dGluZyBwcmVtdWx0aXBsaWNhdGlvbiBvZiBhbHBoYSBhbmQKKyAgICAgICAgdmVydGljYWwgZmxp
cCB0byBwYWNrIHRleHR1cmUgZGF0YSBpbnRvIHJlcXVlc3RlZCBmb3JtYXQgYW5kIHR5cGUuCisg
ICAgICAgIEhhbmRsZWQgaW5jb21pbmcgaW1hZ2UgZGF0YSBvZiB2YXJpb3VzIGZvcm1hdHMsIFJH
QkEgYW5kIEJHUkEgaW4KKyAgICAgICAgcGFydGljdWxhciwgYm90aCB0byByZWR1Y2UgdGhlIG51
bWJlciBvZiB0ZW1wb3JhcnkgY29waWVzIGR1cmluZworICAgICAgICB0ZXh0dXJlIHVwbG9hZCBh
bmQgdG8gc3VwcG9ydCBwcmVtdWx0aXBseWluZyBhbHBoYSBmb3IgdGhlCisgICAgICAgIHRleElt
YWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBBcnJheUJ1ZmZlclZp
ZXcKKyAgICAgICAgaW4gYSBzdWJzZXF1ZW50IGJ1Zy4gQWRkZWQgdGVzdCBjYXNlIGV4ZXJjaXNp
bmcgYWxsIGNvbWJpbmF0aW9ucworICAgICAgICBvZiBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbnMs
IHByZW11bHRpcGxpY2F0aW9uIG9mIGFscGhhLCBhbmQKKyAgICAgICAgSW1hZ2UvSW1hZ2VEYXRh
IHVwbG9hZC4gKEluY29ycG9yYXRlZCBwbmdsaWIuanMgdW5kZXIKKyAgICAgICAgZmFzdC9jYW52
YXMvd2ViZ2wvcmVzb3VyY2VzLyB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIEltYWdlIGVsZW1lbnRz
CisgICAgICAgIHByb2dyYW1tYXRpY2FsbHkuKSBUZXN0ZWQgaW4gU2FmYXJpIG9uIE1hYyBPUyBY
IGFuZCBpbiBDaHJvbWl1bSBvbgorICAgICAgICBNYWMgT1MgWCwgV2luZG93cyBhbmQgTGludXgu
CisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0
LWFuZC10eXBlLmh0bWwKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9w
bmdsaWIuanM6IEFkZGVkLgorICAgICAgICAoKToKKyAgICAgICAgKC4pOgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS13aXRoLWZv
cm1hdC1hbmQtdHlwZS5odG1sOiBBZGRlZC4KKwogMjAxMC0wNi0yMyAgU3RlcGhlbiBXaGl0ZSAg
PHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBI
eWF0dC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS13aXRo
LWZvcm1hdC1hbmQtdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1p
bWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTM3IEBACitWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCBjb2RlIHBh
dGhzIHRha2luZyBIVE1MIGRhdGEgd2l0aCBhbGwgZm9ybWF0L3R5cGUgY29tYmluYXRpb25zCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMTkgOiBJbXBsZW1lbnQgZm9ybWF0
IGNvbnZlcnNpb25zIGluIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgdGFraW5nIEhUTUwg
ZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgUkdCQS9V
TlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBkYXRhCitUZXN0
aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQgbXVzdCBkcm9wIGxvdyBmb3VyIGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5n
IHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX1NIT1JU
XzVfNV81XzEgbXVzdCBkcm9wIGxvdyB0aHJlZSBiaXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0
ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgUkdCL1VOU0lHTkVEX0JZVEUgc2hv
dWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3
aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFJHQi9VTlNJR05FRF9TSE9SVF81XzZfNSBtdXN0IGRy
b3AgbG93IHR3byBvciB0aHJlZSBiaXRzIG9mIHByZWNpc2lvbgorVGVzdGluZyB0ZXhJbWFnZTJE
IHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgQUxQSEEvVU5TSUdORURfQllURSBzaG91bGQgbWFp
bnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1h
Z2UgYXQgMjU2eDEKK1BBU1MgTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWlu
IGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0
IDI1NngxCitQQVNTIExVTUlOQU5DRV9BTFBIQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFp
biBmdWxsIHByZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFn
ZSBhdCAyNTZ4MQorUEFTUyBSR0JBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwg
cHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1
NngxCitQQVNTIFJHQkEvVU5TSUdORURfU0hPUlRfNF80XzRfNCBtdXN0IGRyb3AgbG93IGZvdXIg
Yml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1
NngxCitQQVNTIFJHQkEvVU5TSUdORURfU0hPUlRfNV81XzVfMSBtdXN0IGRyb3AgbG93IHRocmVl
IGJpdHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAy
NTZ4MQorUEFTUyBSR0IvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNp
b24gb2YgZGF0YQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BB
U1MgUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81IG11c3QgZHJvcCBsb3cgdHdvIG9yIHRocmVlIGJp
dHMgb2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4
MQorUEFTUyBBTFBIQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lv
biBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFT
UyBMVU1JTkFOQ0UvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24g
b2YgZGF0YQorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1Mg
TFVNSU5BTkNFX0FMUEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lz
aW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQor
UEFTUyBSR0JBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9m
IGRhdGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBS
R0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgbXVzdCBkcm9wIGxvdyBmb3VyIGJpdHMgb2YgcHJl
Y2lzaW9uCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1Mg
UkdCQS9VTlNJR05FRF9TSE9SVF81XzVfNV8xIG11c3QgZHJvcCBsb3cgdGhyZWUgYml0cyBvZiBw
cmVjaXNpb24KK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFT
UyBSR0IvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0
YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIFJHQi9V
TlNJR05FRF9TSE9SVF81XzZfNSBtdXN0IGRyb3AgbG93IHR3byBvciB0aHJlZSBiaXRzIG9mIHBy
ZWNpc2lvbgorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNT
IEFMUEhBL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRh
dGEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBMVU1J
TkFOQ0UvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0
YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIExVTUlO
QU5DRV9BTFBIQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBv
ZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BB
U1MgUkdCQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHByZWNpc2lvbiBvZiBk
YXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1Mg
UkdCQS9VTlNJR05FRF9TSE9SVF80XzRfNF80IG11c3QgZHJvcCBsb3cgZm91ciBiaXRzIG9mIHBy
ZWNpc2lvbgorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQ
QVNTIFJHQkEvVU5TSUdORURfU0hPUlRfNV81XzVfMSBtdXN0IGRyb3AgbG93IHRocmVlIGJpdHMg
b2YgcHJlY2lzaW9uCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2
eDEKK1BBU1MgUkdCL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9u
IG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQor
UEFTUyBSR0IvVU5TSUdORURfU0hPUlRfNV82XzUgbXVzdCBkcm9wIGxvdyB0d28gb3IgdGhyZWUg
Yml0cyBvZiBwcmVjaXNpb24KK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBh
dCAyNTZ4MQorUEFTUyBBTFBIQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxsIHBy
ZWNpc2lvbiBvZiBkYXRhCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQg
MjU2eDEKK1BBU1MgTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUgc2hvdWxkIG1haW50YWluIGZ1bGwg
cHJlY2lzaW9uIG9mIGRhdGEKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBh
dCAyNTZ4MQorUEFTUyBMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRh
aW4gZnVsbCBwcmVjaXNpb24gb2YgZGF0YQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2Ug
YXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9V
TlNJR05FRF9CWVRFCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFT
UyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lHTkVEX1NIT1JU
XzRfNF80XzQKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFVO
UEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEvVU5TSUdORURfU0hPUlRfNV81
XzVfMQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNL
X1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX0JZVEUKK1Rlc3Rpbmcg
dGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9B
TFBIQV9XRUJHTCB3aXRoIFJHQi9VTlNJR05FRF9TSE9SVF81XzZfNQorVGVzdGluZyB0ZXhJbWFn
ZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dF
QkdMIHdpdGggQUxQSEEvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1h
Z2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggTFVN
SU5BTkNFL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1
NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIExVTUlOQU5DRV9B
TFBIQS9VTlNJR05FRF9CWVRFCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAy
NTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lH
TkVEX0JZVEUKK1Rlc3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlIGF0IDI1NngxCitQQVNT
IFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQkEvVU5TSUdORURfU0hPUlRf
NF80XzRfNAorVGVzdGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1Mg
VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9TSE9SVF81
XzVfNV8xCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBV
TlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURfQllURQorVGVz
dGluZyB0ZXhTdWJJbWFnZTJEIHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81CitUZXN0aW5n
IHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQ
TFlfQUxQSEFfV0VCR0wgd2l0aCBBTFBIQS9VTlNJR05FRF9CWVRFCitUZXN0aW5nIHRleFN1Yklt
YWdlMkQgd2l0aCBJbWFnZSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFf
V0VCR0wgd2l0aCBMVU1JTkFOQ0UvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhTdWJJbWFnZTJE
IHdpdGggSW1hZ2UgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdM
IHdpdGggTFVNSU5BTkNFX0FMUEhBL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3
aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VC
R0wgd2l0aCBSR0JBL1VOU0lHTkVEX0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdl
RGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBS
R0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdl
RGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBS
R0JBL1VOU0lHTkVEX1NIT1JUXzVfNV81XzEKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdl
RGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBS
R0IvVU5TSUdORURfQllURQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1
NngxCitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIFJHQi9VTlNJR05F
RF9TSE9SVF81XzZfNQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1Nngx
CitQQVNTIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIEFMUEhBL1VOU0lHTkVE
X0JZVEUKK1Rlc3RpbmcgdGV4SW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBV
TlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0UvVU5TSUdORURfQllU
RQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggSW1hZ2VEYXRhIGF0IDI1NngxCitQQVNTIFVOUEFD
S19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRoIExVTUlOQU5DRV9BTFBIQS9VTlNJR05FRF9C
WVRFCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1Mg
VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9CWVRFCitU
ZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1MgVU5QQUNL
X1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9TSE9SVF80XzRfNF80
CitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1MgVU5Q
QUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9TSE9SVF81XzVf
NV8xCitUZXN0aW5nIHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1Mg
VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX0JZVEUKK1Rl
c3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tf
UFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBSR0IvVU5TSUdORURfU0hPUlRfNV82XzUKK1Rl
c3RpbmcgdGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tf
UFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBBTFBIQS9VTlNJR05FRF9CWVRFCitUZXN0aW5n
IHRleFN1YkltYWdlMkQgd2l0aCBJbWFnZURhdGEgYXQgMjU2eDEKK1BBU1MgVU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMIHdpdGggTFVNSU5BTkNFL1VOU0lHTkVEX0JZVEUKK1Rlc3Rpbmcg
dGV4U3ViSW1hZ2UyRCB3aXRoIEltYWdlRGF0YSBhdCAyNTZ4MQorUEFTUyBVTlBBQ0tfUFJFTVVM
VElQTFlfQUxQSEFfV0VCR0wgd2l0aCBMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS13aXRoLWZvcm1hdC1hbmQtdHlw
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1p
bWFnZS13aXRoLWZvcm1hdC1hbmQtdHlwZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLXdpdGgtZm9ybWF0LWFuZC10eXBlLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTY4IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
Lz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wbmdsaWIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvdXRpbHMzZC5qcyI+IDwvc2NyaXB0PgorPHNjcmlwdCBpZD0idnNoYWRlciIgdHlw
ZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzMgZ19Qb3NpdGlvbjsKK2F0dHJp
YnV0ZSB2ZWMyIGdfVGV4Q29vcmQwOworCit2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CisKK3ZvaWQg
bWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGdfUG9zaXRpb24ueCwgZ19Qb3NpdGlv
bi55LCBnX1Bvc2l0aW9uLnosIDEuMCk7CisgICAgdGV4Q29vcmQgPSBnX1RleENvb3JkMDsKK30K
Kzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdt
ZW50Ij4KK3VuaWZvcm0gc2FtcGxlcjJEIHRleDsKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKKwor
dm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4LCB0ZXhDb29y
ZCk7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciBnbCA9IG51bGw7Cit2YXIgdGV4dHVy
ZUxvYyA9IG51bGw7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gSGFybmVzcworCit2YXIgdGVzdENhc2VzID0gW107CisKK2Z1bmN0aW9uIGlu
aXQoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJHTEVuYWJs
ZWQiLCAiMSIpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAg
ICBkZXNjcmlwdGlvbignVmVyaWZ5IHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgY29kZSBw
YXRocyB0YWtpbmcgSFRNTCBkYXRhIHdpdGggYWxsIGZvcm1hdC90eXBlIGNvbWJpbmF0aW9ucycp
OworCisgICAgZGVidWcoJ1JlZ3Jlc3Npb24gdGVzdCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwMzE5Ij5odHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDAzMTk8L2E+IDogPGNvZGU+SW1wbGVtZW50IGZvcm1hdCBjb252
ZXJzaW9ucyBpbiB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIHRha2luZyBIVE1MIGRhdGE8
L2NvZGU+Jyk7CisKKyAgICBnbCA9IGluaXRXZWJHTCgiZXhhbXBsZSIsICJ2c2hhZGVyIiwgImZz
aGFkZXIiLCBbICJnX1Bvc2l0aW9uIiwgImdfVGV4Q29vcmQwIiBdLCBbIDAsIDAsIDAsIDEgXSwg
MSk7CisgICAgZ2wuZGlzYWJsZShnbC5CTEVORCk7CisKKyAgICB0ZXh0dXJlTG9jID0gZ2wuZ2V0
VW5pZm9ybUxvY2F0aW9uKGdsLnByb2dyYW0sICJ0ZXgiKTsKKworICAgIHZhciB2ZXJ0aWNlcyA9
IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAgICAgICAgMS4wLCAgMS4wLCAwLjAsCisgICAgICAg
IC0xLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4w
LCAgMS4wLCAwLjAsCisgICAgICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgLTEu
MCwgMC4wXSk7CisgICAgdmFyIHRleENvb3JkcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoWworICAg
ICAgICAxLjAsIDEuMCwKKyAgICAgICAgMC4wLCAxLjAsCisgICAgICAgIDAuMCwgMC4wLAorICAg
ICAgICAxLjAsIDEuMCwKKyAgICAgICAgMC4wLCAwLjAsCisgICAgICAgIDEuMCwgMC4wXSk7Cisg
ICAgdmFyIHRleENvb3JkT2Zmc2V0ID0gdmVydGljZXMuYnl0ZUxlbmd0aDsKKworICAgIHZhciB2
Ym8gPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZF
UiwgdmJvKTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAgICAg
ICAgICAgIHRleENvb3JkT2Zmc2V0ICsgdGV4Q29vcmRzLmJ5dGVMZW5ndGgsCisgICAgICAgICAg
ICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9C
VUZGRVIsIDAsIHZlcnRpY2VzKTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZF
UiwgdGV4Q29vcmRPZmZzZXQsIHRleENvb3Jkcyk7CisKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBn
bC5GQUxTRSwgMCwgMCk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAg
Z2wudmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZ2wuRkFMU0UsIDAsIHRleENv
b3JkT2Zmc2V0KTsKKworICAgIGluaXRpYWxpemVUZXN0cygpOworfQorCitmdW5jdGlvbiBpbml0
aWFsaXplVGVzdHMoKQoreworICAgIC8vIFZlcmlmeSB0aGF0IHVwbG9hZGluZyB0byBwYWNrZWQg
cGl4ZWwgZm9ybWF0cyBwZXJmb3JtcyB0aGUKKyAgICAvLyByZXF1aXJlZCBjb252ZXJzaW9uIGFu
ZCBhc3NvY2lhdGVkIGxvc3Mgb2YgcHJlY2lzaW9uLgorICAgIGZvciAodmFyIHVzZUltYWdlRGF0
YSA9IDA7IHVzZUltYWdlRGF0YSA8IDI7ICsrdXNlSW1hZ2VEYXRhKSB7CisgICAgICAgIGZvciAo
dmFyIHVzZVRleFN1YkltYWdlMkQgPSAwOyB1c2VUZXhTdWJJbWFnZTJEIDwgMjsgKyt1c2VUZXhT
dWJJbWFnZTJEKSB7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAg
ICAgdXNlSW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICB1c2VUZXhT
dWJJbWFnZTJEOiAhIXVzZVRleFN1YkltYWdlMkQsCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1
NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
OiBnZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlw
bHlBbHBoYTogZmFsc2UsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICAg
ICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgdmVyaWZp
ZXI6IGFsbENoYW5uZWxzSW5jcmVhc2VCeU5vTW9yZVRoYW4sCisgICAgICAgICAgICAgICAgdGhy
ZXNob2xkOiAxLAorICAgICAgICAgICAgICAgIG51bU9jY3VycmVuY2VzOiAxLAorICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uOiAiUkdCQS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBm
dWxsIHByZWNpc2lvbiBvZiBkYXRhIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0
Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0
YSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAhIXVzZVRleFN1YkltYWdlMkQs
CisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEs
CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAs
CisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisgICAgICAgICAgICAg
ICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NI
T1JUXzRfNF80XzQsCisgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGFsbENoYW5uZWxzSW5jcmVh
c2VCeUF0TGVhc3QsCisgICAgICAgICAgICAgICAgdGhyZXNob2xkOiAxNSwKKyAgICAgICAgICAg
ICAgICBudW1PY2N1cnJlbmNlczogMTAsCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJS
R0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgbXVzdCBkcm9wIGxvdyBmb3VyIGJpdHMgb2YgcHJl
Y2lzaW9uIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7Cisg
ICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0YSwKKyAgICAgICAgICAg
ICAgICB1c2VUZXhTdWJJbWFnZTJEOiAhIXVzZVRleFN1YkltYWdlMkQsCisgICAgICAgICAgICAg
ICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAg
ICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5S
R0JBLAorICAgICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsCisg
ICAgICAgICAgICAgICAgdmVyaWZpZXI6IGFsbENoYW5uZWxzSW5jcmVhc2VCeUF0TGVhc3QsCisg
ICAgICAgICAgICAgICAgdGhyZXNob2xkOiA3LAorICAgICAgICAgICAgICAgIG51bU9jY3VycmVu
Y2VzOiAyMCwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogIlJHQkEvVU5TSUdORURfU0hP
UlRfNV81XzVfMSBtdXN0IGRyb3AgbG93IHRocmVlIGJpdHMgb2YgcHJlY2lzaW9uIgorICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAg
dXNlSW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJ
bWFnZTJEOiAhIXVzZVRleFN1YkltYWdlMkQsCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwK
KyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBn
ZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlB
bHBoYTogZmFsc2UsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0IsCisgICAgICAgICAg
ICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjog
YWxsQ2hhbm5lbHNJbmNyZWFzZUJ5Tm9Nb3JlVGhhbiwKKyAgICAgICAgICAgICAgICB0aHJlc2hv
bGQ6IDEsCisgICAgICAgICAgICAgICAgbnVtT2NjdXJyZW5jZXM6IDEsCisgICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb246ICJSR0IvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBw
cmVjaXNpb24gb2YgZGF0YSIKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENhc2Vz
LnB1c2goeworICAgICAgICAgICAgICAgIHVzZUltYWdlRGF0YTogISF1c2VJbWFnZURhdGEsCisg
ICAgICAgICAgICAgICAgdXNlVGV4U3ViSW1hZ2UyRDogISF1c2VUZXhTdWJJbWFnZTJELAorICAg
ICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxLAorICAg
ICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdGVPcGFxdWVHcmF5c2NhbGVSYW1wLAorICAg
ICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLAorICAgICAgICAgICAgICAgIGZv
cm1hdDogZ2wuUkdCLAorICAgICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVf
Nl81LAorICAgICAgICAgICAgICAgIHZlcmlmaWVyOiBhbGxDaGFubmVsc0luY3JlYXNlQnlBdExl
YXN0LAorICAgICAgICAgICAgICAgIHRocmVzaG9sZDogMywKKyAgICAgICAgICAgICAgICBudW1P
Y2N1cnJlbmNlczogMjAsCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJSR0IvVU5TSUdO
RURfU0hPUlRfNV82XzUgbXVzdCBkcm9wIGxvdyB0d28gb3IgdGhyZWUgYml0cyBvZiBwcmVjaXNp
b24iCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAg
ICAgICAgICAgICB1c2VJbWFnZURhdGE6ICEhdXNlSW1hZ2VEYXRhLAorICAgICAgICAgICAgICAg
IHVzZVRleFN1YkltYWdlMkQ6ICEhdXNlVGV4U3ViSW1hZ2UyRCwKKyAgICAgICAgICAgICAgICB3
aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0b3I6IGdlbmVyYXRlVHJhbnNsdWNlbnRHcmF5c2NhbGVSYW1wLAorICAgICAgICAgICAg
ICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLAorICAgICAgICAgICAgICAgIGZvcm1hdDogZ2wu
QUxQSEEsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAg
ICAgICAgICB2ZXJpZmllcjogYWxwaGFDaGFubmVsSW5jcmVhc2VzQnlOb01vcmVUaGFuLAorICAg
ICAgICAgICAgICAgIHRocmVzaG9sZDogMSwKKyAgICAgICAgICAgICAgICBudW1PY2N1cnJlbmNl
czogMSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFMUEhBL1VOU0lHTkVEX0JZVEUg
c2hvdWxkIG1haW50YWluIGZ1bGwgcHJlY2lzaW9uIG9mIGRhdGEiCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURh
dGE6ICEhdXNlSW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICEh
dXNlVGV4U3ViSW1hZ2UyRCwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAg
ICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlT3Bh
cXVlR3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxz
ZSwKKyAgICAgICAgICAgICAgICBmb3JtYXQ6IGdsLkxVTUlOQU5DRSwKKyAgICAgICAgICAgICAg
ICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICAgICAgICAgICAgIHZlcmlmaWVyOiBhbGxD
aGFubmVsc0luY3JlYXNlQnlOb01vcmVUaGFuLAorICAgICAgICAgICAgICAgIHRocmVzaG9sZDog
MSwKKyAgICAgICAgICAgICAgICBudW1PY2N1cnJlbmNlczogMSwKKyAgICAgICAgICAgICAgICBk
ZXNjcmlwdGlvbjogIkxVTUlOQU5DRS9VTlNJR05FRF9CWVRFIHNob3VsZCBtYWludGFpbiBmdWxs
IHByZWNpc2lvbiBvZiBkYXRhIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2Fz
ZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0YSwK
KyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAhIXVzZVRleFN1YkltYWdlMkQsCisg
ICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAsCisg
ICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2UsCisgICAgICAgICAgICAgICAg
Zm9ybWF0OiBnbC5MVU1JTkFOQ0VfQUxQSEEsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5T
SUdORURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogYWxsQ2hhbm5lbHNJbmNyZWFz
ZUJ5Tm9Nb3JlVGhhbiwKKyAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDEsCisgICAgICAgICAg
ICAgICAgbnVtT2NjdXJyZW5jZXM6IDEsCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJM
VU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURSBzaG91bGQgbWFpbnRhaW4gZnVsbCBwcmVjaXNp
b24gb2YgZGF0YSIKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
VmVyaWZ5IHRoYXQgc2V0dGluZyB0aGUgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHBp
eGVsCisgICAgLy8gc3RvcmUgcGFyYW1ldGVyIGFuZCBzZW5kaW5nIGRvd24gYSB6ZXJvIGFscGhh
IGNhdXNlcyB0aGUgY29sb3IKKyAgICAvLyBjaGFubmVscyB0byBnbyB0byB6ZXJvLgorICAgIGZv
ciAodmFyIHVzZUltYWdlRGF0YSA9IDA7IHVzZUltYWdlRGF0YSA8IDI7ICsrdXNlSW1hZ2VEYXRh
KSB7CisgICAgICAgIGZvciAodmFyIHVzZVRleFN1YkltYWdlMkQgPSAwOyB1c2VUZXhTdWJJbWFn
ZTJEIDwgMjsgKyt1c2VUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVz
aCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0YSwKKyAgICAg
ICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAhIXVzZVRleFN1YkltYWdlMkQsCisgICAgICAg
ICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAg
ICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiB0cnVlLAorICAgICAgICAgICAgICAgIGZv
cm1hdDogZ2wuUkdCQSwKKyAgICAgICAgICAgICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAor
ICAgICAgICAgICAgICAgIHZlcmlmaWVyOiBjb2xvckNoYW5uZWxzQXJlWmVybywKKyAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvbjogIlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCB3aXRo
IFJHQkEvVU5TSUdORURfQllURSIKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGVzdENh
c2VzLnB1c2goeworICAgICAgICAgICAgICAgIHVzZUltYWdlRGF0YTogISF1c2VJbWFnZURhdGEs
CisgICAgICAgICAgICAgICAgdXNlVGV4U3ViSW1hZ2UyRDogISF1c2VUZXhTdWJJbWFnZTJELAor
ICAgICAgICAgICAgICAgIHdpZHRoOiAyNTYsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxLAor
ICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdGVUcmFuc3BhcmVudEdyYXlzY2FsZVJh
bXAsCisgICAgICAgICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYTogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURf
U0hPUlRfNF80XzRfNCwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogY29sb3JDaGFubmVsc0Fy
ZVplcm8sCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJVTlBBQ0tfUFJFTVVMVElQTFlf
QUxQSEFfV0VCR0wgd2l0aCBSR0JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzQiCisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJ
bWFnZURhdGE6ICEhdXNlSW1hZ2VEYXRhLAorICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdl
MkQ6ICEhdXNlVGV4U3ViSW1hZ2UyRCwKKyAgICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAg
ICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVy
YXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5
QWxwaGE6IHRydWUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICAgICAg
ICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsCisgICAgICAgICAgICAgICAg
dmVyaWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJvLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uOiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggUkdCQS9VTlNJR05FRF9T
SE9SVF81XzVfNV8xIgorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVz
aCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0YSwKKyAgICAg
ICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAhIXVzZVRleFN1YkltYWdlMkQsCisgICAgICAg
ICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAg
ICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiB0cnVlLAorICAgICAgICAgICAgICAgIGZv
cm1hdDogZ2wuUkdCLAorICAgICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisg
ICAgICAgICAgICAgICAgdmVyaWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJvLAorICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uOiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGgg
UkdCL1VOU0lHTkVEX0JZVEUiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNl
cy5wdXNoKHsKKyAgICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICEhdXNlSW1hZ2VEYXRhLAor
ICAgICAgICAgICAgICAgIHVzZVRleFN1YkltYWdlMkQ6ICEhdXNlVGV4U3ViSW1hZ2UyRCwKKyAg
ICAgICAgICAgICAgICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3I6IGdlbmVyYXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1w
LAorICAgICAgICAgICAgICAgIHByZW11bHRpcGx5QWxwaGE6IHRydWUsCisgICAgICAgICAgICAg
ICAgZm9ybWF0OiBnbC5SR0IsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfU0hP
UlRfNV82XzUsCisgICAgICAgICAgICAgICAgdmVyaWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJv
LAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhB
X1dFQkdMIHdpdGggUkdCL1VOU0lHTkVEX1NIT1JUXzVfNl81IgorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNlSW1hZ2VEYXRh
OiAhIXVzZUltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFnZTJEOiAhIXVz
ZVRleFN1YkltYWdlMkQsCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAgICAgICAgICAg
ICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0ZVRyYW5z
cGFyZW50R3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBseUFscGhhOiB0
cnVlLAorICAgICAgICAgICAgICAgIGZvcm1hdDogZ2wuQUxQSEEsCisgICAgICAgICAgICAgICAg
dHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogY29sb3JD
aGFubmVsc0FyZVplcm8sCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJVTlBBQ0tfUFJF
TVVMVElQTFlfQUxQSEFfV0VCR0wgd2l0aCBBTFBIQS9VTlNJR05FRF9CWVRFIgorICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB0ZXN0Q2FzZXMucHVzaCh7CisgICAgICAgICAgICAgICAgdXNl
SW1hZ2VEYXRhOiAhIXVzZUltYWdlRGF0YSwKKyAgICAgICAgICAgICAgICB1c2VUZXhTdWJJbWFn
ZTJEOiAhIXVzZVRleFN1YkltYWdlMkQsCisgICAgICAgICAgICAgICAgd2lkdGg6IDI1NiwKKyAg
ICAgICAgICAgICAgICBoZWlnaHQ6IDEsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBnZW5l
cmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCwKKyAgICAgICAgICAgICAgICBwcmVtdWx0aXBs
eUFscGhhOiB0cnVlLAorICAgICAgICAgICAgICAgIGZvcm1hdDogZ2wuTFVNSU5BTkNFLAorICAg
ICAgICAgICAgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgdmVy
aWZpZXI6IGNvbG9yQ2hhbm5lbHNBcmVaZXJvLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
OiAiVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIHdpdGggTFVNSU5BTkNFL1VOU0lHTkVE
X0JZVEUiCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRlc3RDYXNlcy5wdXNoKHsKKyAg
ICAgICAgICAgICAgICB1c2VJbWFnZURhdGE6ICEhdXNlSW1hZ2VEYXRhLAorICAgICAgICAgICAg
ICAgIHVzZVRleFN1YkltYWdlMkQ6ICEhdXNlVGV4U3ViSW1hZ2UyRCwKKyAgICAgICAgICAgICAg
ICB3aWR0aDogMjU2LAorICAgICAgICAgICAgICAgIGhlaWdodDogMSwKKyAgICAgICAgICAgICAg
ICBnZW5lcmF0b3I6IGdlbmVyYXRlVHJhbnNwYXJlbnRHcmF5c2NhbGVSYW1wLAorICAgICAgICAg
ICAgICAgIHByZW11bHRpcGx5QWxwaGE6IHRydWUsCisgICAgICAgICAgICAgICAgZm9ybWF0OiBn
bC5MVU1JTkFOQ0VfQUxQSEEsCisgICAgICAgICAgICAgICAgdHlwZTogZ2wuVU5TSUdORURfQllU
RSwKKyAgICAgICAgICAgICAgICB2ZXJpZmllcjogY29sb3JDaGFubmVsc0FyZVplcm8sCisgICAg
ICAgICAgICAgICAgZGVzY3JpcHRpb246ICJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wg
d2l0aCBMVU1JTkFOQ0VfQUxQSEEvVU5TSUdORURfQllURSIKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUHJvZHVjZSBkYXRhIGZvciBhbGwgdGVzdGNhc2VzLiBC
ZWNhdXNlIHdlIGxvYWQgaW1hZ2VzLCBzb21lIG9mCisgICAgLy8gdGhlc2UgbWF5IGdlbmVyYXRl
IHRoZWlyIGRhdGEgYXN5bmNocm9ub3VzbHkuCisgICAgZ2VuZXJhdGVUZXN0RGF0YSgpOworfQor
CitmdW5jdGlvbiBnZW5lcmF0ZVRlc3REYXRhKCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRlc3RDYXNlcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgdGVzdENhc2UgPSB0ZXN0Q2Fz
ZXNbaV07CisgICAgICAgIHZhciB3cmFwcGVyID0gbnVsbDsKKyAgICAgICAgaWYgKHRlc3RDYXNl
LnVzZUltYWdlRGF0YSkKKyAgICAgICAgICAgIHdyYXBwZXIgPSBuZXcgSW1hZ2VEYXRhV3JhcHBl
cih0ZXN0Q2FzZS53aWR0aCwgdGVzdENhc2UuaGVpZ2h0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgd3JhcHBlciA9IG5ldyBJbWFnZVdyYXBwZXIodGVzdENhc2Uud2lkdGgsIHRlc3RDYXNl
LmhlaWdodCk7CisgICAgICAgIHRlc3RDYXNlLndyYXBwZXIgPSB3cmFwcGVyOworICAgICAgICB0
ZXN0Q2FzZS5nZW5lcmF0b3Iod3JhcHBlcik7CisgICAgICAgIHRlc3RDYXNlLndyYXBwZXIuZ2Vu
ZXJhdGVEYXRhKCk7CisgICAgfQorCisgICAgLy8gU2VlIHdoZXRoZXIgd2UgbmVlZCB0byBydW4g
dGhlIHRlc3RzLCBpbiBjYXNlIGFsbCBvZiB0aGVtCisgICAgLy8gZ2VuZXJhdGVkIHRoZWlyIHJl
c3VsdHMgc3luY2hyb25vdXNseS4KKyAgICBtYXliZVJ1blRlc3RzKCk7Cit9CisKK3ZhciByYW5U
ZXN0cyA9IGZhbHNlOworCitmdW5jdGlvbiBtYXliZVJ1blRlc3RzKCkKK3sKKyAgICBpZiAoIXJh
blRlc3RzKQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIGlmICghdGVzdENhc2VzW2ldLndyYXBwZXIgfHwgIXRlc3RDYXNlc1tp
XS53cmFwcGVyLmRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgcmFuVGVzdHMg
PSB0cnVlOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0Q2FzZXMubGVuZ3RoOyArK2kp
CisgICAgICAgIHJ1bk9uZVRlc3QodGVzdENhc2VzW2ldKTsKKworICAgIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0gZmluaXNoOworICAgIGVwaWxvZ3VlLnNy
YyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKworZnVuY3Rpb24gdGVzdENhc2VUb1N0cmlu
Zyh0ZXN0Q2FzZSkKK3sKKyAgICByZXR1cm4gKHRlc3RDYXNlLnVzZVRleFN1YkltYWdlMkQgPyAi
dGV4U3ViSW1hZ2UyRCIgOiAidGV4SW1hZ2UyRCIpICsKKyAgICAgICAgICAgICIgd2l0aCAiICsg
KHRlc3RDYXNlLnVzZUltYWdlRGF0YSA/ICJJbWFnZURhdGEiIDogIkltYWdlIikgKworICAgICAg
ICAgICAgIiBhdCAiICsgdGVzdENhc2Uud2lkdGggKyAieCIgKyB0ZXN0Q2FzZS5oZWlnaHQ7Cit9
CisKK2Z1bmN0aW9uIHJ1bk9uZVRlc3QodGVzdENhc2UpCit7CisgICAgZGVidWcoIlRlc3Rpbmcg
IiArIHRlc3RDYXNlVG9TdHJpbmcodGVzdENhc2UpKTsKKyAgICB2YXIgZGF0YSA9IHRlc3RDYXNl
LndyYXBwZXIuZGF0YTsKKyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQ
VEhfQlVGRkVSX0JJVCk7CisgICAgdmFyIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7Cisg
ICAgLy8gQmluZCB0aGUgdGV4dHVyZSB0byB0ZXh0dXJlIHVuaXQgMC4KKyAgICBnbC5iaW5kVGV4
dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAvLyBTZXQgdXAgdGV4dHVyZSBwYXJh
bWV0ZXJzLgorICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9N
SU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVf
MkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgLy8gU2V0IHVwIHBp
eGVsIHN0b3JlIHBhcmFtZXRlcnMuCisgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMLCB0ZXN0Q2FzZS5wcmVtdWx0aXBseUFscGhhKTsKKyAgICAvLyBV
cGxvYWQgdGhlIGltYWdlIGludG8gdGhlIHRleHR1cmUuCisgICAgaWYgKHRlc3RDYXNlLnVzZVRl
eFN1YkltYWdlMkQpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGV4dHVyZSB0byBibGFj
ayBmaXJzdC4KKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0ZXN0Q2Fz
ZS5mb3JtYXQsIHRlc3RDYXNlLndpZHRoLCB0ZXN0Q2FzZS5oZWlnaHQsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgdGVzdENhc2UuZm9ybWF0LCB0ZXN0Q2FzZS50eXBlLCBudWxsKTsKKyAgICAg
ICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB0ZXN0Q2FzZS5mb3Jt
YXQsIHRlc3RDYXNlLnR5cGUsIGRhdGEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdsLnRleElt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGVzdENhc2UuZm9ybWF0LCB0ZXN0Q2FzZS5mb3JtYXQs
IHRlc3RDYXNlLnR5cGUsIGRhdGEpOworICAgIH0KKworICAgIC8vIFBvaW50IHRoZSB1bmlmb3Jt
IHNhbXBsZXIgdG8gdGV4dHVyZSB1bml0IDAuCisgICAgZ2wudW5pZm9ybTFpKHRleHR1cmVMb2Ms
IDApOworICAgIC8vIERyYXcgdGhlIHRyaWFuZ2xlcy4KKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRS
SUFOR0xFUywgMCwgNik7CisgICAgLy8gQ2xlYW4gdXAgdGhlIHRleHR1cmUuCisgICAgZ2wuZGVs
ZXRlVGV4dHVyZSh0ZXh0dXJlKTsKKworICAgIC8vIFJlYWQgYmFjayB0aGUgcmVuZGVyaW5nIHJl
c3VsdHMuCisgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkodGVzdENhc2Uud2lkdGggKiB0ZXN0Q2Fz
ZS5oZWlnaHQgKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHRlc3RDYXNlLndpZHRoLCB0
ZXN0Q2FzZS5oZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAgLy8g
UnVuIHRoZSB2ZXJpZmljYXRpb24gcm91dGluZS4KKyAgICBpZiAodGVzdENhc2UudmVyaWZpZXIo
YnVmLCB0ZXN0Q2FzZS50aHJlc2hvbGQsIHRlc3RDYXNlLm51bU9jY3VycmVuY2VzKSkKKyAgICAg
ICAgdGVzdFBhc3NlZCh0ZXN0Q2FzZS5kZXNjcmlwdGlvbik7CisgICAgZWxzZQorICAgICAgICB0
ZXN0RmFpbGVkKHRlc3RDYXNlLmRlc2NyaXB0aW9uKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkg
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBXcmFwcGVycyBmb3IgcHJvZ3JhbW1hdGljIGNvbnN0cnVjdGlvbiBvZiBJbWFnZSBhbmQg
SW1hZ2VEYXRhCisvLworCitmdW5jdGlvbiBJbWFnZVdyYXBwZXIod2lkdGgsIGhlaWdodCkKK3sK
KyAgICB0aGlzLnBuZ0J1aWxkZXJfID0gbmV3IFBOR2xpYih3aWR0aCwgaGVpZ2h0LCAyNTYpOwor
fQorCitJbWFnZVdyYXBwZXIucHJvdG90eXBlLmdldFdpZHRoID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIHRoaXMucG5nQnVpbGRlcl8ud2lkdGg7Cit9OworCitJbWFnZVdyYXBwZXIucHJvdG90
eXBlLmdldEhlaWdodCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnBuZ0J1aWxkZXJf
LmhlaWdodDsKK307CisKK0ltYWdlV3JhcHBlci5wcm90b3R5cGUuc2V0UGl4ZWwgPSBmdW5jdGlv
bih4LCB5LCByLCBnLCBiLCBhKSB7CisgICAgdGhpcy5wbmdCdWlsZGVyXy5idWZmZXJbdGhpcy5w
bmdCdWlsZGVyXy5pbmRleCh4LCB5KV0gPSB0aGlzLnBuZ0J1aWxkZXJfLmNvbG9yKHIsIGcsIGIs
IGEpOworfTsKKworLy8gR2VuZXJhdGVzIGRhdGEgaW50byAiZGF0YSIgcHJvcGVydHksIHBvc3Np
Ymx5IGFzeW5jaHJvbm91c2x5LgorSW1hZ2VXcmFwcGVyLnByb3RvdHlwZS5nZW5lcmF0ZURhdGEg
PSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGhhdCA9IHRoaXM7CisgICAgdmFyIGltZyA9IG5ldyBJ
bWFnZSgpOworICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhhdC5kYXRh
ID0gaW1nOworICAgICAgICBtYXliZVJ1blRlc3RzKCk7CisgICAgfTsKKyAgICBpbWcuc3JjID0g
ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiICsgdGhpcy5wbmdCdWlsZGVyXy5nZXRCYXNlNjQoKTsK
K307CisKK2Z1bmN0aW9uIEltYWdlRGF0YVdyYXBwZXIod2lkdGgsIGhlaWdodCkKK3sKKyAgICBp
ZiAoIUltYWdlRGF0YVdyYXBwZXIudGVtcENhbnZhcykgeworICAgICAgICBJbWFnZURhdGFXcmFw
cGVyLnRlbXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgICB9
CisgICAgdGhpcy5pbWFnZURhdGFfID0gSW1hZ2VEYXRhV3JhcHBlci50ZW1wQ2FudmFzLmdldENv
bnRleHQoIjJkIikuY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpOworfQorCitJbWFnZURh
dGFXcmFwcGVyLnRlbXBDYW52YXMgPSBudWxsOworCitJbWFnZURhdGFXcmFwcGVyLnByb3RvdHlw
ZS5nZXRXaWR0aCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmltYWdlRGF0YV8ud2lk
dGg7Cit9OworCitJbWFnZURhdGFXcmFwcGVyLnByb3RvdHlwZS5nZXRIZWlnaHQgPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gdGhpcy5pbWFnZURhdGFfLmhlaWdodDsKK307CisKK0ltYWdlRGF0
YVdyYXBwZXIucHJvdG90eXBlLnNldFBpeGVsID0gZnVuY3Rpb24oeCwgeSwgciwgZywgYiwgYSkg
eworICAgIHZhciBpbmRleCA9IDQgKiAodGhpcy5pbWFnZURhdGFfLndpZHRoICogeSArIHgpOwor
ICAgIHRoaXMuaW1hZ2VEYXRhXy5kYXRhW2luZGV4XSA9IHI7CisgICAgdGhpcy5pbWFnZURhdGFf
LmRhdGFbaW5kZXggKyAxXSA9IGc7CisgICAgdGhpcy5pbWFnZURhdGFfLmRhdGFbaW5kZXggKyAy
XSA9IGI7CisgICAgdGhpcy5pbWFnZURhdGFfLmRhdGFbaW5kZXggKyAzXSA9IGE7Cit9OworCitJ
bWFnZURhdGFXcmFwcGVyLnByb3RvdHlwZS5nZW5lcmF0ZURhdGEgPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLmRhdGEgPSB0aGlzLmltYWdlRGF0YV87CisgICAgbWF5YmVSdW5UZXN0cygpOworfTsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb2xvciByYW1wIGdlbmVyYXRpb24gZnVuY3Rpb25zCisv
LworCitmdW5jdGlvbiBnZW5lcmF0ZU9wYXF1ZUdyYXlzY2FsZVJhbXAod3JhcHBlcikKK3sKKyAg
ICB2YXIgd2lkdGggPSB3cmFwcGVyLmdldFdpZHRoKCk7CisgICAgdmFyIGhlaWdodCA9IHdyYXBw
ZXIuZ2V0SGVpZ2h0KCk7CisgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Cisg
ICAgICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoMjU1LjAgKiB4IC8gd2lkdGgpOworICAgICAg
ICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KQorICAgICAgICAgICAgd3JhcHBlci5z
ZXRQaXhlbCh4LCB5LCB2YWx1ZSwgdmFsdWUsIHZhbHVlLCAyNTUpOworICAgIH0KK30KKworZnVu
Y3Rpb24gZ2VuZXJhdGVUcmFuc2x1Y2VudEdyYXlzY2FsZVJhbXAod3JhcHBlcikKK3sKKyAgICB2
YXIgd2lkdGggPSB3cmFwcGVyLmdldFdpZHRoKCk7CisgICAgdmFyIGhlaWdodCA9IHdyYXBwZXIu
Z2V0SGVpZ2h0KCk7CisgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAg
ICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoMjU1LjAgKiB4IC8gd2lkdGgpOworICAgICAgICBm
b3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KQorICAgICAgICAgICAgd3JhcHBlci5zZXRQ
aXhlbCh4LCB5LCB2YWx1ZSwgdmFsdWUsIHZhbHVlLCB2YWx1ZSk7CisgICAgfQorfQorCitmdW5j
dGlvbiBnZW5lcmF0ZVRyYW5zcGFyZW50R3JheXNjYWxlUmFtcCh3cmFwcGVyKQoreworICAgIHZh
ciB3aWR0aCA9IHdyYXBwZXIuZ2V0V2lkdGgoKTsKKyAgICB2YXIgaGVpZ2h0ID0gd3JhcHBlci5n
ZXRIZWlnaHQoKTsKKyAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKyAgICAg
ICAgdmFyIHZhbHVlID0gTWF0aC5yb3VuZCgyNTUuMCAqIHggLyB3aWR0aCk7CisgICAgICAgIGZv
ciAodmFyIHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpCisgICAgICAgICAgICB3cmFwcGVyLnNldFBp
eGVsKHgsIHksIHZhbHVlLCB2YWx1ZSwgdmFsdWUsIDApOworICAgIH0KK30KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBWZXJpZmljYXRpb24gcm91dGluZXMKKy8vCisKK2Z1bmN0aW9uIGFsbENoYW5u
ZWxzSW5jcmVhc2VCeU5vTW9yZVRoYW4oYXJyYXksIHRocmVzaG9sZCwgbnVtT2NjdXJyZW5jZXMp
IHsKKyAgICB2YXIgbnVtRm91bmQgPSAwOworICAgIGZvciAodmFyIGkgPSA0OyBpIDwgYXJyYXku
bGVuZ3RoOyBpICs9IDQpCisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKQorICAg
ICAgICAgICAgaWYgKGFycmF5W2kgKyBqXSAtIGFycmF5W2kgKyBqIC0gNF0gPiB0aHJlc2hvbGQp
CisgICAgICAgICAgICAgICAgKytudW1Gb3VuZDsKKworICAgIHJldHVybiBudW1Gb3VuZCA8IG51
bU9jY3VycmVuY2VzOworfQorCitmdW5jdGlvbiBhbHBoYUNoYW5uZWxJbmNyZWFzZXNCeU5vTW9y
ZVRoYW4oYXJyYXksIHRocmVzaG9sZCwgbnVtT2NjdXJyZW5jZXMpIHsKKyAgICB2YXIgbnVtRm91
bmQgPSAwOworICAgIGZvciAodmFyIGkgPSA3OyBpIDwgYXJyYXkubGVuZ3RoOyBpICs9IDQpCisg
ICAgICAgIGlmIChhcnJheVtpXSAtIGFycmF5W2kgLSA0XSA+IHRocmVzaG9sZCkKKyAgICAgICAg
ICAgICsrbnVtRm91bmQ7CisKKyAgICByZXR1cm4gbnVtRm91bmQgPCBudW1PY2N1cnJlbmNlczsK
K30KKworZnVuY3Rpb24gYWxsQ2hhbm5lbHNJbmNyZWFzZUJ5QXRMZWFzdChhcnJheSwgdGhyZXNo
b2xkLCBudW1PY2N1cnJlbmNlcykgeworICAgIHZhciBudW1Gb3VuZCA9IDA7CisgICAgZm9yICh2
YXIgaSA9IDQ7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gNCkKKyAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCA0OyArK2opCisgICAgICAgICAgICBpZiAoYXJyYXlbaSArIGpdIC0gYXJyYXlbaSAr
IGogLSA0XSA+IHRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICArK251bUZvdW5kOworCisgICAg
cmV0dXJuIG51bUZvdW5kID4gbnVtT2NjdXJyZW5jZXM7Cit9CisKK2Z1bmN0aW9uIGNvbG9yQ2hh
bm5lbHNBcmVaZXJvKGFycmF5LCB0aHJlc2hvbGQsIG51bU9jY3VycmVuY2VzKSB7CisgICAgdmFy
IHBhc3NlZCA9IHRydWU7CisgICAgdmFyIG51bUZhaWx1cmVzID0gMDsKKworICAgIGZvciAodmFy
IGkgPSA0OyBpIDwgYXJyYXkubGVuZ3RoOyBpICs9IDQpCisgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgMzsgKytqKQorICAgICAgICAgICAgaWYgKGFycmF5W2kgKyBqXSAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCsrbnVtRmFp
bHVyZXMgPCA1KQorICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICBhcnJheVsiICsgaSArICJd
IHNob3VsZCBoYXZlIGJlZW4gMCwgd2FzICIgKyBhcnJheVtpXSk7CisgICAgICAgICAgICB9CisK
KyAgICByZXR1cm4gcGFzc2VkOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0iaW5pdCgpIj4KKzxjYW52YXMgaWQ9ImV4YW1wbGUiIHdpZHRoPSIyNTZweCIgaGVpZ2h0PSIx
cHgiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9yZXNvdXJjZXMvcG5nbGliLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9wbmdsaWIuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvcG5nbGliLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIwNyBAQAorLyoqCisqIEEgaGFuZHkgY2xhc3MgdG8gY2FsY3VsYXRl
IGNvbG9yIHZhbHVlcy4KKyoKKyogQHZlcnNpb24gMS4wCisqIEBhdXRob3IgUm9iZXJ0IEVpc2Vs
ZSA8cm9iZXJ0QHhhcmcub3JnPgorKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxMCwgUm9i
ZXJ0IEVpc2VsZQorKiBAbGluayBodHRwOi8vd3d3Lnhhcmcub3JnLzIwMTAvMDMvZ2VuZXJhdGUt
Y2xpZW50LXNpZGUtcG5nLWZpbGVzLXVzaW5nLWphdmFzY3JpcHQvCisqIEBsaWNlbnNlIGh0dHA6
Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwIEJTRCBMaWNlbnNl
CisqCisqLworCisoZnVuY3Rpb24oKSB7CisKKwkvLyBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGF0
IGN0eAorCWZ1bmN0aW9uIHdyaXRlKGJ1ZmZlciwgb2ZmcykgeworCQlmb3IgKHZhciBpID0gMjsg
aSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworCQkJZm9yICh2YXIgaiA9IDA7IGogPCBhcmd1
bWVudHNbaV0ubGVuZ3RoOyBqKyspIHsKKwkJCQlidWZmZXJbb2ZmcysrXSA9IGFyZ3VtZW50c1tp
XS5jaGFyQXQoaik7CisJCQl9CisJCX0KKwl9CisKKwlmdW5jdGlvbiBieXRlMih3KSB7CisJCXJl
dHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCh3ID4+IDgpICYgMjU1LCB3ICYgMjU1KTsKKwl9CisK
KwlmdW5jdGlvbiBieXRlNCh3KSB7CisJCXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCh3ID4+
IDI0KSAmIDI1NSwgKHcgPj4gMTYpICYgMjU1LCAodyA+PiA4KSAmIDI1NSwgdyAmIDI1NSk7CisJ
fQorCisJZnVuY3Rpb24gYnl0ZTJsc2IodykgeworCQlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29k
ZSh3ICYgMjU1LCAodyA+PiA4KSAmIDI1NSk7CisJfQorCisJd2luZG93LlBOR2xpYiA9IGZ1bmN0
aW9uKHdpZHRoLGhlaWdodCxkZXB0aCkgeworCisJCXRoaXMud2lkdGggICA9IHdpZHRoOworCQl0
aGlzLmhlaWdodCAgPSBoZWlnaHQ7CisJCXRoaXMuZGVwdGggICA9IGRlcHRoOworCisJCS8vIHBp
eGVsIGRhdGEgYW5kIHJvdyBmaWx0ZXIgaWRlbnRpZmllciBzaXplCisJCXRoaXMucGl4X3NpemUg
PSBoZWlnaHQgKiAod2lkdGggKyAxKTsKKworCQkvLyBkZWZsYXRlIGhlYWRlciwgcGl4X3NpemUs
IGJsb2NrIGhlYWRlcnMsIGFkbGVyMzIgY2hlY2tzdW0KKwkJdGhpcy5kYXRhX3NpemUgPSAyICsg
dGhpcy5waXhfc2l6ZSArIDUgKiBNYXRoLmZsb29yKCgweGZmZmUgKyB0aGlzLnBpeF9zaXplKSAv
IDB4ZmZmZikgKyA0OworCisJCS8vIG9mZnNldHMgYW5kIHNpemVzIG9mIFBuZyBjaHVua3MKKwkJ
dGhpcy5paGRyX29mZnMgPSAwOwkJCQkJCQkJCS8vIElIRFIgb2Zmc2V0IGFuZCBzaXplCisJCXRo
aXMuaWhkcl9zaXplID0gNCArIDQgKyAxMyArIDQ7CisJCXRoaXMucGx0ZV9vZmZzID0gdGhpcy5p
aGRyX29mZnMgKyB0aGlzLmloZHJfc2l6ZTsJLy8gUExURSBvZmZzZXQgYW5kIHNpemUKKwkJdGhp
cy5wbHRlX3NpemUgPSA0ICsgNCArIDMgKiBkZXB0aCArIDQ7CisJCXRoaXMudHJuc19vZmZzID0g
dGhpcy5wbHRlX29mZnMgKyB0aGlzLnBsdGVfc2l6ZTsJLy8gdFJOUyBvZmZzZXQgYW5kIHNpemUK
KwkJdGhpcy50cm5zX3NpemUgPSA0ICsgNCArIGRlcHRoICsgNDsKKwkJdGhpcy5pZGF0X29mZnMg
PSB0aGlzLnRybnNfb2ZmcyArIHRoaXMudHJuc19zaXplOwkvLyBJREFUIG9mZnNldCBhbmQgc2l6
ZQorCQl0aGlzLmlkYXRfc2l6ZSA9IDQgKyA0ICsgdGhpcy5kYXRhX3NpemUgKyA0OworCQl0aGlz
LmllbmRfb2ZmcyA9IHRoaXMuaWRhdF9vZmZzICsgdGhpcy5pZGF0X3NpemU7CS8vIElFTkQgb2Zm
c2V0IGFuZCBzaXplCisJCXRoaXMuaWVuZF9zaXplID0gNCArIDQgKyA0OworCQl0aGlzLmJ1ZmZl
cl9zaXplICA9IHRoaXMuaWVuZF9vZmZzICsgdGhpcy5pZW5kX3NpemU7CS8vIHRvdGFsIFBORyBz
aXplCisKKwkJdGhpcy5idWZmZXIgID0gbmV3IEFycmF5KCk7CisJCXRoaXMucGFsZXR0ZSA9IG5l
dyBPYmplY3QoKTsKKwkJdGhpcy5waW5kZXggID0gMDsKKworCQl2YXIgX2NyYzMyID0gbmV3IEFy
cmF5KCk7CisKKwkJLy8gaW5pdGlhbGl6ZSBidWZmZXIgd2l0aCB6ZXJvIGJ5dGVzCisJCWZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5idWZmZXJfc2l6ZTsgaSsrKSB7CisJCQl0aGlzLmJ1ZmZlcltp
XSA9ICJceDAwIjsKKwkJfQorCisJCS8vIGluaXRpYWxpemUgbm9uLXplcm8gZWxlbWVudHMKKwkJ
d3JpdGUodGhpcy5idWZmZXIsIHRoaXMuaWhkcl9vZmZzLCBieXRlNCh0aGlzLmloZHJfc2l6ZSAt
IDEyKSwgJ0lIRFInLCBieXRlNCh3aWR0aCksIGJ5dGU0KGhlaWdodCksICJceDA4XHgwMyIpOwor
CQl3cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy5wbHRlX29mZnMsIGJ5dGU0KHRoaXMucGx0ZV9zaXpl
IC0gMTIpLCAnUExURScpOworCQl3cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy50cm5zX29mZnMsIGJ5
dGU0KHRoaXMudHJuc19zaXplIC0gMTIpLCAndFJOUycpOworCQl3cml0ZSh0aGlzLmJ1ZmZlciwg
dGhpcy5pZGF0X29mZnMsIGJ5dGU0KHRoaXMuaWRhdF9zaXplIC0gMTIpLCAnSURBVCcpOworCQl3
cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy5pZW5kX29mZnMsIGJ5dGU0KHRoaXMuaWVuZF9zaXplIC0g
MTIpLCAnSUVORCcpOworCisJCS8vIGluaXRpYWxpemUgZGVmbGF0ZSBoZWFkZXIKKwkJdmFyIGhl
YWRlciA9ICgoOCArICg3IDw8IDQpKSA8PCA4KSB8ICgzIDw8IDYpOworCQloZWFkZXIrPSAzMSAt
IChoZWFkZXIgJSAzMSk7CisKKwkJd3JpdGUodGhpcy5idWZmZXIsIHRoaXMuaWRhdF9vZmZzICsg
OCwgYnl0ZTIoaGVhZGVyKSk7CisKKwkJLy8gaW5pdGlhbGl6ZSBkZWZsYXRlIGJsb2NrIGhlYWRl
cnMKKwkJZm9yICh2YXIgaSA9IDA7IChpIDw8IDE2KSAtIDEgPCB0aGlzLnBpeF9zaXplOyBpKysp
IHsKKwkJCXZhciBzaXplLCBiaXRzOworCQkJaWYgKGkgKyAweGZmZmYgPCB0aGlzLnBpeF9zaXpl
KSB7CisJCQkJc2l6ZSA9IDB4ZmZmZjsKKwkJCQliaXRzID0gIlx4MDAiOworCQkJfSBlbHNlIHsK
KwkJCQlzaXplID0gdGhpcy5waXhfc2l6ZSAtIChpIDw8IDE2KSAtIGk7CisJCQkJYml0cyA9ICJc
eDAxIjsKKwkJCX0KKwkJCXdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLmlkYXRfb2ZmcyArIDggKyAy
ICsgKGkgPDwgMTYpICsgKGkgPDwgMiksIGJpdHMsIGJ5dGUybHNiKHNpemUpLCBieXRlMmxzYih+
c2l6ZSkpOworCQl9CisKKwkJLyogQ3JlYXRlIGNyYzMyIGxvb2t1cCB0YWJsZSAqLworCQlmb3Ig
KHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQl2YXIgYyA9IGk7CisJCQlmb3IgKHZhciBq
ID0gMDsgaiA8IDg7IGorKykgeworCQkJCWlmIChjICYgMSkgeworCQkJCQljID0gLTMwNjY3NDkx
MiBeICgoYyA+PiAxKSAmIDB4N2ZmZmZmZmYpOworCQkJCX0gZWxzZSB7CisJCQkJCWMgPSAoYyA+
PiAxKSAmIDB4N2ZmZmZmZmY7CisJCQkJfQorCQkJfQorCQkJX2NyYzMyW2ldID0gYzsKKwkJfQor
CisJCS8vIGNvbXB1dGUgdGhlIGluZGV4IGludG8gYSBwbmcgZm9yIGEgZ2l2ZW4gcGl4ZWwKKwkJ
dGhpcy5pbmRleCA9IGZ1bmN0aW9uKHgseSkgeworCQkJdmFyIGkgPSB5ICogKHRoaXMud2lkdGgg
KyAxKSArIHggKyAxOworCQkJdmFyIGogPSB0aGlzLmlkYXRfb2ZmcyArIDggKyAyICsgNSAqIE1h
dGguZmxvb3IoKGkgLyAweGZmZmYpICsgMSkgKyBpOworCQkJcmV0dXJuIGo7CisJCX0KKworCQkv
LyBjb252ZXJ0IGEgY29sb3IgYW5kIGJ1aWxkIHVwIHRoZSBwYWxldHRlCisJCXRoaXMuY29sb3Ig
PSBmdW5jdGlvbihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkgeworCisJCQlhbHBoYSA9IGFscGhh
ID49IDAgPyBhbHBoYSA6IDI1NTsKKwkJCXZhciBjb2xvciA9ICgoKCgoYWxwaGEgPDwgOCkgfCBy
ZWQpIDw8IDgpIHwgZ3JlZW4pIDw8IDgpIHwgYmx1ZTsKKworCQkJaWYgKHR5cGVvZiB0aGlzLnBh
bGV0dGVbY29sb3JdID09ICJ1bmRlZmluZWQiKSB7CisJCQkJaWYgKHRoaXMucGluZGV4ID09IHRo
aXMuZGVwdGgpIHJldHVybiAiXHgwMCI7CisKKwkJCQl2YXIgbmR4ID0gdGhpcy5wbHRlX29mZnMg
KyA4ICsgMyAqIHRoaXMucGluZGV4OworCisJCQkJdGhpcy5idWZmZXJbbmR4ICsgMF0gPSBTdHJp
bmcuZnJvbUNoYXJDb2RlKHJlZCk7CisJCQkJdGhpcy5idWZmZXJbbmR4ICsgMV0gPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGdyZWVuKTsKKwkJCQl0aGlzLmJ1ZmZlcltuZHggKyAyXSA9IFN0cmluZy5m
cm9tQ2hhckNvZGUoYmx1ZSk7CisJCQkJdGhpcy5idWZmZXJbdGhpcy50cm5zX29mZnMrOCt0aGlz
LnBpbmRleF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFscGhhKTsKKworCQkJCXRoaXMucGFsZXR0
ZVtjb2xvcl0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucGluZGV4KyspOworCQkJfQorCQkJ
cmV0dXJuIHRoaXMucGFsZXR0ZVtjb2xvcl07CisJCX0KKworCQkvLyBvdXRwdXQgYSBQTkcgc3Ry
aW5nLCBCYXNlNjQgZW5jb2RlZAorCQl0aGlzLmdldEJhc2U2NCA9IGZ1bmN0aW9uKCkgeworCisJ
CQl2YXIgcyA9IHRoaXMuZ2V0RHVtcCgpOworCisJCQl2YXIgY2ggPSAiQUJDREVGR0hJSktMTU5P
UFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iOworCQkJ
dmFyIGMxLCBjMiwgYzMsIGUxLCBlMiwgZTMsIGU0OworCQkJdmFyIGwgPSBzLmxlbmd0aDsKKwkJ
CXZhciBpID0gMDsKKwkJCXZhciByID0gIiI7CisKKwkJCWRvIHsKKwkJCQljMSA9IHMuY2hhckNv
ZGVBdChpKTsKKwkJCQllMSA9IGMxID4+IDI7CisJCQkJYzIgPSBzLmNoYXJDb2RlQXQoaSsxKTsK
KwkJCQllMiA9ICgoYzEgJiAzKSA8PCA0KSB8IChjMiA+PiA0KTsKKwkJCQljMyA9IHMuY2hhckNv
ZGVBdChpKzIpOworCQkJCWlmIChsIDwgaSsyKSB7IGUzID0gNjQ7IH0gZWxzZSB7IGUzID0gKChj
MiAmIDB4ZikgPDwgMikgfCAoYzMgPj4gNik7IH0KKwkJCQlpZiAobCA8IGkrMykgeyBlNCA9IDY0
OyB9IGVsc2UgeyBlNCA9IGMzICYgMHgzZjsgfQorCQkJCXIrPSBjaC5jaGFyQXQoZTEpICsgY2gu
Y2hhckF0KGUyKSArIGNoLmNoYXJBdChlMykgKyBjaC5jaGFyQXQoZTQpOworCQkJfSB3aGlsZSAo
KGkrPSAzKSA8IGwpOworCQkJcmV0dXJuIHI7CisJCX0KKworCQkvLyBvdXRwdXQgYSBQTkcgc3Ry
aW5nCisJCXRoaXMuZ2V0RHVtcCA9IGZ1bmN0aW9uKCkgeworCisJCQkvLyBjb21wdXRlIGFkbGVy
MzIgb2Ygb3V0cHV0IHBpeGVscyArIHJvdyBmaWx0ZXIgYnl0ZXMKKwkJCXZhciBCQVNFID0gNjU1
MjE7IC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCisJCQl2YXIgTk1BWCA9
IDU1NTI7ICAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsg
KG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KKwkJCXZhciBzMSA9IDE7CisJCQl2YXIgczIgPSAw
OworCQkJdmFyIG4gPSBOTUFYOworCisJCQlmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuaGVpZ2h0
OyB5KyspIHsKKwkJCQlmb3IgKHZhciB4ID0gLTE7IHggPCB0aGlzLndpZHRoOyB4KyspIHsKKwkJ
CQkJczErPSB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4KHgsIHkpXS5jaGFyQ29kZUF0KDApOworCQkJ
CQlzMis9IHMxOworCQkJCQlpZiAoKG4tPSAxKSA9PSAwKSB7CisJCQkJCQlzMSU9IEJBU0U7CisJ
CQkJCQlzMiU9IEJBU0U7CisJCQkJCQluID0gTk1BWDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJ
CXMxJT0gQkFTRTsKKwkJCXMyJT0gQkFTRTsKKwkJCXdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLmlk
YXRfb2ZmcyArIHRoaXMuaWRhdF9zaXplIC0gOCwgYnl0ZTQoKHMyIDw8IDE2KSB8IHMxKSk7CisK
KwkJCS8vIGNvbXB1dGUgY3JjMzIgb2YgdGhlIFBORyBjaHVua3MKKwkJCWZ1bmN0aW9uIGNyYzMy
KHBuZywgb2Zmcywgc2l6ZSkgeworCQkJCXZhciBjcmMgPSAtMTsKKwkJCQlmb3IgKHZhciBpID0g
NDsgaSA8IHNpemUtNDsgaSArPSAxKSB7CisJCQkJCWNyYyA9IF9jcmMzMlsoY3JjIF4gcG5nW29m
ZnMraV0uY2hhckNvZGVBdCgwKSkgJiAweGZmXSBeICgoY3JjID4+IDgpICYgMHgwMGZmZmZmZik7
CisJCQkJfQorCQkJCXdyaXRlKHBuZywgb2ZmcytzaXplLTQsIGJ5dGU0KGNyYyBeIC0xKSk7CisJ
CQl9CisKKwkJCWNyYzMyKHRoaXMuYnVmZmVyLCB0aGlzLmloZHJfb2ZmcywgdGhpcy5paGRyX3Np
emUpOworCQkJY3JjMzIodGhpcy5idWZmZXIsIHRoaXMucGx0ZV9vZmZzLCB0aGlzLnBsdGVfc2l6
ZSk7CisJCQljcmMzMih0aGlzLmJ1ZmZlciwgdGhpcy50cm5zX29mZnMsIHRoaXMudHJuc19zaXpl
KTsKKwkJCWNyYzMyKHRoaXMuYnVmZmVyLCB0aGlzLmlkYXRfb2ZmcywgdGhpcy5pZGF0X3NpemUp
OworCQkJY3JjMzIodGhpcy5idWZmZXIsIHRoaXMuaWVuZF9vZmZzLCB0aGlzLmllbmRfc2l6ZSk7
CisKKwkJCS8vIGNvbnZlcnQgUE5HIHRvIHN0cmluZworCQkJcmV0dXJuICJcMjExUE5HXHJcblww
MzJcbiIrdGhpcy5idWZmZXIuam9pbignJyk7CisJCX0KKwl9CisKK30pKCk7Cg==
</data>
<flag name="review"
          id="46509"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="46510"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>