<?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>198876</bug_id>
          
          <creation_ts>2019-06-14 18:02:56 -0700</creation_ts>
          <short_desc>[WHLSL] Support matrices</short_desc>
          <delta_ts>2019-06-18 19:36:50 -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>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1544914</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-06-14 18:02:56 -0700</bug_when>
    <thetext>[WHLSL] Support matrices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544915</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-14 18:04:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/51768882&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545730</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 12:38:48 -0700</bug_when>
    <thetext>Gonna do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545881</commentid>
    <comment_count>3</comment_count>
      <attachid>372404</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 16:32:04 -0700</bug_when>
    <thetext>Created attachment 372404
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545887</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 16:41:06 -0700</bug_when>
    <thetext>*** Bug 198313 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545901</commentid>
    <comment_count>5</comment_count>
      <attachid>372409</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 17:07:48 -0700</bug_when>
    <thetext>Created attachment 372409
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545902</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-06-18 17:10:53 -0700</bug_when>
    <thetext>Attachment 372409 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>1545903</commentid>
    <comment_count>7</comment_count>
      <attachid>372409</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-06-18 17:14:55 -0700</bug_when>
    <thetext>Comment on attachment 372409
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=372409&amp;action=review

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:629
&gt; +native float3 operator[](float2x3, uint);
&gt; +native float2x3 operator[]=(float2x3, uint, float3);

Why is this just for these two types?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:697
&gt; +    float2x3 result;
&gt; +    result[0][0] = a[0][0] - b;
&gt; +    result[0][1] = a[0][1] - b;
&gt; +    result[0][2] = a[0][2] - b;
&gt; +    result[1][0] = a[1][0] - b;
&gt; +    result[1][1] = a[1][1] - b;
&gt; +    result[1][2] = a[1][2] - b;
&gt; +    return result;

Why not just return operator+(a, -b)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545905</commentid>
    <comment_count>8</comment_count>
      <attachid>372409</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-18 17:19:04 -0700</bug_when>
    <thetext>Comment on attachment 372409
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=372409&amp;action=review

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:689
&gt; +float2x3 operator-(float2x3 a, float b) {

Can you add mul() for two mat4s and for a mat4 &amp; vec4?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:325
&gt; +    SetForScope&lt;Optional&lt;BreakContext&gt;&gt; breakContext(m_currentBreakContext, BreakContext::Loop);

This is cool. You’re saving the chain of contexts on the stack instead of in a member Vector.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:414
&gt;      // FIXME: https://bugs.webkit.org/show_bug.cgi?id=195812 Figure out whether we need to break or fallthrough.

Should this FIXME be deleted?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:60
&gt; +    if (dumpMetalCode) {

Cool.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:243
&gt; +        stringBuilder.append(makeString(&quot;    &quot;, metalReturnName, &quot; vectorResult;\n&quot;));

The result is always a vector, and all vectors have a scalar constructor, so you should be able to say “metalReturnName(0)”. That would be better than memset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545913</commentid>
    <comment_count>9</comment_count>
      <attachid>372409</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 17:53:52 -0700</bug_when>
    <thetext>Comment on attachment 372409
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=372409&amp;action=review

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:629
&gt;&gt; +native float2x3 operator[]=(float2x3, uint, float3);
&gt; 
&gt; Why is this just for these two types?

It was sufficient for testing the changes in this patch. I held off on adding more until we do this:
https://bugs.webkit.org/show_bug.cgi?id=198186

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:697
&gt;&gt; +    return result;
&gt; 
&gt; Why not just return operator+(a, -b)?

This is auto generated.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:414
&gt;&gt;      // FIXME: https://bugs.webkit.org/show_bug.cgi?id=195812 Figure out whether we need to break or fallthrough.
&gt; 
&gt; Should this FIXME be deleted?

I&apos;m not sure. I think that should be considered as part of closing out that bug. This just allowed us to use switch in the stdlib assuming it&apos;s well formed.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:243
&gt;&gt; +        stringBuilder.append(makeString(&quot;    &quot;, metalReturnName, &quot; vectorResult;\n&quot;));
&gt; 
&gt; The result is always a vector, and all vectors have a scalar constructor, so you should be able to say “metalReturnName(0)”. That would be better than memset.

sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545932</commentid>
    <comment_count>10</comment_count>
      <attachid>372409</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 18:47:45 -0700</bug_when>
    <thetext>Comment on attachment 372409
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=372409&amp;action=review

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:689
&gt;&gt; +float2x3 operator-(float2x3 a, float b) {
&gt; 
&gt; Can you add mul() for two mat4s and for a mat4 &amp; vec4?

Will add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545935</commentid>
    <comment_count>11</comment_count>
      <attachid>372418</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-18 18:53:49 -0700</bug_when>
    <thetext>Created attachment 372418
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545938</commentid>
    <comment_count>12</comment_count>
      <attachid>372418</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-18 19:36:49 -0700</bug_when>
    <thetext>Comment on attachment 372418
patch for landing

Clearing flags on attachment: 372418

Committed r246579: &lt;https://trac.webkit.org/changeset/246579&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545939</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-18 19:36:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372404</attachid>
            <date>2019-06-18 16:32:04 -0700</date>
            <delta_ts>2019-06-18 17:07:48 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>18245</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ2NTQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA3LDcg
KzUwNyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZpbmlzaFZpc2l0aW5nKEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJiwgUmVzb2x2aW5nVHlwZSogYWRkaXRpb25hbEFyZ3VtZW50VHlw
ZSA9IG51bGxwdHIpOwogCi0gICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdU
eXBlPiBtX3R5cGVNYXA7CisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBzdGQ6OnVuaXF1
ZV9wdHI8UmVzb2x2aW5nVHlwZT4+IG1fdHlwZU1hcDsKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVz
c2lvbiosIEFTVDo6VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb25zOwogICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Zy
YWdtZW50RW50cnlQb2ludHM7CkBAIC01MzcsNyArNTM3LDcgQEAgdm9pZCBDaGVja2VyOjp2aXNp
dChQcm9ncmFtJiBwcm9ncmFtKQogYm9vbCBDaGVja2VyOjphc3NpZ25UeXBlcygpCiB7CiAgICAg
Zm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5cGVNYXApIHsKLSAgICAgICAgYXV0byBzdWNj
ZXNzID0ga2V5VmFsdWVQYWlyLnZhbHVlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBrZXlWYWx1ZVBhaXIudmFsdWUtPnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewog
ICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZSh1bm5hbWVkVHlwZS0+Y2xvbmUo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSwgWyZdKFJlZlB0cjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsK
QEAgLTc4MCw3ICs3ODAsNyBAQCBhdXRvIENoZWNrZXI6OmdldEluZm8oQVNUOjpFeHByZXNzaW9u
JiBlCiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgfQotICAgIHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVlLCB0eXBlQW5ub3RhdGlvbkl0
ZXJhdG9yLT52YWx1ZSB9fTsKKyAgICByZXR1cm4ge3sgKnR5cGVJdGVyYXRvci0+dmFsdWUsIHR5
cGVBbm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVlIH19OwogfQogCiB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKQEAgLTgwMiw3
ICs4MDIsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhCiAKIHZv
aWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9u
IHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7Ci0gICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHVubmFtZWRUeXBlKSk7Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6Om1ha2Vf
dW5pcXVlPFJlc29sdmluZ1R5cGU+KFdURk1vdmUodW5uYW1lZFR5cGUpKSk7CiAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICBhdXRvIHR5cGVB
bm5vdGF0aW9uQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBX
VEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQW5ub3RhdGlv
bkFkZFJlc3VsdCwgdHlwZUFubm90YXRpb25BZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC04MTAs
NyArODEwLDcgQEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbgogCiB2
b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZWZQ
dHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UsIEFT
VDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsK
LSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUo
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8UmVzb2x2aW5nVHlwZT4oV1RGTW92
ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgIGF1dG8gdHlwZUFubm90YXRpb25BZGRSZXN1
bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90
YXRpb24pKTsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0LCB0eXBl
QW5ub3RhdGlvbkFkZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTgxOSwxMCArODE5LDEwIEBAIHZv
aWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24KIHZvaWQgQ2hlY2tlcjo6Zm9y
d2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiByZXNv
bHZpbmdUeXBlLCBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdo
dFZhbHVlKCkpCiB7CiAgICAgcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3VsdCkgewotICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC0+Y2xvbmUoKSk7Cisg
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihyZXN1bHQtPmNsb25lKCkpKTsKICAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9LCBbJl0o
UmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7
CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3Rk
OjptYWtlX3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihyZXN1bHQuY29weVJlZigpKSk7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfSkp
OwogICAgIGF1dG8gdHlwZUFubm90YXRpb25BZGRSZXN1bHQgPSBtX3R5cGVBbm5vdGF0aW9ucy5h
ZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAko
cmV2aXNpb24gMjQ2NTUwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBuYW1lc3Bh
Y2UgV0hMU0wgewogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEJlZm9yZUVhY2hQYXNz
ID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2luZyA9IGZh
bHNlOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBdEVuZCA9IGZhbHNlOworc3RhdGlj
IGNvbnN0ZXhwciBib29sIGR1bXBBU1RBdEVuZCA9IHRydWU7CiBzdGF0aWMgY29uc3RleHByIGJv
b2wgYWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29s
IGR1bXBQYXNzRmFpbHVyZSA9IGR1bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0ZXJQ
YXJzaW5nIHx8IGR1bXBBU1RBdEVuZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFy
eS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CShyZXZpc2lvbiAyNDY1NDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTYyNiwzICs2MjYsNzUgQEAgb3BlcmF0b3IgZmxvYXQ0KGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IAogfQogCiAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5Mjg5MCBJbnNlcnQgdGhlIHJlc3Qgb2YgdGhlIHN0YW5kYXJkIGxpYnJh
cnkgb25jZSB0aGUgcGFyc2VyIGlzIGZhc3QgZW5vdWdoCisKK25hdGl2ZSBmbG9hdDMgb3BlcmF0
b3JbXShmbG9hdDJ4MywgdWludCk7CituYXRpdmUgZmxvYXQyeDMgb3BlcmF0b3JbXT0oZmxvYXQy
eDMsIHVpbnQsIGZsb2F0Myk7CitmbG9hdCBvcGVyYXRvcltdKGZsb2F0MyB2LCB1aW50IGluZGV4
KSB7CisgICAgc3dpdGNoIChpbmRleCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBy
ZXR1cm4gdi54OworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gdi55OworICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gdi56OworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwLjA7Cit9CitmbG9hdDMgb3Bl
cmF0b3JbXT0oZmxvYXQzIHYsIHVpbnQgaW5kZXgsIGZsb2F0IGEpIHsKKyAgICBzd2l0Y2ggKGlu
ZGV4KSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHYueCA9IGE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgdi55ID0gYTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB2LnogPSBhOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIHY7Cit9CitmbG9hdDJ4MyBvcGVyYXRvcisoZmxvYXQyeDMgYSwgZmxvYXQy
eDMgYikgeworICAgIGZsb2F0MngzIHJlc3VsdDsKKyAgICByZXN1bHRbMF1bMF0gPSBhWzBdWzBd
ICsgYlswXVswXTsKKyAgICByZXN1bHRbMF1bMV0gPSBhWzBdWzFdICsgYlswXVsxXTsKKyAgICBy
ZXN1bHRbMF1bMl0gPSBhWzBdWzJdICsgYlswXVsyXTsKKyAgICByZXN1bHRbMV1bMF0gPSBhWzFd
WzBdICsgYlsxXVswXTsKKyAgICByZXN1bHRbMV1bMV0gPSBhWzFdWzFdICsgYlsxXVsxXTsKKyAg
ICByZXN1bHRbMV1bMl0gPSBhWzFdWzJdICsgYlsxXVsyXTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorZmxvYXQyeDMgb3BlcmF0b3IqKGZsb2F0MngzIGEsIGZsb2F0IGIpIHsKKyAgICBmbG9hdDJ4
MyByZXN1bHQ7CisgICAgcmVzdWx0WzBdWzBdID0gYVswXVswXSAqIGI7CisgICAgcmVzdWx0WzBd
WzFdID0gYVswXVsxXSAqIGI7CisgICAgcmVzdWx0WzBdWzJdID0gYVswXVsyXSAqIGI7CisgICAg
cmVzdWx0WzFdWzBdID0gYVsxXVswXSAqIGI7CisgICAgcmVzdWx0WzFdWzFdID0gYVsxXVsxXSAq
IGI7CisgICAgcmVzdWx0WzFdWzJdID0gYVsxXVsyXSAqIGI7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KK2Zsb2F0MngzIG9wZXJhdG9yKyhmbG9hdDJ4MyBhLCBmbG9hdCBiKSB7CisgICAgZmxvYXQy
eDMgcmVzdWx0OworICAgIHJlc3VsdFswXVswXSA9IGFbMF1bMF0gKyBiOworICAgIHJlc3VsdFsw
XVsxXSA9IGFbMF1bMV0gKyBiOworICAgIHJlc3VsdFswXVsyXSA9IGFbMF1bMl0gKyBiOworICAg
IHJlc3VsdFsxXVswXSA9IGFbMV1bMF0gKyBiOworICAgIHJlc3VsdFsxXVsxXSA9IGFbMV1bMV0g
KyBiOworICAgIHJlc3VsdFsxXVsyXSA9IGFbMV1bMl0gKyBiOworICAgIHJldHVybiByZXN1bHQ7
Cit9CitmbG9hdDJ4MyBvcGVyYXRvci0oZmxvYXQyeDMgYSwgZmxvYXQgYikgeworICAgIGZsb2F0
MngzIHJlc3VsdDsKKyAgICByZXN1bHRbMF1bMF0gPSBhWzBdWzBdIC0gYjsKKyAgICByZXN1bHRb
MF1bMV0gPSBhWzBdWzFdIC0gYjsKKyAgICByZXN1bHRbMF1bMl0gPSBhWzBdWzJdIC0gYjsKKyAg
ICByZXN1bHRbMV1bMF0gPSBhWzFdWzBdIC0gYjsKKyAgICByZXN1bHRbMV1bMV0gPSBhWzFdWzFd
IC0gYjsKKyAgICByZXN1bHRbMV1bMl0gPSBhWzFdWzJdIC0gYjsKKyAgICByZXR1cm4gcmVzdWx0
OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0
NjU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDEzIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKS5sZWZ0VmFsdWU7CiAg
ICAgfQogCisgICAgZW51bSBjbGFzcyBCcmVha0NvbnRleHQgeworICAgICAgICBMb29wLAorICAg
ICAgICBTd2l0Y2gKKyAgICB9OworCisgICAgT3B0aW9uYWw8QnJlYWtDb250ZXh0PiBtX2N1cnJl
bnRCcmVha0NvbnRleHQ7CisKICAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiAgICAgVHlw
ZU5hbWVyJiBtX3R5cGVOYW1lcjsKICAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOwpAQCAtMjcxLDkgKzI3OCwxNyBAQCB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkJyZWFrJikKIHsKLSAgICBBU1NFUlQobV9icmVha091
dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLmxlbmd0aCgpKTsKLSAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxl
LCAiID0gdHJ1ZTtcbiIpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJicmVhaztcbiIp
OworICAgIEFTU0VSVChtX2N1cnJlbnRCcmVha0NvbnRleHQpOworICAgIHN3aXRjaCAoKm1fY3Vy
cmVudEJyZWFrQ29udGV4dCkgeworICAgIGNhc2UgQnJlYWtDb250ZXh0OjpTd2l0Y2g6CisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImJyZWFrO1xuIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQnJlYWtDb250ZXh0OjpMb29wOgorICAgICAgICBBU1NFUlQobV9icmVha091dE9m
Q3VycmVudExvb3BFYXJseVZhcmlhYmxlLmxlbmd0aCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJs
ZSwgIiA9IHRydWU7XG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImJyZWFr
O1xuIik7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6Q29udGludWUmKQpAQCAtMzA3LDYgKzMyMiw3IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjplbWl0TG9vcCgKICAgICB9CiAKICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJkbyB7XG4iKTsKKyAgICBTZXRGb3JTY29wZTxPcHRpb25hbDxCcmVh
a0NvbnRleHQ+PiBicmVha0NvbnRleHQobV9jdXJyZW50QnJlYWtDb250ZXh0LCBCcmVha0NvbnRl
eHQ6Okxvb3ApOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChib2R5KTsKICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ9IHdoaWxlKGZhbHNlKTsgXG4iKTsKICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFy
aWFibGUsICIpIGJyZWFrO1xuIikpOwpAQCAtMzkzLDkgKzQwOSwxMCBAQCB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiY2FzZSAiLCBjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoKnN3aXRjaENh
c2UudmFsdWUoKSksICI6XG4iKSk7CiAgICAgZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKCJkZWZhdWx0OlxuIik7CisgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8QnJlYWtDb250
ZXh0Pj4gYnJlYWtDb250ZXh0KG1fY3VycmVudEJyZWFrQ29udGV4dCwgQnJlYWtDb250ZXh0OjpT
d2l0Y2gpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlLmJsb2NrKCkpOwogICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1ODEy
IEZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyZWFrIG9yIGZhbGx0aHJvdWdoLgotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VHJhcCYpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDY1NDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJX
SExTTFR5cGVOYW1lci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNw
YWNlIFdITFNMIHsKQEAgLTcxLDYgKzczLDcgQEAgQ29tcHV0ZU1ldGFsQ29kZSBnZW5lcmF0ZU1l
dGFsQ29kZShQcm9ncgogICAgIGF1dG8gbWV0YWxUeXBlcyA9IHR5cGVOYW1lci5tZXRhbFR5cGVz
KCk7CiAgICAgYXV0byBtZXRhbEZ1bmN0aW9ucyA9IE1ldGFsOjptZXRhbEZ1bmN0aW9ucyhwcm9n
cmFtLCB0eXBlTmFtZXIsIFdURk1vdmUobWF0Y2hlZFNlbWFudGljcyksIGxheW91dCk7CiAgICAg
YXV0byBtZXRhbENvZGUgPSBnZW5lcmF0ZU1ldGFsQ29kZVNoYXJlZChXVEZNb3ZlKG1ldGFsVHlw
ZXMpLCBXVEZNb3ZlKG1ldGFsRnVuY3Rpb25zLm1ldGFsU291cmNlKSk7CisgICAgZGF0YUxvZ0xu
KG1ldGFsQ29kZSk7CiAgICAgcmV0dXJuIHsgV1RGTW92ZShtZXRhbENvZGUpLCBXVEZNb3ZlKG1l
dGFsRnVuY3Rpb25zLm1hbmdsZWRFbnRyeVBvaW50TmFtZSkgfTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldy
aXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjU0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBACiAjaW5j
bHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtMjI1LDYgKzIyNyw0MSBAQCBTdHJpbmcg
d3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCisgICAgYXV0byBtYXRyaXhSb3dTaXplID0gWyZd
IHsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVy
ZW5jZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OworICAgICAgICBhdXRvJiBtYXRyaXhUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4oZG93bmNhc3Q8QVNUOjpUeXBl
RGVmaW5pdGlvbj4odHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkudHlwZSgpKS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChtYXRyaXhUeXBlLm5hbWUoKSA9PSAibWF0cml4Iik7
CisgICAgICAgIEFTU0VSVChtYXRyaXhUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMyk7
CisgICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbj4obWF0cml4VHlwZS50eXBlQXJndW1lbnRzKClbMV0pLmludGVnZXJMaXRlcmFsKCku
dmFsdWUoKSk7CisgICAgfTsKKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkpIHtc
biIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIGlmIChp
IDwgIiwgbWF0cml4Um93U2l6ZSgpLCAiKSByZXR1cm4gbVtpXTtcbiIpKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1ldGFsUmV0dXJuTmFtZSwgIiB2
ZWN0b3JSZXN1bHQ7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICAiLCBtZW1zZXRaZXJvRnVuY3Rpb25OYW1lLCAiKHZlY3RvclJlc3VsdCk7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgcmV0dXJuIHZlY3RvclJlc3VsdDtc
biIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsKKyAgICAgICAgQVNTRVJU
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAzKTsKKyAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7
CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBl
KCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+
dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQ
YXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAiIHYpIHtcbiIpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIGlmIChpIDwgIiwg
bWF0cml4Um93U2l6ZSgpLCAiKSBtW2ldID0gdjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiAgICByZXR1cm4gbTtcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
fQorCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVyYXRvcigpKSB7CiAg
ICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwpJbmRl
eDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXguaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAorYm9vbCBhbGxFcXVhbChmbG9hdDJ4MyBt
YXQsIGZsb2F0IHZhbHVlKQoreworICAgIGZvciAodWludCBpID0gMDsgaSA8IDI7IGkgPSBpICsg
MSkgeworICAgICAgICBmb3IgKHVpbnQgaiA9IDA7IGogPCAzOyBqID0gaiArIDEpIHsKKyAgICAg
ICAgICAgIGlmIChtYXRbaV1bal0gIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitbbnVtdGhyZWFk
cygxLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1
ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJ
RCkgeworICAgIGZsb2F0MngzIGZvbzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgMCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIDEuMDsKKyAgICBpZiAoIWFsbEVxdWFsKGZv
bywgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyAqIDguNTsKKyAgICBpZiAo
IWFsbEVxdWFsKGZvbywgOC41KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9vID0gZm9vIC0g
Ny41OworICAgIGlmICghYWxsRXF1YWwoZm9vLCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9vID0gZm9vICsgMS4wOworICAgIGlmICghYWxsRXF1YWwoZm9vLCAyKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZm9vID0gZm9vICsgZm9vOworICAgIGlmICghYWxsRXF1YWwoZm9vLCA0KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gYnVmZmVy
W3VpbnQodGhyZWFkSUQueCldICogMi4wOworfQorYDsKK2xldCByZXN1bHRzRmxvYXQzMkFycmF5
OworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5h
dmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBh
ZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0
b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3Vw
TGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0
fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVs
aW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlw
dG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAg
YnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2
OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5
WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVm
ZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNv
bnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVm
ZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJl
c291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0g
e2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsK
KyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERl
c2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29t
bWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZm
ZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRl
UGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0
ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5kaXNwYXRjaCg0LCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFz
cygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsK
KyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNv
bnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5j
KCk7CisgICAgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0Fy
cmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVswXSIsICIyIik7
CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMV0iLCAiNCIpOworICAgIHNob3Vs
ZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzJdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0
c0Zsb2F0MzJBcnJheVszXSIsICI4Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJy
YXlbNF0iLCAiNSIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzVdIiwgIjYi
KTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs2XSIsICI3Iik7CisgICAgc2hv
dWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbN10iLCAiOCIpOworICAgIHJlc3VsdHNCdWZmZXIu
dW5tYXAoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7
CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372409</attachid>
            <date>2019-06-18 17:07:48 -0700</date>
            <delta_ts>2019-06-18 18:53:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>22244</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE5LTA2LTE4ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gU3VwcG9ydCBtYXRy
aWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
ODc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTc2ODg4Mj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgaW4gc3VwcG9y
dCBmb3IgbWF0cmljZXMgdG8gV0hMU0wuIE1vc3QgbWF0cml4IHJlbGF0ZWQgY29kZQorICAgICAg
ICBpcyBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBUaGlzIHBhdGNoIGp1c3QgbmVl
ZGVkIHRvIGFkZCBzdXBwb3J0CisgICAgICAgIGZvciB0aGUgbmF0aXZlIGZ1bmN0aW9ucyBvcGVy
YXRvcltdIGFuZCBvcGVyYXRvcltdPSBvbiBtYXRyaXggdHlwZXMuIFRoZSBvbmx5CisgICAgICAg
IG5hdGl2ZSBmdW5jdGlvbnMgdGhhdCBhcmUgbmFtZWQgb3BlcmF0b3JbXSBhbmQgb3BlcmF0b3Jb
XT0gYXJlIGZvciBtYXRyaXgKKyAgICAgICAgb3BlcmF0aW9ucywgc28gd2Ugc3Ryb25nbHkgYXNz
dW1lIHdoZW4gZ2VuZXJhdGluZyBjb2RlIGZvciBuYXRpdmUgb3BlcmF0b3JbXSBhbmQKKyAgICAg
ICAgb3BlcmF0b3JbXT0gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggbWF0cml4IHR5cGVzLgorICAg
ICAgICAKKyAgICAgICAgb3BlcmF0b3JbXT0gaWdub3JlcyB0aGUgd3JpdGUgaWYgdGhlIGluZGV4
IGlzIG91dCBvZiBib3VuZHMuIG9wZXJhdG9yW10KKyAgICAgICAgcmV0dXJucyBhIHplcm9lZCB2
ZWN0b3IgaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuICAKKyAgICAgICAgCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxzbyBpbmNvcnBvcmF0ZXMgdHdvIGJ1ZyBmaXhlczoKKyAgICAgICAgMS4g
VGhpcyBwYXRjaCB0YWtlcyBSb2JpbidzIHBhdGNoIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTgzMTMgdG8gZW5zdXJlCisgICAgICAgIHdlIGRvbid0IGhhdmUg
cG9pbnRlcnMgdG8gdmFsdWVzIGluIGEgaGFzaCBtYXAuIFRoaXMgd2FzIG5lZWRlZCBpbiB0aGlz
IHBhdGNoCisgICAgICAgIG90aGVyd2lzZSB3ZSdkIGNyYXNoIHBhcnNpbmcgdGhlIHN0YW5kYXJk
IGxpYnJhcnkuCisgICAgICAgIAorICAgICAgICAyLiBUaGlzIHBhdGNoIGZpeGVzIGhvdyB3ZSBo
YW5kbGUgImJyZWFrIiBpbiBtZXRhbCBjb2RlZ2VuLiBXaGVuIEkgZmlyc3QKKyAgICAgICAgaW1w
bGVtZW50ZWQgYnJlYWssIEkgc3Ryb25nbHkgYXNzdW1lZCB3ZSB3ZXJlIGluIGEgbG9vcC4gSG93
ZXZlciwgYnJlYWsKKyAgICAgICAgY2FuIGJlIGVpdGhlciBmcm9tIGEgbG9vcCBvciBmcm9tIHN3
aXRjaC4gVGhpcyBwYXRjaCB0ZWFjaGVzIHRoZSBtZXRhbCBjb2RlCisgICAgICAgIGdlbmVyYXRv
ciB0byB0cmFjayB3aGljaCBjb250ZXh0IHdlJ3JlIGluIGFuZCB0byBlbWl0IGNvZGUgYWNjb3Jk
aW5nbHkuCisKKyAgICAgICAgVGVzdDogd2ViZ3B1L3dobHNsLW1hdHJpeC5odG1sCisKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6ZW1pdExvb3ApOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6Z2VuZXJhdGVNZXRhbENvZGVTaGFyZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkNoZWNrZXI6OmFzc2lnblR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpD
aGVja2VyOjpnZXRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3Np
Z25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpmb3J3YXJkVHlwZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0
OgorCiAyMDE5LTA2LTE4ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViU29ja2V0RGVmbGF0ZXIgdXNlcyBhbiB1bm5lY2Vzc2FyaWx5IGNvbnN0cmFp
bmVkIGNvbXByZXNzaW9uIG1lbW9yeSBsZXZlbApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDY1
NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNyArNTA3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mLCBSZXNvbHZp
bmdUeXBlKiBhZGRpdGlvbmFsQXJndW1lbnRUeXBlID0gbnVsbHB0cik7CiAKLSAgICBIYXNoTWFw
PEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmluZ1R5cGU+IG1fdHlwZU1hcDsKKyAgICBIYXNoTWFw
PEFTVDo6RXhwcmVzc2lvbiosIHN0ZDo6dW5pcXVlX3B0cjxSZXNvbHZpbmdUeXBlPj4gbV90eXBl
TWFwOwogICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgQVNUOjpUeXBlQW5ub3RhdGlvbj4g
bV90eXBlQW5ub3RhdGlvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2lu
dHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKQEAgLTUzNyw3
ICs1MzcsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCiBib29sIENo
ZWNrZXI6OmFzc2lnblR5cGVzKCkKIHsKICAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1f
dHlwZU1hcCkgewotICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBrZXlWYWx1ZVBhaXIudmFsdWUudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5h
bWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGtleVZhbHVlUGFpci52
YWx1ZS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICBrZXlWYWx1ZVBhaXIua2V5
LT5zZXRUeXBlKHVubmFtZWRUeXBlLT5jbG9uZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgewpAQCAtNzgwLDcgKzc4MCw3IEBAIGF1dG8gQ2hl
Y2tlcjo6Z2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mIGUKICAgICAgICAgc2V0RXJyb3IoKTsKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHt7IHR5cGVJdGVy
YXRvci0+dmFsdWUsIHR5cGVBbm5vdGF0aW9uSXRlcmF0b3ItPnZhbHVlIH19OworICAgIHJldHVy
biB7eyAqdHlwZUl0ZXJhdG9yLT52YWx1ZSwgdHlwZUFubm90YXRpb25JdGVyYXRvci0+dmFsdWUg
fX07CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2
YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmEKIAogdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdW5u
YW1lZFR5cGUsIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0
VmFsdWUoKSkKIHsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Np
b24sIFdURk1vdmUodW5uYW1lZFR5cGUpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8UmVzb2x2aW5nVHlwZT4oV1RGTW92
ZSh1bm5hbWVkVHlwZSkpKTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOwogICAgIGF1dG8gdHlwZUFubm90YXRpb25BZGRSZXN1bHQgPSBtX3R5cGVB
bm5vdGF0aW9ucy5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKICAg
ICBBU1NFUlRfVU5VU0VEKHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0LCB0eXBlQW5ub3RhdGlvbkFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKQEAgLTgxMCw3ICs4MTAsNyBAQCB2b2lkIENoZWNrZXI6OmFz
c2lnblR5cGUoQVNUOjpFeHByZXNzaW9uCiAKIHZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3Rh
dGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBl
TWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpOwor
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtl
X3VuaXF1ZTxSZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSkp
OwogICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAg
ICAgYXV0byB0eXBlQW5ub3RhdGlvbkFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgm
ZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQo
dHlwZUFubm90YXRpb25BZGRSZXN1bHQsIHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0LmlzTmV3RW50
cnkpOwpAQCAtODE5LDEwICs4MTksMTAgQEAgdm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFTVDo6
RXhwcmVzc2lvbgogdm9pZCBDaGVja2VyOjpmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4
cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6VHlwZUFubm90YXRp
b24gdHlwZUFubm90YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKSkKIHsKICAgICByZXNvbHZpbmdU
eXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYgcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhw
cmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5
cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJlc29sdmluZ1R5cGU+KHJl
c3VsdC0+Y2xvbmUoKSkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVz
dWx0LmlzTmV3RW50cnkpOwogICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZl
eHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJlc29sdmluZ1R5cGU+
KHJlc3VsdC5jb3B5UmVmKCkpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICB9KSk7CiAgICAgYXV0byB0eXBlQW5ub3RhdGlvbkFk
ZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0eXBl
QW5ub3RhdGlvbikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTdGFuZGFyZExpYnJhcnkudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dAkocmV2aXNpb24gMjQ2
NTQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFy
ZExpYnJhcnkudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MjUsNCArNjI1LDc2IEBAIG9wZXJhdG9y
IGZsb2F0NChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCAKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CituYXRpdmUgZmxvYXQzIG9wZXJhdG9yW10oZmxvYXQyeDMsIHVpbnQpOworbmF0aXZlIGZsb2F0
MngzIG9wZXJhdG9yW109KGZsb2F0MngzLCB1aW50LCBmbG9hdDMpOworZmxvYXQgb3BlcmF0b3Jb
XShmbG9hdDMgdiwgdWludCBpbmRleCkgeworICAgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICAgICAg
Y2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIHYueDsKKyAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgcmV0dXJuIHYueTsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIHYu
ejsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gMC4wOworfQorZmxvYXQzIG9wZXJhdG9yW109KGZsb2F0MyB2LCB1aW50IGluZGV4LCBmbG9h
dCBhKSB7CisgICAgc3dpdGNoIChpbmRleCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAg
ICB2LnggPSBhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAg
ICAgIHYueSA9IGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgdi56ID0gYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB2OworfQorZmxvYXQyeDMgb3BlcmF0
b3IrKGZsb2F0MngzIGEsIGZsb2F0MngzIGIpIHsKKyAgICBmbG9hdDJ4MyByZXN1bHQ7CisgICAg
cmVzdWx0WzBdWzBdID0gYVswXVswXSArIGJbMF1bMF07CisgICAgcmVzdWx0WzBdWzFdID0gYVsw
XVsxXSArIGJbMF1bMV07CisgICAgcmVzdWx0WzBdWzJdID0gYVswXVsyXSArIGJbMF1bMl07Cisg
ICAgcmVzdWx0WzFdWzBdID0gYVsxXVswXSArIGJbMV1bMF07CisgICAgcmVzdWx0WzFdWzFdID0g
YVsxXVsxXSArIGJbMV1bMV07CisgICAgcmVzdWx0WzFdWzJdID0gYVsxXVsyXSArIGJbMV1bMl07
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK2Zsb2F0MngzIG9wZXJhdG9yKihmbG9hdDJ4MyBhLCBm
bG9hdCBiKSB7CisgICAgZmxvYXQyeDMgcmVzdWx0OworICAgIHJlc3VsdFswXVswXSA9IGFbMF1b
MF0gKiBiOworICAgIHJlc3VsdFswXVsxXSA9IGFbMF1bMV0gKiBiOworICAgIHJlc3VsdFswXVsy
XSA9IGFbMF1bMl0gKiBiOworICAgIHJlc3VsdFsxXVswXSA9IGFbMV1bMF0gKiBiOworICAgIHJl
c3VsdFsxXVsxXSA9IGFbMV1bMV0gKiBiOworICAgIHJlc3VsdFsxXVsyXSA9IGFbMV1bMl0gKiBi
OworICAgIHJldHVybiByZXN1bHQ7Cit9CitmbG9hdDJ4MyBvcGVyYXRvcisoZmxvYXQyeDMgYSwg
ZmxvYXQgYikgeworICAgIGZsb2F0MngzIHJlc3VsdDsKKyAgICByZXN1bHRbMF1bMF0gPSBhWzBd
WzBdICsgYjsKKyAgICByZXN1bHRbMF1bMV0gPSBhWzBdWzFdICsgYjsKKyAgICByZXN1bHRbMF1b
Ml0gPSBhWzBdWzJdICsgYjsKKyAgICByZXN1bHRbMV1bMF0gPSBhWzFdWzBdICsgYjsKKyAgICBy
ZXN1bHRbMV1bMV0gPSBhWzFdWzFdICsgYjsKKyAgICByZXN1bHRbMV1bMl0gPSBhWzFdWzJdICsg
YjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorZmxvYXQyeDMgb3BlcmF0b3ItKGZsb2F0MngzIGEs
IGZsb2F0IGIpIHsKKyAgICBmbG9hdDJ4MyByZXN1bHQ7CisgICAgcmVzdWx0WzBdWzBdID0gYVsw
XVswXSAtIGI7CisgICAgcmVzdWx0WzBdWzFdID0gYVswXVsxXSAtIGI7CisgICAgcmVzdWx0WzBd
WzJdID0gYVswXVsyXSAtIGI7CisgICAgcmVzdWx0WzFdWzBdID0gYVsxXVswXSAtIGI7CisgICAg
cmVzdWx0WzFdWzFdID0gYVsxXVsxXSAtIGI7CisgICAgcmVzdWx0WzFdWzJdID0gYVsxXVsyXSAt
IGI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTI4OTAgSW5zZXJ0IHRoZSByZXN0IG9mIHRoZSBzdGFu
ZGFyZCBsaWJyYXJ5IG9uY2UgdGhlIHBhcnNlciBpcyBmYXN0IGVub3VnaApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjU0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDEzIEBAIHByb3RlY3RlZDoKICAgICAgICAg
cmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKS5sZWZ0VmFsdWU7CiAgICAgfQogCisgICAgZW51bSBj
bGFzcyBCcmVha0NvbnRleHQgeworICAgICAgICBMb29wLAorICAgICAgICBTd2l0Y2gKKyAgICB9
OworCisgICAgT3B0aW9uYWw8QnJlYWtDb250ZXh0PiBtX2N1cnJlbnRCcmVha0NvbnRleHQ7CisK
ICAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiAgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1l
cjsKICAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVu
Y3Rpb25NYXBwaW5nOwpAQCAtMjcxLDkgKzI3OCwxNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUCiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkJyZWFrJikKIHsKLSAgICBBU1NFUlQobV9icmVha091dE9mQ3VycmVudExvb3BFYXJs
eVZhcmlhYmxlLmxlbmd0aCgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLCAiID0gdHJ1ZTtcbiIpKTsK
LSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJicmVhaztcbiIpOworICAgIEFTU0VSVChtX2N1
cnJlbnRCcmVha0NvbnRleHQpOworICAgIHN3aXRjaCAoKm1fY3VycmVudEJyZWFrQ29udGV4dCkg
eworICAgIGNhc2UgQnJlYWtDb250ZXh0OjpTd2l0Y2g6CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoImJyZWFrO1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnJlYWtDb250
ZXh0OjpMb29wOgorICAgICAgICBBU1NFUlQobV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZh
cmlhYmxlLmxlbmd0aCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIiA9IHRydWU7XG4iKSk7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImJyZWFrO1xuIik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6Q29udGludWUmKQpAQCAtMzA3LDYgKzMyMiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjplbWl0TG9vcCgKICAgICB9CiAKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJk
byB7XG4iKTsKKyAgICBTZXRGb3JTY29wZTxPcHRpb25hbDxCcmVha0NvbnRleHQ+PiBicmVha0Nv
bnRleHQobV9jdXJyZW50QnJlYWtDb250ZXh0LCBCcmVha0NvbnRleHQ6Okxvb3ApOwogICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChib2R5KTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IHdo
aWxlKGZhbHNlKTsgXG4iKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
ImlmICgiLCBtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFibGUsICIpIGJyZWFrO1xu
IikpOwpAQCAtMzkzLDkgKzQwOSw5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1QKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjYXNl
ICIsIGNvbnN0YW50RXhwcmVzc2lvblN0cmluZygqc3dpdGNoQ2FzZS52YWx1ZSgpKSwgIjpcbiIp
KTsKICAgICBlbHNlCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRlZmF1bHQ6XG4i
KTsKKyAgICBTZXRGb3JTY29wZTxPcHRpb25hbDxCcmVha0NvbnRleHQ+PiBicmVha0NvbnRleHQo
bV9jdXJyZW50QnJlYWtDb250ZXh0LCBCcmVha0NvbnRleHQ6OlN3aXRjaCk7CiAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU4MTIgRmlndXJlIG91dCB3aGV0aGVy
IHdlIG5lZWQgdG8gYnJlYWsgb3IgZmFsbHRocm91Z2guCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VHJhcCYpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFs
Q29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
NDY1NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TE1ldGFsQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uV3JpdGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlTmFt
ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw2ICszOSw4IEBAIG5h
bWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBNZXRhbCB7CiAKK3N0YXRpYyBjb25zdGV4cHIg
Ym9vbCBkdW1wTWV0YWxDb2RlID0gZmFsc2U7CisKIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVNZXRh
bENvZGVTaGFyZWQoU3RyaW5nJiYgbWV0YWxUeXBlcywgU3RyaW5nJiYgbWV0YWxGdW5jdGlvbnMp
CiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwpAQCAtNTMsNiArNTYsMTIgQEAg
c3RhdGljIFN0cmluZyBnZW5lcmF0ZU1ldGFsQ29kZVNoYXJlZChTdAogCiAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoV1RGTW92ZShtZXRhbFR5cGVzKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoV1RGTW92ZShtZXRhbEZ1bmN0aW9ucykpOworCisgICAgaWYgKGR1bXBNZXRhbENvZGUpIHsK
KyAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0ZWQgTWV0YWwgY29kZTogIik7CisgICAgICAgIGRh
dGFMb2dMbihzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIH0KKwogICAgIHJldHVybiBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDY1NDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw0MSBAQCBTdHJpbmcgd3JpdGVOYXRp
dmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7CiAgICAgfQogCisgICAgYXV0byBudW1iZXJPZk1hdHJpeFJvd3MgPSBbJl0gewor
ICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNl
PigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Cisg
ICAgICAgIGF1dG8mIG1hdHJpeFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4oZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPihkb3duY2FzdDxBU1Q6OlR5cGVEZWZp
bml0aW9uPih0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS50eXBlKCkpLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICAgICAgQVNTRVJUKG1hdHJpeFR5cGUubmFtZSgpID09ICJtYXRyaXgiKTsKKyAg
ICAgICAgQVNTRVJUKG1hdHJpeFR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNz
aW9uPihtYXRyaXhUeXBlLnR5cGVBcmd1bWVudHMoKVsxXSkuaW50ZWdlckxpdGVyYWwoKS52YWx1
ZSgpKTsKKyAgICB9OworCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJvcGVyYXRvcltdIikgeworICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0
YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSkge1xuIikp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgaWYgKGkgPCAi
LCBudW1iZXJPZk1hdHJpeFJvd3MoKSwgIikgcmV0dXJuIG1baV07XG4iKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtZXRhbFJldHVybk5hbWUsICIg
dmVjdG9yUmVzdWx0O1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIgICAgIiwgbWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSwgIih2ZWN0b3JSZXN1bHQpO1xuIikp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHJldHVybiB2ZWN0b3JSZXN1bHQ7
XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CisgICAgICAgIEFTU0VS
VChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7Cisg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlw
ZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0t
PnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFs
UGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiB2KSB7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBpZiAoaSA8ICIs
IG51bWJlck9mTWF0cml4Um93cygpLCAiKSBtW2ldID0gdjtcbiIpKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4gbTtcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
CisgICAgfQorCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVyYXRvcigp
KSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkp
OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjQ2NTUwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDYtMTggIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBTdXBwb3J0IG1hdHJpY2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg4NzYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxNzY4ODgyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViZ3B1L3dobHNsLW1hdHJpeC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1tYXRyaXguaHRtbDogQWRkZWQuCisK
IDIwMTktMDYtMTggIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAg
W1dITFNMXSBEbyBub3QgZ2VuZXJhdGUgZHVwbGljYXRlIGNvbnN0cnVjdG9ycy9jb3B5IGNvbnN0
cnVjdG9ycyBpbiBzeW50aGVzaXplQ29uc3RydWN0b3JzCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbWF0cml4LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbWF0cml4LWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyIEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVswXSBpcyAyCitQQVNTIHJlc3VsdHNGbG9h
dDMyQXJyYXlbMV0gaXMgNAorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzJdIGlzIDYKK1BBU1Mg
cmVzdWx0c0Zsb2F0MzJBcnJheVszXSBpcyA4CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0g
aXMgNQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzVdIGlzIDYKK1BBU1MgcmVzdWx0c0Zsb2F0
MzJBcnJheVs2XSBpcyA3CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbN10gaXMgOAorCkluZGV4
OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitib29sIGFsbEVxdWFsKGZsb2F0MngzIG1h
dCwgZmxvYXQgdmFsdWUpCit7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgMjsgaSA9IGkgKyAx
KSB7CisgICAgICAgIGZvciAodWludCBqID0gMDsgaiA8IDM7IGogPSBqICsgMSkgeworICAgICAg
ICAgICAgaWYgKG1hdFtpXVtqXSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1tudW10aHJlYWRz
KDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGZsb2F0W10gYnVm
ZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElE
KSB7CisgICAgZmxvYXQyeDMgZm9vOworICAgIGlmICghYWxsRXF1YWwoZm9vLCAwKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9vID0gZm9vICsgMS4wOworICAgIGlmICghYWxsRXF1YWwoZm9v
LCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9vID0gZm9vICogOC41OworICAgIGlmICgh
YWxsRXF1YWwoZm9vLCA4LjUpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb28gPSBmb28gLSA3
LjU7CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b28gPSBmb28gKyAxLjA7CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDIpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb28gPSBmb28gKyBmb287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmb28gPSBmb28gKyBmb287CisgICAgaWYgKCFhbGxFcXVh
bChmb28sIDgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdDMgZm91cnR5VHdvOworICAg
IGZvdXJ0eVR3by54ID0gNDI7CisgICAgZm91cnR5VHdvLnkgPSA0MjsKKyAgICBmb3VydHlUd28u
eiA9IDQyOworCisgICAgZm9vWzBdID0gZm91cnR5VHdvOworICAgIGZvb1sxXSA9IGZvdXJ0eVR3
bzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b29bMTMzN10gPSBmb3VydHlUd287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9vWzEwMDAwMDBdID0gZm91cnR5VHdvOworICAgIGlmICghYWxs
RXF1YWwoZm9vLCA0MikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvdXJ0eVR3b1sxMzM3XSA9
IDUwOworICAgIGZvb1sxXSA9IGZvdXJ0eVR3bzsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgNDIp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3VydHlUd29bMTAwMDAwMF0gPSA1MDsKKyAgICBm
b29bMV0gPSBmb3VydHlUd287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZmxvYXQzIHNob3VsZEJlWmVybyA9IGZvb1sxMDAwMDBdOworICAgIGlm
IChzaG91bGRCZVplcm8ueCAhPSAwIHx8IHNob3VsZEJlWmVyby55ICE9IDAgfHwgc2hvdWxkQmVa
ZXJvLnogIT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGZvdXJ0eVR3b1sxMDAwMDAw
MF0gIT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCld
ID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOworfQorYDsKK2xldCByZXN1bHRzRmxv
YXQzMkFycmF5OworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9
IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2Ug
PSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExh
eW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywg
dHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
YmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29t
cHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6
ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7CisKKyAgICBjb25zdCBidWZm
ZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBH
UFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZm
ZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZl
ckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAg
ICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9
IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxv
YXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3Vs
dHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdF
IHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9
OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNC
dWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiBy
ZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRp
bmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNj
cmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJp
bmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJp
bmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2Uu
Y3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVm
ZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBjb25z
dCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7Cisg
ICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNv
bXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCg0LCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29k
ZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5m
aW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsK
KworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFw
UmVhZEFzeW5jKCk7CisgICAgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXko
cmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVsw
XSIsICIyIik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMV0iLCAiNCIpOwor
ICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzJdIiwgIjYiKTsKKyAgICBzaG91bGRC
ZSgicmVzdWx0c0Zsb2F0MzJBcnJheVszXSIsICI4Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNG
bG9hdDMyQXJyYXlbNF0iLCAiNSIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5
WzVdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs2XSIsICI3Iik7
CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbN10iLCAiOCIpOworICAgIHJlc3Vs
dHNCdWZmZXIudW5tYXAoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVu
Y3Rpb24oKSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="388197"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372418</attachid>
            <date>2019-06-18 18:53:49 -0700</date>
            <delta_ts>2019-06-18 19:36:49 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>33661</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTA2LTE4ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gU3VwcG9ydCBtYXRy
aWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
ODc2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MTc2ODg4Mj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEZWFuIEphY2tzb24gYW5kIE15bGVzIE1heGZpZWxkLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBpbiBzdXBwb3J0IGZvciBtYXRyaWNlcyB0byBXSExTTC4gTW9zdCBtYXRyaXggcmVs
YXRlZCBjb2RlCisgICAgICAgIGlzIGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkIGxpYnJhcnkuIFRo
aXMgcGF0Y2gganVzdCBuZWVkZWQgdG8gYWRkIHN1cHBvcnQKKyAgICAgICAgZm9yIHRoZSBuYXRp
dmUgZnVuY3Rpb25zIG9wZXJhdG9yW10gYW5kIG9wZXJhdG9yW109IG9uIG1hdHJpeCB0eXBlcy4g
VGhlIG9ubHkKKyAgICAgICAgbmF0aXZlIGZ1bmN0aW9ucyB0aGF0IGFyZSBuYW1lZCBvcGVyYXRv
cltdIGFuZCBvcGVyYXRvcltdPSBhcmUgZm9yIG1hdHJpeAorICAgICAgICBvcGVyYXRpb25zLCBz
byB3ZSBzdHJvbmdseSBhc3N1bWUgd2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIG5hdGl2ZSBvcGVy
YXRvcltdIGFuZAorICAgICAgICBvcGVyYXRvcltdPSB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBt
YXRyaXggdHlwZXMuCisgICAgICAgIAorICAgICAgICBvcGVyYXRvcltdPSBpZ25vcmVzIHRoZSB3
cml0ZSBpZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gb3BlcmF0b3JbXQorICAgICAgICBy
ZXR1cm5zIGEgemVyb2VkIHZlY3RvciBpZiB0aGUgaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4gIAor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGluY29ycG9yYXRlcyB0d28gYnVnIGZp
eGVzOgorICAgICAgICAxLiBUaGlzIHBhdGNoIHRha2VzIFJvYmluJ3MgcGF0Y2ggaW4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODMxMyB0byBlbnN1cmUKKyAgICAg
ICAgd2UgZG9uJ3QgaGF2ZSBwb2ludGVycyB0byB2YWx1ZXMgaW4gYSBoYXNoIG1hcC4gVGhpcyB3
YXMgbmVlZGVkIGluIHRoaXMgcGF0Y2gKKyAgICAgICAgb3RoZXJ3aXNlIHdlJ2QgY3Jhc2ggcGFy
c2luZyB0aGUgc3RhbmRhcmQgbGlicmFyeS4KKyAgICAgICAgCisgICAgICAgIDIuIFRoaXMgcGF0
Y2ggZml4ZXMgaG93IHdlIGhhbmRsZSAiYnJlYWsiIGluIG1ldGFsIGNvZGVnZW4uIFdoZW4gSSBm
aXJzdAorICAgICAgICBpbXBsZW1lbnRlZCBicmVhaywgSSBzdHJvbmdseSBhc3N1bWVkIHdlIHdl
cmUgaW4gYSBsb29wLiBIb3dldmVyLCBicmVhaworICAgICAgICBjYW4gYmUgZWl0aGVyIGZyb20g
YSBsb29wIG9yIGZyb20gc3dpdGNoLiBUaGlzIHBhdGNoIHRlYWNoZXMgdGhlIG1ldGFsIGNvZGUK
KyAgICAgICAgZ2VuZXJhdG9yIHRvIHRyYWNrIHdoaWNoIGNvbnRleHQgd2UncmUgaW4gYW5kIHRv
IGVtaXQgY29kZSBhY2NvcmRpbmdseS4KKworICAgICAgICBUZXN0czogd2ViZ3B1L3dobHNsLW1h
dHJpeC0yLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93aGxzbC1tYXRyaXguaHRtbAorCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlU2hhcmVkKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6Q2hlY2tlcjo6Z2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6
YXNzaWduVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6Zm9yd2FyZFR5
cGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5
LnR4dDoKKwogMjAxOS0wNi0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtKU0NdIEpTTG9jayBzaG91bGQgYmUgV2ViVGhyZWFkIGF3YXJlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tl
ci5jcHAJKHJldmlzaW9uIDI0NjU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw3ICs1MDcsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBmaW5pc2hWaXNpdGluZyhBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUqIGFkZGl0aW9uYWxBcmd1bWVudFR5cGUgPSBudWxs
cHRyKTsKIAotICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgUmVzb2x2aW5nVHlwZT4gbV90
eXBlTWFwOworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgc3RkOjp1bmlxdWVfcHRyPFJl
c29sdmluZ1R5cGU+PiBtX3R5cGVNYXA7CiAgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBB
U1Q6OlR5cGVBbm5vdGF0aW9uPiBtX3R5cGVBbm5vdGF0aW9uczsKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV92ZXJ0ZXhFbnRyeVBvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9mcmFnbWVudEVu
dHJ5UG9pbnRzOwpAQCAtNTM3LDcgKzUzNyw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoUHJvZ3Jh
bSYgcHJvZ3JhbSkKIGJvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQogewogICAgIGZvciAoYXV0
byYga2V5VmFsdWVQYWlyIDogbV90eXBlTWFwKSB7Ci0gICAgICAgIGF1dG8gc3VjY2VzcyA9IGtl
eVZhbHVlUGFpci52YWx1ZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgYXV0byBzdWNj
ZXNzID0ga2V5VmFsdWVQYWlyLnZhbHVlLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKICAgICAgICAg
ICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGUodW5uYW1lZFR5cGUtPmNsb25lKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0sIFsmXShSZWZQdHI8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CkBAIC03ODAs
NyArNzgwLDcgQEAgYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZQogICAg
ICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KLSAg
ICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9yLT52YWx1ZSwgdHlwZUFubm90YXRpb25JdGVyYXRvci0+
dmFsdWUgfX07CisgICAgcmV0dXJuIHt7ICp0eXBlSXRlcmF0b3ItPnZhbHVlLCB0eXBlQW5ub3Rh
dGlvbkl0ZXJhdG9yLT52YWx1ZSB9fTsKIH0KIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCkBAIC04MDIsNyArODAyLDcg
QEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYQogCiB2b2lkIENoZWNr
ZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5u
b3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpKQogewotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh1bm5hbWVkVHlwZSkpOworICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwgc3RkOjptYWtlX3VuaXF1ZTxS
ZXNvbHZpbmdUeXBlPihXVEZNb3ZlKHVubmFtZWRUeXBlKSkpOwogICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgYXV0byB0eXBlQW5ub3RhdGlv
bkFkZFJlc3VsdCA9IG1fdHlwZUFubm90YXRpb25zLmFkZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh0
eXBlQW5ub3RhdGlvbikpOwogICAgIEFTU0VSVF9VTlVTRUQodHlwZUFubm90YXRpb25BZGRSZXN1
bHQsIHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0LmlzTmV3RW50cnkpOwpAQCAtODEwLDcgKzgxMCw3
IEBAIHZvaWQgQ2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24KIAogdm9pZCBDaGVj
a2VyOjphc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVmUHRyPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLCBBU1Q6OlR5cGVB
bm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9uID0gQVNUOjpSaWdodFZhbHVlKCkpCiB7Ci0gICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlKSk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZl
eHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPFJlc29sdmluZ1R5cGU+KFdURk1vdmUocmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UpKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKICAgICBhdXRvIHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0ID0gbV90
eXBlQW5ub3RhdGlvbnMuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7
CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQW5ub3RhdGlvbkFkZFJlc3VsdCwgdHlwZUFubm90YXRp
b25BZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC04MTksMTAgKzgxOSwxMCBAQCB2b2lkIENoZWNr
ZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uCiB2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBl
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlw
ZSwgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgp
KQogewogICAgIHJlc29sdmluZ1R5cGUudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKLSAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlx
dWU8UmVzb2x2aW5nVHlwZT4ocmVzdWx0LT5jbG9uZSgpKSk7CiAgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgewotICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHN0ZDo6bWFrZV91
bmlxdWU8UmVzb2x2aW5nVHlwZT4ocmVzdWx0LmNvcHlSZWYoKSkpOwogICAgICAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0pKTsKICAgICBh
dXRvIHR5cGVBbm5vdGF0aW9uQWRkUmVzdWx0ID0gbV90eXBlQW5ub3RhdGlvbnMuYWRkKCZleHBy
ZXNzaW9uLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJh
cnkudHh0CShyZXZpc2lvbiAyNDY1NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTYyNSw0
ICs2MjUsMjI3IEBAIG9wZXJhdG9yIGZsb2F0NChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCituYXRpdmUgZmxvYXQzIG9wZXJhdG9yW10oZmxvYXQyeDMs
IHVpbnQpOworbmF0aXZlIGZsb2F0MngzIG9wZXJhdG9yW109KGZsb2F0MngzLCB1aW50LCBmbG9h
dDMpOworZmxvYXQgb3BlcmF0b3JbXShmbG9hdDMgdiwgdWludCBpbmRleCkgeworICAgIHN3aXRj
aCAoaW5kZXgpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIHYueDsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIHYueTsKKyAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgcmV0dXJuIHYuejsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gMC4wOworfQorZmxvYXQzIG9wZXJhdG9yW109KGZsb2F0
MyB2LCB1aW50IGluZGV4LCBmbG9hdCBhKSB7CisgICAgc3dpdGNoIChpbmRleCkgeworICAgICAg
ICBjYXNlIDA6CisgICAgICAgICAgICB2LnggPSBhOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgIHYueSA9IGE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgdi56ID0gYTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB2
OworfQorZmxvYXQyeDMgb3BlcmF0b3IrKGZsb2F0MngzIGEsIGZsb2F0MngzIGIpIHsKKyAgICBm
bG9hdDJ4MyByZXN1bHQ7CisgICAgcmVzdWx0WzBdWzBdID0gYVswXVswXSArIGJbMF1bMF07Cisg
ICAgcmVzdWx0WzBdWzFdID0gYVswXVsxXSArIGJbMF1bMV07CisgICAgcmVzdWx0WzBdWzJdID0g
YVswXVsyXSArIGJbMF1bMl07CisgICAgcmVzdWx0WzFdWzBdID0gYVsxXVswXSArIGJbMV1bMF07
CisgICAgcmVzdWx0WzFdWzFdID0gYVsxXVsxXSArIGJbMV1bMV07CisgICAgcmVzdWx0WzFdWzJd
ID0gYVsxXVsyXSArIGJbMV1bMl07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK2Zsb2F0MngzIG9w
ZXJhdG9yKihmbG9hdDJ4MyBhLCBmbG9hdCBiKSB7CisgICAgZmxvYXQyeDMgcmVzdWx0OworICAg
IHJlc3VsdFswXVswXSA9IGFbMF1bMF0gKiBiOworICAgIHJlc3VsdFswXVsxXSA9IGFbMF1bMV0g
KiBiOworICAgIHJlc3VsdFswXVsyXSA9IGFbMF1bMl0gKiBiOworICAgIHJlc3VsdFsxXVswXSA9
IGFbMV1bMF0gKiBiOworICAgIHJlc3VsdFsxXVsxXSA9IGFbMV1bMV0gKiBiOworICAgIHJlc3Vs
dFsxXVsyXSA9IGFbMV1bMl0gKiBiOworICAgIHJldHVybiByZXN1bHQ7Cit9CitmbG9hdDJ4MyBv
cGVyYXRvcisoZmxvYXQyeDMgYSwgZmxvYXQgYikgeworICAgIGZsb2F0MngzIHJlc3VsdDsKKyAg
ICByZXN1bHRbMF1bMF0gPSBhWzBdWzBdICsgYjsKKyAgICByZXN1bHRbMF1bMV0gPSBhWzBdWzFd
ICsgYjsKKyAgICByZXN1bHRbMF1bMl0gPSBhWzBdWzJdICsgYjsKKyAgICByZXN1bHRbMV1bMF0g
PSBhWzFdWzBdICsgYjsKKyAgICByZXN1bHRbMV1bMV0gPSBhWzFdWzFdICsgYjsKKyAgICByZXN1
bHRbMV1bMl0gPSBhWzFdWzJdICsgYjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorZmxvYXQyeDMg
b3BlcmF0b3ItKGZsb2F0MngzIGEsIGZsb2F0IGIpIHsKKyAgICBmbG9hdDJ4MyByZXN1bHQ7Cisg
ICAgcmVzdWx0WzBdWzBdID0gYVswXVswXSAtIGI7CisgICAgcmVzdWx0WzBdWzFdID0gYVswXVsx
XSAtIGI7CisgICAgcmVzdWx0WzBdWzJdID0gYVswXVsyXSAtIGI7CisgICAgcmVzdWx0WzFdWzBd
ID0gYVsxXVswXSAtIGI7CisgICAgcmVzdWx0WzFdWzFdID0gYVsxXVsxXSAtIGI7CisgICAgcmVz
dWx0WzFdWzJdID0gYVsxXVsyXSAtIGI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordHlwZWRl
ZiBmbG9hdDR4NCA9IG1hdHJpeDxmbG9hdCwgNCwgND47CituYXRpdmUgZmxvYXQ0IG9wZXJhdG9y
W10oZmxvYXQ0eDQsIHVpbnQpOworbmF0aXZlIGZsb2F0NHg0IG9wZXJhdG9yW109KGZsb2F0NHg0
LCB1aW50LCBmbG9hdDQpOworCitmbG9hdCBvcGVyYXRvcltdKGZsb2F0NCB2LCB1aW50IGluZGV4
KSB7CisgICAgc3dpdGNoIChpbmRleCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBy
ZXR1cm4gdi54OworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gdi55OworICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gdi56OworICAgICAgICBjYXNlIDM6Cisg
ICAgICAgICAgICByZXR1cm4gdi53OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGZsb2F0IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitm
bG9hdDQgb3BlcmF0b3JbXT0oZmxvYXQ0IHYsIHVpbnQgaW5kZXgsIGZsb2F0IGEpIHsKKyAgICBz
d2l0Y2ggKGluZGV4KSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHYueCA9IGE7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgdi55ID0gYTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB2LnogPSBh
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHYudyA9
IGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gdjsKK30KKworZmxvYXQ0IG11bChmbG9hdDR4NCB4LCBm
bG9hdDQgeSkgeworICAgIGZsb2F0NCByZXN1bHQ7CisgICAgcmVzdWx0WzBdID0gMDsKKyAgICBy
ZXN1bHRbMF0gPSByZXN1bHRbMF0gKyB4WzBdWzBdICogeVswXTsKKyAgICByZXN1bHRbMF0gPSBy
ZXN1bHRbMF0gKyB4WzBdWzFdICogeVsxXTsKKyAgICByZXN1bHRbMF0gPSByZXN1bHRbMF0gKyB4
WzBdWzJdICogeVsyXTsKKyAgICByZXN1bHRbMF0gPSByZXN1bHRbMF0gKyB4WzBdWzNdICogeVsz
XTsKKyAgICByZXN1bHRbMV0gPSAwOworICAgIHJlc3VsdFsxXSA9IHJlc3VsdFsxXSArIHhbMV1b
MF0gKiB5WzBdOworICAgIHJlc3VsdFsxXSA9IHJlc3VsdFsxXSArIHhbMV1bMV0gKiB5WzFdOwor
ICAgIHJlc3VsdFsxXSA9IHJlc3VsdFsxXSArIHhbMV1bMl0gKiB5WzJdOworICAgIHJlc3VsdFsx
XSA9IHJlc3VsdFsxXSArIHhbMV1bM10gKiB5WzNdOworICAgIHJlc3VsdFsyXSA9IDA7CisgICAg
cmVzdWx0WzJdID0gcmVzdWx0WzJdICsgeFsyXVswXSAqIHlbMF07CisgICAgcmVzdWx0WzJdID0g
cmVzdWx0WzJdICsgeFsyXVsxXSAqIHlbMV07CisgICAgcmVzdWx0WzJdID0gcmVzdWx0WzJdICsg
eFsyXVsyXSAqIHlbMl07CisgICAgcmVzdWx0WzJdID0gcmVzdWx0WzJdICsgeFsyXVszXSAqIHlb
M107CisgICAgcmVzdWx0WzNdID0gMDsKKyAgICByZXN1bHRbM10gPSByZXN1bHRbM10gKyB4WzNd
WzBdICogeVswXTsKKyAgICByZXN1bHRbM10gPSByZXN1bHRbM10gKyB4WzNdWzFdICogeVsxXTsK
KyAgICByZXN1bHRbM10gPSByZXN1bHRbM10gKyB4WzNdWzJdICogeVsyXTsKKyAgICByZXN1bHRb
M10gPSByZXN1bHRbM10gKyB4WzNdWzNdICogeVszXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitmbG9hdDR4NCBtdWwoZmxvYXQ0eDQgeCwgZmxvYXQ0eDQgeSkgeworICAgIGZsb2F0NHg0IHJl
c3VsdDsKKyAgICByZXN1bHRbMF1bMF0gPSAwOworICAgIHJlc3VsdFswXVswXSA9IHJlc3VsdFsw
XVswXSArIHhbMF1bMF0gKiB5WzBdWzBdOworICAgIHJlc3VsdFswXVswXSA9IHJlc3VsdFswXVsw
XSArIHhbMF1bMV0gKiB5WzFdWzBdOworICAgIHJlc3VsdFswXVswXSA9IHJlc3VsdFswXVswXSAr
IHhbMF1bMl0gKiB5WzJdWzBdOworICAgIHJlc3VsdFswXVswXSA9IHJlc3VsdFswXVswXSArIHhb
MF1bM10gKiB5WzNdWzBdOworICAgIHJlc3VsdFswXVsxXSA9IDA7CisgICAgcmVzdWx0WzBdWzFd
ID0gcmVzdWx0WzBdWzFdICsgeFswXVswXSAqIHlbMF1bMV07CisgICAgcmVzdWx0WzBdWzFdID0g
cmVzdWx0WzBdWzFdICsgeFswXVsxXSAqIHlbMV1bMV07CisgICAgcmVzdWx0WzBdWzFdID0gcmVz
dWx0WzBdWzFdICsgeFswXVsyXSAqIHlbMl1bMV07CisgICAgcmVzdWx0WzBdWzFdID0gcmVzdWx0
WzBdWzFdICsgeFswXVszXSAqIHlbM11bMV07CisgICAgcmVzdWx0WzBdWzJdID0gMDsKKyAgICBy
ZXN1bHRbMF1bMl0gPSByZXN1bHRbMF1bMl0gKyB4WzBdWzBdICogeVswXVsyXTsKKyAgICByZXN1
bHRbMF1bMl0gPSByZXN1bHRbMF1bMl0gKyB4WzBdWzFdICogeVsxXVsyXTsKKyAgICByZXN1bHRb
MF1bMl0gPSByZXN1bHRbMF1bMl0gKyB4WzBdWzJdICogeVsyXVsyXTsKKyAgICByZXN1bHRbMF1b
Ml0gPSByZXN1bHRbMF1bMl0gKyB4WzBdWzNdICogeVszXVsyXTsKKyAgICByZXN1bHRbMF1bM10g
PSAwOworICAgIHJlc3VsdFswXVszXSA9IHJlc3VsdFswXVszXSArIHhbMF1bMF0gKiB5WzBdWzNd
OworICAgIHJlc3VsdFswXVszXSA9IHJlc3VsdFswXVszXSArIHhbMF1bMV0gKiB5WzFdWzNdOwor
ICAgIHJlc3VsdFswXVszXSA9IHJlc3VsdFswXVszXSArIHhbMF1bMl0gKiB5WzJdWzNdOworICAg
IHJlc3VsdFswXVszXSA9IHJlc3VsdFswXVszXSArIHhbMF1bM10gKiB5WzNdWzNdOworICAgIHJl
c3VsdFsxXVswXSA9IDA7CisgICAgcmVzdWx0WzFdWzBdID0gcmVzdWx0WzFdWzBdICsgeFsxXVsw
XSAqIHlbMF1bMF07CisgICAgcmVzdWx0WzFdWzBdID0gcmVzdWx0WzFdWzBdICsgeFsxXVsxXSAq
IHlbMV1bMF07CisgICAgcmVzdWx0WzFdWzBdID0gcmVzdWx0WzFdWzBdICsgeFsxXVsyXSAqIHlb
Ml1bMF07CisgICAgcmVzdWx0WzFdWzBdID0gcmVzdWx0WzFdWzBdICsgeFsxXVszXSAqIHlbM11b
MF07CisgICAgcmVzdWx0WzFdWzFdID0gMDsKKyAgICByZXN1bHRbMV1bMV0gPSByZXN1bHRbMV1b
MV0gKyB4WzFdWzBdICogeVswXVsxXTsKKyAgICByZXN1bHRbMV1bMV0gPSByZXN1bHRbMV1bMV0g
KyB4WzFdWzFdICogeVsxXVsxXTsKKyAgICByZXN1bHRbMV1bMV0gPSByZXN1bHRbMV1bMV0gKyB4
WzFdWzJdICogeVsyXVsxXTsKKyAgICByZXN1bHRbMV1bMV0gPSByZXN1bHRbMV1bMV0gKyB4WzFd
WzNdICogeVszXVsxXTsKKyAgICByZXN1bHRbMV1bMl0gPSAwOworICAgIHJlc3VsdFsxXVsyXSA9
IHJlc3VsdFsxXVsyXSArIHhbMV1bMF0gKiB5WzBdWzJdOworICAgIHJlc3VsdFsxXVsyXSA9IHJl
c3VsdFsxXVsyXSArIHhbMV1bMV0gKiB5WzFdWzJdOworICAgIHJlc3VsdFsxXVsyXSA9IHJlc3Vs
dFsxXVsyXSArIHhbMV1bMl0gKiB5WzJdWzJdOworICAgIHJlc3VsdFsxXVsyXSA9IHJlc3VsdFsx
XVsyXSArIHhbMV1bM10gKiB5WzNdWzJdOworICAgIHJlc3VsdFsxXVszXSA9IDA7CisgICAgcmVz
dWx0WzFdWzNdID0gcmVzdWx0WzFdWzNdICsgeFsxXVswXSAqIHlbMF1bM107CisgICAgcmVzdWx0
WzFdWzNdID0gcmVzdWx0WzFdWzNdICsgeFsxXVsxXSAqIHlbMV1bM107CisgICAgcmVzdWx0WzFd
WzNdID0gcmVzdWx0WzFdWzNdICsgeFsxXVsyXSAqIHlbMl1bM107CisgICAgcmVzdWx0WzFdWzNd
ID0gcmVzdWx0WzFdWzNdICsgeFsxXVszXSAqIHlbM11bM107CisgICAgcmVzdWx0WzJdWzBdID0g
MDsKKyAgICByZXN1bHRbMl1bMF0gPSByZXN1bHRbMl1bMF0gKyB4WzJdWzBdICogeVswXVswXTsK
KyAgICByZXN1bHRbMl1bMF0gPSByZXN1bHRbMl1bMF0gKyB4WzJdWzFdICogeVsxXVswXTsKKyAg
ICByZXN1bHRbMl1bMF0gPSByZXN1bHRbMl1bMF0gKyB4WzJdWzJdICogeVsyXVswXTsKKyAgICBy
ZXN1bHRbMl1bMF0gPSByZXN1bHRbMl1bMF0gKyB4WzJdWzNdICogeVszXVswXTsKKyAgICByZXN1
bHRbMl1bMV0gPSAwOworICAgIHJlc3VsdFsyXVsxXSA9IHJlc3VsdFsyXVsxXSArIHhbMl1bMF0g
KiB5WzBdWzFdOworICAgIHJlc3VsdFsyXVsxXSA9IHJlc3VsdFsyXVsxXSArIHhbMl1bMV0gKiB5
WzFdWzFdOworICAgIHJlc3VsdFsyXVsxXSA9IHJlc3VsdFsyXVsxXSArIHhbMl1bMl0gKiB5WzJd
WzFdOworICAgIHJlc3VsdFsyXVsxXSA9IHJlc3VsdFsyXVsxXSArIHhbMl1bM10gKiB5WzNdWzFd
OworICAgIHJlc3VsdFsyXVsyXSA9IDA7CisgICAgcmVzdWx0WzJdWzJdID0gcmVzdWx0WzJdWzJd
ICsgeFsyXVswXSAqIHlbMF1bMl07CisgICAgcmVzdWx0WzJdWzJdID0gcmVzdWx0WzJdWzJdICsg
eFsyXVsxXSAqIHlbMV1bMl07CisgICAgcmVzdWx0WzJdWzJdID0gcmVzdWx0WzJdWzJdICsgeFsy
XVsyXSAqIHlbMl1bMl07CisgICAgcmVzdWx0WzJdWzJdID0gcmVzdWx0WzJdWzJdICsgeFsyXVsz
XSAqIHlbM11bMl07CisgICAgcmVzdWx0WzJdWzNdID0gMDsKKyAgICByZXN1bHRbMl1bM10gPSBy
ZXN1bHRbMl1bM10gKyB4WzJdWzBdICogeVswXVszXTsKKyAgICByZXN1bHRbMl1bM10gPSByZXN1
bHRbMl1bM10gKyB4WzJdWzFdICogeVsxXVszXTsKKyAgICByZXN1bHRbMl1bM10gPSByZXN1bHRb
Ml1bM10gKyB4WzJdWzJdICogeVsyXVszXTsKKyAgICByZXN1bHRbMl1bM10gPSByZXN1bHRbMl1b
M10gKyB4WzJdWzNdICogeVszXVszXTsKKyAgICByZXN1bHRbM11bMF0gPSAwOworICAgIHJlc3Vs
dFszXVswXSA9IHJlc3VsdFszXVswXSArIHhbM11bMF0gKiB5WzBdWzBdOworICAgIHJlc3VsdFsz
XVswXSA9IHJlc3VsdFszXVswXSArIHhbM11bMV0gKiB5WzFdWzBdOworICAgIHJlc3VsdFszXVsw
XSA9IHJlc3VsdFszXVswXSArIHhbM11bMl0gKiB5WzJdWzBdOworICAgIHJlc3VsdFszXVswXSA9
IHJlc3VsdFszXVswXSArIHhbM11bM10gKiB5WzNdWzBdOworICAgIHJlc3VsdFszXVsxXSA9IDA7
CisgICAgcmVzdWx0WzNdWzFdID0gcmVzdWx0WzNdWzFdICsgeFszXVswXSAqIHlbMF1bMV07Cisg
ICAgcmVzdWx0WzNdWzFdID0gcmVzdWx0WzNdWzFdICsgeFszXVsxXSAqIHlbMV1bMV07CisgICAg
cmVzdWx0WzNdWzFdID0gcmVzdWx0WzNdWzFdICsgeFszXVsyXSAqIHlbMl1bMV07CisgICAgcmVz
dWx0WzNdWzFdID0gcmVzdWx0WzNdWzFdICsgeFszXVszXSAqIHlbM11bMV07CisgICAgcmVzdWx0
WzNdWzJdID0gMDsKKyAgICByZXN1bHRbM11bMl0gPSByZXN1bHRbM11bMl0gKyB4WzNdWzBdICog
eVswXVsyXTsKKyAgICByZXN1bHRbM11bMl0gPSByZXN1bHRbM11bMl0gKyB4WzNdWzFdICogeVsx
XVsyXTsKKyAgICByZXN1bHRbM11bMl0gPSByZXN1bHRbM11bMl0gKyB4WzNdWzJdICogeVsyXVsy
XTsKKyAgICByZXN1bHRbM11bMl0gPSByZXN1bHRbM11bMl0gKyB4WzNdWzNdICogeVszXVsyXTsK
KyAgICByZXN1bHRbM11bM10gPSAwOworICAgIHJlc3VsdFszXVszXSA9IHJlc3VsdFszXVszXSAr
IHhbM11bMF0gKiB5WzBdWzNdOworICAgIHJlc3VsdFszXVszXSA9IHJlc3VsdFszXVszXSArIHhb
M11bMV0gKiB5WzFdWzNdOworICAgIHJlc3VsdFszXVszXSA9IHJlc3VsdFszXVszXSArIHhbM11b
Ml0gKiB5WzJdWzNdOworICAgIHJlc3VsdFszXVszXSA9IHJlc3VsdFszXVszXSArIHhbM11bM10g
KiB5WzNdWzNdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkyODkwIEluc2VydCB0aGUgcmVzdCBvZiB0
aGUgc3RhbmRhcmQgbGlicmFyeSBvbmNlIHRoZSBwYXJzZXIgaXMgZmFzdCBlbm91Z2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25X
cml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDY1NDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3Jp
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSwxMyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCkubGVmdFZhbHVlOwogICAgIH0KIAorICAg
IGVudW0gY2xhc3MgQnJlYWtDb250ZXh0IHsKKyAgICAgICAgTG9vcCwKKyAgICAgICAgU3dpdGNo
CisgICAgfTsKKworICAgIE9wdGlvbmFsPEJyZWFrQ29udGV4dD4gbV9jdXJyZW50QnJlYWtDb250
ZXh0OworCiAgICAgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOwogICAgIFR5cGVOYW1lciYgbV90
eXBlTmFtZXI7CiAgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+
JiBtX2Z1bmN0aW9uTWFwcGluZzsKQEAgLTI3MSw5ICsyNzgsMTcgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpCcmVhayYpCiB7Ci0gICAgQVNTRVJUKG1fYnJlYWtPdXRPZkN1cnJlbnRM
b29wRWFybHlWYXJpYWJsZS5sZW5ndGgoKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZSwgIiA9IHRydWU7
XG4iKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKKyAgICBBU1NF
UlQobV9jdXJyZW50QnJlYWtDb250ZXh0KTsKKyAgICBzd2l0Y2ggKCptX2N1cnJlbnRCcmVha0Nv
bnRleHQpIHsKKyAgICBjYXNlIEJyZWFrQ29udGV4dDo6U3dpdGNoOgorICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJicmVhaztcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJy
ZWFrQ29udGV4dDo6TG9vcDoKKyAgICAgICAgQVNTRVJUKG1fYnJlYWtPdXRPZkN1cnJlbnRMb29w
RWFybHlWYXJpYWJsZS5sZW5ndGgoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFibGUsICIgPSB0cnVl
O1xuIikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJicmVhaztcbiIpOworICAg
ICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1Q6OkNvbnRpbnVlJikKQEAgLTMwNyw2ICszMjIsNyBAQCB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6ZW1pdExvb3AoCiAgICAgfQogCiAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiZG8ge1xuIik7CisgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8QnJlYWtDb250ZXh0Pj4g
YnJlYWtDb250ZXh0KG1fY3VycmVudEJyZWFrQ29udGV4dCwgQnJlYWtDb250ZXh0OjpMb29wKTsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYm9keSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifSB3aGlsZShmYWxzZSk7IFxuIik7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJpZiAoIiwgbV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlLCAiKSBi
cmVhaztcbiIpKTsKQEAgLTM5Myw5ICs0MDksOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiY2FzZSAiLCBjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoKnN3aXRjaENhc2UudmFsdWUoKSks
ICI6XG4iKSk7CiAgICAgZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkZWZh
dWx0OlxuIik7CisgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8QnJlYWtDb250ZXh0Pj4gYnJlYWtD
b250ZXh0KG1fY3VycmVudEJyZWFrQ29udGV4dCwgQnJlYWtDb250ZXh0OjpTd2l0Y2gpOwogICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlLmJsb2NrKCkpOwogICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1ODEyIEZpZ3VyZSBvdXQg
d2hldGhlciB3ZSBuZWVkIHRvIGJyZWFrIG9yIGZhbGx0aHJvdWdoLgotICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlRy
YXAmKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMjQ2NTQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uV3JpdGVyLmgiCiAjaW5jbHVkZSAiV0hM
U0xUeXBlTmFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArMzks
OCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgTWV0YWwgewogCitzdGF0aWMgY29u
c3RleHByIGJvb2wgZHVtcE1ldGFsQ29kZSA9IGZhbHNlOworCiBzdGF0aWMgU3RyaW5nIGdlbmVy
YXRlTWV0YWxDb2RlU2hhcmVkKFN0cmluZyYmIG1ldGFsVHlwZXMsIFN0cmluZyYmIG1ldGFsRnVu
Y3Rpb25zKQogewogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKQEAgLTUzLDYgKzU2
LDEyIEBAIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGVTaGFyZWQoU3QKIAogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKFdURk1vdmUobWV0YWxUeXBlcykpOwogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKFdURk1vdmUobWV0YWxGdW5jdGlvbnMpKTsKKworICAgIGlmIChkdW1wTWV0YWxD
b2RlKSB7CisgICAgICAgIGRhdGFMb2dMbigiR2VuZXJhdGVkIE1ldGFsIGNvZGU6ICIpOworICAg
ICAgICBkYXRhTG9nTG4oc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICB9CisKICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ2NTQ5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsyMjUsMzkgQEAgU3RyaW5nIHdy
aXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOwogICAgIH0KIAorICAgIGF1dG8gbnVtYmVyT2ZNYXRyaXhSb3dzID0g
WyZdIHsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJl
ZmVyZW5jZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpOworICAgICAgICBhdXRvJiBtYXRyaXhUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4oZG93bmNhc3Q8QVNUOjpU
eXBlRGVmaW5pdGlvbj4odHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkudHlwZSgpKS5yZXNv
bHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChtYXRyaXhUeXBlLm5hbWUoKSA9PSAibWF0cml4
Iik7CisgICAgICAgIEFTU0VSVChtYXRyaXhUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0g
Myk7CisgICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihXVEY6OmdldDxBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbj4obWF0cml4VHlwZS50eXBlQXJndW1lbnRzKClbMV0pLmludGVnZXJMaXRlcmFs
KCkudmFsdWUoKSk7CisgICAgfTsKKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICco
JywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkp
IHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIGlm
IChpIDwgIiwgbnVtYmVyT2ZNYXRyaXhSb3dzKCksICIpIHJldHVybiBtW2ldO1xuIikpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG1ldGFs
UmV0dXJuTmFtZSwgIigwKTtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
biIpOworICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKwor
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0i
KSB7CisgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMyk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCkpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7CisgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnR5cGUoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxS
ZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFO
YW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJhbWV0ZXIz
TmFtZSwgIiB2KSB7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICBpZiAoaSA8ICIsIG51bWJlck9mTWF0cml4Um93cygpLCAiKSBtW2ldID0gdjtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4gbTtcbiIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uaXNPcGVyYXRvcigpKSB7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgYXV0byBvcGVyYXRv
ck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJh
dG9yIl9zdHIubGVuZ3RoKCkpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ2NTUwKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDYt
MTggIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBT
dXBwb3J0IG1hdHJpY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg4NzYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxNzY4ODgyPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3NvbiBhbmQgTXlsZXMgTWF4ZmllbGQuCisKKyAgICAg
ICAgKiB3ZWJncHUvd2hsc2wtbWF0cml4LTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJncHUvd2hsc2wtbWF0cml4LTIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3do
bHNsLW1hdHJpeC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1t
YXRyaXguaHRtbDogQWRkZWQuCisKIDIwMTktMDYtMTggIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgW1dITFNMXSBEbyBub3QgZ2VuZXJhdGUgZHVwbGljYXRlIGNv
bnN0cnVjdG9ycy9jb3B5IGNvbnN0cnVjdG9ycyBpbiBzeW50aGVzaXplQ29uc3RydWN0b3JzCklu
ZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LTItZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtMi1leHBlY3RlZC50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC0yLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJh
eVswXSBpcyAyCitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gaXMgNAorUEFTUyByZXN1bHRz
RmxvYXQzMkFycmF5WzJdIGlzIDYKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSBpcyA4CitQ
QVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gaXMgNQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5
WzVdIGlzIDYKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSBpcyA3CitQQVNTIHJlc3VsdHNG
bG9hdDMyQXJyYXlbN10gaXMgOAorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0
cml4LTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4
LTIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4
LTIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3Vy
Y2UgPSBgCitib29sIGFsbEVxdWFsKGZsb2F0NHg0IG1hdCwgZmxvYXQgdmFsdWUpCit7CisgICAg
Zm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAxKSB7CisgICAgICAgIGZvciAodWludCBq
ID0gMDsgaiA8IDQ7IGogPSBqICsgMSkgeworICAgICAgICAgICAgaWYgKG1hdFtpXVtqXSAhPSB2
YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZmlsbCh0aHJlYWQgZmxvYXQ0eDQqIG1hdCwgZmxv
YXQgdmFsdWUpCit7CisgICAgZmxvYXQ0eDQgcmVzdWx0OworICAgIGZvciAodWludCBpID0gMDsg
aSA8IDQ7IGkgPSBpICsgMSkgeworICAgICAgICAgICAgcmVzdWx0W2ldID0gZmxvYXQ0KHZhbHVl
LCB2YWx1ZSwgdmFsdWUsIHZhbHVlKTsKKyAgICB9CisgICAgKm1hdCA9IHJlc3VsdDsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBmaWxsKHRocmVhZCBmbG9hdDQqIHZlYywgZmxvYXQgdmFs
dWUpCit7CisgICAgZmxvYXQ0IHJlc3VsdDsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCA0OyBp
ID0gaSArIDEpIHsKKyAgICAgICAgcmVzdWx0W2ldID0gdmFsdWU7CisgICAgfQorICAgICp2ZWMg
PSByZXN1bHQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYWxsRXF1YWwoZmxvYXQ0IHZl
YywgZmxvYXQgdmFsdWUpCit7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgNDsgaSA9IGkgKyAx
KSB7CisgICAgICAgIGlmICh2ZWNbaV0gIT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0K
K2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lz
dGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGZs
b2F0NHg0IG1hdDsKKyAgICBmaWxsKCZtYXQsIDEpOworICAgIGlmICghYWxsRXF1YWwobWF0LCAx
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQ0IHZlYzsKKyAgICBmaWxsKCZ2ZWMsIDEp
OworICAgIGlmICghYWxsRXF1YWwodmVjLCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxv
YXQ0IHZlYzIgPSBtdWwobWF0LCB2ZWMpOworICAgIGlmICghYWxsRXF1YWwodmVjMiwgNCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZsb2F0NHg0IG1hdDIgPSBtdWwobWF0LCBtYXQpOworICAg
IGlmICghYWxsRXF1YWwobWF0MiwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1hdDIgPSBt
dWwobWF0MiwgbWF0Mik7CisgICAgaWYgKCFhbGxFcXVhbChtYXQyLCA2NCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVh
ZElELngpXSAqIDIuMDsKK30KK2A7CitsZXQgcmVzdWx0c0Zsb2F0MzJBcnJheTsKK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1
LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1
ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hh
ZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25z
dCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21w
dXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZl
ciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91
cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19Owor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNj
cmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29u
c3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA4OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNG
RVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRl
c2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1h
cFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQz
MkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAx
OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IDI7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5
WzJdID0gMzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbM10gPSA0OworICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVs0XSA9IDU7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKKyAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbNl0gPSA3OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7Cisg
ICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRS
QU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1bHRz
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07
CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVm
ZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJp
bmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3Qg
YmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVy
KCk7IC8vIHt9CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwg
MCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlz
cGF0Y2goNCwgMSwgMSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1bHRz
QXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgIHJl
c3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7
CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMF0iLCAiMiIpOworICAgIHNob3Vs
ZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzFdIiwgIjQiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0
c0Zsb2F0MzJBcnJheVsyXSIsICI2Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJy
YXlbM10iLCAiOCIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzRdIiwgIjUi
KTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs1XSIsICI2Iik7CisgICAgc2hv
dWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNl0iLCAiNyIpOworICAgIHNob3VsZEJlKCJyZXN1
bHRzRmxvYXQzMkFycmF5WzddIiwgIjgiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9
CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0
KCkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgIH0pOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzBdIGlzIDIK
K1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSBpcyA0CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJy
YXlbMl0gaXMgNgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzNdIGlzIDgKK1BBU1MgcmVzdWx0
c0Zsb2F0MzJBcnJheVs0XSBpcyA1CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gaXMgNgor
UEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzZdIGlzIDcKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJh
eVs3XSBpcyA4CisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXguaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4Lmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTY0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK2Jvb2wgYWxs
RXF1YWwoZmxvYXQyeDMgbWF0LCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBmb3IgKHVpbnQgaSA9IDA7
IGkgPCAyOyBpID0gaSArIDEpIHsKKyAgICAgICAgZm9yICh1aW50IGogPSAwOyBqIDwgMzsgaiA9
IGogKyAxKSB7CisgICAgICAgICAgICBpZiAobWF0W2ldW2pdICE9IHZhbHVlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihk
ZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNW
X0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBmbG9hdDJ4MyBmb287CisgICAgaWYgKCFhbGxFcXVh
bChmb28sIDApKQorICAgICAgICByZXR1cm47CisKKyAgICBmb28gPSBmb28gKyAxLjA7CisgICAg
aWYgKCFhbGxFcXVhbChmb28sIDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb28gPSBmb28g
KiA4LjU7CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDguNSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZvbyA9IGZvbyAtIDcuNTsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywgMSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIDEuMDsKKyAgICBpZiAoIWFsbEVxdWFsKGZvbywg
MikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZvbzsKKyAgICBpZiAoIWFs
bEVxdWFsKGZvbywgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvbyA9IGZvbyArIGZvbzsK
KyAgICBpZiAoIWFsbEVxdWFsKGZvbywgOCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0
MyBmb3VydHlUd287CisgICAgZm91cnR5VHdvLnggPSA0MjsKKyAgICBmb3VydHlUd28ueSA9IDQy
OworICAgIGZvdXJ0eVR3by56ID0gNDI7CisKKyAgICBmb29bMF0gPSBmb3VydHlUd287CisgICAg
Zm9vWzFdID0gZm91cnR5VHdvOworICAgIGlmICghYWxsRXF1YWwoZm9vLCA0MikpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvb1sxMzM3XSA9IGZvdXJ0eVR3bzsKKyAgICBpZiAoIWFsbEVxdWFs
KGZvbywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb29bMTAwMDAwMF0gPSBmb3VydHlU
d287CisgICAgaWYgKCFhbGxFcXVhbChmb28sIDQyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm91cnR5VHdvWzEzMzddID0gNTA7CisgICAgZm9vWzFdID0gZm91cnR5VHdvOworICAgIGlmICgh
YWxsRXF1YWwoZm9vLCA0MikpCisgICAgICAgIHJldHVybjsKKworICAgIGZvdXJ0eVR3b1sxMDAw
MDAwXSA9IDUwOworICAgIGZvb1sxXSA9IGZvdXJ0eVR3bzsKKyAgICBpZiAoIWFsbEVxdWFsKGZv
bywgNDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdDMgc2hvdWxkQmVaZXJvID0gZm9v
WzEwMDAwMF07CisgICAgaWYgKHNob3VsZEJlWmVyby54ICE9IDAgfHwgc2hvdWxkQmVaZXJvLnkg
IT0gMCB8fCBzaG91bGRCZVplcm8ueiAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
Zm91cnR5VHdvWzEwMDAwMDAwXSAhPSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBidWZmZXJb
dWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Cit9Citg
OworbGV0IHJlc3VsdHNGbG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAg
ICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOwor
ICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAg
Y29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hh
ZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAg
Y29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAw
LCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJp
bmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5
b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3Rh
Z2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCBzaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsK
KworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3Qg
YnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAg
Y29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9hdDMy
QXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVmZmVy
RmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OworICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0g
NzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgpOwor
CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmlu
ZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91
cEJpbmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNv
bnN0IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRp
bmdzOiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5k
RW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1h
bmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAs
IHNpemUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJl
Z2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29t
cHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJp
bmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDQsIDEsIDEpOworICAg
IGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9
IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChb
Y29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQg
cmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRzRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIHNob3VsZEJlKCJyZXN1
bHRzRmxvYXQzMkFycmF5WzBdIiwgIjIiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJB
cnJheVsxXSIsICI0Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMl0iLCAi
NiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzNdIiwgIjgiKTsKKyAgICBz
aG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs0XSIsICI1Iik7CisgICAgc2hvdWxkQmUoInJl
c3VsdHNGbG9hdDMyQXJyYXlbNV0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQz
MkFycmF5WzZdIiwgIjciKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs3XSIs
ICI4Iik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICBzdGFydCgpLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9KTsK
K30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>