<?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>198600</bug_id>
          
          <creation_ts>2019-06-05 20:51:47 -0700</creation_ts>
          <short_desc>[WHLSL] Implement out-of-bounds and nullptr behavior</short_desc>
          <delta_ts>2019-06-14 11:59:33 -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>
          <dependson>198644</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>activatemcafee18</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</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>1542295</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-05 20:51:47 -0700</bug_when>
    <thetext>3 options:
Trapping
Clamping
Zero reads / writes do nothing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543781</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 11:53:26 -0700</bug_when>
    <thetext>Gonna look at this today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543806</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 13:06:33 -0700</bug_when>
    <thetext>Planning on doing:
&quot;Zero reads / writes do nothing&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543917</commentid>
    <comment_count>4</comment_count>
      <attachid>371908</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 18:55:21 -0700</bug_when>
    <thetext>Created attachment 371908
WIP

Has a bunch of Myles&apos;s patches applied locally so I can test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543928</commentid>
    <comment_count>5</comment_count>
      <attachid>371912</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 19:20:11 -0700</bug_when>
    <thetext>Created attachment 371912
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543933</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 19:33:36 -0700</bug_when>
    <thetext>So the plan is:

1. The value stack in FunctionWriter turns into a stack of pairs: rvalues and lvalues.
2. All lvalues are pointers.
3. Anything that produces an lvalue must push a pointer to the stack. But not all things produce lvalues, so that field may be empty. However, all things that produce lvalues also produce rvalues. So, &quot;*x = 42&quot; works, but so does &quot;foo(*x)&quot;.
4. Dereference just works, as dereference produces both an lvalue and rvalue. Dereference node&apos;s child must also be an lvalue. So we just forward that value along on the stack. For the rvalue, if we try to dereference nullptr, we just fill in zero bytes instead.
5. Assignment expressions check if the incoming lvalue is nullptr. If it is, we skip the assignment.
6. Then, operator&amp;[] just returns nullptr on OOB. Then dereference works as expected, and assignment works as expected. So does &quot;thread *foo = null; *foo = 42; *foo;&quot;.
7. MakePointerExpression just takes the last lvalue off the stack and returns it.
8. VariableReference will push both the variable value and a pointer to the variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543934</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-11 19:34:05 -0700</bug_when>
    <thetext>I believe the patch accomplishes this, just need to write some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544114</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-12 08:54:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/51668853&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544320</commentid>
    <comment_count>9</comment_count>
      <attachid>372013</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-12 19:04:42 -0700</bug_when>
    <thetext>Created attachment 372013
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544565</commentid>
    <comment_count>10</comment_count>
      <attachid>372074</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-13 12:49:17 -0700</bug_when>
    <thetext>Created attachment 372074
patch

This is ready for review. It relies on the compute patch (which just got rolled out). So I will hold off on landing this until that re-lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544566</commentid>
    <comment_count>11</comment_count>
      <attachid>372074</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-13 12:50:11 -0700</bug_when>
    <thetext>Comment on attachment 372074
patch

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

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:97
&gt; +        if (!computeLibrary)
&gt; +            NSLog(@&quot;%@&quot;, error);

I find these logs helpful during development, but I can remove them if that&apos;s preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544585</commentid>
    <comment_count>12</comment_count>
      <attachid>372074</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-06-13 13:39:51 -0700</bug_when>
    <thetext>Comment on attachment 372074
patch

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

It looks good overall, I&apos;ve made a few comments inline.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:113
&gt; +        rhs-&gt;setTypeAnnotation(AST::LeftValue { AST::AddressSpace::Thread });

I don&apos;t get this, why would the right side of an assignment be a left-value?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:139
&gt; +            makePointerExpression-&gt;setTypeAnnotation(AST::RightValue());

I agree with this one on the other hand

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:692
&gt; +        variableReference-&gt;setTypeAnnotation(AST::LeftValue { AST::AddressSpace::Thread }); // FIXME: https://bugs.webkit.org/show_bug.cgi?id=198169 Is this right?

No it&apos;s not, I made readModifyWrite expressions right values in the spec (it gets super confusing otherwise, e.g. what would (x += y) = z do?)

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:612
&gt; +    // FIXME: This needs to be made to work. It probably should be using the last leftValue too.

I agree that it should be using the leftValue.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:84
&gt; +String writeNativeFunction(AST::NativeFunctionDeclaration&amp; nativeFunctionDeclaration, String&amp; outputFunctionName, Intrinsics&amp; intrinsics, TypeNamer&amp; typeNamer, const char* memsetZeroFunctionName)

What is the reasoning behind passing memsetZeroFunctionName as an argument? Is it not a global constant?

&gt;&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:97
&gt;&gt; +            NSLog(@&quot;%@&quot;, error);
&gt; 
&gt; I find these logs helpful during development, but I can remove them if that&apos;s preferred.

I&apos;m happy to see logs, but maybe behind a !ASSERT_DISABLED ? So they will be free in release mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544606</commentid>
    <comment_count>13</comment_count>
      <attachid>372074</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-13 14:29:12 -0700</bug_when>
    <thetext>Comment on attachment 372074
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:113
&gt;&gt; +        rhs-&gt;setTypeAnnotation(AST::LeftValue { AST::AddressSpace::Thread });
&gt; 
&gt; I don&apos;t get this, why would the right side of an assignment be a left-value?

Spoke to Robin offline, but commenting here for posterity:

In the current implementation of the compiler, all VariableReferences are Lvalues, even if we don&apos;t use them as an lvalue. This patch makes this happen consistently everywhere. It simplifies how we generate code in metal. Alternatively, we could not rely on this, but metal code gen that produces Lvalues would have to branch to see if the current node is used in a lvalue context or not. I thought it&apos;d be easier to just make this consistent everywhere. Now, the metal codegen will produce an lvalue irrespective of if the lvalue is uses. That&apos;s ok, because in the worst case, we just end up with unused variables, which LLVM will happily kill the various operations used to produce such Lvalues.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:84
&gt;&gt; +String writeNativeFunction(AST::NativeFunctionDeclaration&amp; nativeFunctionDeclaration, String&amp; outputFunctionName, Intrinsics&amp; intrinsics, TypeNamer&amp; typeNamer, const char* memsetZeroFunctionName)
&gt; 
&gt; What is the reasoning behind passing memsetZeroFunctionName as an argument? Is it not a global constant?

It&apos;s currently scoped to the class. I thought it is nicer to just pass it in.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:97
&gt;&gt;&gt; +            NSLog(@&quot;%@&quot;, error);
&gt;&gt; 
&gt;&gt; I find these logs helpful during development, but I can remove them if that&apos;s preferred.
&gt; 
&gt; I&apos;m happy to see logs, but maybe behind a !ASSERT_DISABLED ? So they will be free in release mode.

Well, we shouldn&apos;t ever reach this. If we do, it&apos;s a bug in the compiler. We could put it under !NDEBUG or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544612</commentid>
    <comment_count>14</comment_count>
      <attachid>372074</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-06-13 15:33:55 -0700</bug_when>
    <thetext>Comment on attachment 372074
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544772</commentid>
    <comment_count>15</comment_count>
      <attachid>372127</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-14 10:54:13 -0700</bug_when>
    <thetext>Created attachment 372127
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544773</commentid>
    <comment_count>16</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-06-14 10:57:04 -0700</bug_when>
    <thetext>Attachment 372127 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:40:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 15 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>1544774</commentid>
    <comment_count>17</comment_count>
      <attachid>372128</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-14 10:57:13 -0700</bug_when>
    <thetext>Created attachment 372128
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544775</commentid>
    <comment_count>18</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-14 11:01:27 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/246438/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544795</commentid>
    <comment_count>19</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-14 11:59:33 -0700</bug_when>
    <thetext>follow up landed in:
https://trac.webkit.org/changeset/246439/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371908</attachid>
            <date>2019-06-11 18:55:21 -0700</date>
            <delta_ts>2019-06-11 19:20:20 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>324108</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cERlc2Ny
aXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dl
YkdQVUJpbmRHcm91cERlc2NyaXB0b3IuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIE9wdGlvbmFsPEdQVUJpbmRHcm91cERlc2Ny
aXB0b3I+IFdlYkdQVUIKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVCdWZmZXJC
aW5kaW5nVHlwZShidWZmZXIsIGxheW91dEJpbmRpbmcsIGZ1bmN0aW9uTmFtZSkpCisgICAgICAg
ICAgICBpZiAoIXZhbGlkYXRlQnVmZmVyQmluZGluZ1R5cGUoYnVmZmVyLCBsYXlvdXRCaW5kaW5n
LmV4dGVybmFsQmluZGluZywgZnVuY3Rpb25OYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQmluZGlu
Z1Jlc291cmNlPihHUFVCdWZmZXJCaW5kaW5nIHsgbWFrZVJlZigqYnVmZmVyKSwgYnVmZmVyQmlu
ZGluZy5vZmZzZXQsIGJ1ZmZlckJpbmRpbmcuc2l6ZSB9KTsKQEAgLTExOSw3ICsxMTksNyBAQCBP
cHRpb25hbDxHUFVCaW5kR3JvdXBEZXNjcmlwdG9yPiBXZWJHUFVCCiAKICAgICAgICAgYXV0byBi
aW5kaW5nUmVzb3VyY2UgPSBXVEY6OnZpc2l0KGJpbmRpbmdSZXNvdXJjZVZpc2l0b3IsIGJpbmRp
bmcucmVzb3VyY2UpOwogICAgICAgICBpZiAoIWJpbmRpbmdSZXNvdXJjZSkgewotICAgICAgICAg
ICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlkIHJlc291cmNlIGZvciBiaW5kaW5nICV1ISIsIGZ1
bmN0aW9uTmFtZSwgbGF5b3V0QmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAgICAgIExPRyhXZWJH
UFUsICIlczogSW52YWxpZCByZXNvdXJjZSBmb3IgYmluZGluZyAldSEiLCBmdW5jdGlvbk5hbWUs
IGxheW91dEJpbmRpbmcuZXh0ZXJuYWxCaW5kaW5nLmJpbmRpbmcpOwogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0
NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJXSExTTERl
cmVmZXJlbmNlRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKICNp
bmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRU
eXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCiAjaW5jbHVkZSAiV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuaCIKICNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCkBAIC0xMTYs
MjkgKzExNywyOSBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotc3RhdGljIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgZmly
c3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3N0YXRpYyBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihM
ZXhlcjo6VG9rZW4gb3JpZ2luLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgZmlyc3RBcmd1bWVu
dCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOwotICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQ
b2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RB
cmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25l
KCkpOworICAgIGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIGZpcnN0QXJndW1lbnQuYWRkcmVzc1NwYWNlKCksIGZp
cnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBmaXJzdEFyZ3VtZW50LmNsb25lKCksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHBhcmFtZXRlcnMuYXBwZW5k
KG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2Fs
bEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09w
ZXJhdG9yKSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwg
Zmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihvcmlnaW4pLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBT
dHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCi1zdGF0aWMg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JMZW5ndGgo
QVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIEFTVDo6VW5uYW1lZFR5cGUmIGZp
cnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitzdGF0aWMgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JMZW5ndGgoTGV4ZXI6
OlRva2VuIG9yaWdpbiwgQVNUOjpVbm5hbWVkVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50
cmluc2ljcyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVl
OwotICAgIGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwor
ICAgIGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4ob3JpZ2luKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBmaXJzdEFyZ3VtZW50LmNsb25lKCksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOwotICAgIHJldHVybiBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0aCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51
bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6UXVh
bGlmaWVycygpLCBmaXJzdEFyZ3VtZW50LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5n
KCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7CiB9CiAKLXN0YXRpYyBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJh
dG9yKEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiBm
aXJzdEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwgY29uc3QgSW50cmlu
c2ljcyYgaW50cmluc2ljcykKK3N0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
cmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKExleGVyOjpUb2tlbiBvcmlnaW4sIFJlc29s
dmluZ1R5cGUmIGZpcnN0QXJndW1lbnQsIFJlc29sdmluZ1R5cGUmIHNlY29uZEFyZ3VtZW50LCBj
b25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIGNvbnN0IGJvb2wgaXNPcGVyYXRv
ciA9IHRydWU7Ci0gICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MuYm9vbFR5
cGUoKSk7CisgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihvcmlnaW4pLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOwogICAgIGF1dG8gYXJn
dW1lbnRUeXBlID0gZmlyc3RBcmd1bWVudC52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiB7CiAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKICAgICB9
LCBbJl0oUmVmUHRyPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiB7CkBAIC0xNDgsMTMgKzE0OSwxMyBAQCBzdGF0aWMgQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIHJlCiAgICAgICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCAibnVs
bCA9PSBudWxsIi4KICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYyIFRoaXMgY2FuIHByb2JhYmx5IGJlIGdlbmVyYWxpemVk
LCB1c2luZyB0aGUgInByZWZlcnJlZCB0eXBlIiBpbmZyYXN0cnVjdHVyZSB1c2VkIGJ5IGdlbmVy
aWMgbGl0ZXJhbHMKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmludFR5cGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihvcmlnaW4pLCBpbnRyaW5z
aWNzLmludFR5cGUoKSk7CiAgICAgICAgIH0pKTsKICAgICB9KSk7CiAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJndW1lbnRUeXBlLT5jbG9uZSgpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0ZXJzLmFw
cGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RG
TW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
cikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFyZ3Vt
ZW50VHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7
CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+KFdURk1vdmUoYXJndW1lbnRUeXBlKSksIFN0cmluZygpLCBXVEY6
Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihvcmlnaW4p
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBl
KSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCiBlbnVt
IGNsYXNzIEFjY2VwdGFiaWxpdHkgewpAQCAtMTYzLDkgKzE2NCw5IEBAIGVudW0gY2xhc3MgQWNj
ZXB0YWJpbGl0eSB7CiAgICAgTm8KIH07CiAKLXN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVCeUluc3RhbnRpYXRpb24oQVNUOjpDYWxsRXhwcmVz
c2lvbiYgY2FsbEV4cHJlc3Npb24sIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitz
dGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJ
bnN0YW50aWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgTGV4ZXI6OlRva2VuIG9yaWdpbiwgY29u
c3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywg
Y29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKIHsKLSAgICBpZiAoY2FsbEV4cHJlc3Npb24u
bmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKKyAgICBpZiAo
bmFtZSA9PSAib3BlcmF0b3ImW10iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CiAgICAgICAgIGF1
dG8qIGZpcnN0QXJndW1lbnRBcnJheVJlZiA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4g
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGUqIHsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBl
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSk7CkBAIC0x
NzksOCArMTgwLDggQEAgc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQog
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpLmNhblJlc29sdmUoaW50cmluc2ljcy51aW50VHlwZSgpKTsKICAgICAgICAgfSkpOwogICAg
ICAgICBpZiAoZmlyc3RBcmd1bWVudEFycmF5UmVmICYmIHNlY29uZEFyZ3VtZW50SXNVaW50KQot
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoY2FsbEV4
cHJlc3Npb24sICpmaXJzdEFyZ3VtZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOwotICAgIH0gZWxz
ZSBpZiAoY2FsbEV4cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIHR5cGVz
LnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckFu
ZGVySW5kZXhlcihvcmlnaW4sICpmaXJzdEFyZ3VtZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOwor
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkg
PT0gMSkgewogICAgICAgICBhdXRvKiBmaXJzdEFyZ3VtZW50UmVmZXJlbmNlID0gdHlwZXNbMF0u
Z2V0KCkudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CiAgICAgICAgICAgICBpZiAo
aXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUm
Pih1bm5hbWVkVHlwZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CkBA
IC0xODksOCArMTkwLDggQEAgc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYg
KGZpcnN0QXJndW1lbnRSZWZlcmVuY2UpCi0gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhP
cGVyYXRvckxlbmd0aChjYWxsRXhwcmVzc2lvbiwgKmZpcnN0QXJndW1lbnRSZWZlcmVuY2UsIGlu
dHJpbnNpY3MpOwotICAgIH0gZWxzZSBpZiAoY2FsbEV4cHJlc3Npb24ubmFtZSgpID09ICJvcGVy
YXRvcj09IiAmJiB0eXBlcy5zaXplKCkgPT0gMikgeworICAgICAgICAgICAgcmV0dXJuIHJlc29s
dmVXaXRoT3BlcmF0b3JMZW5ndGgob3JpZ2luLCAqZmlyc3RBcmd1bWVudFJlZmVyZW5jZSwgaW50
cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChuYW1lID09ICJvcGVyYXRvcj09IiAmJiB0eXBlcy5z
aXplKCkgPT0gMikgewogICAgICAgICBhdXRvIGFjY2VwdGFiaWxpdHkgPSBbXShSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlKSAtPiBBY2NlcHRhYmlsaXR5IHsKICAgICAgICAgICAgIHJldHVy
biByZXNvbHZpbmdUeXBlLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQWNjZXB0YWJpbGl0eSB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5h
bWVkVHlwZSY+KHVubmFtZWRUeXBlKSkgPyBBY2NlcHRhYmlsaXR5OjpZZXMgOiBBY2NlcHRhYmls
aXR5OjpObzsKQEAgLTIwOSw3ICsyMTAsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhCiAgICAgICAgICAgICB8fCAobGVmdEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0
YWJpbGl0eTo6WWVzICYmIHJpZ2h0QWNjZXB0YWJpbGl0eSA9PSBBY2NlcHRhYmlsaXR5OjpNYXli
ZSkpCiAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgaWYgKHN1Y2Nlc3MpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKGNhbGxFeHBy
ZXNzaW9uLCB0eXBlc1swXS5nZXQoKSwgdHlwZXNbMV0uZ2V0KCksIGludHJpbnNpY3MpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihvcmlnaW4sIHR5
cGVzWzBdLmdldCgpLCB0eXBlc1sxXS5nZXQoKSwgaW50cmluc2ljcyk7CiAgICAgfQogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0zNTQsNyArMzU1LDcgQEAgc3RhdGljIGJvb2wgY2hl
Y2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IAogICAgICAgICBWZWN0b3I8UmVzb2x2aW5nVHlwZT4g
YXJndW1lbnRUeXBlczsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVz
b2x2aW5nVHlwZT4+IGFyZ3VtZW50VHlwZVJlZmVyZW5jZXM7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQotICAgICAgICAgICAg
YXJndW1lbnRUeXBlcy5hcHBlbmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXS0+dHlwZSgpKS0+Y2xvbmUoKSk7CiAg
ICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDogYXJndW1lbnRUeXBlcykKICAgICAgICAg
ICAgIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7CiAgICAgICAg
IGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKmdldHRlckZ1bmNzLCBh
cmd1bWVudFR5cGVSZWZlcmVuY2VzKTsKQEAgLTQ5MSw2ICs0OTIsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQg
dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCisgICAgdm9pZCBmaW5pc2hW
aXNpdGluZyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYsIFJlc29sdmluZ1R5cGUqIGFk
ZGl0aW9uYWxBcmd1bWVudFR5cGUgPSBudWxscHRyKTsKKwogICAgIEhhc2hNYXA8QVNUOjpFeHBy
ZXNzaW9uKiwgUmVzb2x2aW5nVHlwZT4gbV90eXBlTWFwOwogICAgIEhhc2hNYXA8QVNUOjpFeHBy
ZXNzaW9uKiwgQVNUOjpUeXBlQW5ub3RhdGlvbj4gbV90eXBlQW5ub3RhdGlvbnM7CiAgICAgSGFz
aFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CkBAIC05NjYsOSArOTY5LDMyIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmUKICAgICBhc3NpZ25UeXBlKG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdp
bigpKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGxlZnRWYWx1ZVR5cGUtPmNsb25lKCkpKTsKIH0KIAot
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCitz
dGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBhcmd1bWVudFR5cGVG
b3JBbmRPdmVybG9hZChBU1Q6OlVubmFtZWRUeXBlJiBiYXNlVHlwZSwgQVNUOjpBZGRyZXNzU3Bh
Y2UgYWRkcmVzc1NwYWNlKQoreworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGJhc2VUeXBlLnVuaWZ5
Tm9kZSgpOworICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgeworICAgICAg
ICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsK
KyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4obmFtZWRUeXBlLm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5vcmlnaW4oKSksIG5hbWVkVHlwZSkpIH07
CisgICAgfQorCisgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOwor
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKTsKKworICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
KQorICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUuY2xvbmUoKTsKKworICAgIGlmIChpczxBU1Q6
OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUub3JpZ2lu
KCkpLCBhZGRyZXNzU3BhY2UsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSku
dHlwZSgpLmNsb25lKCkpIH07CisKKyAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFR5cGUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUub3Jp
Z2luKCkpLCBhZGRyZXNzU3BhY2UsIHVubmFtZWRUeXBlLmNsb25lKCkpIH07Cit9CisKK3ZvaWQg
Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSogYWRkaXRpb25hbEFyZ3VtZW50
VHlwZSkKIHsKLSAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZG90RXhwcmVz
c2lvbi5iYXNlKCkpOworICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKICAgICBpZiAoIWJhc2VJbmZvKQogICAgICAg
ICByZXR1cm47CiAgICAgYXV0byBiYXNlVW5uYW1lZFR5cGUgPSBjb21taXQoYmFzZUluZm8tPnJl
c29sdmluZ1R5cGUpOwpAQCAtOTc5LDY1ICsxMDA1LDEwMSBAQCB2b2lkIENoZWNrZXI6OnZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYgCiAgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0dGVyUmV0dXJu
VHlwZSA9IG51bGxwdHI7CiAgICAgewogICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxSZXNvbHZpbmdUeXBlPj4gZ2V0dGVyQXJndW1lbnRUeXBlcyB7IGJhc2VJbmZvLT5yZXNv
bHZpbmdUeXBlIH07Ci0gICAgICAgIGdldHRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3Zl
cmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUdldHRlck92ZXJsb2FkcygpLCBnZXR0ZXJBcmd1
bWVudFR5cGVzKTsKLSAgICAgICAgaWYgKGdldHRlckZ1bmN0aW9uKQorICAgICAgICBpZiAoYWRk
aXRpb25hbEFyZ3VtZW50VHlwZSkKKyAgICAgICAgICAgIGdldHRlckFyZ3VtZW50VHlwZXMuYXBw
ZW5kKCphZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKKyAgICAgICAgaWYgKChnZXR0ZXJGdW5jdGlv
biA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3Nz
aWJsZUdldHRlck92ZXJsb2FkcygpLCBnZXR0ZXJBcmd1bWVudFR5cGVzKSkpCiAgICAgICAgICAg
ICBnZXR0ZXJSZXR1cm5UeXBlID0gJmdldHRlckZ1bmN0aW9uLT50eXBlKCk7CiAgICAgfQogCiAg
ICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRlckZ1bmN0aW9uID0gbnVsbHB0cjsKICAg
ICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRlclJldHVyblR5cGUgPSBudWxscHRyOwotICAgIGlmIChh
dXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFubm90YXRpb24ubGVmdEFkZHJl
c3NTcGFjZSgpKSB7Ci0gICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksICps
ZWZ0QWRkcmVzc1NwYWNlLCBiYXNlVW5uYW1lZFR5cGUtPmdldCgpLmNsb25lKCkpOwotICAgICAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYW5kZXJBcmd1
bWVudFR5cGVzIHsgYmFzZUluZm8tPnJlc29sdmluZ1R5cGUgfTsKLSAgICAgICAgYW5kZXJGdW5j
dGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGRvdEV4cHJlc3Npb24ucG9zc2libGVBbmRl
ck92ZXJsb2FkcygpLCBhbmRlckFyZ3VtZW50VHlwZXMpOwotICAgICAgICBpZiAoYW5kZXJGdW5j
dGlvbikKLSAgICAgICAgICAgIGFuZGVyUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhl
IHJldHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgYXV0byBsZWZ0
QWRkcmVzc1NwYWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2Uo
KTsKKyAgICBpZiAobGVmdEFkZHJlc3NTcGFjZSkgeworICAgICAgICBpZiAoYXV0byBhcmd1bWVu
dFR5cGVGb3JBbmRPdmVybG9hZCA9IFdITFNMOjphcmd1bWVudFR5cGVGb3JBbmRPdmVybG9hZCgq
YmFzZVVubmFtZWRUeXBlLCAqbGVmdEFkZHJlc3NTcGFjZSkpIHsKKyAgICAgICAgICAgIFJlc29s
dmluZ1R5cGUgYXJndW1lbnRUeXBlID0geyBXVEZNb3ZlKCphcmd1bWVudFR5cGVGb3JBbmRPdmVy
bG9hZCkgfTsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29s
dmluZ1R5cGU+PiBhbmRlckFyZ3VtZW50VHlwZXMgeyBhcmd1bWVudFR5cGUgfTsKKyAgICAgICAg
ICAgIGlmIChhZGRpdGlvbmFsQXJndW1lbnRUeXBlKQorICAgICAgICAgICAgICAgIGFuZGVyQXJn
dW1lbnRUeXBlcy5hcHBlbmQoKmFkZGl0aW9uYWxBcmd1bWVudFR5cGUpOworICAgICAgICAgICAg
aWYgKChhbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9hZHMoKSwgYW5kZXJBcmd1bWVudFR5cGVz
KSkpCisgICAgICAgICAgICAgICAgYW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5mb3JjZSB0
aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICAgICAgICAg
IGVsc2UgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9uTmFtZSgpLCBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24ub3JpZ2luKCksIGFuZGVyQXJndW1lbnRUeXBlcywgbV9pbnRyaW5zaWNzKSkgewor
ICAgICAgICAgICAgICAgIG1fcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsK
KyAgICAgICAgICAgICAgICBhbmRlckZ1bmN0aW9uID0gJm1fcHJvZ3JhbS5uYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9ucygpLmxhc3QoKTsKKyAgICAgICAgICAgICAgICBhbmRlclJldHVyblR5cGUg
PSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5lbGVt
ZW50VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEg
cG9pbnRlcgorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKiB0aHJlYWRBbmRlckZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBBU1Q6
OlVubmFtZWRUeXBlKiB0aHJlYWRBbmRlclJldHVyblR5cGUgPSBudWxscHRyOwotICAgIHsKLSAg
ICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+
KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKLSAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZGVyQXJndW1l
bnRUeXBlcyB7IGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlIH07Ci0gICAgICAgIHRocmVhZEFuZGVy
RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChkb3RFeHByZXNzaW9uLnBvc3NpYmxl
QW5kZXJPdmVybG9hZHMoKSwgdGhyZWFkQW5kZXJBcmd1bWVudFR5cGVzKTsKLSAgICAgICAgaWYg
KHRocmVhZEFuZGVyRnVuY3Rpb24pCisgICAgaWYgKGF1dG8gYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQgPSBXSExTTDo6YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlw
ZSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpIHsKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBh
cmd1bWVudFR5cGUgPSB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQsIGJhc2VVbm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSkgfTsKKyAgICAgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZGVyQXJn
dW1lbnRUeXBlcyB7IGFyZ3VtZW50VHlwZSB9OworICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3Vt
ZW50VHlwZSkKKyAgICAgICAgICAgIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFk
ZGl0aW9uYWxBcmd1bWVudFR5cGUpOworICAgICAgICBpZiAoKHRocmVhZEFuZGVyRnVuY3Rpb24g
PSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2li
bGVBbmRlck92ZXJsb2FkcygpLCB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMpKSkKICAgICAgICAg
ICAgIHRocmVhZEFuZGVyUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0
aHJlYWRBbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhlIHJl
dHVybiBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgICAgIGVsc2UgaWYg
KGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9uTmFtZSgpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
b3JpZ2luKCksIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAg
ICAgICAgICAgbV9wcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuZXdGdW5jdGlvbikpOworICAgICAg
ICAgICAgdGhyZWFkQW5kZXJGdW5jdGlvbiA9ICZtX3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbnMoKS5sYXN0KCk7CisgICAgICAgICAgICB0aHJlYWRBbmRlclJldHVyblR5cGUgPSAm
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50
VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9p
bnRlcgorICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFnZXR0ZXJGdW5jdGlvbiAmJiAhYW5k
ZXJGdW5jdGlvbikgeworICAgIGlmIChsZWZ0QWRkcmVzc1NwYWNlICYmICFhbmRlckZ1bmN0aW9u
ICYmICFnZXR0ZXJGdW5jdGlvbikgewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmIChnZXR0ZXJGdW5jdGlvbiAmJiBhbmRlckZ1bmN0aW9uKSB7CisK
KyAgICBpZiAoIWxlZnRBZGRyZXNzU3BhY2UgJiYgIXRocmVhZEFuZGVyRnVuY3Rpb24gJiYgIWdl
dHRlckZ1bmN0aW9uKSB7CiAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBpZiAodGhyZWFkQW5kZXJGdW5jdGlvbiAmJiBnZXR0ZXJGdW5jdGlvbikgewor
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKGFu
ZGVyRnVuY3Rpb24gJiYgdGhyZWFkQW5kZXJGdW5jdGlvbiAmJiAhbWF0Y2hlcygqYW5kZXJSZXR1
cm5UeXBlLCAqdGhyZWFkQW5kZXJSZXR1cm5UeXBlKSkgewogICAgICAgICBzZXRFcnJvcigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVkVHlwZSogZmllbGRUeXBl
ID0gZ2V0dGVyUmV0dXJuVHlwZSA/IGdldHRlclJldHVyblR5cGUgOiBhbmRlclJldHVyblR5cGU7
CisgICAgaWYgKGdldHRlckZ1bmN0aW9uICYmIGFuZGVyRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmdl
dHRlclJldHVyblR5cGUsICphbmRlclJldHVyblR5cGUpKSB7CisgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ2V0dGVyRnVuY3Rpb24gJiYgdGhy
ZWFkQW5kZXJGdW5jdGlvbiAmJiAhbWF0Y2hlcygqZ2V0dGVyUmV0dXJuVHlwZSwgKnRocmVhZEFu
ZGVyUmV0dXJuVHlwZSkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldHRlclJldHVyblR5
cGUgPyBnZXR0ZXJSZXR1cm5UeXBlIDogYW5kZXJSZXR1cm5UeXBlID8gYW5kZXJSZXR1cm5UeXBl
IDogdGhyZWFkQW5kZXJSZXR1cm5UeXBlOwogCiAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KiBzZXR0ZXJGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0dGVy
UmV0dXJuVHlwZSA9IG51bGxwdHI7CiAgICAgewogICAgICAgICBSZXNvbHZpbmdUeXBlIGZpZWxk
UmVzb2x2aW5nVHlwZShmaWVsZFR5cGUtPmNsb25lKCkpOwotICAgICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gc2V0dGVyQXJndW1lbnRUeXBlcyB7IGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlLCBmaWVsZFJlc29sdmluZ1R5cGUgfTsKLSAgICAgICAgc2V0
dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZChkb3RFeHByZXNzaW9uLnBvc3Np
YmxlU2V0dGVyT3ZlcmxvYWRzKCksIHNldHRlckFyZ3VtZW50VHlwZXMpOworICAgICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gc2V0dGVyQXJndW1lbnRU
eXBlcyB7IGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlIH07CisgICAgICAgIGlmIChhZGRpdGlvbmFs
QXJndW1lbnRUeXBlKQorICAgICAgICAgICAgc2V0dGVyQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFk
ZGl0aW9uYWxBcmd1bWVudFR5cGUpOworICAgICAgICBzZXR0ZXJBcmd1bWVudFR5cGVzLmFwcGVu
ZChmaWVsZFJlc29sdmluZ1R5cGUpOworICAgICAgICBzZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZVNldHRlck92
ZXJsb2FkcygpLCBzZXR0ZXJBcmd1bWVudFR5cGVzKTsKICAgICAgICAgaWYgKHNldHRlckZ1bmN0
aW9uKQogICAgICAgICAgICAgc2V0dGVyUmV0dXJuVHlwZSA9ICZzZXR0ZXJGdW5jdGlvbi0+dHlw
ZSgpOwogICAgIH0KIAotICAgIGlmIChzZXR0ZXJGdW5jdGlvbiAmJiBhbmRlckZ1bmN0aW9uKSB7
CisgICAgaWYgKHNldHRlckZ1bmN0aW9uICYmICFnZXR0ZXJGdW5jdGlvbikgewogICAgICAgICBz
ZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZG90RXhwcmVzc2lvbi5z
ZXRHZXR0ZXJGdW5jdGlvbihnZXR0ZXJGdW5jdGlvbik7Ci0gICAgZG90RXhwcmVzc2lvbi5zZXRB
bmRlckZ1bmN0aW9uKGFuZGVyRnVuY3Rpb24pOwotICAgIGRvdEV4cHJlc3Npb24uc2V0VGhyZWFk
QW5kZXJGdW5jdGlvbih0aHJlYWRBbmRlckZ1bmN0aW9uKTsKLSAgICBkb3RFeHByZXNzaW9uLnNl
dFNldHRlckZ1bmN0aW9uKHNldHRlckZ1bmN0aW9uKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uc2V0R2V0dGVyRnVuY3Rpb24oZ2V0dGVyRnVuY3Rpb24pOworICAgIHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5zZXRBbmRlckZ1bmN0aW9uKGFuZGVyRnVuY3Rpb24pOworICAgIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRUaHJlYWRBbmRlckZ1bmN0aW9uKHRocmVhZEFuZGVyRnVu
Y3Rpb24pOworICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRTZXR0ZXJGdW5jdGlvbihz
ZXR0ZXJGdW5jdGlvbik7CiAKICAgICBBU1Q6OlR5cGVBbm5vdGF0aW9uIHR5cGVBbm5vdGF0aW9u
ID0gQVNUOjpSaWdodFZhbHVlKCk7CiAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJh
c2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKQEAgLTEwNDUsMTQg
KzExMDcsMjIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIAogICAg
ICAgICAgICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkxlZnRWYWx1ZSB7ICpsZWZ0QWRkcmVzc1Nw
YWNlIH07CiAgICAgICAgIGVsc2UgaWYgKHNldHRlckZ1bmN0aW9uKQogICAgICAgICAgICAgdHlw
ZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7Ci0gICAgfSBlbHNlIGlmICgh
YmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRWYWx1ZSgpICYmIChzZXR0ZXJGdW5jdGlv
biB8fCBhbmRlckZ1bmN0aW9uKSkKKyAgICB9IGVsc2UgaWYgKCFiYXNlSW5mby0+dHlwZUFubm90
YXRpb24uaXNSaWdodFZhbHVlKCkgJiYgKHNldHRlckZ1bmN0aW9uIHx8IHRocmVhZEFuZGVyRnVu
Y3Rpb24pKQogICAgICAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6QWJzdHJhY3RMZWZ0VmFsdWUo
KTsKLSAgICBhc3NpZ25UeXBlKGRvdEV4cHJlc3Npb24sIGZpZWxkVHlwZS0+Y2xvbmUoKSwgV1RG
TW92ZSh0eXBlQW5ub3RhdGlvbikpOworICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90YXRpb24pKTsKIH0K
IAotdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpCit2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKIHsKLSAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MyBJbXBs
ZW1lbnQgdGhpcy4KKyAgICBmaW5pc2hWaXNpdGluZyhkb3RFeHByZXNzaW9uKTsKK30KKwordm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQor
eworICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4cHJlc3Npb24u
aW5kZXhFeHByZXNzaW9uKCkpOworICAgIGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybjsK
KyAgICBmaW5pc2hWaXNpdGluZyhpbmRleEV4cHJlc3Npb24sICZiYXNlSW5mby0+cmVzb2x2aW5n
VHlwZSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYg
dmFyaWFibGVSZWZlcmVuY2UpCkBAIC0xMzYyLDcgKzE0MzIsNyBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uCiAgICAgaWYgKGVycm9yKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBhdXRvIGxhc3RJbmZvID0gZ2V0SW5mbyhjb21tYUV4cHJlc3Npb24ubGlzdCgpLmxh
c3QoKSk7Ci0gICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVzb2x2
aW5nVHlwZSwgbGFzdEluZm8tPnR5cGVBbm5vdGF0aW9uKTsKKyAgICBmb3J3YXJkVHlwZShjb21t
YUV4cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdUeXBlKTsKIH0KIAogdm9pZCBDaGVja2Vy
Ojp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKQEAgLTEz
OTksNyArMTQ2OSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYK
ICAgICBBU1NFUlQoY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpOwogICAgIGF1dG8qIGZ1
bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoKmNhbGxFeHByZXNzaW9uLm92ZXJsb2Fk
cygpLCB0eXBlcywgY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSk7CiAgICAgaWYgKCFm
dW5jdGlvbikgewotICAgICAgICBpZiAoYXV0byBuZXdGdW5jdGlvbiA9IHJlc29sdmVCeUluc3Rh
bnRpYXRpb24oY2FsbEV4cHJlc3Npb24sIHR5cGVzLCBtX2ludHJpbnNpY3MpKSB7CisgICAgICAg
IGlmIChhdXRvIG5ld0Z1bmN0aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihjYWxsRXhwcmVz
c2lvbi5uYW1lKCksIGNhbGxFeHByZXNzaW9uLm9yaWdpbigpLCB0eXBlcywgbV9pbnRyaW5zaWNz
KSkgewogICAgICAgICAgICAgbV9wcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuZXdGdW5jdGlvbikp
OwogICAgICAgICAgICAgZnVuY3Rpb24gPSAmbV9wcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb25zKCkubGFzdCgpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAkocmV2aXNpb24gMjQ2
MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5
cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgY2xhc3MgVW5uYW1lZFR5cGU7
CiBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmKTsKIGJvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6
TmFtZWRUeXBlJik7CiBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0
IEFTVDo6TmFtZWRUeXBlJik7Ci0vLyBGSVhNRTogSXMgYW55b25lIGFjdHVhbGx5IHVzaW5nIHRo
ZSByZXR1cm4gdHlwZSBoZXJlPwogT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYp
OwogT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChB
U1Q6Ok5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYs
IEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaAko
cmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE4ICsxMTQs
MjggQEAgZW51bSBjbGFzcyBTaGFkZXJTdGFnZSA6IHVpbnQ4X3QgewogICAgIENvbXB1dGUgPSAx
IDw8IDIKIH07CiAKLWVudW0gY2xhc3MgQmluZGluZ1R5cGUgOiB1aW50OF90IHsKLSAgICBVbmlm
b3JtQnVmZmVyLAotICAgIFNhbXBsZXIsCi0gICAgVGV4dHVyZSwKLSAgICBTdG9yYWdlQnVmZmVy
LAotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MTY4IEFkZCB0aGUgZHluYW1pYyB0eXBlcworc3RydWN0IFVuaWZvcm1CdWZmZXJCaW5kaW5n
IHsKKyAgICB1bnNpZ25lZCBsZW5ndGhOYW1lOwogfTsKIAorc3RydWN0IFNhbXBsZXJCaW5kaW5n
IHsKK307CisKK3N0cnVjdCBUZXh0dXJlQmluZGluZyB7Cit9OworCitzdHJ1Y3QgU3RvcmFnZUJ1
ZmZlckJpbmRpbmcgeworICAgIHVuc2lnbmVkIGxlbmd0aE5hbWU7Cit9OworCisvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OCBBZGQgdGhlIGR5
bmFtaWMgdHlwZXMKKwogc3RydWN0IEJpbmRpbmcgeworICAgIHVzaW5nIEJpbmRpbmdEZXRhaWxz
ID0gVmFyaWFudDxVbmlmb3JtQnVmZmVyQmluZGluZywgU2FtcGxlckJpbmRpbmcsIFRleHR1cmVC
aW5kaW5nLCBTdG9yYWdlQnVmZmVyQmluZGluZz47CiAgICAgT3B0aW9uU2V0PFNoYWRlclN0YWdl
PiB2aXNpYmlsaXR5OwotICAgIEJpbmRpbmdUeXBlIGJpbmRpbmdUeXBlOwotICAgIHVuc2lnbmVk
IG5hbWU7CisgICAgQmluZGluZ0RldGFpbHMgYmluZGluZzsKKyAgICB1bnNpZ25lZCBpbnRlcm5h
bE5hbWU7CisgICAgdW5zaWduZWQgZXh0ZXJuYWxOYW1lOwogfTsKIAogc3RydWN0IEJpbmRHcm91
cCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBh
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlcGFyZS5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1
bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBB
U1RBZnRlclBhcnNpbmcgPSBmYWxzZTsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRF
bmQgPSBmYWxzZTsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRFbmQgPSB0cnVlOwog
c3RhdGljIGNvbnN0ZXhwciBib29sIGFsd2F5c0R1bXBQYXNzRmFpbHVyZXMgPSBmYWxzZTsKIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wUGFzc0ZhaWx1cmUgPSBkdW1wQVNUQmVmb3JlRWFjaFBh
c3MgfHwgZHVtcEFTVEFmdGVyUGFyc2luZyB8fCBkdW1wQVNUQXRFbmQgfHwgYWx3YXlzRHVtcFBh
c3NGYWlsdXJlczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGlt
ZXMuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgICAgIGF1dG8gcmhzID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3
cmFwKHZhcmlhYmxlKSk7CiAgICAgICAgIHJocy0+c2V0VHlwZSh2YXJpYWJsZS50eXBlKCktPmNs
b25lKCkpOwotICAgICAgICByaHMtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgp
KTsKKyAgICAgICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAgICAgYXV0byBhc3NpZ25tZW50ID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPih2YXJpYWJsZS5vcmlnaW4oKSwg
V1RGTW92ZShsaHMpLCBXVEZNb3ZlKHJocykpOwogICAgICAgICBhc3NpZ25tZW50LT5zZXRUeXBl
KHZhcmlhYmxlLnR5cGUoKS0+Y2xvbmUoKSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHVibGljOgog
CiAgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGZ1bmN0aW9uRGVmaW5pdGlvbi5vcmlnaW4oKSwg
V1RGTW92ZShzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSkpOwogICAgICAgICAgICAgbWFrZVBvaW50
ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1fcG9pbnRlclRvU3RydWN0VHlwZS0+Y2xvbmUoKSk7Ci0g
ICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKyAgICAgICAgICAgIG1h
a2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OwogCiAgICAgICAgICAgICBhdXRvIHBvaW50ZXJEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihmdW5jdGlvbkRlZmluaXRpb24ub3JpZ2luKCksIEFT
VDo6UXVhbGlmaWVycygpLAogICAgICAgICAgICAgICAgIG1fcG9pbnRlclRvU3RydWN0VHlwZS0+
Y2xvbmUoKSwgIndyYXBwZXIiX3MsIFdURjo6bnVsbG9wdCwgT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+KFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9u
LmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgog
I2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKICNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24uaCIKQEAgLTUxLDEwICs1MiwxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKICAgICB2
b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6QXNz
aWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzaW1wbGlmeVJpZ2h0
VmFsdWUoQVNUOjpEb3RFeHByZXNzaW9uJik7CisgICAgdm9pZCBzaW1wbGlmeVJpZ2h0VmFsdWUo
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKICAgICBib29sIHNpbXBsaWZ5QWJzdHJh
Y3RMZWZ0VmFsdWUoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYsIEFTVDo6RG90RXhwcmVzc2lv
biYsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmlnaHQpOwogICAgIHZvaWQgc2ltcGxp
ZnlMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJik7CiAKQEAgLTY0LDggKzY2LDE0IEBAIHByaXZh
dGU6CiB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90
RXhwcmVzc2lvbikKIHsKICAgICAvLyBVbmxlc3Mgd2UncmUgaW5zaWRlIGFuIEFzc2lnbm1lbnRF
eHByZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgd2UncmUgYSByaWdodCB2
YWx1ZS4KLSAgICBpZiAoIXNpbXBsaWZ5UmlnaHRWYWx1ZShkb3RFeHByZXNzaW9uKSkKLSAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICBzaW1wbGlmeVJpZ2h0VmFsdWUoZG90RXhwcmVzc2lvbik7Cit9
CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGlu
ZGV4RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW5kZXhFeHByZXNzaW9u
LmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICAvLyBVbmxlc3Mgd2UncmUgaW5zaWRlIGFuIEFzc2ln
bm1lbnRFeHByZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgd2UncmUgYSBy
aWdodCB2YWx1ZS4KKyAgICBzaW1wbGlmeVJpZ2h0VmFsdWUoaW5kZXhFeHByZXNzaW9uKTsKIH0K
IAogdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uKQpAQCAtNzUsNzkgKzgzLDE4MiBAQCB2b2lkIFByb3BlcnR5UmVz
b2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3RpCiAgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9j
aygpLnN0YXRlbWVudHMoKS5pbnNlcnQoMCwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50PihMZXhlcjo6VG9rZW4obV92YXJpYWJsZURlY2xhcmF0aW9uc1sw
XS0+b3JpZ2luKCkpLCBXVEZNb3ZlKG1fdmFyaWFibGVEZWNsYXJhdGlvbnMpKSk7CiB9CiAKLXN0
YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2FsbChBU1Q6
OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
JiYgbmV3VmFsdWUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4oKT4mIGxlZnRWYWx1ZUZhY3RvcnksIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4oKT4mIHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCitlbnVtIGNsYXNz
IFdoaWNoQW5kZXIgeworICAgIFRocmVhZEFuZGVyLAorICAgIEFuZGVyCit9OworCitzdHJ1Y3Qg
QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQgeworICAgIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
IGV4cHJlc3Npb247CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbj4+IHZhcmlhYmxlRGVjbGFyYXRpb247CisgICAgV2hpY2hBbmRlciB3aGljaEFuZGVyOwor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEV4cHJlc3Npb25Db25zdHJ1Y3RvciwgdHlwZW5hbWUg
VHlwZUNvbnN0cnVjdG9yPgorc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0
PiB3cmFwQW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJl
c3Npb24sIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRBbmRlckZ1bmN0aW9uKQogewot
ICAgIGlmIChkb3RFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSkgewotICAgICAgICAvLyAqb3Bl
cmF0b3ImLmZvbygmdikgPSBuZXdWYWx1ZQotICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhy
ZWFkQW5kZXJGdW5jdGlvbigpKQorICAgIGlmIChhdXRvIGFkZHJlc3NTcGFjZSA9IGV4cHJlc3Np
b24tPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAgIGlmICgh
YW5kZXJGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
IAorICAgICAgICBhdXRvIG9yaWdpbiA9IGV4cHJlc3Npb24tPm9yaWdpbigpOworICAgICAgICBh
dXRvIGJhc2VUeXBlID0gZXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKKyAgICAg
ICAgYXV0byBtYWtlQXJyYXlSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25Db25z
dHJ1Y3Rvcj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbikpOworICAg
ICAgICBtYWtlQXJyYXlSZWZlcmVuY2UtPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxUeXBlQ29uc3Ry
dWN0b3I+KFdURk1vdmUob3JpZ2luKSwgKmFkZHJlc3NTcGFjZSwgV1RGTW92ZShiYXNlVHlwZSkp
KTsKKyAgICAgICAgbWFrZUFycmF5UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKG1ha2VBcnJheVJlZmVyZW5j
ZSksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIgfX07CisgICAgfQorICAgIGlmICh0
aHJlYWRBbmRlckZ1bmN0aW9uKSB7CisgICAgICAgIGF1dG8gb3JpZ2luID0gZXhwcmVzc2lvbi0+
b3JpZ2luKCk7CisgICAgICAgIGF1dG8gYmFzZVR5cGUgPSBleHByZXNzaW9uLT5yZXNvbHZlZFR5
cGUoKS5jbG9uZSgpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIEFT
VDo6UXVhbGlmaWVycygpLCBiYXNlVHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgV1RGOjpudWxsb3B0KTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
MS0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
MS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBX
VEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMSksIFdURk1vdmUoZXhwcmVzc2lvbikpOworICAgICAg
ICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAg
ICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFs
dWUoKSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFy
aWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGUo
YmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsK
KworICAgICAgICBhdXRvIGV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25Db25z
dHJ1Y3Rvcj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2Uy
KSk7CisgICAgICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1ha2VVbmlxdWVSZWY8VHlwZUNvbnN0cnVj
dG9yPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgV1RG
TW92ZShiYXNlVHlwZSkpOworICAgICAgICBleHByZXNzaW9uLT5zZXRUeXBlKHJlc3VsdFR5cGUt
PmNsb25lKCkpOworICAgICAgICBleHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiBleHByZXNzaW9uczsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdu
bWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoZXhw
cmVzc2lvbikpOworICAgICAgICBhdXRvIGNvbW1hRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpDb21tYUV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9u
cykpOworICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGUoV1RGTW92ZShyZXN1bHRUeXBl
KSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdo
dFZhbHVlKCkpOworICAgICAgICByZXR1cm4ge3sgV1RGTW92ZShjb21tYUV4cHJlc3Npb24pLCB7
IFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikgfSwgV2hpY2hBbmRlcjo6VGhyZWFkQW5kZXJ9
fTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9wdGlvbmFs
PEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiBhbmRlckNhbGxBcmd1bWVudChVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbiwgYm9vbCBhbmRlckZ1bmN0aW9uLCBib29sIHRocmVh
ZEFuZGVyRnVuY3Rpb24pCit7CisgICAgYXV0byYgdW5pZnlOb2RlID0gZXhwcmVzc2lvbi0+cmVz
b2x2ZWRUeXBlKCkudW5pZnlOb2RlKCk7CisgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVu
aWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICBBU1NFUlQoIWlzPEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHt7IFdURk1vdmUoZXhwcmVzc2lv
biksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIgfX07CisgICAgICAgIGlmIChpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBBbmRl
ckNhbGxBcmd1bWVudDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPihleHByZXNzaW9uLCBhbmRlckZ1bmN0aW9uLCB0aHJlYWRBbmRlckZ1
bmN0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBBbmRlckNhbGxBcmd1bWVudDxBU1Q6Ok1h
a2VQb2ludGVyRXhwcmVzc2lvbiwgQVNUOjpQb2ludGVyVHlwZT4oZXhwcmVzc2lvbiwgYW5kZXJG
dW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2FsbChBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHJlbGV2YW50QW5kZXIsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbmV3VmFsdWUs
IGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRW
YWx1ZUZhY3RvcnksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogaW5kZXhWYXJpYWJsZSkKK3sK
KyAgICBhdXRvIG1heWJlQWRkSW5kZXhBcmd1bWVudCA9IFsmXShWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMpIHsKKyAgICAgICAgaWYgKCFpbmRleFZhcmlhYmxl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKCppbmRleFZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChpbmRleFZhcmlhYmxl
LT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShpbmRleFZhcmlh
YmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0p
OyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2
OSBJcyB0aGlzIHJpZ2h0PworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVSZWZlcmVuY2UpKTsKKyAgICB9OworCisgICAgaWYgKHJlbGV2YW50QW5kZXIpIHsKKyAgICAg
ICAgLy8gKm9wZXJhdG9yJi5mb28oJnYpID0gbmV3VmFsdWUKKyAgICAgICAgYXV0byBsZWZ0VmFs
dWUgPSBsZWZ0VmFsdWVGYWN0b3J5KCk7CisgICAgICAgIGF1dG8gYXJndW1lbnQgPSBhbmRlckNh
bGxBcmd1bWVudChsZWZ0VmFsdWUsIHRydWUsIHRydWUpOworICAgICAgICBBU1NFUlQoYXJndW1l
bnQpOworICAgICAgICBBU1NFUlQoIWFyZ3VtZW50LT52YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAg
ICAgICAgQVNTRVJUKGFyZ3VtZW50LT53aGljaEFuZGVyID09IFdoaWNoQW5kZXI6OkFuZGVyKTsK
ICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7Ci0g
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocG9pbnRlclRvTGVmdFZhbHVlRmFjdG9yeSgpKTsKLSAg
ICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90RXhw
cmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRz
KSk7Ci0gICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24udGhyZWFk
QW5kZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoV1RGTW92ZShhcmd1bWVudC0+ZXhwcmVzc2lvbikpOworICAgICAgICBtYXliZUFkZEluZGV4
QXJndW1lbnQoYXJndW1lbnRzKTsKKworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKHJlbGV2YW50QW5kZXItPm5hbWUoKSksIFdU
Rk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKHJlbGV2
YW50QW5kZXItPnR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKLSAgICAgICAgY2FsbEV4cHJlc3Npb24t
PnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKSk7CisgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqcmVsZXZhbnRBbmRlcik7CiAKLSAgICAg
ICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdU
Rk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKLSAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5k
ZXJGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGF1
dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNl
RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4o
KSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHJlbGV2YW50QW5kZXItPnR5
cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7CiAKLSAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiksIFdURk1vdmUo
bmV3VmFsdWUpKTsKLSAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNh
c3Q8QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCkt
PnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgYXV0byBhc3NpZ25tZW50
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUoZGVy
ZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZShuZXdWYWx1ZSkpOworICAgICAgICBhc3NpZ25t
ZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihyZWxldmFu
dEFuZGVyLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgICAgIGFzc2lnbm1l
bnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAg
ICAgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoYXNzaWdubWVu
dEV4cHJlc3Npb24pKTsKICAgICB9CiAKICAgICAvLyB2ID0gb3BlcmF0b3IuZm9vPSh2LCBuZXdW
YWx1ZSkKLSAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsKKyAgICBB
U1NFUlQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCkpOwogCiAgICAg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CiAgICAgYXJndW1l
bnRzLmFwcGVuZChsZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgIG1heWJlQWRkSW5kZXhBcmd1bWVu
dChhcmd1bWVudHMpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShuZXdWYWx1ZSkpOwot
ICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4cHJl
c3Npb24uc2V0dGVyRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAg
ICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCkt
PnR5cGUoKS5jbG9uZSgpKTsKKworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24ub3JpZ2luKCkpLCBTdHJpbmcocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1
bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCktPnR5
cGUoKS5jbG9uZSgpKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOwotICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhw
cmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rp
b24oKnByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsKIAotICAgIGF1
dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgbGVmdFZhbHVl
RmFjdG9yeSgpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Ci0gICAgYXNzaWdubWVudEV4cHJl
c3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkuY2xv
bmUoKSk7CisgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5vcmlnaW4oKSksIGxlZnRWYWx1ZUZhY3RvcnkoKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lv
bikpOworICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CiAgICAgYXNzaWdubWVu
dEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKIAogICAg
IHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHBy
ZXNzaW9uKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gZ2V0dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZhY3Rv
cnksIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIHBv
aW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGdldHRlckNhbGwoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZWxldmFu
dEFuZGVyLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+
JiBsZWZ0VmFsdWVGYWN0b3J5LCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGluZGV4VmFyaWFi
bGUpCiB7Ci0gICAgaWYgKGRvdEV4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpKSB7CisgICAgYXV0
byBtYXliZUFkZEluZGV4QXJndW1lbnQgPSBbJl0oVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiYgYXJndW1lbnRzKSB7CisgICAgICAgIGlmICghaW5kZXhWYXJpYWJsZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cCgqaW5kZXhWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQoaW5kZXhWYXJpYWJsZS0+dHlwZSgp
KTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoaW5kZXhWYXJpYWJsZS0+dHlw
ZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0
aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhp
cyByaWdodD8KKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlUmVmZXJl
bmNlKSk7CisgICAgfTsKKworICAgIGlmIChyZWxldmFudEFuZGVyKSB7CiAgICAgICAgIC8vICpv
cGVyYXRvciYuZm9vKCZ2KQotICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJG
dW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgCisg
ICAgICAgIGF1dG8gbGVmdFZhbHVlID0gbGVmdFZhbHVlRmFjdG9yeSgpOworICAgICAgICBhdXRv
IGFyZ3VtZW50ID0gYW5kZXJDYWxsQXJndW1lbnQobGVmdFZhbHVlLCB0cnVlLCB0cnVlKTsKKyAg
ICAgICAgQVNTRVJUKGFyZ3VtZW50KTsKKyAgICAgICAgQVNTRVJUKCFhcmd1bWVudC0+dmFyaWFi
bGVEZWNsYXJhdGlvbik7CisgICAgICAgIEFTU0VSVChhcmd1bWVudC0+d2hpY2hBbmRlciA9PSBX
aGljaEFuZGVyOjpBbmRlcik7CiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPj4gYXJndW1lbnRzOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHBvaW50ZXJUb0xlZnRW
YWx1ZUZhY3RvcnkoKSk7Ci0gICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdp
bigpKSwgU3RyaW5nKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpLT5uYW1lKCkp
LCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShk
b3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoYXJndW1lbnQtPmV4cHJlc3Npb24pKTsKKyAg
ICAgICAgbWF5YmVBZGRJbmRleEFyZ3VtZW50KGFyZ3VtZW50cyk7CisKKyAgICAgICAgYXV0byBj
YWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhyZWxldmFu
dEFuZGVyLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0VHlwZShyZWxldmFudEFuZGVyLT50eXBlKCkuY2xvbmUoKSk7CiAgICAgICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7Ci0gICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi50aHJlYWRBbmRl
ckZ1bmN0aW9uKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKnJlbGV2
YW50QW5kZXIpOwogCi0gICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Ci0gICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihkb3RF
eHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
PihyZWxldmFudEFuZGVyLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogCiAgICAgICAgIHJldHVybiBVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikpOwogICAg
IH0KIAogICAgIC8vIG9wZXJhdG9yLmZvbyh2KQotICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmdl
dHRlckZ1bmN0aW9uKCkpOwotICAgIAorICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uZ2V0dGVyRnVuY3Rpb24oKSk7CisKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+IGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKGxlZnRWYWx1ZUZhY3Rvcnko
KSk7Ci0gICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcoZG90
RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykp
OwotICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24uZ2V0dGVyRnVuY3Rp
b24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIG1heWJlQWRkSW5kZXhBcmd1bWVudChhcmd1bWVu
dHMpOworCisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxs
RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4o
KSksIFN0cmluZyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24oKS0+bmFt
ZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkp
OwogICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUo
KSk7Ci0gICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLmdldHRl
ckZ1bmN0aW9uKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqcHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCkpOwogCiAgICAgcmV0dXJuIFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKIH0KQEAgLTE2MSw3
ICsyNzIsNyBAQCBzdHJ1Y3QgTW9kaWZpY2F0aW9uUmVzdWx0IHsKICAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwogICAgIFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+IHJlc3VsdDsKIH07Ci1zdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2Rp
ZnkoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBzdGQ6OmZ1bmN0aW9uPE9wdGlv
bmFsPE1vZGlmaWNhdGlvblJlc3VsdD4oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+JiYpPiBtb2RpZmljYXRpb24pCitzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2Rp
ZnkoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biwgc3RkOjpmdW5jdGlvbjxPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+KE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKT4gbW9kaWZpY2F0aW9uKQogewogICAgIC8vIENv
bnNpZGVyIGEuYi5jLmQrKzsKICAgICAvLyBUaGlzIHdvdWxkIGdldCB0cmFuc2Zvcm1lZCBpbnRv
OgpAQCAtMTgxLDIyICsyOTIsMjIgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9k
aWZ5KEFTVAogICAgIC8vIHIgPSBvcGVyYXRvci5kPShyLCBuZXdWYWx1ZSk7CiAgICAgLy8gcSA9
IG9wZXJhdG9yLmM9KHEsIHIpOwogICAgIC8vCi0gICAgLy8gU3RlcCA0OgorICAgIC8vIFN0ZXAg
NToKICAgICAvLyAqcCA9IG9wZXJhdG9yLmI9KCpwLCBxKTsKIAogICAgIC8vIElmIHRoZSBleHBy
ZXNzaW9uIGlzIGEuYi5jLmQgPSBlLCBTdGVwIDMgZGlzYXBwZWFycyBhbmQgIm5ld1ZhbHVlIiBp
biBzdGVwIDQgYmVjb21lcyAiZSIuCiAgICAgCiAKICAgICAvLyBGaW5kIHRoZSAiLmIiICIuYyIg
YW5kICIuZCIgZXhwcmVzc2lvbnMuIFRoZXkgZW5kIHVwIGluIHRoZSBvcmRlciBbIi5kIiwgIi5j
IiwgIi5iIl0uCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpEb3RFeHBy
ZXNzaW9uPj4gY2hhaW47Ci0gICAgQVNUOjpEb3RFeHByZXNzaW9uKiBpdGVyYXRvciA9ICZkb3RF
eHByZXNzaW9uOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uPj4gY2hhaW47CisgICAgQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24qIGl0ZXJhdG9yID0gJnByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjsKICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgICBjaGFpbi5hcHBlbmQoKml0ZXJhdG9yKTsKICAgICAgICAgaWYgKGl0
ZXJhdG9yLT5iYXNlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgQVNTRVJUKCFpdGVyYXRvci0+YmFzZSgpLnR5cGVBbm5v
dGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpEb3RFeHBy
ZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXggZXhw
cmVzc2lvbnMKLSAgICAgICAgaXRlcmF0b3IgPSAmZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9u
PihpdGVyYXRvci0+YmFzZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6UHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKSk7CisgICAgICAgIGl0ZXJhdG9yID0gJmRv
d25jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKTsK
ICAgICB9CiAgICAgYXV0byBsZWZ0RXhwcmVzc2lvbiA9IGl0ZXJhdG9yLT50YWtlQmFzZSgpOwog
ICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJMZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHByZXNzaW9u
OwpAQCAtMjA4LDggKzMxOSwzOSBAQCBzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2Rp
ZnkoQVNUCiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiBp
bnRlcm1lZGlhdGVWYXJpYWJsZXM7CiAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoY2hhaW4uc2l6ZSgpIC0gMSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBjaGFpbi5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBkb3RFeHByZXNzaW9uID0g
c3RhdGljX2Nhc3Q8QVNUOjpEb3RFeHByZXNzaW9uJj4oY2hhaW5baV0pOwotICAgICAgICBpbnRl
cm1lZGlhdGVWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCBkb3RFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLmNsb25lKCksIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgICAgICBhdXRvJiBwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24gPSBzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiY+KGNoYWluW2ldKTsKKyAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnVuY2hl
Y2tlZEFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6
OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgfQorCisgICAgLy8gQ29u
c2lkZXIgYVtmb28oKV1bYl0gPSBjOworICAgIC8vIE5haXZlbHksIFRoaXMgd291bGQgZ2V0IGV4
cGFuZGVkIHRvOgorICAgIC8vCisgICAgLy8gdGVtcCA9IG9wZXJhdG9yW10oYSwgZm9vKCkpOwor
ICAgIC8vIHRlbXAgPSBvcGVyYXRvcltdPSh0ZW1wLCBiLCBjKTsKKyAgICAvLyBhID0gb3BlcmF0
b3JbXT0oYSwgZm9vKCksIHRlbXApOworICAgIC8vCisgICAgLy8gSG93ZXZlciwgaWYgd2UgZGlk
IHRoaXMsIHdlIHdvdWxkIGhhdmUgdG8gcnVuIGZvbygpIHR3aWNlLCB3aGljaCB3b3VsZCBiZSBp
bmNvcnJlY3QuCisgICAgLy8gSW5zdGVhZCwgd2UgbmVlZCB0byBzYXZlIGZvbygpIGFuZCBiIGlu
dG8gbW9yZSB0ZW1wb3JhcnkgdmFyaWFibGVzLgorICAgIC8vIFRoZXNlIHRlbXBvcmFyeSB2YXJp
YWJsZXMgYXJlIHBhcmFsbGVsIHRvICJjaGFpbiIgYWJvdmUsIHdpdGggbnVsbG9wdCByZWZlcnJp
bmcgdG8gYSBEb3RFeHByZXNzaW9uICh3aGljaCBkb2Vzbid0IGhhdmUgYW4gaW5kZXggdmFsdWUg
dG8gc2F2ZSB0byBhIHZhcmlhYmxlKS4KKyAgICAvLworICAgIC8vIEluc3RlYWQsIHRoaXMgZ2V0
cyBleHBhbmRlZCB0bzoKKyAgICAvLworICAgIC8vIHAgPSAmYTsKKyAgICAvLyB0ZW1wID0gZm9v
KCk7CisgICAgLy8gcSA9IG9wZXJhdG9yW10oKnAsIHRlbXApOworICAgIC8vIHRlbXAyID0gYjsK
KyAgICAvLyBxID0gb3BlcmF0b3JbXT0ocSwgdGVtcDIsIGMpOworICAgIC8vICpwID0gb3BlcmF0
b3JbXT0oKnAsIHRlbXAsIHEpOworCisgICAgVmVjdG9yPE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24+Pj4gaW5kZXhWYXJpYWJsZXM7CisgICAgaW5kZXhWYXJpYWJs
ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFpbi5zaXplKCkpOworICAgIGZvciAoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiA6IGNoYWlu
KSB7CisgICAgICAgIGlmICghaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbikpIHsKKyAgICAgICAgICAgIGluZGV4VmFyaWFibGVzLmFwcGVuZChXVEY6Om51
bGxvcHQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYXV0byYg
aW5kZXhFeHByZXNzaW9uID0gZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbik7CisgICAgICAgIGluZGV4VmFyaWFibGVzLnVuY2hlY2tlZEFwcGVu
ZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBpbmRl
eEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgfQogCiAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKQEAgLTI0Miw0MyArMzg0
LDQ0IEBAIHN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICAgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAgICAgICAgICAg
ICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOwogICAg
ICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwogICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7CiAgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKLSAgICAgICAg
YXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVu
Y2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1v
dmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJl
ZmVyZW5jZSkpOwogICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwogICAg
ICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwog
ICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVm
dFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlw
ZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKICAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbjsKICAgICB9OwotICAgIGF1dG8gcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUgPSBbJl0o
KSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7Ci0gICAgICAgIGlmIChwcmV2aW91cykg
ewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgqcHJldmlv
dXMpKTsKLSAgICAgICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKLSAgICAgICAgICAg
IHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHByZXZpb3VzLT50eXBlKCktPmNsb25lKCkpOwot
ICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVm
dFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKyAg
ICBhdXRvIGFwcGVuZEluZGV4QXNzaWdubWVudCA9IFsmXShBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBPcHRpb25hbDxVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPj4mIGluZGV4VmFyaWFibGUpIHsKKyAgICAgICAgaWYgKCFp
bmRleFZhcmlhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8mIGluZGV4
RXhwcmVzc2lvbiA9IGRvd25jYXN0PEFTVDo6SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24pOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAoKmluZGV4VmFyaWFibGUpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4VmFyaWFibGUtPmdldCgp
LnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGluZGV4VmFyaWFi
bGUtPmdldCgpLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJl
YWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKLSAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNl
KSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7Ci0gICAgICAgICAgICBt
YWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQsIHByZXZpb3VzLT50eXBlKCktPmNsb25lKCkpKTsKLSAgICAgICAgICAgIG1h
a2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OwotICAgICAgICAgICAgcmV0dXJuIG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKLSAgICAgICAgfQor
ICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
Lm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIGluZGV4RXhwcmVzc2lvbi50
YWtlSW5kZXgoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGluZGV4
VmFyaWFibGUtPmdldCgpLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKLSAgICAgICAg
YXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKLSAg
ICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKLSAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOwotICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwotICAgICAgICBy
ZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZN
b3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0g
Y2hhaW4uc2l6ZSgpOyAtLWk7ICkgewotICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4
cHJlc3Npb24gPSBjaGFpbltpXTsKKyAgICAgICAgQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiA9IGNoYWluW2ldOwogICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJp
YWJsZXNbaSAtIDFdOworICAgICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uPj4mIGluZGV4VmFyaWFibGUgPSBpbmRleFZhcmlhYmxlc1tpXTsKKworICAgICAg
ICBhcHBlbmRJbmRleEFzc2lnbm1lbnQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBpbmRleFZh
cmlhYmxlKTsKIAotICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gZ2V0dGVyQ2FsbChkb3RF
eHByZXNzaW9uLCBwcmV2aW91c0xlZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUp
OworICAgICAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlbGV2YW50QW5kZXIgPSBpID09
IGNoYWluLnNpemUoKSAtIDEgPyBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlv
bigpIDogcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKTsKKyAg
ICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IGdldHRlckNhbGwocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLCByZWxldmFudEFuZGVyLCBwcmV2aW91c0xlZnRWYWx1ZSwgaW5kZXhWYXJpYWJsZSA/
ICYqaW5kZXhWYXJpYWJsZSA6IG51bGxwdHIpOwogCiAgICAgICAgIGlmICghY2FsbEV4cHJlc3Np
b24pCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMjg4LDE1ICs0MzEsMTcg
QEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUo
KSk7CiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAK
LSAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpB
c3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkp
LCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqY2FsbEV4cHJlc3Npb24pKTsK
KyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpB
c3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKCpjYWxsRXhw
cmVzc2lvbikpOwogICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZSh2YXJpYWJs
ZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CiAgICAgICAgIGFzc2lnbm1lbnRFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAgICAgZXhw
cmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKLSAgICAgICAg
CisKICAgICAgICAgcHJldmlvdXMgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9Ci0gICAg
YXV0byBsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGNoYWluWzBdLCBwcmV2
aW91c0xlZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworICAgIGFwcGVuZElu
ZGV4QXNzaWdubWVudChjaGFpblswXSwgaW5kZXhWYXJpYWJsZXNbMF0pOworICAgIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiogcmVsZXZhbnRBbmRlciA9IGNoYWluLnNpemUoKSA9PSAxID8gcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSA6IHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCk7CisgICAgYXV0byBsYXN0R2V0dGVyQ2FsbEV4
cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGNoYWluWzBdLCByZWxldmFudEFuZGVyLCBwcmV2aW91c0xl
ZnRWYWx1ZSwgaW5kZXhWYXJpYWJsZXNbMF0gPyAmKihpbmRleFZhcmlhYmxlc1swXSkgOiBudWxs
cHRyKTsKIAogICAgIC8vIFN0ZXAgMzoKICAgICBhdXRvIG1vZGlmaWNhdGlvblJlc3VsdCA9IG1v
ZGlmaWNhdGlvbihXVEZNb3ZlKGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikpOwpAQCAtMzA5LDI3
ICs0NTQsMTcgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAg
IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHJpZ2h0VmFsdWUgPSBXVEZNb3ZlKG1vZGlmaWNh
dGlvblJlc3VsdC0+cmVzdWx0KTsKICAgICBhdXRvIGV4cHJlc3Npb25UeXBlID0gcmlnaHRWYWx1
ZS0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNo
YWluLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4
cHJlc3Npb24gPSBjaGFpbltpXTsKKyAgICAgICAgQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiA9IGNoYWluW2ldOwogICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlhdGVWYXJp
YWJsZXNbaV07CisgICAgICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+PiYgaW5kZXhWYXJpYWJsZSA9IGluZGV4VmFyaWFibGVzW2ldOwogCi0gICAgICAgIGF1
dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKGRvdEV4cHJlc3Npb24sIFdURk1v
dmUocmlnaHRWYWx1ZSksIFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKKyAg
ICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlv
bigpLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPiB7CiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0
aW9uLnR5cGUoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJp
YWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogICAgICAgICAgICAgcmV0dXJuIHZhcmlh
YmxlUmVmZXJlbmNlOwotICAgICAgICB9LCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPiB7Ci0gICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0
aW9uLnR5cGUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJp
YWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwotCi0gICAgICAgICAgICBhdXRvIG1ha2VQ
b2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJs
ZVJlZmVyZW5jZSkpOwotICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpKTsKLSAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtYWtlVW5p
cXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdp
bigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgdmFyaWFibGVEZWNsYXJhdGlvbi50eXBl
KCktPmNsb25lKCkpKTsKLSAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG1ha2VQ
b2ludGVyRXhwcmVzc2lvbjsKLSAgICAgICAgfSk7CisgICAgICAgIH0sIGluZGV4VmFyaWFibGUg
PyAmKmluZGV4VmFyaWFibGUgOiBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWFzc2lnbm1lbnRF
eHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTM0NCwyNCAr
NDc5LDE5IEBAIHN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKIAogICAg
IC8vIFN0ZXAgNToKICAgICB7Ci0gICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBz
ZXR0ZXJDYWxsKGNoYWluW2NoYWluLnNpemUoKSAtIDFdLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBb
Jl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgIEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24gPSBjaGFpbltjaGFp
bi5zaXplKCkgLSAxXTsKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRl
ckNhbGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
YW5kZXJGdW5jdGlvbigpLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0oKSAtPiBVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiB7CiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOwogICAgICAgICAgICAgQVNTRVJUKHBvaW50ZXJW
YXJpYWJsZS0+dHlwZSgpKTsKICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBl
KHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKICAgICAgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKLSAgICAgICAgICAgIGF1dG8gZGVy
ZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlh
YmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJl
bmNlKSk7CiAgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwogICAg
ICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgp
KTsKICAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRlclZhcmlh
YmxlLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOwogICAgICAgICAgICAgcmV0dXJuIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbjsKLSAgICAgICAgfSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4gewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3Jh
cChwb2ludGVyVmFyaWFibGUpKTsKLSAgICAgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUt
PnR5cGUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVy
VmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwotICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlUmVm
ZXJlbmNlOwotICAgICAgICB9KTsKKyAgICAgICAgfSwgaW5kZXhWYXJpYWJsZXNbaW5kZXhWYXJp
YWJsZXMuc2l6ZSgpIC0gMV0gPyAmKihpbmRleFZhcmlhYmxlc1tpbmRleFZhcmlhYmxlcy5zaXpl
KCkgLSAxXSkgOiBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWFzc2lnbm1lbnRFeHByZXNzaW9u
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTM3Myw2ICs1MDMsMTAgQEAg
c3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAgIHZhcmlhYmxlRGVj
bGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJWYXJpYWJsZSkpOwogICAgIGZvciAoYXV0
byYgaW50ZXJtZWRpYXRlVmFyaWFibGUgOiBpbnRlcm1lZGlhdGVWYXJpYWJsZXMpCiAgICAgICAg
IHZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKGludGVybWVkaWF0ZVZhcmlhYmxl
KSk7CisgICAgZm9yIChhdXRvJiBpbmRleFZhcmlhYmxlIDogaW5kZXhWYXJpYWJsZXMpIHsKKyAg
ICAgICAgaWYgKGluZGV4VmFyaWFibGUpCisgICAgICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9u
cy5hcHBlbmQoV1RGTW92ZSgqaW5kZXhWYXJpYWJsZSkpOworICAgIH0KIAogICAgIHJldHVybiB7
eyBpbm5lckxlZnRFeHByZXNzaW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSwgV1RGTW92ZSh2YXJp
YWJsZURlY2xhcmF0aW9ucykgfX07CiB9CkBAIC0zODUsMTYgKzUxOSwxMyBAQCB2b2lkIFByb3Bl
cnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWduCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgQVNTRVJUKCFhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRpb24oKS5p
c1JpZ2h0VmFsdWUoKSk7Ci0gICAgaWYgKCFpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGFzc2lnbm1l
bnRFeHByZXNzaW9uLmxlZnQoKSkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjMgTWFrZSB0aGlzIHdv
cmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBB
U1NFUlQoaXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGFzc2lnbm1lbnRFeHByZXNz
aW9uLmxlZnQoKSkpOwogCiAgICAgYXV0byB0eXBlID0gYXNzaWdubWVudEV4cHJlc3Npb24ucmln
aHQoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpOwogCiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFz
c2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwogCi0gICAgYXV0byBtb2RpZnlSZXN1bHQgPSBt
b2RpZnkoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVzc2lvbi5s
ZWZ0KCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYpIC0+IE9w
dGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4geworICAgIGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9k
aWZ5KGRvd25jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihhc3NpZ25tZW50RXhw
cmVzc2lvbi5sZWZ0KCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+
JiYpIC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4gewogICAgICAgICByZXR1cm4ge3sg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PigpLCBhc3NpZ25tZW50RXhwcmVzc2lv
bi50YWtlUmlnaHQoKSB9fTsKICAgICB9KTsKIApAQCAtNDI0LDYgKzU1NSw4IEBAIHZvaWQgUHJv
cGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KICAgICAgICAgLy8gbmV3VmFsdWUgPSAu
Li47CiAgICAgICAgIC8vICpwID0gbmV3VmFsdWU7CiAKKyAgICAgICAgc2ltcGxpZnlMZWZ0VmFs
dWUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CisKICAgICAgICAgYXV0
byBiYXNlVHlwZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2
ZWRUeXBlKCkuY2xvbmUoKTsKICAgICAgICAgYXV0byBwb2ludGVyVHlwZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCAqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0
VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSwgYmFzZVR5cGUtPmNs
b25lKCkpOwogCkBAIC01MjAsMTEgKzY1MywxMSBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZp
c2l0KEFTVDo6UmVhZE1vCiAgICAgfQogCiAgICAgQVNTRVJUKCFyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpOwotICAg
IGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxl
ZnRWYWx1ZSgpKSkgewotICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MyBNYWtlIHRoaXMgd29yayB3aXRoIGlu
ZGV4IGV4cHJlc3Npb25zLgorICAgIGlmICghaXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24+KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpKSB7CisgICAgICAgIHNl
dEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXV0byBtb2RpZnlSZXN1bHQg
PSBtb2RpZnkoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpKSwgWyZdKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+PiYmIGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9u
UmVzdWx0PiB7CisgICAgYXV0byBtb2RpZnlSZXN1bHQgPSBtb2RpZnkoZG93bmNhc3Q8QVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYgbGFzdEdl
dHRlckNhbGxFeHByZXNzaW9uKSAtPiBPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+IHsKICAg
ICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKICAg
ICAgICAgaWYgKCFsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwpAQCAtNTU0LDcgKzY4NywxMSBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6
OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92
ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHt7
IFdURk1vdmUoZXhwcmVzc2lvbnMpLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1Zhcmlh
YmxlUmVmZXJlbmNlKCkgfX07CisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSByZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZh
bHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
LT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpU
aHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgcmV0dXJuIHt7IFdURk1vdmUoZXhw
cmVzc2lvbnMpLCAgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkgfX07CiAgICAgfSk7CiAKICAg
ICBpZiAoIW1vZGlmeVJlc3VsdCkgewpAQCAtNTgxLDEyOCArNzE4LDEwNiBAQCB2b2lkIFByb3Bl
cnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9u
cy5hcHBlbmQoV1RGTW92ZShuZXdWYXJpYWJsZURlY2xhcmF0aW9uKSk7CiB9CiAKLWJvb2wgUHJv
cGVydHlSZXNvbHZlcjo6c2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lvbiYgZG90
RXhwcmVzc2lvbikKK3N0YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4gYW5k
ZXJDYWxsQXJndW1lbnQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbikKIHsKLSAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lv
bi5vcmlnaW4oKTsKLQotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3RFeHByZXNzaW9uLmJhc2Uo
KSk7Ci0KLSAgICBpZiAoYXV0byogYW5kZXJGdW5jdGlvbiA9IGRvdEV4cHJlc3Npb24uYW5kZXJG
dW5jdGlvbigpKSB7Ci0gICAgICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJhc2UoKTsK
LSAgICAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2UudHlwZUFubm90YXRpb24o
KS5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7Ci0gICAgICAgICAgICBt
YWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2
ZWRUeXBlKCkuY2xvbmUoKSkpOwotICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7Ci0KLSAgICAgICAgICAgIFZlY3Rv
cjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOwotICAgICAgICAg
ICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRlckZ1bmN0aW9uLT5uYW1lKCkpLCBX
VEZNb3ZlKGFyZ3VtZW50cykpOwotICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUo
YW5kZXJGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwotICAgICAgICAgICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGNh
bGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kZXJGdW5jdGlvbik7Ci0KLSAgICAgICAgICAg
IGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IEFTVDo6cmVwbGFjZVdpdGg8QVNUOjpEZXJl
ZmVyZW5jZUV4cHJlc3Npb24+KGRvdEV4cHJlc3Npb24sIFdURk1vdmUob3JpZ2luKSwgV1RGTW92
ZShjYWxsRXhwcmVzc2lvbikpOwotICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5z
ZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSku
ZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lv
bi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBoYXZlIGFuIGFu
ZGVyLCBidXQgbm8gbGVmdCB2YWx1ZSB0byBjYWxsIGl0IG9uLiBMZXQncyBzYXZlIHRoZSB2YWx1
ZSBpbnRvIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGNyZWF0ZSBhIGxlZnQgdmFsdWUuCi0gICAg
ICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgaW5saW5pbmcgdGhlIGZ1bmN0aW9ucyB0aGUgc3Bl
YyBzYXlzIGFyZSBnZW5lcmF0ZWQuCi0gICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50aHJlYWRB
bmRlckZ1bmN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0
byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgYmFzZS5yZXNv
bHZlZFR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
OwotCi0gICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBlKGJhc2Uu
cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
IH0pOwotCi0gICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBXVEZNb3Zl
KHZhcmlhYmxlUmVmZXJlbmNlMSksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7Ci0gICAgICAg
IGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xvbmUo
KSk7Ci0gICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OlJpZ2h0VmFsdWUoKSk7CisgICAgcmV0dXJuIGFuZGVyQ2FsbEFyZ3VtZW50KHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5iYXNlUmVmZXJlbmNlKCksIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5h
bmRlckZ1bmN0aW9uKCksIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0
aW9uKCkpOworfQogCi0gICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFw
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRU
eXBlKGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkIH0pOwordm9pZCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlmeVJpZ2h0VmFsdWUo
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikK
K3sKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9y
aWdpbigpOwogCi0gICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFdU
Rk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7Ci0gICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lv
bi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihv
cmlnaW4pLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlLnJlc29sdmVkVHlwZSgpLmNs
b25lKCkpKTsKLSAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwogCisgICAgaWYgKGF1dG8gYXJndW1lbnQgPSBhbmRlckNh
bGxBcmd1bWVudChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKSB7CisgICAgICAgIGF1dG8qIGFu
ZGVyRnVuY3Rpb24gPSBhcmd1bWVudC0+d2hpY2hBbmRlciA9PSBXaGljaEFuZGVyOjpUaHJlYWRB
bmRlciA/IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCkgOiBw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQo
YW5kZXJGdW5jdGlvbik7CisgICAgICAgIGF1dG8gb3JpZ2luID0gcHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLm9yaWdpbigpOwogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGFyZ3VtZW50czsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbikpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoYXJndW1l
bnQtPmV4cHJlc3Npb24pKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6SW5kZXhFeHByZXNzaW9uPihw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChk
b3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKS50
YWtlSW5kZXgoKSk7CiAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kZXJG
dW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKICAgICAgICAgY2FsbEV4cHJl
c3Npb24tPnNldFR5cGUoYW5kZXJGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwogICAgICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogICAg
ICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZGVyRnVuY3Rpb24pOwogCi0gICAg
ICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbj4oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9u
KSk7CisgICAgICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IEFTVDo6cmVwbGFjZVdp
dGg8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwg
V1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CiAgICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRl
ckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKIAotICAgICAg
ICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwotICAgICAg
ICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwotICAg
ICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsK
LSAgICAgICAgYXV0byogY29tbWFFeHByZXNzaW9uID0gQVNUOjpyZXBsYWNlV2l0aDxBU1Q6OkNv
bW1hRXhwcmVzc2lvbj4oZG90RXhwcmVzc2lvbiwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGV4
cHJlc3Npb25zKSk7Ci0gICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xv
bmUoKSk7Ci0gICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpM
ZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworICAgICAgICBpZiAoYXV0
byYgdmFyaWFibGVEZWNsYXJhdGlvbiA9IGFyZ3VtZW50LT52YXJpYWJsZURlY2xhcmF0aW9uKQor
ICAgICAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSgqdmFyaWFi
bGVEZWNsYXJhdGlvbikpOwogCi0gICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmdldHRlckZ1
bmN0aW9uKCkpOwotICAgIGF1dG8mIGdldHRlckZ1bmN0aW9uID0gKmRvdEV4cHJlc3Npb24uZ2V0
dGVyRnVuY3Rpb24oKTsKKyAgICBBU1NFUlQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRl
ckZ1bmN0aW9uKCkpOworICAgIGF1dG8mIGdldHRlckZ1bmN0aW9uID0gKnByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoZG90RXhwcmVzc2lv
bi50YWtlQmFzZSgpKTsKLSAgICBhdXRvKiBjYWxsRXhwcmVzc2lvbiA9IEFTVDo6cmVwbGFjZVdp
dGg8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZG90RXhwcmVzc2lvbiwgV1RGTW92ZShvcmlnaW4pLCBT
dHJpbmcoZ2V0dGVyRnVuY3Rpb24ubmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBh
cmd1bWVudHMuYXBwZW5kKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKKyAg
ICBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikp
CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+
KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikudGFrZUluZGV4KCkpOworICAgIGF1dG8qIGNhbGxF
eHByZXNzaW9uID0gQVNUOjpyZXBsYWNlV2l0aDxBU1Q6OkNhbGxFeHByZXNzaW9uPihwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24sIFdURk1vdmUob3JpZ2luKSwgU3RyaW5nKGdldHRlckZ1bmN0aW9u
Lm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1
bmN0aW9uKGdldHRlckZ1bmN0aW9uKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShnZXR0
ZXJGdW5jdGlvbi50eXBlKCkuY2xvbmUoKSk7CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAogY2xh
c3MgTGVmdFZhbHVlU2ltcGxpZmllciA6IHB1YmxpYyBWaXNpdG9yIHsKLXB1YmxpYzoKK3ByaXZh
dGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNp
dChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCi1wcml2YXRlOgorICAg
IHZvaWQgZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKIH07
CiAKLXZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBk
b3RFeHByZXNzaW9uKQordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjpmaW5pc2hWaXNpdGluZyhB
U1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQog
ewotICAgIFZpc2l0b3I6OnZpc2l0KGRvdEV4cHJlc3Npb24pOwotICAgIEFTU0VSVChkb3RFeHBy
ZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSk7Ci0gICAg
QVNTRVJUKGRvdEV4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpKTsKKyAgICBBU1NFUlQocHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3Bh
Y2UoKSk7CisgICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9u
KCkpOworCisgICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5vcmlnaW4oKTsKKyAgICBhdXRvKiBhbmRlckZ1bmN0aW9uID0gcHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmFuZGVyRnVuY3Rpb24oKTsKIAotICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RF
eHByZXNzaW9uLm9yaWdpbigpOwotICAgIGF1dG8qIGFuZGVyRnVuY3Rpb24gPSBkb3RFeHByZXNz
aW9uLmFuZGVyRnVuY3Rpb24oKTsKLSAgICBhdXRvJiBiYXNlID0gZG90RXhwcmVzc2lvbi5iYXNl
KCk7Ci0gICAgYXV0byBsZWZ0QWRkcmVzc1NwYWNlID0gKmRvdEV4cHJlc3Npb24uYmFzZSgpLnR5
cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpOwotICAgIGF1dG8gbWFrZVBvaW50ZXJF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7Ci0gICAgbWFrZVBv
aW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4o
TGV4ZXI6OlRva2VuKG9yaWdpbiksIGxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBl
KCkuY2xvbmUoKSkpOwotICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOworICAgIGF1dG8gYXJndW1lbnQgPSBhbmRlckNhbGxBcmd1
bWVudChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworICAgIEFTU0VSVChhcmd1bWVudCk7Cisg
ICAgQVNTRVJUKCFhcmd1bWVudC0+dmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgQVNTRVJUKGFy
Z3VtZW50LT53aGljaEFuZGVyID09IFdoaWNoQW5kZXI6OkFuZGVyKTsKIAogICAgIFZlY3RvcjxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBl
bmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICBhcmd1bWVudHMuYXBwZW5k
KFdURk1vdmUoYXJndW1lbnQtPmV4cHJlc3Npb24pKTsKKyAgICBpZiAoaXM8QVNUOjpJbmRleEV4
cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikpCisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbikudGFrZUluZGV4KCkpOwogICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVl
UmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5k
ZXJGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKICAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0VHlwZShhbmRlckZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7CiAgICAgY2FsbEV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZGVyRnVuY3Rpb24pOwogCi0gICAgYXV0byogZGVy
ZWZlcmVuY2VFeHByZXNzaW9uID0gQVNUOjpyZXBsYWNlV2l0aDxBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbj4oZG90RXhwcmVzc2lvbiwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHBy
ZXNzaW9uKSk7CisgICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gQVNUOjpyZXBsYWNl
V2l0aDxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LCBXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKICAgICBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJG
dW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0p
OwogfQogCit2b2lkIExlZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lv
biYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChkb3RFeHByZXNzaW9uKTsK
KyAgICBmaW5pc2hWaXNpdGluZyhkb3RFeHByZXNzaW9uKTsKK30KKwordm9pZCBMZWZ0VmFsdWVT
aW1wbGlmaWVyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQor
eworICAgIFZpc2l0b3I6OnZpc2l0KGluZGV4RXhwcmVzc2lvbik7CisgICAgUHJvcGVydHlSZXNv
bHZlcigpLlZpc2l0b3I6OnZpc2l0KGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKSk7
CisgICAgZmluaXNoVmlzaXRpbmcoaW5kZXhFeHByZXNzaW9uKTsKK30KKwogdm9pZCBMZWZ0VmFs
dWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uKQogewogICAgIC8vIERlcmVmZXJlbmNlIGV4cHJlc3Npb25zIGFyZSB0aGUg
b25seSBleHByZXNzaW9ucyB3aGVyZSB0aGUgY2hpbGRyZW4gbWlnaHQgYmUgbW9yZS1yaWdodCB0
aGFuIHdlIGFyZS4KICAgICAvLyBGb3IgZXhhbXBsZSwgYSBkZXJlZmVyZW5jZSBleHByZXNzaW9u
IG1heSBiZSBhIGxlZnQgdmFsdWUgYnV0IGl0cyBjaGlsZCBtYXkgYmUgYSBjYWxsIGV4cHJlc3Np
b24gd2hpY2ggaXMgYSByaWdodCB2YWx1ZS4KICAgICAvLyBMZWZ0VmFsdWVTaW1wbGlmaWVyIGRv
ZXNuJ3QgaGFuZGxlIHJpZ2h0IHZhbHVlcywgc28gd2UgaW5zdGVhZCBuZWVkIHRvIHVzZSBQcm9w
ZXJ0eVJlc29sdmVyLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MTcwIFdoYXQgYWJvdXQgZnVuY3Rpb24gY2FsbCBhcmd1bWVudHM/CiAg
ICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lv
bik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U2VtYW50aWNNYXRjaGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hlci5jcHAJKHJldmlzaW9uIDI0NjMyNikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRj
aGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTkgKzU1LDE3IEBAIHN0YXRpYyBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiogZmluZEVudHIKICAgICByZXR1cm4gJippdGVyYXRvcjsKIH07CiAK
LXN0YXRpYyBib29sIG1hdGNoTW9kZShCaW5kaW5nVHlwZSBiaW5kaW5nVHlwZSwgQVNUOjpSZXNv
dXJjZVNlbWFudGljOjpNb2RlIG1vZGUpCitzdGF0aWMgYm9vbCBtYXRjaE1vZGUoQmluZGluZzo6
QmluZGluZ0RldGFpbHMgYmluZGluZ1R5cGUsIEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZSBt
b2RlKQogewotICAgIHN3aXRjaCAoYmluZGluZ1R5cGUpIHsKLSAgICBjYXNlIEJpbmRpbmdUeXBl
OjpVbmlmb3JtQnVmZmVyOgorICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaWZvcm1CdWZmZXJCaW5kaW5nKSAtPiBib29sIHsKICAgICAgICAgcmV0dXJuIG1vZGUg
PT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpCdWZmZXI7Ci0gICAgY2FzZSBCaW5kaW5n
VHlwZTo6U2FtcGxlcjoKKyAgICB9LCBbJl0oU2FtcGxlckJpbmRpbmcpIC0+IGJvb2wgewogICAg
ICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlNhbXBsZXI7
Ci0gICAgY2FzZSBCaW5kaW5nVHlwZTo6VGV4dHVyZToKKyAgICB9LCBbJl0oVGV4dHVyZUJpbmRp
bmcpIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJlc291cmNlU2VtYW50
aWM6Ok1vZGU6OlRleHR1cmU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGJpbmRpbmdU
eXBlID09IEJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyKTsKKyAgICB9LCBbJl0oU3RvcmFnZUJ1
ZmZlckJpbmRpbmcpIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJlc291
cmNlU2VtYW50aWM6Ok1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc7Ci0gICAgfQorICAgIH0pLCBi
aW5kaW5nVHlwZSk7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxIYXNoTWFwPEJpbmRpbmcqLCBzaXpl
X3Q+PiBtYXRjaFJlc291cmNlcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBlbnRyeVBvaW50SXRl
bXMsIExheW91dCYgbGF5b3V0LCBTaGFkZXJTdGFnZSBzaGFkZXJTdGFnZSkKQEAgLTg3LDkgKzg1
LDkgQEAgc3RhdGljIE9wdGlvbmFsPEhhc2hNYXA8QmluZGluZyosIHNpemVfdAogICAgICAgICAg
ICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OlJlc291cmNlU2VtYW50aWM+
KHNlbWFudGljKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgYXV0byYgcmVzb3VyY2VTZW1hbnRpYyA9IFdURjo6Z2V0PEFTVDo6UmVzb3VyY2VTZW1hbnRp
Yz4oc2VtYW50aWMpOwotICAgICAgICAgICAgICAgIGlmICghbWF0Y2hNb2RlKGJpbmRpbmcuYmlu
ZGluZ1R5cGUsIHJlc291cmNlU2VtYW50aWMubW9kZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAo
IW1hdGNoTW9kZShiaW5kaW5nLmJpbmRpbmcsIHJlc291cmNlU2VtYW50aWMubW9kZSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcu
bmFtZSAhPSByZXNvdXJjZVNlbWFudGljLmluZGV4KCkpCisgICAgICAgICAgICAgICAgaWYgKGJp
bmRpbmcuZXh0ZXJuYWxOYW1lICE9IHJlc291cmNlU2VtYW50aWMuaW5kZXgoKSkKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKHNwYWNlICE9IHJlc291
cmNlU2VtYW50aWMuc3BhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFy
eS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTM3NSw2ICszNzUsNjMgQEAgbmF0aXZlIHR5cGVkZWYgVGV4dHVyZURlcHRo
MkRBcnJheTxmbG9hdAogbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlRGVwdGgyREFycmF5PGZsb2F0
PjsKIG5hdGl2ZSB0eXBlZGVmIFRleHR1cmVEZXB0aEN1YmU8ZmxvYXQ+OwogCituYXRpdmUgb3Bl
cmF0b3IgdWNoYXIodXNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciB1Y2hhcih1aW50KTsKK25hdGl2
ZSBvcGVyYXRvciB1Y2hhcihjaGFyKTsKK25hdGl2ZSBvcGVyYXRvciB1Y2hhcihzaG9ydCk7Citu
YXRpdmUgb3BlcmF0b3IgdWNoYXIoaW50KTsKK25hdGl2ZSBvcGVyYXRvciB1Y2hhcihoYWxmKTsK
K25hdGl2ZSBvcGVyYXRvciB1Y2hhcihmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgdXNob3J0KHVj
aGFyKTsKK25hdGl2ZSBvcGVyYXRvciB1c2hvcnQodWludCk7CituYXRpdmUgb3BlcmF0b3IgdXNo
b3J0KGNoYXIpOworbmF0aXZlIG9wZXJhdG9yIHVzaG9ydChzaG9ydCk7CituYXRpdmUgb3BlcmF0
b3IgdXNob3J0KGludCk7CituYXRpdmUgb3BlcmF0b3IgdXNob3J0KGhhbGYpOworbmF0aXZlIG9w
ZXJhdG9yIHVzaG9ydChmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgdWludCh1Y2hhcik7CituYXRp
dmUgb3BlcmF0b3IgdWludCh1c2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIHVpbnQoY2hhcik7Citu
YXRpdmUgb3BlcmF0b3IgdWludChzaG9ydCk7CituYXRpdmUgb3BlcmF0b3IgdWludChpbnQpOwor
bmF0aXZlIG9wZXJhdG9yIHVpbnQoaGFsZik7CituYXRpdmUgb3BlcmF0b3IgdWludChmbG9hdCk7
CituYXRpdmUgb3BlcmF0b3IgY2hhcih1Y2hhcik7CituYXRpdmUgb3BlcmF0b3IgY2hhcih1c2hv
cnQpOworbmF0aXZlIG9wZXJhdG9yIGNoYXIodWludCk7CituYXRpdmUgb3BlcmF0b3IgY2hhcihz
aG9ydCk7CituYXRpdmUgb3BlcmF0b3IgY2hhcihpbnQpOworbmF0aXZlIG9wZXJhdG9yIGNoYXIo
aGFsZik7CituYXRpdmUgb3BlcmF0b3IgY2hhcihmbG9hdCk7CituYXRpdmUgb3BlcmF0b3Igc2hv
cnQodWNoYXIpOworbmF0aXZlIG9wZXJhdG9yIHNob3J0KHVzaG9ydCk7CituYXRpdmUgb3BlcmF0
b3Igc2hvcnQodWludCk7CituYXRpdmUgb3BlcmF0b3Igc2hvcnQoY2hhcik7CituYXRpdmUgb3Bl
cmF0b3Igc2hvcnQoaW50KTsKK25hdGl2ZSBvcGVyYXRvciBzaG9ydChoYWxmKTsKK25hdGl2ZSBv
cGVyYXRvciBzaG9ydChmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgaW50KHVjaGFyKTsKK25hdGl2
ZSBvcGVyYXRvciBpbnQodXNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciBpbnQodWludCk7CituYXRp
dmUgb3BlcmF0b3IgaW50KGNoYXIpOworbmF0aXZlIG9wZXJhdG9yIGludChzaG9ydCk7CituYXRp
dmUgb3BlcmF0b3IgaW50KGhhbGYpOworbmF0aXZlIG9wZXJhdG9yIGludChmbG9hdCk7CituYXRp
dmUgb3BlcmF0b3IgaGFsZih1Y2hhcik7CituYXRpdmUgb3BlcmF0b3IgaGFsZih1c2hvcnQpOwor
bmF0aXZlIG9wZXJhdG9yIGhhbGYodWludCk7CituYXRpdmUgb3BlcmF0b3IgaGFsZihjaGFyKTsK
K25hdGl2ZSBvcGVyYXRvciBoYWxmKHNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciBoYWxmKGludCk7
CituYXRpdmUgb3BlcmF0b3IgaGFsZihmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgZmxvYXQodWNo
YXIpOworbmF0aXZlIG9wZXJhdG9yIGZsb2F0KHVzaG9ydCk7CituYXRpdmUgb3BlcmF0b3IgZmxv
YXQodWludCk7CituYXRpdmUgb3BlcmF0b3IgZmxvYXQoY2hhcik7CituYXRpdmUgb3BlcmF0b3Ig
ZmxvYXQoc2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIGZsb2F0KGludCk7CituYXRpdmUgb3BlcmF0
b3IgZmxvYXQoaGFsZik7CisKIG5hdGl2ZSBmbG9hdCBvcGVyYXRvci54KGZsb2F0NCk7CiBuYXRp
dmUgZmxvYXQgb3BlcmF0b3IueShmbG9hdDQpOwogbmF0aXZlIGZsb2F0IG9wZXJhdG9yLnooZmxv
YXQ0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3Jz
LmNwcAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQsMjggKzQ0LDYgQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFBy
b2dyYQogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CiAgICAgICAg
IGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVj
dHVyZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUg
Z2V0dGVyOiBvcGVyYXRvci5maWVsZAotICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1l
bnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgc3RydWN0
dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgbWFrZVN0cmluZygib3BlcmF0b3IuIiwgc3RydWN0
dXJlRWxlbWVudC5uYW1lKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlz
T3BlcmF0b3IpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAv
LyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KLSAgICAgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlRGVjbGFyYXRpb24xID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+
KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0
aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwotICAg
ICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0
dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQu
b3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgbWFrZVN0cmluZygib3BlcmF0b3IuIiwg
c3RydWN0dXJlRWxlbWVudC5uYW1lKCksICc9JyksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCwgaXNPcGVyYXRvcikpOwotICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBl
bmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgLy8gVGhlIGFu
ZGVyOiBvcGVyYXRvciYuZmllbGQKICAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0o
QVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24gewogICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1Nw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQWRkcmVzc1NwYWNlLmgJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIDogdWludDhf
dCB7CiAgICAgVGhyZWFkCiB9OwogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmcgdG9TdHJp
bmcoQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKK0FMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3Ry
aW5nKEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCiB7CiAgICAgc3dpdGNoIChhZGRyZXNzU3Bh
Y2UpIHsKICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnRyeVBvaW50VHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVu
dHJ5UG9pbnRUeXBlLmgJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAgZW51bSBjbGFzcyBFbnRyeVBvaW50VHlwZSA6IHVpbnQ4X3Qgewog
ICAgIENvbXB1dGUsCiB9OwogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmcgdG9TdHJpbmco
RW50cnlQb2ludFR5cGUgdHlwZSkKK0FMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3RyaW5nKEVudHJ5
UG9pbnRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBFbnRyeVBv
aW50VHlwZTo6VmVydGV4OgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHJldmlz
aW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEluZGV4RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNSArNTksMTYgQEAg
cHVibGljOgogCiAgICAgU3RyaW5nIHNldHRlckZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIl9zdHI7CisgICAgICAgIHJldHVy
biAib3BlcmF0b3JbXT0iX3N0cjsKICAgICB9CiAKICAgICBTdHJpbmcgYW5kZXJGdW5jdGlvbk5h
bWUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJuICJvcGVyYXRvcltdPSJf
c3RyOworICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIl9zdHI7CiAgICAgfQogCiAgICAgRXhw
cmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiB0YWtlSW5kZXgoKSB7IHJldHVybiBXVEZNb3ZlKG1faW5kZXgpOyB9
CiAKIHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1faW5kZXg7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ2
MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7
IH0KKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mIGJhc2VSZWZlcmVuY2UoKSB7IHJldHVybiBt
X2Jhc2U7IH0KICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gdGFrZUJhc2UoKSB7IHJldHVybiBX
VEZNb3ZlKG1fYmFzZSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBl
LmgJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
NyBAQCBwdWJsaWM6CiAgICAgUmVmZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBk
ZWxldGU7CiAgICAgUmVmZXJlbmNlVHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKIAot
ICAgIGJvb2wgaXNSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X2FkZHJlc3NTcGFjZTsgfQogICAgIGNvbnN0IFVubmFtZWRUeXBlJiBlbGVtZW50VHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudFR5cGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNl
U2VtYW50aWMuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDksOCArNDksNiBAQCBib29sIFJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5
cGUoCiAgICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8UmVmZXJlbmNl
VHlwZT4odW5uYW1lZFR5cGUpOwogICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVR5cGUuYWRk
cmVzc1NwYWNlKCkgPT0gQWRkcmVzc1NwYWNlOjpDb25zdGFudCB8fCByZWZlcmVuY2VUeXBlLmFk
ZHJlc3NTcGFjZSgpID09IEFkZHJlc3NTcGFjZTo6RGV2aWNlOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBpZiAoaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAg
ICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1l
ZFR5cGUpOwogICAgICAgICAgICAgaWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odHlwZVJl
ZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCkBAIC03MSw3ICs2OSw3IEBAIGJvb2wgUmVzb3VyY2VT
ZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZSgKICAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKICAgICAg
ICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0g
QWRkcmVzc1NwYWNlOjpDb25zdGFudDsKLSAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4odW5u
YW1lZFR5cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBNb2RlOjpTYW1wbGVy
OgogICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5zYW1wbGVy
VHlwZSgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5p
dGlvbi5oIgogI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCiAjaW5jbHVk
ZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5
cGUuaCIKICNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlv
bi5oIgpAQCAtMTA4LDcgKzEwOSwxNiBAQCBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9p
bnRTY2FmZm9sCiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9sYXlvdXRbaV0uYmlu
ZGluZ3Muc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIE5hbWVkQmluZGluZyBuYW1lZEJpbmRp
bmc7CiAgICAgICAgICAgICBuYW1lZEJpbmRpbmcuZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5n
ZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOwotICAgICAgICAgICAgbmFtZWRCaW5k
aW5nLmluZGV4ID0gbV9sYXlvdXRbaV0uYmluZGluZ3Nbal0ubmFtZTsgLy8gR1BVQmluZEdyb3Vw
TGF5b3V0Ojp0cnlDcmVhdGUoKSBtYWtlcyBzdXJlIHRoZXNlIGRvbid0IGNvbGxpZGUuCisgICAg
ICAgICAgICBuYW1lZEJpbmRpbmcuaW5kZXggPSBtX2xheW91dFtpXS5iaW5kaW5nc1tqXS5pbnRl
cm5hbE5hbWU7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVu
aWZvcm1CdWZmZXJCaW5kaW5nJiB1bmlmb3JtQnVmZmVyQmluZGluZykgeworICAgICAgICAgICAg
ICAgIExlbmd0aEluZm9ybWF0aW9uIGxlbmd0aEluZm9ybWF0aW9uIHsgbV90eXBlTmFtZXIuZ2Vu
ZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKSwgbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKSwgdW5pZm9ybUJ1ZmZlckJpbmRpbmcubGVuZ3RoTmFtZSB9OworICAgICAgICAgICAgICAg
IG5hbWVkQmluZGluZy5sZW5ndGhJbmZvcm1hdGlvbiA9IGxlbmd0aEluZm9ybWF0aW9uOworICAg
ICAgICAgICAgfSwgWyZdKFNhbXBsZXJCaW5kaW5nJikgeworICAgICAgICAgICAgfSwgWyZdKFRl
eHR1cmVCaW5kaW5nJikgeworICAgICAgICAgICAgfSwgWyZdKFN0b3JhZ2VCdWZmZXJCaW5kaW5n
JiBzdG9yYWdlQnVmZmVyQmluZGluZykgeworICAgICAgICAgICAgICAgIExlbmd0aEluZm9ybWF0
aW9uIGxlbmd0aEluZm9ybWF0aW9uIHsgbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJl
RWxlbWVudE5hbWUoKSwgbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKSwgc3RvcmFnZUJ1ZmZl
ckJpbmRpbmcubGVuZ3RoTmFtZSB9OworICAgICAgICAgICAgICAgIG5hbWVkQmluZGluZy5sZW5n
dGhJbmZvcm1hdGlvbiA9IGxlbmd0aEluZm9ybWF0aW9uOworICAgICAgICAgICAgfSksIG1fbGF5
b3V0W2ldLmJpbmRpbmdzW2pdLmJpbmRpbmcpOwogICAgICAgICAgICAgbmFtZWRCaW5kR3JvdXAu
bmFtZWRCaW5kaW5ncy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZEJpbmRpbmcpKTsKICAg
ICAgICAgfQogICAgICAgICBtX25hbWVkQmluZEdyb3Vwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZShuYW1lZEJpbmRHcm91cCkpOwpAQCAtMTM3LDEwICsxNDcsMTYgQEAgU3RyaW5nIEVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6cmVzb3VyY2VIZQogICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
cmVzb3VyY2VNYXAuZmluZCgmbV9sYXlvdXRbaV0uYmluZGluZ3Nbal0pOwogICAgICAgICAgICAg
aWYgKGl0ZXJhdG9yID09IG1fcmVzb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1
ZV0udW5uYW1lZFR5cGUpOworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSAqbV9lbnRy
eVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1ZV0udW5uYW1lZFR5cGU7CisgICAgICAg
ICAgICBBU1NFUlQoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAg
ICAgICAgYXV0byYgcmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpOworICAgICAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKKyAg
ICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlID0gdG9TdHJpbmcocmVmZXJlbmNlVHlwZS5hZGRy
ZXNzU3BhY2UoKSk7CiAgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1lZEJpbmRH
cm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKICAgICAgICAgICAgIGF1dG8g
aW5kZXggPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmluZGV4OwotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRU
eXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW2lkKCIsIGluZGV4LCAiKV1dO1xuIikpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIGFkZHJl
c3NTcGFjZSwgIiAiLCBtYW5nbGVkVHlwZU5hbWUsICIqICIsIGVsZW1lbnROYW1lLCAiIFtbaWQo
IiwgaW5kZXgsICIpXV07XG4iKSk7CisgICAgICAgICAgICBpZiAoYXV0byBsZW5ndGhJbmZvcm1h
dGlvbiA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVkQmluZGluZ3Nbal0ubGVuZ3RoSW5mb3Jt
YXRpb24pCisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgIHVpbnQyICIsIGxlbmd0aEluZm9ybWF0aW9uLT5lbGVtZW50TmFtZSwgIiBbW2lkKCIsIGxl
bmd0aEluZm9ybWF0aW9uLT5pbmRleCwgIildXTtcbiIpKTsKICAgICAgICAgfQogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcblxuIik7CiAgICAgfQpAQCAtMjU3LDkgKzI3MywyOCBA
QCBTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2tSZXNvCiAgICAgICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJjZU1hcC5maW5kKCZtX2xheW91dFtpXS5iaW5kaW5nc1tq
XSk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJjZU1hcC5lbmQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5
UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZhbHVlXS5wYXRoOwotICAgICAgICAgICAgYXV0
byBlbGVtZW50TmFtZSA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVkQmluZGluZ3Nbal0uZWxl
bWVudE5hbWU7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCB2YXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5h
bWUsICI7XG4iKSk7CisgICAgICAgICAgICBpZiAobV9uYW1lZEJpbmRHcm91cHNbaV0ubmFtZWRC
aW5kaW5nc1tqXS5sZW5ndGhJbmZvcm1hdGlvbikgeworICAgICAgICAgICAgICAgIGF1dG8mIHBh
dGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZhbHVlXS5wYXRoOworICAg
ICAgICAgICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1l
ZEJpbmRpbmdzW2pdLmVsZW1lbnROYW1lOworICAgICAgICAgICAgICAgIGF1dG8gbGVuZ3RoRWxl
bWVudE5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmxlbmd0aElu
Zm9ybWF0aW9uLT5lbGVtZW50TmFtZTsKKyAgICAgICAgICAgICAgICBhdXRvIGxlbmd0aFRlbXBv
cmFyeU5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmxlbmd0aElu
Zm9ybWF0aW9uLT50ZW1wb3JhcnlOYW1lOworCisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1l
ZFR5cGUgPSAqbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1ZV0udW5uYW1l
ZFR5cGU7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4odW5u
YW1lZFR5cGUpKTsKKyAgICAgICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VUeXBlID0gZG93bmNh
c3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICAgICAgYXV0
byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocmVmZXJl
bmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKKworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoInNpemVfdCAiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0gIiwg
dmFyaWFibGVOYW1lLCAnLicsIGxlbmd0aEVsZW1lbnROYW1lLCAiLng7XG4iKSk7CisgICAgICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZW5ndGhUZW1wb3JhcnlO
YW1lLCAiID0gIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA8PCAzMjtcbiIpKTsKKyAgICAgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGxlbmd0aFRlbXBvcmFyeU5h
bWUsICIgPSAiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiIHwgIiwgdmFyaWFibGVOYW1lLCAnLics
IGxlbmd0aEVsZW1lbnROYW1lLCAiLnk7XG4iKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0gIiwgbGVuZ3Ro
VGVtcG9yYXJ5TmFtZSwgIiAvIHNpemVvZigiLCBtYW5nbGVkVHlwZU5hbWUsICIpO1xuIikpOwor
ICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBs
ZW5ndGhUZW1wb3JhcnlOYW1lLCAiID4gMHhGRkZGRkZGRikgIiwgbGVuZ3RoVGVtcG9yYXJ5TmFt
ZSwgIiA9IDB4RkZGRkZGRkY7XG4iKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0geyAiLCB2YXJpYWJs
ZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICIsIHN0YXRpY19jYXN0PHVpbnQzMl90PigiLCBsZW5n
dGhUZW1wb3JhcnlOYW1lLCAiKSB9O1xuIikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9y
LT52YWx1ZV0ucGF0aDsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1l
ZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKKyAgICAgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0
aCksICIgPSAiLCB2YXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICI7XG4iKSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuaAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsMTUgQEAgcHJvdGVjdGVkOgogICAgIExheW91
dCYgbV9sYXlvdXQ7CiAgICAgc3RkOjpmdW5jdGlvbjxTdHJpbmcoKT4gbV9nZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWU7CiAKKyAgICBzdHJ1Y3QgTGVuZ3RoSW5mb3JtYXRpb24geworICAgICAgICBT
dHJpbmcgZWxlbWVudE5hbWU7CisgICAgICAgIFN0cmluZyB0ZW1wb3JhcnlOYW1lOworICAgICAg
ICB1bnNpZ25lZCBpbmRleDsKKyAgICB9OwogICAgIHN0cnVjdCBOYW1lZEJpbmRpbmcgewogICAg
ICAgICBTdHJpbmcgZWxlbWVudE5hbWU7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgICAg
ICBPcHRpb25hbDxMZW5ndGhJbmZvcm1hdGlvbj4gbGVuZ3RoSW5mb3JtYXRpb247CiAgICAgfTsK
ICAgICBzdHJ1Y3QgTmFtZWRCaW5kR3JvdXAgewogICAgICAgICBTdHJpbmcgc3RydWN0TmFtZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVu
Y3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDYzMjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0
aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUg
PHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAorI2luY2x1ZGUgIldITFNMQVNURHVtcGVyLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIFdITFNMIHsKQEAgLTE1MywxMiArMTU1LDQ0IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoInZhcmlhYmxlIiwgbV92YXJpYWJsZUNvdW50KyspOwogICAg
IH0KIAorICAgIHN0cnVjdCBTdGFja0l0ZW0geworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAg
ICAgIFN0cmluZyBsZWZ0VmFsdWU7CisgICAgfTsKKworICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1
ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBX
VEZNb3ZlKHZhbHVlKSwgU3RyaW5nKCkgfSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRMZWZ0
VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBTdHJpbmcgdmFsdWUsIFN0cmluZyBs
ZWZ0VmFsdWUpCisgICAgeworICAgICAgICBpZiAoIWV4cHJlc3Npb24udHlwZUFubm90YXRpb24o
KS5sZWZ0QWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICBkYXRhTG9nTG4oIm5vdCBhbiBsdmFs
dWUhISE6ICIsIEV4cHJlc3Npb25EdW1wZXIoZXhwcmVzc2lvbikpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChleHByZXNzaW9uLnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKTsK
KyAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZNb3ZlKHZhbHVlKSwgV1RGTW92ZShsZWZ0VmFs
dWUpIH0pOworICAgIH0KKworICAgIFN0cmluZyB0YWtlTGFzdFZhbHVlKCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhY2subGFzdCgpLnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IG1fc3RhY2sudGFrZUxhc3QoKS52YWx1ZTsKKyAgICB9CisKKyAgICBTdHJpbmcgdGFrZUxhc3RM
ZWZ0VmFsdWUoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zdGFjay5sYXN0KCku
bGVmdFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKS5sZWZ0VmFsdWU7
CisgICAgfQorCiAgICAgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOwogICAgIFR5cGVOYW1lciYg
bV90eXBlTmFtZXI7CiAgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJp
bmc+JiBtX2Z1bmN0aW9uTWFwcGluZzsKICAgICBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiosIFN0cmluZz4gbV92YXJpYWJsZU1hcHBpbmc7CiAgICAgU3RyaW5nQnVpbGRlciBtX3N0
cmluZ0J1aWxkZXI7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9zdGFjazsKKworICAgIFZlY3RvcjxT
dGFja0l0ZW0+IG1fc3RhY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5UG9pbnRTY2FmZm9s
ZGluZz4gbV9lbnRyeVBvaW50U2NhZmZvbGRpbmc7CiAgICAgTGF5b3V0JiBtX2xheW91dDsKICAg
ICB1bnNpZ25lZCBtX3ZhcmlhYmxlQ291bnQgeyAwIH07CkBAIC0yNDYsNyArMjgwLDcgQEAgdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwotICAgIG1f
c3RhY2sudGFrZUxhc3QoKTsgLy8gVGhlIHN0YXRlbWVudCBpcyBhbHJlYWR5IGVmZmVjdGZ1bCwg
c28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQuCisgICAgdGFr
ZUxhc3RWYWx1ZSgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KIH0KIAogdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQpAQCAtMjY0
LDcgKzI5OCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjplbWl0TG9vcCgKIAog
ICAgIGlmIChsb29wQ29uZGl0aW9uTG9jYXRpb24gPT0gTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpC
ZWZvcmVCb2R5ICYmIGNvbmRpdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCpjb25kaXRpb25FeHByZXNzaW9uKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4i
KSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCB0
YWtlTGFzdFZhbHVlKCksICIpIGJyZWFrO1xuIikpOwogICAgIH0KIAogICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoImRvIHtcbiIpOwpAQCAtMjc2LDEyICszMTAsMTIgQEAgdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKAogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KmluY3JlbWVudCk7CiAgICAgICAgIC8vIEV4cHJlc3Npb24gcmVzdWx0cyBnZXQgcHVzaGVkIHRv
IG1fc3RhY2suIFdlIGRvbid0IHVzZSB0aGUgcmVzdWx0CiAgICAgICAgIC8vIG9mIGluY3JlbWVu
dCwgc28gd2UgZGlzcGVuc2Ugb2YgdGhhdCBub3cuCi0gICAgICAgIG1fc3RhY2sudGFrZUxhc3Qo
KTsKKyAgICAgICAgdGFrZUxhc3RWYWx1ZSgpOwogICAgIH0KIAogICAgIGlmIChsb29wQ29uZGl0
aW9uTG9jYXRpb24gPT0gTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpBZnRlckJvZHkgJiYgY29uZGl0
aW9uRXhwcmVzc2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmNvbmRpdGlvbkV4
cHJlc3Npb24pOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlm
ICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIHRha2VMYXN0VmFsdWUoKSwgIikg
YnJlYWs7XG4iKSk7CiAgICAgfQogCiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBcbiIp
OwpAQCAtMzA1LDcgKzMzOSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1QKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7CiAgICAgfSwgWyZd
KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CiAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAv
LyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAg
dGFrZUxhc3RWYWx1ZSgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhl
IHJlc3VsdC4KICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKIAogICAgIGVtaXRM
b29wKExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QmVmb3JlQm9keSwgZm9yTG9vcC5jb25kaXRpb24o
KSwgZm9yTG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9vcC5ib2R5KCkpOwpAQCAtMzE1LDcgKzM0OSw3
IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkK
IHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0g
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgbV9zdGFjay50YWtl
TGFzdCgpLCAiKSB7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCJpZiAoIiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSB7XG4iKSk7CiAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CiAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkp
IHsKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOwpAQCAtMzMw
LDEwICszNjQsMTAgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAog
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKICAg
ICAgICAgaWYgKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nKSB7CiAgICAgICAgICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayhtX3N0YWNr
LnRha2VMYXN0KCksIHZhcmlhYmxlTmFtZSkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayh0YWtlTGFzdFZhbHVlKCksIHZh
cmlhYmxlTmFtZSkpOwogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJyZXR1cm4gIiwgdmFyaWFibGVOYW1lLCAiO1xuIikpOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1f
c3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIHRha2VMYXN0VmFsdWUoKSwgIjtcbiIpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgicmV0dXJuO1xuIik7CiB9
CkBAIC0zNDIsNyArMzc2LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVAogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7
CiAKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgbV9z
dGFjay50YWtlTGFzdCgpLCAiKSB7IikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygic3dpdGNoICgiLCB0YWtlTGFzdFZhbHVlKCksICIpIHsiKSk7CiAgICAgZm9yIChh
dXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCiAgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJ9XG4iKTsKQEAgLTM3NSw3ICs0MDksNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZShpbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGludGVnZXJM
aXRlcmFsLnZhbHVlKCksICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFt
ZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShpbnRlZ2VyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsK
IH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkKQEAgLTM4Myw3ICs0MTcsNyBA
QCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJp
YWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRU
eXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh1bnNpZ25lZEludGVnZXJM
aXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0
PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgp
LCAiKTtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVu
ZFJpZ2h0VmFsdWUodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAog
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBm
bG9hdExpdGVyYWwpCkBAIC0zOTEsNyArNDI1LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxl
TmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRl
cmFsLnZhbHVlKCksICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
CisgICAgYXBwZW5kUmlnaHRWYWx1ZShmbG9hdExpdGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAK
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBu
dWxsTGl0ZXJhbCkKQEAgLTQwOCw3ICs0NDIsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUCiAgICAgZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJudWxscHRyIik7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7Ci0gICAgbV9z
dGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKG51bGxMaXRl
cmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpCkBAIC00MTYsNyArNDUw
LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8g
dmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5n
bGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoYm9vbGVhbkxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8Iiwg
bWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8gInRydWUiIDog
ImZhbHNlIiwgIik7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAg
ICBhcHBlbmRSaWdodFZhbHVlKGJvb2xlYW5MaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkKQEAgLTQyNiw3ICs0NjAsNyBAQCB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJs
ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbWFuZ2xlZFR5
cGVOYW1lLCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIo
KmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSwgIjtcbiIpKTsK
LSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUo
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQpA
QCAtNDM0LDM3ICs0NjgsMzkgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVAogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogfQogCi12b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikKK3ZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Np
b24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxh
Y2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShkb3RF
eHByZXNzaW9uLCAiZHVtbXkiKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6R2xvYmFsVmFyaWFibGVSZWZlcmVuY2UmIGdsb2JhbFZhcmlhYmxlUmVmZXJl
bmNlKQogewotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7CisgICAgYXV0byB2YWx1ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAg
ICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0
byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZ2xvYmFs
VmFyaWFibGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5iYXNlKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygidGhyZWFkICIsIG1hbmdsZWRUeXBlTmFtZSwgIiYgIiwgdmFyaWFi
bGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiLT4iLCBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2Uuc3RydWN0
RmllbGQoKSksICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInRocmVhZCAiLCBtYW5nbGVkVHlw
ZU5hbWUsICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIsIHRha2VMYXN0VmFsdWUoKSwgIi0+Iiwg
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxl
UmVmZXJlbmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFsdWVOYW1lLCAiID0gIiwg
IioiLCBwb2ludGVyTmFtZSwgIjtcbiIpKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUoZ2xvYmFsVmFy
aWFibGVSZWZlcmVuY2UsIHZhbHVlTmFtZSwgcG9pbnRlck5hbWUpOwogfQogCi12b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQordm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRl
eEV4cHJlc3Npb24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5Lgog
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
Nzg4IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRW
YWx1ZShpbmRleEV4cHJlc3Npb24sICJkdW1teSIpOwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKQordm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUg
bG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7
CisgICAgYXBwZW5kUmlnaHRWYWx1ZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sICJkdW1teSIp
OwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNDc2LDcgKzUxMiw3IEBAIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MCBJbXBsZW1lbnQgcXVh
bGlmaWVycy4KICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7CiAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXpl
cigpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9ICIsIHRha2VMYXN0VmFsdWUoKSwgIjtcbiIpKTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwg
IjtcbiIpKTsKIH0KQEAgLTQ4NCwxMSArNTIwLDExIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKIHsKICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRv
IGxlZnROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gcG9pbnRlck5hbWUgPSB0
YWtlTGFzdExlZnRWYWx1ZSgpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhw
cmVzc2lvbi5yaWdodCgpKTsKLSAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVmdE5hbWUsICIgPSAi
LCByaWdodE5hbWUsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQocmlnaHROYW1lKTsKKyAg
ICBhdXRvIHJpZ2h0TmFtZSA9IHRha2VMYXN0VmFsdWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBwb2ludGVyTmFtZSwgIikgKiIsIHBvaW50ZXJOYW1l
LCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoYXNzaWdu
bWVudEV4cHJlc3Npb24sIHJpZ2h0TmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKQEAgLTQ5
Niw3ICs1MzIsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAg
ICAgVmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50
IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGFyZ3VtZW50KTsKLSAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQobV9zdGFjay50YWtl
TGFzdCgpKTsKKyAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQodGFrZUxhc3RWYWx1ZSgpKTsK
ICAgICB9CiAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwogICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9u
KCkpOwpAQCAtNTA5LDcgKzU0NSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1QKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWVzW2ld
KTsKICAgICB9CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwotICAgIG1fc3Rh
Y2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShjYWxsRXhwcmVz
c2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCkBAIC01MTcsMjYg
KzU1MywzMSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAg
U3RyaW5nIHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Np
b24ubGlzdCgpKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAg
ICAgICAgcmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICByZXN1bHQgPSB0YWtl
TGFzdFZhbHVlKCk7CiAgICAgfQotICAgIG1fc3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgYXBw
ZW5kUmlnaHRWYWx1ZShjb21tYUV4cHJlc3Npb24sIHJlc3VsdCk7CiB9CiAKIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVy
ZWZlcmVuY2VFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5j
ZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKLSAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFz
dCgpOworICAgIGF1dG8gcmlnaHQgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJs
ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoQVNUOjp0b1N0cmluZygqZGVyZWZlcmVuY2VFeHByZXNzaW9uLnR5
cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKSwgJyAnLCBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgIiYg
IiwgdmFyaWFibGVOYW1lLCAiID0gKiIsIHJpZ2h0LCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIo
KS5yZXNvbHZlZFR5cGUoKSksICcgJywgcG9pbnRlck5hbWUsICIgPSAiLCByaWdodCwgIjtcbiIp
KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcg
JywgdmFyaWFibGVOYW1lLCAiO1xuIikpOworICAgIC8vIE9PUFM6IG51bGxwdHIgY2hlY2sgaGVy
ZSEKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBwb2ludGVy
TmFtZSwgIikgIiwgdmFyaWFibGVOYW1lLCAiID0gKiIsIHJpZ2h0LCAiO1xuIikpOworICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiZWxzZSBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemVvZigiLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgIik7ICsraSkgc3RhdGljX2Nhc3Q8dGhyZWFkIGNo
YXIqPihzdGF0aWNfY2FzdDx0aHJlYWQgdm9pZCo+KCYiLCB2YXJpYWJsZU5hbWUsICIpKVtpXSA9
IDA7XG4iKSk7CisgICAgYXBwZW5kTGVmdFZhbHVlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgdmFy
aWFibGVOYW1lLCBwb2ludGVyTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKIHsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICBh
dXRvIGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBsZWZ0ID0gdGFrZUxhc3RW
YWx1ZSgpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgp
KTsKLSAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gcmlnaHQg
PSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBsZWZ0KSk7CiAgICAgc3dpdGNoIChsb2dp
Y2FsRXhwcmVzc2lvbi50eXBlKCkpIHsKQEAgLTU0OSwyMiArNTkwLDIyIEBAIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhyaWdodCwgIjtcbiIpKTsKLSAgICBt
X3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUobG9naWNh
bEV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVz
c2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3Bl
cmFuZCgpKTsKLSAgICBhdXRvIG9wZXJhbmQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0
byBvcGVyYW5kID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShsb2dpY2FsTm90RXhwcmVzc2lv
bi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gISIsIG9wZXJhbmQsICI7
XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdo
dFZhbHVlKGxvZ2ljYWxOb3RFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKTsKLSAgICBh
dXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGxWYWx1ZSA9IHRha2VM
YXN0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwog
ICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpKSkKQEAgLTU3NCwxNiArNjE1LDE2IEBAIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYoIiwg
bFZhbHVlLCAiWzBdKSwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICIgfTtcbiIpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmds
ZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYiLCBsVmFsdWUsICIsIDEgfTtc
biIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0
VmFsdWUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAog
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7Ci0gICAgYXV0byBsVmFsdWUgPSBt
X3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBwb2ludGVyID0gdGFrZUxhc3RMZWZ0VmFsdWUo
KTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwot
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSAmIiwgbFZhbHVlLCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5k
KHZhcmlhYmxlTmFtZSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2
ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIHBvaW50ZXIsICI7XG4iKSk7Cisg
ICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7
CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24mKQpAQCAtNTk1LDI3ICs2MzYsMzEgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQogewogICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7Ci0gICAg
YXV0byBjaGVjayA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGNoZWNrID0gdGFrZUxh
c3RWYWx1ZSgpOwogCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRlcm5hcnlFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwg
JyAnLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CiAKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoImlmICgiLCBjaGVjaywgIikge1xuIikpOwogICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKLSAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtl
TGFzdCgpLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2
YXJpYWJsZU5hbWUsICIgPSAiLCB0YWtlTGFzdFZhbHVlKCksICI7XG4iKSk7CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0
ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgp
LCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJs
ZU5hbWUsICIgPSAiLCB0YWtlTGFzdFZhbHVlKCksICI7XG4iKSk7CiAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgifVxuIik7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAg
ICBhcHBlbmRSaWdodFZhbHVlKHRlcm5hcnlFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQog
CiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCiB7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNl
LnZhcmlhYmxlKCkpOworICAgIC8vIEZJWE1FOiBBcmUgIHdlIGFsd2F5cyB0aHJlYWQgYWRkciBz
cGFjZSBoZXJlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY2
IAorICAgIC8vIE9PUFMKICAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZU1hcHBpbmcuZmlu
ZCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKICAgICBBU1NFUlQoaXRlcmF0b3IgIT0g
bV92YXJpYWJsZU1hcHBpbmcuZW5kKCkpOwotICAgIG1fc3RhY2suYXBwZW5kKGl0ZXJhdG9yLT52
YWx1ZSk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidGhyZWFkICIsIG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh2YXJpYWJsZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUo
KSksICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIsIGl0ZXJhdG9yLT52YWx1ZSwgIjtcbiIpKTsK
KyAgICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFibGVSZWZlcmVuY2UsIGl0ZXJhdG9yLT52YWx1ZSwg
cG9pbnRlck5hbWUpOwogfQogCiBTdHJpbmcgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpjb25z
dGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhw
cmVzc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMjEgKzYzLDYgQEAgc3RhdGljIFN0cmluZyBtYXBGdW5jdGlvbk5hbWUoU3RyaW5nJiBm
dQogICAgIHJldHVybiBmdW5jdGlvbk5hbWU7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY29udmVydEFk
ZHJlc3NTcGFjZShBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCi17Ci0gICAgc3dpdGNo
IChhZGRyZXNzU3BhY2UpIHsKLSAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDoK
LSAgICAgICAgcmV0dXJuICJjb25zdGFudCJfc3RyOwotICAgIGNhc2UgQVNUOjpBZGRyZXNzU3Bh
Y2U6OkRldmljZToKLSAgICAgICAgcmV0dXJuICJkZXZpY2UiX3N0cjsKLSAgICBjYXNlIEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDoKLSAgICAgICAgcmV0dXJuICJ0aHJlYWRncm91cCJf
c3RyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChhZGRyZXNzU3BhY2UgPT0gQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCk7Ci0gICAgICAgIHJldHVybiAidGhyZWFkIl9zdHI7Ci0gICAg
fQotfQotCiBzdGF0aWMgU3RyaW5nIGF0b21pY05hbWUoU3RyaW5nIGlucHV0KQogewogICAgIGlm
IChpbnB1dCA9PSAiQWRkIikKQEAgLTI0Niw5ICsyMzEsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24udHlwZSgpKTsKLSAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJltdLiJfc3RyLmxlbmd0aCgpKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcg
Jywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwg
bWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gJih2LnBvaW50ZXJbbl0pO1xuIikpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIGlmIChuIDwgdi5sZW5ndGgpIHJldHVybiAm
KHYucG9pbnRlcltuXSk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBy
ZXR1cm4gbnVsbHB0cjtcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7
CiAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQpAQCAtMzc2
LDcgKzM2MSw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlw
ZSgpKTsKICAgICAgICAgICAgIGF1dG8gZm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3Vy
dGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgICAgICBhdXRvIGZvdXJ0
aEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZm91cnRoQXJn
dW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgY29udmVy
dEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3Vt
ZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBjb21wYXJlLCAiLCB0
aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZm91cnRoQXJn
dW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7
XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lk
ICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0cmluZyhmaXJzdEFyZ3VtZW50QWRkcmVz
c1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRB
cmd1bWVudCwgIiBjb21wYXJlLCAiLCB0aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIHRvU3Ry
aW5nKGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50
ZWUsICIqIG91dCkge1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgJmNvbXBhcmUs
IGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOwogICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiAgICAqb3V0ID0gY29tcGFyZTtcbiIpOwogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwpAQCAtMzk0LDcgKzM3OSw3IEBAIFN0cmluZyB3cml0
ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50
QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAg
ICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICBhdXRvIG5h
bWUgPSBhdG9taWNOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmlu
ZygiSW50ZXJsb2NrZWQiX3N0ci5sZW5ndGgoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBjb252ZXJ0
QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZpcnN0QXJndW1l
bnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIG9wZXJhbmQsICIsIGNv
bnZlcnRBZGRyZXNzU3BhY2UodGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgdGhpcmRB
cmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0cmlu
ZyhmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwg
Iiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBvcGVyYW5kLCAiLCB0b1N0cmluZyh0aGly
ZEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGlyZEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0
KSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAq
b3V0ID0gYXRvbWljX2ZldGNoXyIsIG5hbWUsICJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5
cGVEZWZpbml0aW8KICAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgYXJyYXlS
ZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCksICJ7IFxuIikpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgdG9TdHJpbmcoYXJyYXlSZWZlcmVuY2VUeXBl
LmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBhcnJheVJlZmVyZW5jZVR5cGUucGFyZW50KCktPm1hbmds
ZWROYW1lKCksICIqIHBvaW50ZXI7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIgICAgdWludCBsZW5ndGg7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICB1aW50MzJfdCBsZW5ndGg7XG4iKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07
XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoaXM8QXJyYXlUeXBlTmFtZU5vZGU+
KGJhc2VUeXBlTmFtZU5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9HUFVCaW5kR3JvdXBMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQmluZEdyb3VwTGF5b3V0LmgJKHJldmlzaW9uIDI0
NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3Jv
dXBMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiAjaWYgVVNFKE1FVEFMKQog
T0JKQ19QUk9UT0NPTChNVExBcmd1bWVudEVuY29kZXIpOwpAQCAtNDcsNyArNDgsMzcgQEAgY2xh
c3MgR1BVQmluZEdyb3VwTGF5b3V0IDogcHVibGljIFJlZkNvdQogcHVibGljOgogICAgIHN0YXRp
YyBSZWZQdHI8R1BVQmluZEdyb3VwTGF5b3V0PiB0cnlDcmVhdGUoY29uc3QgR1BVRGV2aWNlJiwg
Y29uc3QgR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciYpOwogCi0gICAgdXNpbmcgQmluZGlu
Z3NNYXBUeXBlID0gSGFzaE1hcDx1aW50NjRfdCwgR1BVQmluZEdyb3VwTGF5b3V0QmluZGluZywg
V1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50NjRfdD4+OworICAgIHN0cnVjdCBVbmlmb3JtQnVmZmVyIHsKKyAgICAgICAgdW5zaWdu
ZWQgaW50ZXJuYWxMZW5ndGhOYW1lOworICAgIH07CisKKyAgICBzdHJ1Y3QgRHluYW1pY1VuaWZv
cm1CdWZmZXIgeworICAgICAgICB1bnNpZ25lZCBpbnRlcm5hbExlbmd0aE5hbWU7CisgICAgfTsK
KworICAgIHN0cnVjdCBTYW1wbGVyIHsKKyAgICB9OworCisgICAgc3RydWN0IFNhbXBsZWRUZXh0
dXJlIHsKKyAgICB9OworCisgICAgc3RydWN0IFN0b3JhZ2VCdWZmZXIgeworICAgICAgICB1bnNp
Z25lZCBpbnRlcm5hbExlbmd0aE5hbWU7CisgICAgfTsKKworICAgIHN0cnVjdCBEeW5hbWljU3Rv
cmFnZUJ1ZmZlciB7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsTGVuZ3RoTmFtZTsKKyAgICB9
OworCisgICAgdXNpbmcgSW50ZXJuYWxCaW5kaW5nRGV0YWlscyA9IFZhcmlhbnQ8VW5pZm9ybUJ1
ZmZlciwgRHluYW1pY1VuaWZvcm1CdWZmZXIsIFNhbXBsZXIsIFNhbXBsZWRUZXh0dXJlLCBTdG9y
YWdlQnVmZmVyLCBEeW5hbWljU3RvcmFnZUJ1ZmZlcj47CisKKyAgICBzdHJ1Y3QgQmluZGluZyB7
CisgICAgICAgIEdQVUJpbmRHcm91cExheW91dEJpbmRpbmcgZXh0ZXJuYWxCaW5kaW5nOworICAg
ICAgICB1bnNpZ25lZCBpbnRlcm5hbE5hbWU7CisgICAgICAgIEludGVybmFsQmluZGluZ0RldGFp
bHMgaW50ZXJuYWxCaW5kaW5nRGV0YWlsczsKKyAgICB9OworCisgICAgdXNpbmcgQmluZGluZ3NN
YXBUeXBlID0gSGFzaE1hcDx1aW50NjRfdCwgQmluZGluZywgV1RGOjpJbnRIYXNoPHVpbnQ2NF90
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+OwogICAgIGNv
bnN0IEJpbmRpbmdzTWFwVHlwZSYgYmluZGluZ3NNYXAoKSBjb25zdCB7IHJldHVybiBtX2JpbmRp
bmdzTWFwOyB9CiAjaWYgVVNFKE1FVEFMKQogICAgIE1UTEFyZ3VtZW50RW5jb2RlciAqdmVydGV4
RW5jb2RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4RW5jb2Rlci5nZXQoKTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExh
eW91dE1ldGFsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBMYXlvdXRNZXRhbC5tbQkocmV2aXNpb24gMjQ2MzI2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRH
cm91cExheW91dE1ldGFsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxOCBAQCBzdGF0
aWMgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdHJ5CiAgICAgcmV0dXJuIGVuY29kZXI7
CiB9OwogCitzdGF0aWMgUmV0YWluUHRyPE1UTEFyZ3VtZW50RGVzY3JpcHRvcj4gYXJndW1lbnRE
ZXNjcmlwdG9yKE1UTERhdGFUeXBlIGRhdGFUeXBlLCBOU1VJbnRlZ2VyIGluZGV4KQoreworICAg
IFJldGFpblB0cjxNVExBcmd1bWVudERlc2NyaXB0b3I+IG10bEFyZ3VtZW50OworICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBtdGxBcmd1bWVudCA9IGFkb3B0TlMoW01UTEFy
Z3VtZW50RGVzY3JpcHRvciBuZXddKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwor
CisgICAgW210bEFyZ3VtZW50IHNldERhdGFUeXBlOmRhdGFUeXBlXTsKKyAgICBbbXRsQXJndW1l
bnQgc2V0SW5kZXg6aW5kZXhdOworICAgIHJldHVybiBtdGxBcmd1bWVudDsKK30KKwogUmVmUHRy
PEdQVUJpbmRHcm91cExheW91dD4gR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUoY29uc3Qg
R1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUJpbmRHcm91cExheW91dERlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCiB7CiAgICAgaWYgKCFkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSkgewpAQCAtODcs
NDggKzk5LDczIEBAIFJlZlB0cjxHUFVCaW5kR3JvdXBMYXlvdXQ+IEdQVUJpbmRHcm91cEwKICAg
ICBBcmd1bWVudEFycmF5IHZlcnRleEFyZ3NBcnJheSwgZnJhZ21lbnRBcmdzQXJyYXksIGNvbXB1
dGVBcmdzQXJyYXk7CiAgICAgQmluZGluZ3NNYXBUeXBlIGJpbmRpbmdzTWFwOwogCisgICAgdW5z
aWduZWQgaW50ZXJuYWxOYW1lID0gMDsKKyAgICB1bnNpZ25lZCBpbnRlcm5hbExlbmd0aEJhc2Ug
PSBkZXNjcmlwdG9yLmJpbmRpbmdzLnNpemUoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGJpbmRp
bmcgOiBkZXNjcmlwdG9yLmJpbmRpbmdzKSB7Ci0gICAgICAgIGlmICghYmluZGluZ3NNYXAuYWRk
KGJpbmRpbmcuYmluZGluZywgYmluZGluZykpIHsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IGV4dHJhSW5kZXg7CisgICAgICAgIGF1dG8gaW50ZXJuYWxEZXRhaWxzID0gKFsmXSgpIC0+IEdQ
VUJpbmRHcm91cExheW91dDo6SW50ZXJuYWxCaW5kaW5nRGV0YWlscyB7CisgICAgICAgICAgICBz
d2l0Y2ggKGJpbmRpbmcudHlwZSkgeworICAgICAgICAgICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6
VW5pZm9ybUJ1ZmZlcjoKKyAgICAgICAgICAgICAgICBleHRyYUluZGV4ID0gaW50ZXJuYWxMZW5n
dGhCYXNlKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91cExheW91dDo6VW5p
Zm9ybUJ1ZmZlciB7ICpleHRyYUluZGV4IH07CisgICAgICAgICAgICBjYXNlIEdQVUJpbmRpbmdU
eXBlOjpEeW5hbWljVW5pZm9ybUJ1ZmZlcjoKKyAgICAgICAgICAgICAgICBleHRyYUluZGV4ID0g
aW50ZXJuYWxMZW5ndGhCYXNlKys7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91
cExheW91dDo6RHluYW1pY1VuaWZvcm1CdWZmZXIgeyAqZXh0cmFJbmRleCB9OworICAgICAgICAg
ICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U2FtcGxlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
R1BVQmluZEdyb3VwTGF5b3V0OjpTYW1wbGVyIHsgfTsKKyAgICAgICAgICAgIGNhc2UgR1BVQmlu
ZGluZ1R5cGU6OlNhbXBsZWRUZXh0dXJlOgorICAgICAgICAgICAgICAgIHJldHVybiBHUFVCaW5k
R3JvdXBMYXlvdXQ6OlNhbXBsZWRUZXh0dXJlIHsgfTsKKyAgICAgICAgICAgIGNhc2UgR1BVQmlu
ZGluZ1R5cGU6OlN0b3JhZ2VCdWZmZXI6CisgICAgICAgICAgICAgICAgZXh0cmFJbmRleCA9IGlu
dGVybmFsTGVuZ3RoQmFzZSsrOworICAgICAgICAgICAgICAgIHJldHVybiBHUFVCaW5kR3JvdXBM
YXlvdXQ6OlN0b3JhZ2VCdWZmZXIgeyAqZXh0cmFJbmRleCB9OworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmluZGluZy50eXBlID09IEdQVUJpbmRpbmdUeXBl
OjpEeW5hbWljU3RvcmFnZUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgZXh0cmFJbmRleCA9IGlu
dGVybmFsTGVuZ3RoQmFzZSsrOworICAgICAgICAgICAgICAgIHJldHVybiBHUFVCaW5kR3JvdXBM
YXlvdXQ6OkR5bmFtaWNTdG9yYWdlQnVmZmVyIHsgKmV4dHJhSW5kZXggfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSkoKTsKKyAgICAgICAgQmluZGluZyBiaW5kaW5nRGV0YWlscyA9IHsgYmlu
ZGluZywgaW50ZXJuYWxOYW1lKyssIFdURk1vdmUoaW50ZXJuYWxEZXRhaWxzKSB9OworICAgICAg
ICBpZiAoIWJpbmRpbmdzTWFwLmFkZChiaW5kaW5nLmJpbmRpbmcsIGJpbmRpbmdEZXRhaWxzKSkg
ewogICAgICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRl
KCk6IER1cGxpY2F0ZSBiaW5kaW5nICV1IGZvdW5kIGluIEdQVUJpbmRHcm91cExheW91dERlc2Ny
aXB0b3IhIiwgYmluZGluZy5iaW5kaW5nKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9CiAKLSAgICAgICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50RGVzY3JpcHRvcj4gbXRs
QXJndW1lbnQ7CisgICAgICAgIFJldGFpblB0cjxNVExBcmd1bWVudERlc2NyaXB0b3I+IG10bEFy
Z3VtZW50ID0gYXJndW1lbnREZXNjcmlwdG9yKE1UTERhdGFUeXBlRm9yQmluZGluZ1R5cGUoYmlu
ZGluZy50eXBlKSwgYmluZGluZ0RldGFpbHMuaW50ZXJuYWxOYW1lKTsKIAotICAgICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgICAgIG10bEFyZ3VtZW50ID0gYWRvcHROUyhb
TVRMQXJndW1lbnREZXNjcmlwdG9yIG5ld10pOwotICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogICAgICAgICBpZiAoIW10bEFyZ3VtZW50KSB7CiAgICAgICAgICAgICBMT0coV2Vi
R1BVLCAiR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUoKTogVW5hYmxlIHRvIGNyZWF0ZSBN
VExBcmd1bWVudERlc2NyaXB0b3IgZm9yIGJpbmRpbmcgJXUhIiwgYmluZGluZy5iaW5kaW5nKTsK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgW210bEFy
Z3VtZW50IHNldERhdGFUeXBlOk1UTERhdGFUeXBlRm9yQmluZGluZ1R5cGUoYmluZGluZy50eXBl
KV07Ci0gICAgICAgIFttdGxBcmd1bWVudCBzZXRJbmRleDpiaW5kaW5nLmJpbmRpbmddOwotCi0g
ICAgICAgIGlmIChiaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6
OlZlcnRleCkKLSAgICAgICAgICAgIGFwcGVuZEFyZ3VtZW50VG9BcnJheSh2ZXJ0ZXhBcmdzQXJy
YXksIG10bEFyZ3VtZW50KTsKLSAgICAgICAgaWYgKGJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNo
YWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpCi0gICAgICAgICAgICBhcHBlbmRBcmd1bWVu
dFRvQXJyYXkoZnJhZ21lbnRBcmdzQXJyYXksIG10bEFyZ3VtZW50KTsKLSAgICAgICAgaWYgKGJp
bmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6Q29tcHV0ZSkKLSAg
ICAgICAgICAgIGFwcGVuZEFyZ3VtZW50VG9BcnJheShjb21wdXRlQXJnc0FycmF5LCBtdGxBcmd1
bWVudCk7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50RW5jb2Rlcj4gdmVydGV4
LCBmcmFnbWVudCwgY29tcHV0ZTsKLQotICAgIGlmICh2ZXJ0ZXhBcmdzQXJyYXkpIHsKLSAgICAg
ICAgaWYgKCEodmVydGV4ID0gdHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVyKGRldmljZSwgdmVy
dGV4QXJnc0FycmF5KSkpCisgICAgICAgIGF1dG8gYWRkSW5kaWNlcyA9IFsmXShBcmd1bWVudEFy
cmF5JiBhcnJheSkgLT4gYm9vbCB7CisgICAgICAgICAgICBhcHBlbmRBcmd1bWVudFRvQXJyYXko
YXJyYXksIG10bEFyZ3VtZW50KTsKKyAgICAgICAgICAgIGlmIChleHRyYUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50RGVzY3JpcHRvcj4gbXRsQXJndW1lbnQg
PSBhcmd1bWVudERlc2NyaXB0b3IoTVRMRGF0YVR5cGVVSW50MiwgKmV4dHJhSW5kZXgpOworICAg
ICAgICAgICAgICAgIGlmICghbXRsQXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9H
KFdlYkdQVSwgIkdQVUJpbmRHcm91cExheW91dDo6dHJ5Q3JlYXRlKCk6IFVuYWJsZSB0byBjcmVh
dGUgTVRMQXJndW1lbnREZXNjcmlwdG9yIGZvciBiaW5kaW5nICV1ISIsIGJpbmRpbmcuYmluZGlu
Zyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYXBwZW5kQXJndW1lbnRUb0FycmF5KGFycmF5LCBtdGxBcmd1bWVu
dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsK
KyAgICAgICAgaWYgKChiaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6Rmxh
Z3M6OlZlcnRleCkgJiYgIWFkZEluZGljZXModmVydGV4QXJnc0FycmF5KSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoZnJhZ21lbnRBcmdzQXJyYXkpIHsKLSAg
ICAgICAgaWYgKCEoZnJhZ21lbnQgPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2aWNl
LCBmcmFnbWVudEFyZ3NBcnJheSkpKQorICAgICAgICBpZiAoKGJpbmRpbmcudmlzaWJpbGl0eSAm
IEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpICYmICFhZGRJbmRpY2VzKGZyYWdt
ZW50QXJnc0FycmF5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoY29tcHV0ZUFyZ3NBcnJheSkgewotICAgICAgICBpZiAoIShjb21wdXRlID0gdHJ5Q3JlYXRl
TXRsQXJndW1lbnRFbmNvZGVyKGRldmljZSwgY29tcHV0ZUFyZ3NBcnJheSkpKQorICAgICAgICBp
ZiAoKGJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6Q29tcHV0
ZSkgJiYgIWFkZEluZGljZXMoY29tcHV0ZUFyZ3NBcnJheSkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKKyAgICBSZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0
ZXgsIGZyYWdtZW50LCBjb21wdXRlOworCisgICAgaWYgKHZlcnRleEFyZ3NBcnJheSAmJiAhKHZl
cnRleCA9IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UsIHZlcnRleEFyZ3NBcnJh
eSkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoZnJhZ21lbnRBcmdzQXJyYXkg
JiYgIShmcmFnbWVudCA9IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UsIGZyYWdt
ZW50QXJnc0FycmF5KSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChjb21wdXRl
QXJnc0FycmF5ICYmICEoY29tcHV0ZSA9IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZp
Y2UsIGNvbXB1dGVBcmdzQXJyYXkpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdQVUJpbmRHcm91cExheW91dChXVEZNb3ZlKGJpbmRpbmdzTWFw
KSwgV1RGTW92ZSh2ZXJ0ZXgpLCBXVEZNb3ZlKGZyYWdtZW50KSwgV1RGTW92ZShjb21wdXRlKSkp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQmluZEdyb3VwTWV0YWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cE1ldGFsLm1tCShyZXZpc2lvbiAyNDYz
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmlu
ZEdyb3VwTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyLDEzICs3MiwxNSBAQCBzdGF0aWMg
T3B0aW9uYWw8R1BVQnVmZmVyQmluZGluZz4gdHJ5R2V0CiAgICAgcmV0dXJuIEdQVUJ1ZmZlckJp
bmRpbmcgeyBidWZmZXJCaW5kaW5nLmJ1ZmZlci5jb3B5UmVmKCksIGJ1ZmZlckJpbmRpbmcub2Zm
c2V0LCBidWZmZXJCaW5kaW5nLnNpemUgfTsKIH0KIAotc3RhdGljIHZvaWQgc2V0QnVmZmVyT25F
bmNvZGVyKE1UTEFyZ3VtZW50RW5jb2RlciAqYXJndW1lbnRFbmNvZGVyLCBjb25zdCBHUFVCdWZm
ZXJCaW5kaW5nJiBidWZmZXJCaW5kaW5nLCB1bnNpZ25lZCBpbmRleCkKK3N0YXRpYyB2b2lkIHNl
dEJ1ZmZlck9uRW5jb2RlcihNVExBcmd1bWVudEVuY29kZXIgKmFyZ3VtZW50RW5jb2RlciwgY29u
c3QgR1BVQnVmZmVyQmluZGluZyYgYnVmZmVyQmluZGluZywgdW5zaWduZWQgbmFtZSwgdW5zaWdu
ZWQgbGVuZ3RoTmFtZSkKIHsKICAgICBBU1NFUlQoYXJndW1lbnRFbmNvZGVyICYmIGJ1ZmZlckJp
bmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpKTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICAvLyBCb3VuZHMgY2hlY2sgd2hlbiBjb252ZXJ0aW5nIEdQVUJ1ZmZl
ckJpbmRpbmcgZW5zdXJlcyB0aGF0IE5TVUludGVnZXIgY2FzdCBvZiB1aW50NjRfdCBvZmZzZXQg
aXMgc2FmZS4KLSAgICBbYXJndW1lbnRFbmNvZGVyIHNldEJ1ZmZlcjpidWZmZXJCaW5kaW5nLmJ1
ZmZlci0+cGxhdGZvcm1CdWZmZXIoKSBvZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oYnVm
ZmVyQmluZGluZy5vZmZzZXQpIGF0SW5kZXg6aW5kZXhdOworICAgIFthcmd1bWVudEVuY29kZXIg
c2V0QnVmZmVyOmJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpIG9mZnNldDpz
dGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihidWZmZXJCaW5kaW5nLm9mZnNldCkgYXRJbmRleDpuYW1l
XTsKKyAgICB2b2lkKiBsZW5ndGhQb2ludGVyID0gW2FyZ3VtZW50RW5jb2RlciBjb25zdGFudERh
dGFBdEluZGV4Omxlbmd0aE5hbWVdOworICAgIG1lbWNweShsZW5ndGhQb2ludGVyLCAmYnVmZmVy
QmluZGluZy5zaXplLCBzaXplb2YodWludDY0X3QpKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogICAgIApAQCAtMTcxLDEyICsxNzMsMTIgQEAgUmVmUHRyPEdQVUJpbmRHcm91
cD4gR1BVQmluZEdyb3VwOjp0cnlDcgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIH0KICAgICAgICAgYXV0byBsYXlvdXRCaW5kaW5nID0gbGF5b3V0SXRlcmF0b3ItPnZhbHVl
OwotICAgICAgICBpZiAobGF5b3V0QmluZGluZy52aXNpYmlsaXR5ID09IEdQVVNoYWRlclN0YWdl
Qml0OjpGbGFnczo6Tm9uZSkKKyAgICAgICAgaWYgKGxheW91dEJpbmRpbmcuZXh0ZXJuYWxCaW5k
aW5nLnZpc2liaWxpdHkgPT0gR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpOb25lKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgYm9vbCBpc0ZvclZlcnRleCA9IGxheW91dEJpbmRp
bmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4OwotICAgICAg
ICBib29sIGlzRm9yRnJhZ21lbnQgPSBsYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFk
ZXJTdGFnZUJpdDo6RmxhZ3M6OkZyYWdtZW50OwotICAgICAgICBib29sIGlzRm9yQ29tcHV0ZSA9
IGxheW91dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6Q29t
cHV0ZTsKKyAgICAgICAgYm9vbCBpc0ZvclZlcnRleCA9IGxheW91dEJpbmRpbmcuZXh0ZXJuYWxC
aW5kaW5nLnZpc2liaWxpdHkgJiBHUFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OlZlcnRleDsKKyAg
ICAgICAgYm9vbCBpc0ZvckZyYWdtZW50ID0gbGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRpbmcu
dmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQ7CisgICAgICAg
IGJvb2wgaXNGb3JDb21wdXRlID0gbGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRpbmcudmlzaWJp
bGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6Q29tcHV0ZTsKIAogICAgICAgICBpZiAo
aXNGb3JWZXJ0ZXggJiYgIXZlcnRleEVuY29kZXIpIHsKICAgICAgICAgICAgIExPRyhXZWJHUFUs
ICIlczogTm8gdmVydGV4IGFyZ3VtZW50IGVuY29kZXIgZm91bmQgZm9yIGJpbmRpbmcgJXUhIiwg
ZnVuY3Rpb25OYW1lLCBpbmRleCk7CkBAIC0xOTEsMzkgKzE5MywzOSBAQCBSZWZQdHI8R1BVQmlu
ZEdyb3VwPiBHUFVCaW5kR3JvdXA6OnRyeUNyCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAobGF5b3V0QmluZGluZy50eXBlKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IG1vcmUgcmVzb3VyY2UgdHlwZXMuCi0gICAgICAgIC8vIEZJ
WE1FOiBXZSBjb3VsZCBhdm9pZCB0aGlzIHVnbHkgc3dpdGNoLW9uLXR5cGUgdXNpbmcgdmlydHVh
bCBmdW5jdGlvbnMgaWYgR1BVQmluZGluZ1Jlc291cmNlIGlzIHJlZmFjdG9yZWQgYXMgYSBiYXNl
IGNsYXNzIHJhdGhlciB0aGFuIGEgVmFyaWFudC4KLSAgICAgICAgY2FzZSBHUFVCaW5kaW5nVHlw
ZTo6VW5pZm9ybUJ1ZmZlcjoKLSAgICAgICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1
ZmZlcjogeworICAgICAgICBhdXRvIGhhbmRsZUJ1ZmZlciA9IFsmXSh1bnNpZ25lZCBpbnRlcm5h
bExlbmd0aE5hbWUpIC0+IGJvb2wgewogICAgICAgICAgICAgYXV0byBidWZmZXJSZXNvdXJjZSA9
IHRyeUdldFJlc291cmNlQXNCdWZmZXJCaW5kaW5nKHJlc291cmNlQmluZGluZy5yZXNvdXJjZSwg
ZnVuY3Rpb25OYW1lKTsKICAgICAgICAgICAgIGlmICghYnVmZmVyUmVzb3VyY2UpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgaWYgKGlzRm9yVmVydGV4KQotICAgICAgICAgICAgICAgIHNldEJ1ZmZlck9u
RW5jb2Rlcih2ZXJ0ZXhFbmNvZGVyLCAqYnVmZmVyUmVzb3VyY2UsIGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBzZXRCdWZmZXJPbkVuY29kZXIodmVydGV4RW5jb2RlciwgKmJ1ZmZlclJlc291cmNl
LCBsYXlvdXRCaW5kaW5nLmludGVybmFsTmFtZSwgaW50ZXJuYWxMZW5ndGhOYW1lKTsKICAgICAg
ICAgICAgIGlmIChpc0ZvckZyYWdtZW50KQotICAgICAgICAgICAgICAgIHNldEJ1ZmZlck9uRW5j
b2RlcihmcmFnbWVudEVuY29kZXIsICpidWZmZXJSZXNvdXJjZSwgaW5kZXgpOworICAgICAgICAg
ICAgICAgIHNldEJ1ZmZlck9uRW5jb2RlcihmcmFnbWVudEVuY29kZXIsICpidWZmZXJSZXNvdXJj
ZSwgbGF5b3V0QmluZGluZy5pbnRlcm5hbE5hbWUsIGludGVybmFsTGVuZ3RoTmFtZSk7CiAgICAg
ICAgICAgICBpZiAoaXNGb3JDb21wdXRlKQotICAgICAgICAgICAgICAgIHNldEJ1ZmZlck9uRW5j
b2Rlcihjb21wdXRlRW5jb2RlciwgKmJ1ZmZlclJlc291cmNlLCBpbmRleCk7CisgICAgICAgICAg
ICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKGNvbXB1dGVFbmNvZGVyLCAqYnVmZmVyUmVzb3VyY2Us
IGxheW91dEJpbmRpbmcuaW50ZXJuYWxOYW1lLCBpbnRlcm5hbExlbmd0aE5hbWUpOwogICAgICAg
ICAgICAgYm91bmRCdWZmZXJzLmFwcGVuZChidWZmZXJSZXNvdXJjZS0+YnVmZmVyLmNvcHlSZWYo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdQVUJpbmRp
bmdUeXBlOjpTYW1wbGVyOiB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsK
KworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KEdQVUJpbmRHcm91cExheW91dDo6VW5pZm9ybUJ1ZmZlciYgdW5pZm9ybUJ1ZmZlcikgLT4gYm9v
bCB7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlQnVmZmVyKHVuaWZvcm1CdWZmZXIuaW50ZXJu
YWxMZW5ndGhOYW1lKTsKKyAgICAgICAgfSwgWyZdKEdQVUJpbmRHcm91cExheW91dDo6RHluYW1p
Y1VuaWZvcm1CdWZmZXImIGR5bmFtaWNVbmlmb3JtQnVmZmVyKSAtPiBib29sIHsKKyAgICAgICAg
ICAgIHJldHVybiBoYW5kbGVCdWZmZXIoZHluYW1pY1VuaWZvcm1CdWZmZXIuaW50ZXJuYWxMZW5n
dGhOYW1lKTsKKyAgICAgICAgfSwgWyZdKEdQVUJpbmRHcm91cExheW91dDo6U2FtcGxlciYpIC0+
IGJvb2wgewogICAgICAgICAgICAgYXV0byBzYW1wbGVyU3RhdGUgPSB0cnlHZXRSZXNvdXJjZUFz
TXRsU2FtcGxlcihyZXNvdXJjZUJpbmRpbmcucmVzb3VyY2UsIGZ1bmN0aW9uTmFtZSk7CiAgICAg
ICAgICAgICBpZiAoIXNhbXBsZXJTdGF0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXNGb3JW
ZXJ0ZXgpCiAgICAgICAgICAgICAgICAgc2V0U2FtcGxlck9uRW5jb2Rlcih2ZXJ0ZXhFbmNvZGVy
LCBzYW1wbGVyU3RhdGUsIGluZGV4KTsKICAgICAgICAgICAgIGlmIChpc0ZvckZyYWdtZW50KQog
ICAgICAgICAgICAgICAgIHNldFNhbXBsZXJPbkVuY29kZXIoZnJhZ21lbnRFbmNvZGVyLCBzYW1w
bGVyU3RhdGUsIGluZGV4KTsKICAgICAgICAgICAgIGlmIChpc0ZvckNvbXB1dGUpCiAgICAgICAg
ICAgICAgICAgc2V0U2FtcGxlck9uRW5jb2Rlcihjb21wdXRlRW5jb2Rlciwgc2FtcGxlclN0YXRl
LCBpbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdQ
VUJpbmRpbmdUeXBlOjpTYW1wbGVkVGV4dHVyZTogeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OlNhbXBsZWRUZXh0dXJlJikgLT4g
Ym9vbCB7CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVSZXNvdXJjZSA9IHRyeUdldFJlc291cmNl
QXNUZXh0dXJlKHJlc291cmNlQmluZGluZy5yZXNvdXJjZSwgZnVuY3Rpb25OYW1lKTsKICAgICAg
ICAgICAgIGlmICghdGV4dHVyZVJlc291cmNlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChpc0Zv
clZlcnRleCkKICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlT25FbmNvZGVyKHZlcnRleEVuY29k
ZXIsIHRleHR1cmVSZXNvdXJjZS0+cGxhdGZvcm1UZXh0dXJlKCksIGluZGV4KTsKICAgICAgICAg
ICAgIGlmIChpc0ZvckZyYWdtZW50KQpAQCAtMjMxLDEyICsyMzMsMTQgQEAgUmVmUHRyPEdQVUJp
bmRHcm91cD4gR1BVQmluZEdyb3VwOjp0cnlDcgogICAgICAgICAgICAgaWYgKGlzRm9yQ29tcHV0
ZSkKICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlT25FbmNvZGVyKGNvbXB1dGVFbmNvZGVyLCB0
ZXh0dXJlUmVzb3VyY2UtPnBsYXRmb3JtVGV4dHVyZSgpLCBpbmRleCk7CiAgICAgICAgICAgICBi
b3VuZFRleHR1cmVzLmFwcGVuZCh0ZXh0dXJlUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgTE9HKFdlYkdQVSwgIiVzOiBSZXNvdXJjZSB0eXBlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIiwg
ZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LCBbJl0o
R1BVQmluZEdyb3VwTGF5b3V0OjpTdG9yYWdlQnVmZmVyJiBzdG9yYWdlQnVmZmVyKSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVCdWZmZXIoc3RvcmFnZUJ1ZmZlci5pbnRlcm5h
bExlbmd0aE5hbWUpOworICAgICAgICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWlj
U3RvcmFnZUJ1ZmZlciYgZHluYW1pY1N0b3JhZ2VCdWZmZXIpIC0+IGJvb2wgeworICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZUJ1ZmZlcihkeW5hbWljU3RvcmFnZUJ1ZmZlci5pbnRlcm5hbExlbmd0
aE5hbWUpOworICAgICAgICB9KSwgbGF5b3V0QmluZGluZy5pbnRlcm5hbEJpbmRpbmdEZXRhaWxz
KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVCaW5kR3Jv
dXAoV1RGTW92ZSh2ZXJ0ZXhBcmdzQnVmZmVyKSwgV1RGTW92ZShmcmFnbWVudEFyZ3NCdWZmZXIp
LCBXVEZNb3ZlKGNvbXB1dGVBcmdzQnVmZmVyKSwgV1RGTW92ZShib3VuZEJ1ZmZlcnMpLCBXVEZN
b3ZlKGJvdW5kVGV4dHVyZXMpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxp
bmVNZXRhbC5tbQkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTExMCwyMCArMTEwLDIxIEBAIHN0YXRpYyBPcHRpb25TZXQ8V0hMU0w6OlNoYWRlclN0
YWdlPiBjb24KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8V0hMU0w6
OkJpbmRpbmdUeXBlPiBjb252ZXJ0QmluZGluZ1R5cGUoR1BVQmluZGluZ1R5cGUgdHlwZSkKK3N0
YXRpYyBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IGNvbnZlcnRCaW5k
aW5nVHlwZShHUFVCaW5kR3JvdXBMYXlvdXQ6OkludGVybmFsQmluZGluZ0RldGFpbHMgaW50ZXJu
YWxCaW5kaW5nRGV0YWlscykKIHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdQVUJp
bmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgotICAgICAgICByZXR1cm4gV0hMU0w6OkJpbmRpbmdU
eXBlOjpVbmlmb3JtQnVmZmVyOwotICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlNhbXBsZXI6Ci0g
ICAgICAgIHJldHVybiBXSExTTDo6QmluZGluZ1R5cGU6OlNhbXBsZXI7Ci0gICAgY2FzZSBHUFVC
aW5kaW5nVHlwZTo6U2FtcGxlZFRleHR1cmU6Ci0gICAgICAgIHJldHVybiBXSExTTDo6QmluZGlu
Z1R5cGU6OlRleHR1cmU7Ci0gICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1ZmZlcjoK
LSAgICAgICAgcmV0dXJuIFdITFNMOjpCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1ZmZlcjsKLSAgICBk
ZWZhdWx0OgorICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEdQVUJp
bmRHcm91cExheW91dDo6VW5pZm9ybUJ1ZmZlciB1bmlmb3JtQnVmZmVyKSAtPiBPcHRpb25hbDxX
SExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKKyAgICAgICAgcmV0dXJuIHsgV0hMU0w6
OlVuaWZvcm1CdWZmZXJCaW5kaW5nIHsgdW5pZm9ybUJ1ZmZlci5pbnRlcm5hbExlbmd0aE5hbWUg
fSB9OworICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OkR5bmFtaWNVbmlmb3JtQnVmZmVy
KSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAgfSwgWyZdKEdQVUJpbmRHcm91cExheW91
dDo6U2FtcGxlcikgLT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzPiB7
CisgICAgICAgIHJldHVybiB7IFdITFNMOjpTYW1wbGVyQmluZGluZyB7IH0gfTsKKyAgICB9LCBb
Jl0oR1BVQmluZEdyb3VwTGF5b3V0OjpTYW1wbGVkVGV4dHVyZSkgLT4gT3B0aW9uYWw8V0hMU0w6
OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzPiB7CisgICAgICAgIHJldHVybiB7IFdITFNMOjpUZXh0
dXJlQmluZGluZyB7IH0gfTsKKyAgICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpTdG9yYWdl
QnVmZmVyIHN0b3JhZ2VCdWZmZXIpIC0+IE9wdGlvbmFsPFdITFNMOjpCaW5kaW5nOjpCaW5kaW5n
RGV0YWlscz4geworICAgICAgICByZXR1cm4geyBXSExTTDo6U3RvcmFnZUJ1ZmZlckJpbmRpbmcg
eyBzdG9yYWdlQnVmZmVyLmludGVybmFsTGVuZ3RoTmFtZSB9IH07CisgICAgfSwgWyZdKEdQVUJp
bmRHcm91cExheW91dDo6RHluYW1pY1N0b3JhZ2VCdWZmZXIpIC0+IE9wdGlvbmFsPFdITFNMOjpC
aW5kaW5nOjpCaW5kaW5nRGV0YWlscz4geworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0pLCBpbnRlcm5hbEJpbmRpbmdEZXRhaWxzKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFdI
TFNMOjpUZXh0dXJlRm9ybWF0PiBjb252ZXJ0VGV4dHVyZUZvcm1hdChHUFVUZXh0dXJlRm9ybWF0
IGZvcm1hdCkKQEAgLTM3NywxNiArMzc4LDE3IEBAIHN0YXRpYyBPcHRpb25hbDxXSExTTDo6TGF5
b3V0PiBjb252ZXJ0TGEKICAgICAgICAgV0hMU0w6OkJpbmRHcm91cCBiaW5kR3JvdXA7CiAgICAg
ICAgIGJpbmRHcm91cC5uYW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpOwogICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IGJpbmRHcm91cExheW91dC0+YmluZGluZ3NN
YXAoKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgZ3B1QmluZEdyb3VwTGF5b3V0QmluZGlu
ZyA9IGtleVZhbHVlUGFpci52YWx1ZTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGJpbmRpbmdE
ZXRhaWxzID0ga2V5VmFsdWVQYWlyLnZhbHVlOwogICAgICAgICAgICAgV0hMU0w6OkJpbmRpbmcg
YmluZGluZzsKLSAgICAgICAgICAgIGJpbmRpbmcudmlzaWJpbGl0eSA9IGNvbnZlcnRTaGFkZXJT
dGFnZUZsYWdzKGdwdUJpbmRHcm91cExheW91dEJpbmRpbmcudmlzaWJpbGl0eSk7Ci0gICAgICAg
ICAgICBpZiAoYXV0byBiaW5kaW5nVHlwZSA9IGNvbnZlcnRCaW5kaW5nVHlwZShncHVCaW5kR3Jv
dXBMYXlvdXRCaW5kaW5nLnR5cGUpKQotICAgICAgICAgICAgICAgIGJpbmRpbmcuYmluZGluZ1R5
cGUgPSAqYmluZGluZ1R5cGU7CisgICAgICAgICAgICBiaW5kaW5nLnZpc2liaWxpdHkgPSBjb252
ZXJ0U2hhZGVyU3RhZ2VGbGFncyhiaW5kaW5nRGV0YWlscy5leHRlcm5hbEJpbmRpbmcudmlzaWJp
bGl0eSk7CisgICAgICAgICAgICBpZiAoYXV0byBiaW5kaW5nVHlwZSA9IGNvbnZlcnRCaW5kaW5n
VHlwZShiaW5kaW5nRGV0YWlscy5pbnRlcm5hbEJpbmRpbmdEZXRhaWxzKSkKKyAgICAgICAgICAg
ICAgICBiaW5kaW5nLmJpbmRpbmcgPSAqYmluZGluZ1R5cGU7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIGlmIChncHVC
aW5kR3JvdXBMYXlvdXRCaW5kaW5nLmJpbmRpbmcgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpCisgICAgICAgICAgICBpZiAoYmluZGluZ0RldGFpbHMuZXh0ZXJuYWxCaW5k
aW5nLmJpbmRpbmcgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIGJpbmRpbmcubmFt
ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihncHVCaW5kR3JvdXBMYXlvdXRCaW5kaW5nLmJpbmRp
bmcpOworICAgICAgICAgICAgYmluZGluZy5leHRlcm5hbE5hbWUgPSBiaW5kaW5nRGV0YWlscy5l
eHRlcm5hbEJpbmRpbmcuYmluZGluZzsKKyAgICAgICAgICAgIGJpbmRpbmcuaW50ZXJuYWxOYW1l
ID0gYmluZGluZ0RldGFpbHMuaW50ZXJuYWxOYW1lOwogICAgICAgICAgICAgYmluZEdyb3VwLmJp
bmRpbmdzLmFwcGVuZChXVEZNb3ZlKGJpbmRpbmcpKTsKICAgICAgICAgfQogICAgICAgICByZXN1
bHQuYXBwZW5kKFdURk1vdmUoYmluZEdyb3VwKSk7CkBAIC00NzEsNiArNDczLDggQEAgc3RhdGlj
IGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IGNoYXIqIAogICAgICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIHZlcnRleExpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2Uu
cGxhdGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1bHQt
Pm1ldGFsU291cmNlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOwogICAgICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOworICAgICAgICBpZiAoIXZlcnRleExpYnJhcnkpCisgICAgICAg
ICAgICBOU0xvZyhAIiVAIiwgZXJyb3IpOwogCiAgICAgICAgIEFTU0VSVCh2ZXJ0ZXhMaWJyYXJ5
KTsKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVzLCB0aGVyZSBzaG91bGQgYmUg
bm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVCghZXJyb3IpIGhlcmUu
CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1hYnN0cmFj
dC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUv
cHJvcGVydHlyZXNvbHZlci9hbmRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1h
YnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFz
LmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAg
Y29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUg
PSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30K
K3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9h
bmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1hYnN0cmFj
dC1sdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBz
aGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRp
b24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsK
K30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVy
YXRvciYueSh0aHJlYWQgRm9vKiBmKSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3Qg
QmFyIHsKKyAgICBGb28gejsKK30KKworRm9vIG9wZXJhdG9yLncoQmFyIGIpIHsKKyAgICByZXR1
cm4gYi56OworfQorCitCYXIgb3BlcmF0b3Iudz0oQmFyIGIsIEZvbyBhKSB7CisgICAgYi56ID0g
YTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkg
OiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYi53LnkgPSAxLjA7CisgICAgcmV0dXJu
IGZsb2F0NChiLncueSwgYi53LnksIGIudy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9u
IHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVl
c3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2
aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlv
bjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYs
IGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQw
XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9n
eSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZl
cnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3Ig
PSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3Jp
cHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhC
dWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0g
PSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9hbmRlci1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItZXhwZWN0ZWQu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52
YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAg
Y29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0
MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQu
ZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtMy1sZXZlbHMtZXhw
ZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9hbmRlci1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtMy1sZXZl
bHMtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQo
IjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxs
UmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUt
My1sZXZlbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHly
ZXNvbHZlci9hbmRlci1sdmFsdWUtMy1sZXZlbHMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtMy1sZXZlbHMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2Ug
PSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0
IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciYueSh0aHJl
YWQgRm9vKiBmKSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBG
b28gejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0b3ImLncodGhyZWFkIEJhciogYikgeworICAg
IHJldHVybiAmYi0+ejsKK30KKworc3RydWN0IEJheiB7CisgICAgQmFyIHA7Cit9CisKK3RocmVh
ZCBCYXIqIG9wZXJhdG9yJi5xKHRocmVhZCBCYXoqIGIpIHsKKyAgICByZXR1cm4gJmItPnA7Cit9
CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAg
IEJheiBiOworICAgIGIucS53LnkgPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiLnEudy55LCBi
LnEudy55LCBiLnEudy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewor
ICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7
CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNv
bnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNl
dDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAg
Y29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZl
cnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4
dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1h
dDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3Vy
ZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
ID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBj
b21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAg
IGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0
dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdl
dDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiBy
ZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25z
dCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwor
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30K
K2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
K3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9h
bmRlci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUt
ZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJk
Iik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRl
ci1sdmFsdWUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9hbmRlci1sdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEx
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJl
dHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhy
ZWFkIGZsb2F0KiBvcGVyYXRvciYueSh0aHJlYWQgRm9vKiBmKSB7CisgICAgcmV0dXJuICZmLT54
OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0
b3ImLncodGhyZWFkIEJhciogYikgeworICAgIHJldHVybiAmYi0+ejsKK30KKworZnJhZ21lbnQg
ZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAg
Yi53LnkgPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiLncueSwgYi53LnksIGIudy55LCAxLjAp
OworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBh
d2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0g
YXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAg
IGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCBy
YXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsK
KyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVu
ZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0
cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29u
c3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAg
ICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVy
QXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
Nl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOwor
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qg
c3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5E
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJl
bnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJl
LmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmlj
ZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBn
OiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2ht
ZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xl
YXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwg
W3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXIuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0
MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2Ug
PSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1
dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0
IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciYueSh0aHJl
YWQgRm9vKiBmKSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitGb28gZ2VuZXJhdGVGb28oKSB7
CisgICAgRm9vIGY7CisgICAgZi54ID0gMS4wOworICAgIHJldHVybiBmOworfQorCitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxv
YXQ0KGdlbmVyYXRlRm9vKCkueSwgZ2VuZXJhdGVGb28oKS55LCBnZW5lcmF0ZUZvbygpLnksIDEu
MCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9
IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2Ug
PSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Cisg
ICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0
IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9
OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJs
ZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFM
TAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBh
dHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBj
b25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19Owor
ICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdt
ZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3Rh
dGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5j
cmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJB
cnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZm
ZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7
CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owor
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2dldHRlci1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2dldHRl
ci1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9w
ZXJ0eXJlc29sdmVyL2dldHRlci1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+
Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBj
YW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsK
KyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxT
dHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDAp
OworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL2dldHRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0
eXJlc29sdmVyL2dldHRlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdw
dS9wcm9wZXJ0eXJlc29sdmVyL2dldHRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAg
cmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCitm
bG9hdCBvcGVyYXRvci55KEZvbyBmKSB7CisgICAgcmV0dXJuIGYueDsKK30KKworZnJhZ21lbnQg
ZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgRm9vIGY7CisgICAg
Zi54ID0gMS4wOworICAgIHJldHVybiBmbG9hdDQoZi55LCBmLnksIGYueSwgMS4wKTsKK30KK2A7
Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2
aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFk
YXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBw
cmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXph
dGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29u
c3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9y
QmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29u
c3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAg
PSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0
MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwg
cHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRo
U3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRl
clBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25z
dCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFp
bkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qg
c3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRv
cik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVy
ZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVE
ZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRl
Q29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjog
MSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0
cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3Rv
cmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2ls
QXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29s
b3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVy
UGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rl
c2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1hYnN0cmFjdC1sdmFsdWUt
ZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHly
ZXNvbHZlci9pbmRleGVyLWFuZGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXIt
YW5kZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUi
OworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmls
bFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIw
MCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVz
b2x2ZXIvaW5kZXhlci1hbmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWFic3RyYWN0
LWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0
eXJlc29sdmVyL2luZGV4ZXItYW5kZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZs
b2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bv
c2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZs
b2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZiwgdWlu
dCBpbmRleCkgeworICAgIHJldHVybiAmZi0+eDsKK30KKworc3RydWN0IEJhciB7CisgICAgRm9v
IHo7Cit9CisKK0ZvbyBvcGVyYXRvcltdKEJhciBiLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJu
IGIuejsKK30KKworQmFyIG9wZXJhdG9yW109KEJhciBiLCB1aW50IGluZGV4LCBGb28gYSkgewor
ICAgIGIueiA9IGE7CisgICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGJbMl1bM10gPSAxLjA7
CisgICAgcmV0dXJuIGZsb2F0NChiWzJdWzNdLCBiWzJdWzNdLCBiWzJdWzNdLCAxLjApOworfQor
YDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBu
YXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQg
YWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZp
Y2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9
KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0
IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJp
emF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBj
b25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNv
bnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29s
b3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRl
MCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5w
dXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25z
dCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZm
ZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2Jp
bmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdl
LCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVw
dGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBl
bGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVu
ZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
ICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
dmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZm
ZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5Wzld
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAg
Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNv
bnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENo
YWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25z
dCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlw
dG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0
dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0
ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVh
dGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBi
OiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBv
dXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBz
dG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtj
b2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5k
ZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNz
RGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRl
eEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZl
ciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1p
dChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJs
b2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWV4cGVjdGVkLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhl
ci1hbmRlci1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdw
dS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItZXhwZWN0ZWQuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0
MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25z
dCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5
bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAg
Y29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAx
MDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUv
cHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2lu
ZGV4ZXItYW5kZXItbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFs
dWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdl
dENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29u
dGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAi
d2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRl
eGVyLWFuZGVyLWx2YWx1ZS0zLWxldmVscy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLTMtbGV2ZWxzLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIv
aW5kZXhlci1hbmRlci1sdmFsdWUtMy1sZXZlbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewor
ICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30K
KwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmLCB1aW50IGluZGV4KSB7
CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKwor
dGhyZWFkIEZvbyogb3BlcmF0b3ImW10odGhyZWFkIEJhciogYiwgdWludCBpbmRleCkgeworICAg
IHJldHVybiAmYi0+ejsKK30KKworc3RydWN0IEJheiB7CisgICAgQmFyIHA7Cit9CisKK3RocmVh
ZCBCYXIqIG9wZXJhdG9yJltdKHRocmVhZCBCYXoqIGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1
cm4gJmItPnA7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFy
Z2V0IDAgeworICAgIEJheiBiOworICAgIGJbMV1bMl1bM10gPSAxLjA7CisgICAgcmV0dXJuIGZs
b2F0NChiWzFdWzJdWzNdLCBiWzFdWzJdWzNdLCBiWzFdWzJdWzNdLCAxLjApOworfQorYDsKK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0
b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRl
ci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAg
ICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDog
InZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1p
dGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9u
U3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBh
bHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVu
ZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtz
aGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0g
e3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1
dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBp
bnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQ
aXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmlt
aXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVu
Y2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxh
eW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAq
IDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJ
VEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4
QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBh
d2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIp
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
Ml0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
Ml0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVz
Y3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1
bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21t
YW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBh
OiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRU
ZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9w
OiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0
dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNz
RW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3Jp
cHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZl
cl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwg
c3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93
ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4
ZXItYW5kZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUtZXhwZWN0ZWQu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52
YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAg
Y29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0
MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQu
ZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4
ZXItYW5kZXItbHZhbHVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxv
YXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9z
aXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxv
YXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmLCB1aW50
IGluZGV4KSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28g
ejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0b3ImW10odGhyZWFkIEJhciogYiwgdWludCBpbmRl
eCkgeworICAgIHJldHVybiAmYi0+ejsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hh
ZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYlsxXVsyXSA9IDEuMDsKKyAg
ICByZXR1cm4gZmxvYXQ0KGJbMV1bMl0sIGJbMV1bMl0sIGJbMV1bMl0sIDEuMCk7Cit9CitgOwor
YXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmln
YXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFw
dGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0g
e3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlu
cHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6
IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdy
b3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHBy
aW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0
ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5l
TGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQ
aXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVm
ZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0
ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9X
UklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0
ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9
IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZl
cik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3Qg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5E
ZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3
YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3Ip
OworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUo
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVm
YXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNv
bW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEs
IGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1
dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3Jl
T3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9y
QXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBh
c3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNj
cmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVm
ZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXIuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5k
ZXhlci1hbmRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0
IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCit0aHJlYWQgZmxvYXQqIG9w
ZXJhdG9yJltdKHRocmVhZCBGb28qIGYsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gJmYtPng7
Cit9CisKK0ZvbyBnZW5lcmF0ZUZvbygpIHsKKyAgICBGb28gZjsKKyAgICBmLnggPSAxLjA7Cisg
ICAgcmV0dXJuIGY7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1Zf
VGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoZ2VuZXJhdGVGb28oKVswXSwgZ2VuZXJhdGVG
b28oKVsxXSwgZ2VuZXJhdGVGb28oKVsyXSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBz
dGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0
QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmlj
ZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIi
fTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9
ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250
RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9
OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7
Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazog
MTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3Rh
dGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246
IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBh
dHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07
CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ks
IHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0
ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0g
e3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVm
ZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFz
LmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2
aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4
dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0
cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91
dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisg
ICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsg
Ly8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29u
c3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJl
c29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xl
YXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7
CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVw
dGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21t
YW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5m
aW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsK
KworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvaW5kZXhlci1nZXR0ZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWdldHRlci1leHBlY3RlZC5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVy
L2luZGV4ZXItZ2V0dGVyLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZh
cy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIv
aW5kZXhlci1nZXR0ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJv
cGVydHlyZXNvbHZlci9pbmRleGVyLWdldHRlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItZ2V0dGVyLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28gewor
ICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yW10oRm9vIGYsIHVpbnQgaW5kZXgpIHsK
KyAgICByZXR1cm4gZmxvYXQoaW5kZXgpOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRT
aGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZjsKKyAgICByZXR1cm4gZmxvYXQ0KGZb
MV0sIGZbMV0sIGZbMV0sIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsK
KyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAg
IGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29u
c3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZy
YWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUt
c3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIs
IGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJn
YmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQ
VUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsK
KyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6
ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0
OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0
IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0
MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0
OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJl
U3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUg
PSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
VmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNv
bW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAg
Y29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0
YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0
OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJl
ZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0
IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIu
YmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3Mo
KTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Cisg
ICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2lu
ZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0
dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFi
c3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52
YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQg
PSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVl
IjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZp
bGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAy
MDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJl
c29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0
dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2
YWx1ZS0zLWxldmVscy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Nv
bnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0
aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCitmbG9hdCBvcGVyYXRv
cltdKEZvbyBmLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuIGYueDsKK30KKworRm9vIG9wZXJh
dG9yW109KEZvbyBmLCB1aW50IGluZGV4LCBmbG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICBy
ZXR1cm4gZjsKK30KKworc3RydWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK0ZvbyBvcGVyYXRv
cltdKEJhciBiLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuIGIuejsKK30KKworQmFyIG9wZXJh
dG9yW109KEJhciBiLCB1aW50IGluZGV4LCBGb28gYSkgeworICAgIGIueiA9IGE7CisgICAgcmV0
dXJuIGI7Cit9CisKK3N0cnVjdCBCYXogeworICAgIEJhciBwOworfQorCitCYXIgb3BlcmF0b3Jb
XShCYXogYiwgdWludCBpbmRleCkgeworICAgIHJldHVybiBiLnA7Cit9CisKK0JheiBvcGVyYXRv
cltdPShCYXogYiwgdWludCBpbmRleCwgQmFyIGEpIHsKKyAgICBiLnAgPSBhOworICAgIHJldHVy
biBiOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAw
IHsKKyAgICBCYXogYjsKKyAgICBiWzJdWzNdWzRdID0gMS4wOworICAgIHJldHVybiBmbG9hdDQo
YlsyXVszXVs0XSwgYlsyXVszXVs0XSwgYlsyXVszXVs0XSwgMS4wKTsKK30KK2A7Cithc3luYyBm
dW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdw
dS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVx
dWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZl
VG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0
YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9
OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBb
MF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5k
RW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRC
dWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVk
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIv
aW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXIt
YWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZh
cy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIv
aW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZh
bHVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVz
b2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0
NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0
aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0
IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yW10oRm9vIGYsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1
cm4gZi54OworfQorCitGb28gb3BlcmF0b3JbXT0oRm9vIGYsIHVpbnQgaW5kZXgsIGZsb2F0IHgp
IHsKKyAgICBmLnggPSB4OworICAgIHJldHVybiBmOworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBG
b28gejsKK30KKworRm9vIG9wZXJhdG9yW10oQmFyIGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1
cm4gYi56OworfQorCitCYXIgb3BlcmF0b3JbXT0oQmFyIGIsIHVpbnQgaW5kZXgsIEZvbyBhKSB7
CisgICAgYi56ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdt
ZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYlsyXVszXSA9IDEu
MDsKKyAgICByZXR1cm4gZmxvYXQ0KGJbMl1bM10sIGJbMl1bM10sIGJbMl1bM10sIDEuMCk7Cit9
CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0
IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2Fp
dCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1
ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29u
c3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rl
cml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAg
IGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAg
Y29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBj
b2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAg
IGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1
dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBp
bnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNv
bnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1
ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7
YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNl
LmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3Rh
Z2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBk
ZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBp
cGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVS
ZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVy
dGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZl
cih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1
ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJh
eUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
OV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAg
ICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAg
Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2Fw
Q2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNv
bnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2Ny
aXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRl
eHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3Jl
YXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNy
ZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAs
IGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6
IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIs
IHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0g
e2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJl
bmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBh
c3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQ
aXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVy
dGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDAp
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWV4cGVjdGVkLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5k
ZXhlci1zZXR0ZXItZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1leHBlY3RlZC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZp
bGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsK
KyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgx
MDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBz
dGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4
ZXItc2V0dGVyLWx2YWx1ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS1leHBlY3Rl
ZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24g
c3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAg
ICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAs
IDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4
dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2lu
ZGV4ZXItc2V0dGVyLWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRl
eCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBT
Vl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAg
ICBmbG9hdCB4OworfQorCitmbG9hdCBvcGVyYXRvcltdKEZvbyBmLCB1aW50IGluZGV4KSB7Cisg
ICAgcmV0dXJuIGYueDsKK30KKworRm9vIG9wZXJhdG9yW109KEZvbyBmLCB1aW50IGluZGV4LCBm
bG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICByZXR1cm4gZjsKK30KKworc3RydWN0IEJhciB7
CisgICAgRm9vIHo7Cit9CisKK3RocmVhZCBGb28qIG9wZXJhdG9yJltdKHRocmVhZCBCYXIqIGIs
IHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gJmItPno7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBm
cmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGJbMl1bM10g
PSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiWzJdWzNdLCBiWzJdWzNdLCBiWzJdWzNdLCAxLjAp
OworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBh
d2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0g
YXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUg
PSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6
IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwg
ZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7
bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAg
IGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCBy
YXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsK
KyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9Owor
ICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVu
ZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwK
KyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0
cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29u
c3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAg
ICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0
ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRl
dmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVu
dFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRl
cywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0
OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3Jl
YXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVy
QXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
Nl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOwor
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qg
c3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5E
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJl
bnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJl
LmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmlj
ZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBn
OiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2ht
ZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xl
YXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRv
ciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25z
dCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5k
ZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwg
W3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAw
LCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXIt
c2V0dGVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEx
OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRl
cihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJl
dHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhy
ZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmLCB1aW50IGluZGV4KSB7CisgICAg
cmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKworRm9vIG9w
ZXJhdG9yW10oQmFyIGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gYi56OworfQorCitCYXIg
b3BlcmF0b3JbXT0oQmFyIGIsIHVpbnQgaW5kZXgsIEZvbyBhKSB7CisgICAgYi56ID0gYTsKKyAg
ICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9U
YXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgRm9vIGZvbzsKKyAgICBmb28ueCA9IDEuMDsKKyAg
ICBiWzFdID0gZm9vOworICAgIGZvbyA9IGJbMV07CisgICAgcmV0dXJuIGZsb2F0NChmb28ueCwg
Zm9vLngsIGZvby54LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAg
IGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7Cisg
ICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBj
b25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFk
ZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Cisg
ICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDog
W2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2
ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91
dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3Zl
cnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlv
blN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1w
bGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVB
c3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRl
eEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgi
Z3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDog
ImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3
YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0g
c3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZp
ZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFj
aG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDog
bnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9
XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCBy
ZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJl
Z2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNl
dFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0
ZXItYWJzdHJhY3QtbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1
ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMtZXhw
ZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7
CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgw
LCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNv
bnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZh
bHVlLTMtbGV2ZWxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3Bl
cnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0
cmFjdC1sdmFsdWUtMy1sZXZlbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihm
bG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVy
biBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKworZmxvYXQg
b3BlcmF0b3IueShGb28gZikgeworICAgIHJldHVybiBmLng7Cit9CisKK0ZvbyBvcGVyYXRvci55
PShGb28gZiwgZmxvYXQgeCkgeworICAgIGYueCA9IHg7CisgICAgcmV0dXJuIGY7Cit9CisKK3N0
cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCitGb28gb3BlcmF0b3IudyhCYXIgYikgeworICAg
IHJldHVybiBiLno7Cit9CisKK0JhciBvcGVyYXRvci53PShCYXIgYiwgRm9vIGEpIHsKKyAgICBi
LnogPSBhOworICAgIHJldHVybiBiOworfQorCitzdHJ1Y3QgQmF6IHsKKyAgICBCYXIgcDsKK30K
KworQmFyIG9wZXJhdG9yLnEoQmF6IGIpIHsKKyAgICByZXR1cm4gYi5wOworfQorCitCYXogb3Bl
cmF0b3IucT0oQmF6IGIsIEJhciBhKSB7CisgICAgYi5wID0gYTsKKyAgICByZXR1cm4gYjsKK30K
KworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAg
QmF6IGI7CisgICAgYi5xLncueSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGIucS53LnksIGIu
cS53LnksIGIucS53LnksIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsK
KyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAg
IGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNo
YWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21v
ZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29u
c3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZy
YWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUt
c3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIs
IGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJn
YmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQ
VUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsK
KyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6
ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0
OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0
IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0
IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7
dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0
aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNh
bXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQ
aXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0
ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0
MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0
KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0
OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJl
U3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUg
PSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
VmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNv
bW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAg
Y29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0
YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0
OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJl
ZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0
IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIu
YmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
c2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3Mo
KTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Cisg
ICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3Nl
dHRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVj
dGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVz
b2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9
ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250
ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwg
MjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9w
ZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVl
Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hh
ZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAg
cmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCitm
bG9hdCBvcGVyYXRvci55KEZvbyBmKSB7CisgICAgcmV0dXJuIGYueDsKK30KKworRm9vIG9wZXJh
dG9yLnk9KEZvbyBmLCBmbG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICByZXR1cm4gZjsKK30K
Kworc3RydWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK0ZvbyBvcGVyYXRvci53KEJhciBiKSB7
CisgICAgcmV0dXJuIGIuejsKK30KKworQmFyIG9wZXJhdG9yLnc9KEJhciBiLCBGb28gYSkgewor
ICAgIGIueiA9IGE7CisgICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGIudy55ID0gMS4wOwor
ICAgIHJldHVybiBmbG9hdDQoYi53LnksIGIudy55LCBiLncueSwgMS4wKTsKK30KK2A7Cithc3lu
YyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9y
LmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIu
cmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0
ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAg
Y29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2
ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRp
dmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0
YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxw
aGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
clN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQs
IHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVw
dGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hh
ZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtz
dHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRz
ID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5w
dXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBM
YXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0
aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNp
bFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVs
aW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJE
ZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0
LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRF
fTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1
ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250
ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2Ny
aXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENo
YWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0
VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFu
ZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTog
MX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4
dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDog
InN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRh
Y2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0Vu
Y29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0
b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJd
LCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21t
YW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1h
bmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0
YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2Vi
Z3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWx2YWx1ZS1leHBlY3RlZC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1sdmFsdWUt
ZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9zZXR0ZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJs
dWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQu
ZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAs
IDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvc2V0dGVyLWx2YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1sdmFsdWUuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItbHZhbHVlLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAw
IiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0g
YAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRl
KDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBG
b28geworICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yLnkoRm9vIGYpIHsKKyAgICBy
ZXR1cm4gZi54OworfQorCitGb28gb3BlcmF0b3IueT0oRm9vIGYsIGZsb2F0IHgpIHsKKyAgICBm
LnggPSB4OworICAgIHJldHVybiBmOworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30K
KwordGhyZWFkIEZvbyogb3BlcmF0b3ImLncodGhyZWFkIEJhciogYikgeworICAgIHJldHVybiAm
Yi0+ejsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQg
MCB7CisgICAgQmFyIGI7CisgICAgYi53LnkgPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiLncu
eSwgYi53LnksIGIudy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewor
ICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7
CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAg
ICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBz
aGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNv
bnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJm
cmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xl
LXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ci
LCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJy
Z2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBH
UFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7
CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0
OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNl
dDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25z
dCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0g
e3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXph
dGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBz
YW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1
ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAg
Y29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3Jp
dGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZl
cnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4
dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1h
dDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3Vy
ZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJl
ID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVy
ZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBj
b21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAg
IGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0
dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdl
dDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiBy
ZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25z
dCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxB
dHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVy
LmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNz
KCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOwor
ICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30K
K2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
K3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1w
YXJzaW5nLWVudW0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
ZG9udC1jcmFzaC1wYXJzaW5nLWVudW0uaHRtbAkocmV2aXNpb24gMjQ2MzI2KQorKysgTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDEwICs3NCwxMCBAQCBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKICAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIxID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVz
Y3JpcHRvcik7CiAgICAgY29uc3QgdmVydGV4QnVmZmVyMUFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyMS5tYXBXcml0ZUFzeW5jKCk7CiAgICAgY29uc3QgdmVydGV4QnVmZmVyMUZsb2F0
MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMUFycmF5QnVmZmVyKTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvclswXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMURlc2Ny
aXB0b3JbMV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzJdID0gMTsKLSAgICB2
ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvclszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0MzJB
cnJheVswXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsxXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsyXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0
MzJBcnJheVszXSA9IDE7CiAgICAgdmVydGV4QnVmZmVyMS51bm1hcCgpOwogCiAgICAgY29uc3Qg
cmVzb3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEV9OwpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLmh0bWwJKHJldmlzaW9uIDI0NjMyNikKKysr
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMCAr
NjksMTAgQEAgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICAgY29uc3QgdmVydGV4QnVmZmVy
MSA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyMURlc2NyaXB0b3IpOwogICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjEubWFwV3Jp
dGVBc3luYygpOwogICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXkgPSBuZXcgRmxv
YXQzMkFycmF5KHZlcnRleEJ1ZmZlcjFBcnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMURl
c2NyaXB0b3JbMF0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzFdID0gMTsKLSAg
ICB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvclsyXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMURlc2Ny
aXB0b3JbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMF0gPSAxOworICAg
IHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9h
dDMyQXJyYXlbMl0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbM10gPSAxOwog
ICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAoKTsKIAogICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKSW5kZXg6
IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWFic3RyYWN0LWx2YWx1
ZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0
eXJlc29sdmVyL2FuZGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWFic3RyYWN0
LWx2YWx1ZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBp
ZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0Pgor
YXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29u
dGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0
LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0
ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWFi
c3RyYWN0LWx2YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9w
ZXJ0eXJlc29sdmVyL2FuZGVyLWFic3RyYWN0LWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWFic3RyYWN0LWx2YWx1
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lk
dGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNv
dXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0
dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitz
dHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCit0aHJlYWQgZmxvYXQqIG9wZXJhdG9yJi55
KHRocmVhZCBGb28qIGYpIHsKKyAgICByZXR1cm4gJmYtPng7Cit9CisKK3N0cnVjdCBCYXIgewor
ICAgIEZvbyB6OworfQorCitGb28gb3BlcmF0b3IudyhCYXIgYikgeworICAgIHJldHVybiBiLno7
Cit9CisKK0JhciBvcGVyYXRvci53PShCYXIgYiwgRm9vIGEpIHsKKyAgICBiLnogPSBhOworICAg
IHJldHVybiBiOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1Rh
cmdldCAwIHsKKyAgICBCYXIgYjsKKyAgICBiLncueSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0
KGIudy55LCBiLncueSwgYi53LnksIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQo
KSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0
ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsK
KworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2Nv
ZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdl
ID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07Cisg
ICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2lu
dDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJp
YW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6
ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAg
ICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1h
dDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07
IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0g
bnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBm
b3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmli
dXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAg
IGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0
b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0
ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5w
dXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXpl
OiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3
IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEx
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRD
b250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwg
Zm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29u
ZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRl
eHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNv
bnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9
CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNv
bG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZl
VGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29s
b3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAg
IGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3Rl
bmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVu
Y29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQ
YXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVu
ZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNo
KCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL2FuZGVyLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1leHBlY3RlZC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAw
KTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2Fu
ZGVyLWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1ZS0zLWxldmVscy1leHBl
Y3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rp
b24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsK
KyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAs
IDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29u
dGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1ZS0zLWxldmVs
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVy
L2FuZGVyLWx2YWx1ZS0zLWxldmVscy5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1ZS0zLWxldmVscy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsK
KyAgICBmbG9hdCB4OworfQorCit0aHJlYWQgZmxvYXQqIG9wZXJhdG9yJi55KHRocmVhZCBGb28q
IGYpIHsKKyAgICByZXR1cm4gJmYtPng7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6Owor
fQorCit0aHJlYWQgRm9vKiBvcGVyYXRvciYudyh0aHJlYWQgQmFyKiBiKSB7CisgICAgcmV0dXJu
ICZiLT56OworfQorCitzdHJ1Y3QgQmF6IHsKKyAgICBCYXIgcDsKK30KKwordGhyZWFkIEJhciog
b3BlcmF0b3ImLnEodGhyZWFkIEJheiogYikgeworICAgIHJldHVybiAmYi0+cDsKK30KKworZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmF6IGI7
CisgICAgYi5xLncueSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGIucS53LnksIGIucS53Lnks
IGIucS53LnksIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29u
c3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBj
b25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0
IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNv
dXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJh
Z21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50
U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAi
OworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxN
b2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
ckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5v
cm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9y
V3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAK
KyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9h
dDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0
cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4
U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3Rh
dGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNv
dW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRF
WCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUi
KTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdy
YTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENo
YWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2Fw
Q2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9
IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRF
bmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3Qg
cmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVu
dHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxs
LCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRl
clBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5S
ZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVy
dGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAg
ICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2
aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2
YWx1ZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9w
ZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1ZS1leHBlY3Rl
ZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24g
c3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAg
ICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAs
IDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4
dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1ZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWx2YWx1
ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL2FuZGVyLWx2YWx1ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0
NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBv
c2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCit0aHJlYWQgZmxv
YXQqIG9wZXJhdG9yJi55KHRocmVhZCBGb28qIGYpIHsKKyAgICByZXR1cm4gJmYtPng7Cit9CisK
K3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCit0aHJlYWQgRm9vKiBvcGVyYXRvciYudyh0
aHJlYWQgQmFyKiBiKSB7CisgICAgcmV0dXJuICZiLT56OworfQorCitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBCYXIgYjsKKyAgICBiLncueSA9
IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGIudy55LCBiLncueSwgYi53LnksIDEuMCk7Cit9Citg
OworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5h
dmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBh
ZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3Qg
cHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6
YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNv
bnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xv
ckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNv
bnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUw
ID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0
IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZl
cnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2Us
IHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0
aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5k
ZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2
ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZl
ciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4
QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXIuaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3Zl
cnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkg
OiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsK
KyAgICBmbG9hdCB4OworfQorCit0aHJlYWQgZmxvYXQqIG9wZXJhdG9yJi55KHRocmVhZCBGb28q
IGYpIHsKKyAgICByZXR1cm4gJmYtPng7Cit9CisKK0ZvbyBnZW5lcmF0ZUZvbygpIHsKKyAgICBG
b28gZjsKKyAgICBmLnggPSAxLjA7CisgICAgcmV0dXJuIGY7Cit9CisKK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoZ2Vu
ZXJhdGVGb28oKS55LCBnZW5lcmF0ZUZvbygpLnksIGdlbmVyYXRlRm9vKCkueSwgMS4wKTsKK30K
K2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQg
bmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0
IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25z
dCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVy
aXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAg
Y29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBj
b25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNv
bG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAg
Y29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0
ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlu
cHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFn
ZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRl
cHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJl
bmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVO
VCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVm
ZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5
QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAg
IGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
bG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvZ2V0dGVyLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvZ2V0dGVyLWV4cGVj
dGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVz
b2x2ZXIvZ2V0dGVyLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5n
ZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNv
bnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0g
IndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvZ2V0
dGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvZ2V0dGVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3Bl
cnR5cmVzb2x2ZXIvZ2V0dGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDIgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4g
cG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9w
ZXJhdG9yLnkoRm9vIGYpIHsKKyAgICByZXR1cm4gZi54OworfQorCitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZjsKKyAgICBmLnggPSAx
LjA7CisgICAgcmV0dXJuIGZsb2F0NChmLnksIGYueSwgZi55LCAxLjApOworfQorYDsKK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3Iu
Z3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5y
ZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZl
cnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExh
eW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBl
bGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRp
dmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2ls
U3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91
dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxp
bmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVm
ZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0s
IFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3Rh
cnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3Rl
ZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVy
L2luZGV4ZXItYW5kZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1h
YnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFz
LmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAg
Y29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUg
PSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30K
K3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9p
bmRleGVyLWFuZGVyLWFic3RyYWN0LWx2YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItYWJzdHJhY3QtbHZhbHVl
Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvaW5kZXhlci1hbmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZl
cnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24g
eworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsK
K30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmLCB1aW50IGluZGV4
KSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30K
KworRm9vIG9wZXJhdG9yW10oQmFyIGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gYi56Owor
fQorCitCYXIgb3BlcmF0b3JbXT0oQmFyIGIsIHVpbnQgaW5kZXgsIEZvbyBhKSB7CisgICAgYi56
ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYlsyXVszXSA9IDEuMDsKKyAgICBy
ZXR1cm4gZmxvYXQ0KGJbMl1bM10sIGJbMl1bM10sIGJbMl1bM10sIDEuMCk7Cit9CitgOworYXN5
bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRv
ci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVy
LnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVh
dGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAg
IGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAi
dmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0
aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25T
dGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFs
cGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29s
b3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5k
LCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRl
cHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3No
YWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7
c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0
cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlu
cHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBp
cGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1p
dGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5j
aWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5
b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBl
bGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVy
RGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICog
NCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklU
RX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhC
dWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3
YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsy
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEy
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29u
dGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNj
cmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBD
aGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOwor
ICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsK
KyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVs
dFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1h
bmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6
IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRl
eHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6
ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFj
aG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0
YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NF
bmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlw
dG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVy
XSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29t
bWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21t
YW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBz
dGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVy
LWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3Bl
cnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4K
Kzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9j
YW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJi
bHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAw
LCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0
eXJlc29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1h
bmRlci1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS0zLWxl
dmVscy1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5
bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4
dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZp
bGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7
CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5k
ZXItbHZhbHVlLTMtbGV2ZWxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUtMy1sZXZlbHMuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVy
LWFuZGVyLWx2YWx1ZS0zLWxldmVscy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0
dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCit0aHJl
YWQgZmxvYXQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGYsIHVpbnQgaW5kZXgpIHsKKyAgICBy
ZXR1cm4gJmYtPng7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCit0aHJlYWQg
Rm9vKiBvcGVyYXRvciZbXSh0aHJlYWQgQmFyKiBiLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJu
ICZiLT56OworfQorCitzdHJ1Y3QgQmF6IHsKKyAgICBCYXIgcDsKK30KKwordGhyZWFkIEJhciog
b3BlcmF0b3ImW10odGhyZWFkIEJheiogYiwgdWludCBpbmRleCkgeworICAgIHJldHVybiAmYi0+
cDsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7
CisgICAgQmF6IGI7CisgICAgYlsxXVsyXVszXSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGJb
MV1bMl1bM10sIGJbMV1bMl1bM10sIGJbMV1bMl1bM10sIDEuMCk7Cit9CitgOworYXN5bmMgZnVu
Y3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUu
cmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVl
c3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFk
ZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0
IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4
U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9w
b2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9
IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxl
bmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0
ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0
ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3Rl
bmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxv
Y2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRl
OiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtp
bnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307
CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0
czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5l
TGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRv
cG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0
ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3Jp
cHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZl
cnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9y
ID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9
IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNv
bnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBj
b25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXco
KTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9Owor
ICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVW
aWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9y
ZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVu
dHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVy
ID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsK
KyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBd
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVu
Y29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVm
ZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
d2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9w
cm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRl
ci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS1leHBlY3RlZC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAw
KTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRl
ci1sdmFsdWUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVy
dGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7
CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4Owor
fQorCit0aHJlYWQgZmxvYXQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGYsIHVpbnQgaW5kZXgp
IHsKKyAgICByZXR1cm4gJmYtPng7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQor
Cit0aHJlYWQgRm9vKiBvcGVyYXRvciZbXSh0aHJlYWQgQmFyKiBiLCB1aW50IGluZGV4KSB7Cisg
ICAgcmV0dXJuICZiLT56OworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6
IFNWX1RhcmdldCAwIHsKKyAgICBCYXIgYjsKKyAgICBiWzFdWzJdID0gMS4wOworICAgIHJldHVy
biBmbG9hdDQoYlsxXVsyXSwgYlsxXVsyXSwgYlsxXVsyXSwgMS4wKTsKK30KK2A7Cithc3luYyBm
dW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdw
dS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVx
dWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZl
VG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0
YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9
OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBb
MF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5k
RW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRC
dWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXIuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFu
ZGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisK
K3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCogb3BlcmF0b3Im
W10odGhyZWFkIEZvbyogZiwgdWludCBpbmRleCkgeworICAgIHJldHVybiAmZi0+eDsKK30KKwor
Rm9vIGdlbmVyYXRlRm9vKCkgeworICAgIEZvbyBmOworICAgIGYueCA9IDEuMDsKKyAgICByZXR1
cm4gZjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQg
MCB7CisgICAgcmV0dXJuIGZsb2F0NChnZW5lcmF0ZUZvbygpWzBdLCBnZW5lcmF0ZUZvbygpWzFd
LCBnZW5lcmF0ZUZvbygpWzJdLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVy
KCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisK
KyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAg
IGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFu
Z2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAi
Y3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAg
Y29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6
ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAv
LyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51
bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9y
bWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0
ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBj
b25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3Qg
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9y
ID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVy
aXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0
LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVu
ZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFw
V3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBG
bG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
NF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAg
IHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29u
dGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZv
cm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZp
Z3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0
dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4
dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25z
dCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQor
ICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xv
ckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRh
cmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9y
OiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBj
b25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5j
aWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNv
ZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQ
YXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgp
OworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
K30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZl
ci9pbmRleGVyLWdldHRlci1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItZ2V0dGVyLWV4cGVjdGVkLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhl
ci1nZXR0ZXItZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENv
bnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4
dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hp
dGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVy
LWdldHRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJl
c29sdmVyL2luZGV4ZXItZ2V0dGVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
d2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1nZXR0ZXIuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxv
YXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9z
aXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxv
YXQgeDsKK30KKworZmxvYXQgb3BlcmF0b3JbXShGb28gZiwgdWludCBpbmRleCkgeworICAgIHJl
dHVybiBmbG9hdChpbmRleCk7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigp
IDogU1ZfVGFyZ2V0IDAgeworICAgIEZvbyBmOworICAgIHJldHVybiBmbG9hdDQoZlsxXSwgZlsx
XSwgZlsxXSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAor
ICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRy
aWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4
SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhT
dGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0
ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291
bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
ID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9
IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIp
OworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3Jh
OHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hh
aW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBD
aGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0g
b3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVu
Y29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCBy
ZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50
cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGws
IGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Cisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVy
UGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJl
bmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNl
dFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0
ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAg
IGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZp
Y2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1z
ZXR0ZXItYWJzdHJhY3QtbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJz
dHJhY3QtbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3Qt
bHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZh
cy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIv
aW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLTMtbGV2ZWxzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJz
dHJhY3QtbHZhbHVlLTMtbGV2ZWxzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
d2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLTMt
bGV2ZWxzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFz
IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hh
ZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9u
IDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9
CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yW10oRm9v
IGYsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gZi54OworfQorCitGb28gb3BlcmF0b3JbXT0o
Rm9vIGYsIHVpbnQgaW5kZXgsIGZsb2F0IHgpIHsKKyAgICBmLnggPSB4OworICAgIHJldHVybiBm
OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKworRm9vIG9wZXJhdG9yW10oQmFy
IGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gYi56OworfQorCitCYXIgb3BlcmF0b3JbXT0o
QmFyIGIsIHVpbnQgaW5kZXgsIEZvbyBhKSB7CisgICAgYi56ID0gYTsKKyAgICByZXR1cm4gYjsK
K30KKworc3RydWN0IEJheiB7CisgICAgQmFyIHA7Cit9CisKK0JhciBvcGVyYXRvcltdKEJheiBi
LCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuIGIucDsKK30KKworQmF6IG9wZXJhdG9yW109KEJh
eiBiLCB1aW50IGluZGV4LCBCYXIgYSkgeworICAgIGIucCA9IGE7CisgICAgcmV0dXJuIGI7Cit9
CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAg
IEJheiBiOworICAgIGJbMl1bM11bNF0gPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiWzJdWzNd
WzRdLCBiWzJdWzNdWzRdLCBiWzJdWzNdWzRdLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9u
IHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVl
c3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2
aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9k
dWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0
ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRl
ciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVu
dHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5
ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJv
bnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0g
W3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNr
OiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxT
dGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlv
bjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYs
IGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQw
XTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisg
ICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtd
fTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91
dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9n
eSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZl
cnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3Ig
PSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3Jp
cHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhC
dWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0g
PSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52
YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtk
ZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250
ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBv
dXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisK
KyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcigp
OyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBj
b25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywg
cmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBj
bGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVs
bDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRl
clBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5j
b2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVy
LmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0p
OworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlm
eURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVy
LXNldHRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1hYnN0cmFj
dC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENv
bnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4
dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hp
dGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVy
LXNldHRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9p
bmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewor
ICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30K
KworZmxvYXQgb3BlcmF0b3JbXShGb28gZiwgdWludCBpbmRleCkgeworICAgIHJldHVybiBmLng7
Cit9CisKK0ZvbyBvcGVyYXRvcltdPShGb28gZiwgdWludCBpbmRleCwgZmxvYXQgeCkgeworICAg
IGYueCA9IHg7CisgICAgcmV0dXJuIGY7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6Owor
fQorCitGb28gb3BlcmF0b3JbXShCYXIgYiwgdWludCBpbmRleCkgeworICAgIHJldHVybiBiLno7
Cit9CisKK0JhciBvcGVyYXRvcltdPShCYXIgYiwgdWludCBpbmRleCwgRm9vIGEpIHsKKyAgICBi
LnogPSBhOworICAgIHJldHVybiBiOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFk
ZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBCYXIgYjsKKyAgICBiWzJdWzNdID0gMS4wOworICAg
IHJldHVybiBmbG9hdDQoYlsyXVszXSwgYlsyXVszXSwgYlsyXVszXSwgMS4wKTsKK30KK2A7Cith
c3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdh
dG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0
ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNy
ZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7Cisg
ICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmlt
aXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlv
blN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3Qg
YWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBj
b2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxl
bmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3Qg
ZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7
c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9
IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5w
dXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczog
aW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3Jv
dXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRl
UGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJp
bWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3Rl
bmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVM
YXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBp
cGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQg
KiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dS
SVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRl
eEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0g
YXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVy
KTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBj
b250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRl
c2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dh
cENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7
CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgp
OworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZh
dWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29t
bWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwg
YTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0
VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVP
cDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JB
dHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFz
c0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2Ny
aXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5l
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZm
ZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBj
b21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2Nv
bW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIs
IHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
d2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItZXhwZWN0ZWQuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNl
dHRlci1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9w
cm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3Qg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNv
bnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAw
LCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0
ZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2Vi
Z3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAi
IGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgp
IHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRl
eHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0
MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItbHZhbHVlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1z
ZXR0ZXItbHZhbHVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItbHZhbHVlLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0
NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0
aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0
IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yW10oRm9vIGYsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1
cm4gZi54OworfQorCitGb28gb3BlcmF0b3JbXT0oRm9vIGYsIHVpbnQgaW5kZXgsIGZsb2F0IHgp
IHsKKyAgICBmLnggPSB4OworICAgIHJldHVybiBmOworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBG
b28gejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0b3ImW10odGhyZWFkIEJhciogYiwgdWludCBp
bmRleCkgeworICAgIHJldHVybiAmYi0+ejsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50
U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYlsyXVszXSA9IDEuMDsK
KyAgICByZXR1cm4gZmxvYXQ0KGJbMl1bM10sIGJbMl1bM10sIGJbMl1bM10sIDEuMCk7Cit9Citg
OworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5h
dmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBh
ZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmlj
ZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0p
OworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBv
aW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6
IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3Qg
cHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6
YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNv
bnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29u
c3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xv
ckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNv
bnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUw
ID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1
dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0
IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZl
cnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7Ymlu
ZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2Us
IHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0
aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVs
aW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5k
ZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4
QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQg
KiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2
ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZl
ciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hh
aW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0
IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0
b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1
cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRl
RGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0
ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6
IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91
dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0
b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNp
bEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2Nv
bG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRl
clBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NE
ZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBl
bGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4
QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVy
ID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0
KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXIu
aHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZl
ci9pbmRleGVyLXNldHRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0
NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBv
c2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCit0aHJlYWQgZmxv
YXQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGYsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4g
JmYtPng7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCitGb28gb3BlcmF0b3Jb
XShCYXIgYiwgdWludCBpbmRleCkgeworICAgIHJldHVybiBiLno7Cit9CisKK0JhciBvcGVyYXRv
cltdPShCYXIgYiwgdWludCBpbmRleCwgRm9vIGEpIHsKKyAgICBiLnogPSBhOworICAgIHJldHVy
biBiOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAw
IHsKKyAgICBCYXIgYjsKKyAgICBGb28gZm9vOworICAgIGZvby54ID0gMS4wOworICAgIGJbMV0g
PSBmb287CisgICAgZm9vID0gYlsxXTsKKyAgICByZXR1cm4gZmxvYXQ0KGZvby54LCBmb28ueCwg
Zm9vLngsIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3Qg
YWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25z
dCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
fTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmli
dXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElu
cHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
MF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVy
LnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsK
KyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1
bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWlu
KHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hh
aW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91
dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVk
ID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMg
PSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBs
b2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAg
IGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBh
c3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9
OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5k
ZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQ
aXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4
QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5k
cmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0
cmFjdC1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLTMtbGV2
ZWxzLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQw
MCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5m
aWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1s
ZXZlbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLTMtbGV2ZWxzLmh0bWwJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2
YWx1ZS0zLWxldmVscy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Nv
bnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBw
b3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0
aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCitmbG9hdCBvcGVyYXRv
ci55KEZvbyBmKSB7CisgICAgcmV0dXJuIGYueDsKK30KKworRm9vIG9wZXJhdG9yLnk9KEZvbyBm
LCBmbG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICByZXR1cm4gZjsKK30KKworc3RydWN0IEJh
ciB7CisgICAgRm9vIHo7Cit9CisKK0ZvbyBvcGVyYXRvci53KEJhciBiKSB7CisgICAgcmV0dXJu
IGIuejsKK30KKworQmFyIG9wZXJhdG9yLnc9KEJhciBiLCBGb28gYSkgeworICAgIGIueiA9IGE7
CisgICAgcmV0dXJuIGI7Cit9CisKK3N0cnVjdCBCYXogeworICAgIEJhciBwOworfQorCitCYXIg
b3BlcmF0b3IucShCYXogYikgeworICAgIHJldHVybiBiLnA7Cit9CisKK0JheiBvcGVyYXRvci5x
PShCYXogYiwgQmFyIGEpIHsKKyAgICBiLnAgPSBhOworICAgIHJldHVybiBiOworfQorCitmcmFn
bWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBCYXogYjsK
KyAgICBiLnEudy55ID0gMS4wOworICAgIHJldHVybiBmbG9hdDQoYi5xLncueSwgYi5xLncueSwg
Yi5xLncueSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFn
bWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRT
aGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7
CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1v
ZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
QmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9y
bSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JX
cml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAor
ICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0
NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRy
aWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4
SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhT
dGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0
ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291
bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
ID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJh
eS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVY
IHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBk
ZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMo
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5
KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9
IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIp
OworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3Jh
OHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hh
aW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBD
aGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0g
b3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVu
Y29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCBy
ZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50
cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGws
IGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07Cisg
ICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVy
UGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJl
bmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNl
dFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0
ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAg
IGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZp
Y2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFi
c3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9z
ZXR0ZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9
IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUi
OworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmls
bFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIw
MCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVz
b2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0
ZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0
PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxv
YXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4g
cG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9w
ZXJhdG9yLnkoRm9vIGYpIHsKKyAgICByZXR1cm4gZi54OworfQorCitGb28gb3BlcmF0b3IueT0o
Rm9vIGYsIGZsb2F0IHgpIHsKKyAgICBmLnggPSB4OworICAgIHJldHVybiBmOworfQorCitzdHJ1
Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKworRm9vIG9wZXJhdG9yLncoQmFyIGIpIHsKKyAgICBy
ZXR1cm4gYi56OworfQorCitCYXIgb3BlcmF0b3Iudz0oQmFyIGIsIEZvbyBhKSB7CisgICAgYi56
ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYi53LnkgPSAxLjA7CisgICAgcmV0
dXJuIGZsb2F0NChiLncueSwgYi53LnksIGIudy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJl
cXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0
RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2
ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTog
MTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5w
dXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0
ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
OF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBj
YW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9
IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBj
b250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29u
c3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7
CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rl
cigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAg
ICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmll
dywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUi
LCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0g
bnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRz
LCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJv
cGVydHlyZXNvbHZlci9zZXR0ZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWx2YWx1ZS1leHBlY3Rl
ZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL3NldHRlci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgor
PHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2Fu
dmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7Cisg
ICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5
bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsK
K30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZl
ci9zZXR0ZXItbHZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1sdmFsdWUuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0
ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDog
U1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7Cisg
ICAgZmxvYXQgeDsKK30KKworZmxvYXQgb3BlcmF0b3IueShGb28gZikgeworICAgIHJldHVybiBm
Lng7Cit9CisKK0ZvbyBvcGVyYXRvci55PShGb28gZiwgZmxvYXQgeCkgeworICAgIGYueCA9IHg7
CisgICAgcmV0dXJuIGY7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCit0aHJl
YWQgRm9vKiBvcGVyYXRvciYudyh0aHJlYWQgQmFyKiBiKSB7CisgICAgcmV0dXJuICZiLT56Owor
fQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAg
ICBCYXIgYjsKKyAgICBiLncueSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGIudy55LCBiLncu
eSwgYi53LnksIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29u
c3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBj
b25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0
IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNv
dXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJh
Z21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50
U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAi
OworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxN
b2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xv
ckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5v
cm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9y
V3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAK
KyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9h
dDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0
cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRl
eElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4
U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3Rh
dGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNv
dW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRF
WCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0g
ZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5j
KCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJh
eSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUi
KTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdy
YTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENo
YWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2Fw
Q2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9
IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRF
bmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3Qg
cmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVu
dHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxs
LCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOwor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRl
clBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1l
bnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5S
ZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVy
dGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAg
ICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2
aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371912</attachid>
            <date>2019-06-11 19:20:11 -0700</date>
            <delta_ts>2019-06-12 19:04:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>357412</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIE1vZHVsZXMvd2Vi
c29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU28KIAogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFz
Q29udGV4dC5jcHAKIE1vZHVsZXMvd2ViZ3B1L05hdmlnYXRvckdQVS5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEFTVER1bXBlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRp
YWxpemVWYXJpYWJsZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI0NjMyNikKKysrIFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICsz
MjYsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tbWFuZEJ1CiBwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBhc3NFbmNvZGVyTWV0YWwubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVURldmljZU1ldGFsLm1tCitwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJNZXRhbC5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVF1ZXVlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBE
ZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBPcHRpb25hbDxHUFVCaW5kR3JvdXBEZXNjcmlwdG9yPiBXZWJHUFVC
CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlQnVmZmVyQmluZGluZ1R5cGUoYnVm
ZmVyLCBsYXlvdXRCaW5kaW5nLCBmdW5jdGlvbk5hbWUpKQorICAgICAgICAgICAgaWYgKCF2YWxp
ZGF0ZUJ1ZmZlckJpbmRpbmdUeXBlKGJ1ZmZlciwgbGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRp
bmcsIGZ1bmN0aW9uTmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQVUJpbmRpbmdSZXNvdXJjZT4oR1BV
QnVmZmVyQmluZGluZyB7IG1ha2VSZWYoKmJ1ZmZlciksIGJ1ZmZlckJpbmRpbmcub2Zmc2V0LCBi
dWZmZXJCaW5kaW5nLnNpemUgfSk7CkBAIC0xMTksNyArMTE5LDcgQEAgT3B0aW9uYWw8R1BVQmlu
ZEdyb3VwRGVzY3JpcHRvcj4gV2ViR1BVQgogCiAgICAgICAgIGF1dG8gYmluZGluZ1Jlc291cmNl
ID0gV1RGOjp2aXNpdChiaW5kaW5nUmVzb3VyY2VWaXNpdG9yLCBiaW5kaW5nLnJlc291cmNlKTsK
ICAgICAgICAgaWYgKCFiaW5kaW5nUmVzb3VyY2UpIHsKLSAgICAgICAgICAgIExPRyhXZWJHUFUs
ICIlczogSW52YWxpZCByZXNvdXJjZSBmb3IgYmluZGluZyAldSEiLCBmdW5jdGlvbk5hbWUsIGxh
eW91dEJpbmRpbmcuYmluZGluZyk7CisgICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFs
aWQgcmVzb3VyY2UgZm9yIGJpbmRpbmcgJXUhIiwgZnVuY3Rpb25OYW1lLCBsYXlvdXRCaW5kaW5n
LmV4dGVybmFsQmluZGluZy5iaW5kaW5nKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJl
c3Npb24uaCIKICNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCiAjaW5jbHVkZSAiV0hMU0xE
b3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgogI2luY2x1
ZGUgIldITFNMRm9yTG9vcC5oIgogI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmgiCiAjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgpAQCAtMTE2LDI5ICsxMTcsMjkgQEAg
cHVibGljOgogICAgIH0KIH07CiAKLXN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNv
bnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoTGV4ZXI6OlRva2VuIG9y
aWdpbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJp
bnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsK
LSAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1lbnQuYWRkcmVz
c1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICBhdXRv
IHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4pLCBmaXJzdEFyZ3VtZW50LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVs
ZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCkpOwotICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmln
aW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVy
blR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOworICAg
IHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQu
Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFy
YW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExl
eGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ob3JpZ2luKSwg
aW50cmluc2ljcy51aW50VHlwZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCkpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRv
ciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIAotc3RhdGljIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4cHJl
c3Npb24mIGNhbGxFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3VtZW50LCBj
b25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKExleGVyOjpUb2tlbiBvcmlnaW4s
IEFTVDo6VW5uYW1lZFR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJp
bnNpY3MpCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKLSAgICBhdXRvIHJl
dHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBhdXRvIHJldHVy
blR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG9yaWdpbiksIGlu
dHJpbnNpY3MudWludFR5cGUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92
ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmly
c3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
KTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3IubGVu
Z3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCi1zdGF0aWMgQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihBU1Q6OkNhbGxF
eHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgZmlyc3RBcmd1bWVudCwg
UmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNp
Y3MpCitzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoUmVm
ZXJlbmNlQ29tcGFyYXRvcihMZXhlcjo6VG9rZW4gb3JpZ2luLCBSZXNvbHZpbmdUeXBlJiBmaXJz
dEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwgY29uc3QgSW50cmluc2lj
cyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwotICAg
IGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
Y2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGF1
dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IGZp
cnN0QXJndW1lbnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewog
ICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CiAgICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4g
ewpAQCAtMTQ4LDEzICsxNDksMTMgQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiByZQogICAgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVsbCIuCiAg
ICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODE2MiBUaGlzIGNhbiBwcm9iYWJseSBiZSBnZW5lcmFsaXplZCwgdXNpbmcgdGhlICJw
cmVmZXJyZWQgdHlwZSIgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSBnZW5lcmljIGxpdGVyYWxzCiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgaW50cmluc2ljcy5pbnRUeXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ob3JpZ2luKSwgaW50cmluc2ljcy5pbnRUeXBlKCkp
OwogICAgICAgICB9KSk7CiAgICAgfSkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lv
bi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4oV1RGTW92ZShhcmd1bWVudFR5cGUpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KSk7Ci0gICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlw
ZSksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICBwYXJh
bWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4
ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5cGUtPmNsb25l
KCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRl
cnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpBdHRyaWJ1
dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3Bl
cmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIAogZW51bSBjbGFzcyBBY2NlcHRh
YmlsaXR5IHsKQEAgLTE2Myw5ICsxNjQsOSBAQCBlbnVtIGNsYXNzIEFjY2VwdGFiaWxpdHkgewog
ICAgIE5vCiB9OwogCi1zdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHBy
ZXNzaW9uLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUsIExleGVyOjpUb2tlbiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0IEludHJpbnNp
Y3MmIGludHJpbnNpY3MpCiB7Ci0gICAgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3ImW10iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CisgICAgaWYgKG5hbWUgPT0gIm9wZXJh
dG9yJltdIiAmJiB0eXBlcy5zaXplKCkgPT0gMikgewogICAgICAgICBhdXRvKiBmaXJzdEFyZ3Vt
ZW50QXJyYXlSZWYgPSB0eXBlc1swXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlKiB7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19j
YXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOwpAQCAtMTc5LDggKzE4MCw4IEBA
IHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAgICAgIHJl
dHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZl
KGludHJpbnNpY3MudWludFR5cGUoKSk7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKGZpcnN0
QXJndW1lbnRBcnJheVJlZiAmJiBzZWNvbmRBcmd1bWVudElzVWludCkKLSAgICAgICAgICAgIHJl
dHVybiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKGNhbGxFeHByZXNzaW9uLCAqZmly
c3RBcmd1bWVudEFycmF5UmVmLCBpbnRyaW5zaWNzKTsKLSAgICB9IGVsc2UgaWYgKGNhbGxFeHBy
ZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkgPT0gMSkg
eworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIob3Jp
Z2luLCAqZmlyc3RBcmd1bWVudEFycmF5UmVmLCBpbnRyaW5zaWNzKTsKKyAgICB9IGVsc2UgaWYg
KG5hbWUgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgdHlwZXMuc2l6ZSgpID09IDEpIHsKICAgICAg
ICAgYXV0byogZmlyc3RBcmd1bWVudFJlZmVyZW5jZSA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlw
ZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewogICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gJnVubmFtZWRUeXBlOwpAQCAtMTg5LDggKzE5MCw4
IEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50
UmVmZXJlbmNlKQotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JMZW5ndGgo
Y2FsbEV4cHJlc3Npb24sICpmaXJzdEFyZ3VtZW50UmVmZXJlbmNlLCBpbnRyaW5zaWNzKTsKLSAg
ICB9IGVsc2UgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIgJiYgdHlw
ZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9y
TGVuZ3RoKG9yaWdpbiwgKmZpcnN0QXJndW1lbnRSZWZlcmVuY2UsIGludHJpbnNpY3MpOworICAg
IH0gZWxzZSBpZiAobmFtZSA9PSAib3BlcmF0b3I9PSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsK
ICAgICAgICAgYXV0byBhY2NlcHRhYmlsaXR5ID0gW10oUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5n
VHlwZSkgLT4gQWNjZXB0YWJpbGl0eSB7CiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2aW5nVHlw
ZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
dW5uYW1lZFR5cGUpIC0+IEFjY2VwdGFiaWxpdHkgewogICAgICAgICAgICAgICAgIHJldHVybiBp
czxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5h
bWVkVHlwZSkpID8gQWNjZXB0YWJpbGl0eTo6WWVzIDogQWNjZXB0YWJpbGl0eTo6Tm87CkBAIC0y
MDksNyArMjEwLDcgQEAgc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQog
ICAgICAgICAgICAgfHwgKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAm
JiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUpKQogICAgICAgICAg
ICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihjYWxsRXhwcmVzc2lvbiwgdHlwZXNb
MF0uZ2V0KCksIHR5cGVzWzFdLmdldCgpLCBpbnRyaW5zaWNzKTsKKyAgICAgICAgICAgIHJldHVy
biByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3Iob3JpZ2luLCB0eXBlc1swXS5nZXQoKSwg
dHlwZXNbMV0uZ2V0KCksIGludHJpbnNpY3MpOwogICAgIH0KICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQpAQCAtMzU0LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVy
bG9hZChjb25zdCAKICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7
CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBh
cmd1bWVudFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMu
YXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+Y2xv
bmUoKSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSktPmNsb25lKCkpOwogICAgICAgICBmb3IgKGF1
dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5
cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9h
ZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVm
ZXJlbmNlcyk7CkBAIC00OTEsNiArNDkyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFT
VDo6VGVybmFyeUV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2Fs
bEV4cHJlc3Npb24mKSBvdmVycmlkZTsKIAorICAgIHZvaWQgZmluaXNoVmlzaXRpbmcoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBlKiBhZGRpdGlvbmFsQXJndW1l
bnRUeXBlID0gbnVsbHB0cik7CisKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29s
dmluZ1R5cGU+IG1fdHlwZU1hcDsKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIEFTVDo6
VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3ZlcnRleEVudHJ5UG9pbnRzOwpAQCAtOTY2LDkgKzk2OSwzMiBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlCiAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhl
cjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRk
cmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQorc3RhdGljIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQo
QVNUOjpVbm5hbWVkVHlwZSYgYmFzZVR5cGUsIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFj
ZSkKK3sKKyAgICBhdXRvJiB1bmlmeU5vZGUgPSBiYXNlVHlwZS51bmlmeU5vZGUoKTsKKyAgICBp
ZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmFtZWRU
eXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIHJldHVy
biB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG5hbWVkVHlw
ZS5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihuYW1lZFR5cGUub3JpZ2luKCkpLCBuYW1lZFR5cGUpKSB9OworICAgIH0KKworICAg
IEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAgICBhdXRvJiB1bm5h
bWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisKKyAgICBp
ZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0
dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7CisKKyAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9yaWdpbigpKSwgYWRkcmVzc1Nw
YWNlLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgp
KSB9OworCisgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNU
OjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9yaWdpbigpKSwgYWRkcmVz
c1NwYWNlLCB1bm5hbWVkVHlwZS5jbG9uZSgpKSB9OworfQorCit2b2lkIENoZWNrZXI6OmZpbmlz
aFZpc2l0aW5nKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24sIFJlc29sdmluZ1R5cGUqIGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCiB7Ci0gICAg
YXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGRvdEV4cHJlc3Npb24uYmFzZSgpKTsK
KyAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmJhc2UoKSk7CiAgICAgaWYgKCFiYXNlSW5mbykKICAgICAgICAgcmV0dXJuOwogICAg
IGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29tbWl0KGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsK
QEAgLTk3OSw2NSArMTAwNSwxMDEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJl
c3Npb24mIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldHRlclJldHVyblR5cGUgPSBudWxscHRy
OwogICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5n
VHlwZT4+IGdldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSB9Owot
ICAgICAgICBnZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGRvdEV4cHJl
c3Npb24ucG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKSwgZ2V0dGVyQXJndW1lbnRUeXBlcyk7Ci0g
ICAgICAgIGlmIChnZXR0ZXJGdW5jdGlvbikKKyAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1bWVu
dFR5cGUpCisgICAgICAgICAgICBnZXR0ZXJBcmd1bWVudFR5cGVzLmFwcGVuZCgqYWRkaXRpb25h
bEFyZ3VtZW50VHlwZSk7CisgICAgICAgIGlmICgoZ2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXR0ZXJPdmVy
bG9hZHMoKSwgZ2V0dGVyQXJndW1lbnRUeXBlcykpKQogICAgICAgICAgICAgZ2V0dGVyUmV0dXJu
VHlwZSA9ICZnZXR0ZXJGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0KIAogICAgIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogYW5kZXJGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAgQVNUOjpVbm5hbWVk
VHlwZSogYW5kZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKLSAgICBpZiAoYXV0byBsZWZ0QWRkcmVz
c1NwYWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgewot
ICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFj
ZSwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKLSAgICAgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZGVyQXJndW1lbnRUeXBlcyB7IGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlIH07Ci0gICAgICAgIGFuZGVyRnVuY3Rpb24gPSByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9hZHMoKSwg
YW5kZXJBcmd1bWVudFR5cGVzKTsKLSAgICAgICAgaWYgKGFuZGVyRnVuY3Rpb24pCi0gICAgICAg
ICAgICBhbmRlclJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJG
dW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5k
ZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9
IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgaWYgKGxl
ZnRBZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgaWYgKGF1dG8gYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQgPSBXSExTTDo6YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlw
ZSwgKmxlZnRBZGRyZXNzU3BhY2UpKSB7CisgICAgICAgICAgICBSZXNvbHZpbmdUeXBlIGFyZ3Vt
ZW50VHlwZSA9IHsgV1RGTW92ZSgqYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQpIH07CisgICAg
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYW5k
ZXJBcmd1bWVudFR5cGVzIHsgYXJndW1lbnRUeXBlIH07CisgICAgICAgICAgICBpZiAoYWRkaXRp
b25hbEFyZ3VtZW50VHlwZSkKKyAgICAgICAgICAgICAgICBhbmRlckFyZ3VtZW50VHlwZXMuYXBw
ZW5kKCphZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKKyAgICAgICAgICAgIGlmICgoYW5kZXJGdW5j
dGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5w
b3NzaWJsZUFuZGVyT3ZlcmxvYWRzKCksIGFuZGVyQXJndW1lbnRUeXBlcykpKQorICAgICAgICAg
ICAgICAgIGFuZGVyUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRl
ckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhlIHJldHVybiBvZiBh
bmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgICAgICAgICBlbHNlIGlmIChhdXRv
IG5ld0Z1bmN0aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uYW5kZXJGdW5jdGlvbk5hbWUoKSwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdp
bigpLCBhbmRlckFyZ3VtZW50VHlwZXMsIG1faW50cmluc2ljcykpIHsKKyAgICAgICAgICAgICAg
ICBtX3Byb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5ld0Z1bmN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgYW5kZXJGdW5jdGlvbiA9ICZtX3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMo
KS5sYXN0KCk7CisgICAgICAgICAgICAgICAgYW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5m
b3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogdGhyZWFkQW5kZXJGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAgQVNUOjpVbm5hbWVkVHlwZSog
dGhyZWFkQW5kZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKLSAgICB7Ci0gICAgICAgIGF1dG8gYXJn
dW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2VV
bm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBiYXNl
SW5mby0+cmVzb2x2aW5nVHlwZSB9OwotICAgICAgICB0aHJlYWRBbmRlckZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZGVyT3ZlcmxvYWRz
KCksIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcyk7Ci0gICAgICAgIGlmICh0aHJlYWRBbmRlckZ1
bmN0aW9uKQorICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkID0gV0hMU0w6
OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUsIEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQpKSB7CisgICAgICAgIFJlc29sdmluZ1R5cGUgYXJndW1lbnRUeXBlID0g
eyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNl
VW5uYW1lZFR5cGUtPmdldCgpLmNsb25lKCkpIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBh
cmd1bWVudFR5cGUgfTsKKyAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCisgICAg
ICAgICAgICB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1l
bnRUeXBlKTsKKyAgICAgICAgaWYgKCh0aHJlYWRBbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9h
ZHMoKSwgdGhyZWFkQW5kZXJBcmd1bWVudFR5cGVzKSkpCiAgICAgICAgICAgICB0aHJlYWRBbmRl
clJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odGhyZWFkQW5kZXJGdW5j
dGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJz
IHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgICAgICBlbHNlIGlmIChhdXRvIG5ld0Z1bmN0
aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5k
ZXJGdW5jdGlvbk5hbWUoKSwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpLCB0aHJl
YWRBbmRlckFyZ3VtZW50VHlwZXMsIG1faW50cmluc2ljcykpIHsKKyAgICAgICAgICAgIG1fcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgICAgIHRocmVhZEFu
ZGVyRnVuY3Rpb24gPSAmbV9wcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkubGFz
dCgpOworICAgICAgICAgICAgdGhyZWFkQW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5mb3Jj
ZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICAgICAg
fQogICAgIH0KIAotICAgIGlmICghZ2V0dGVyRnVuY3Rpb24gJiYgIWFuZGVyRnVuY3Rpb24pIHsK
KyAgICBpZiAobGVmdEFkZHJlc3NTcGFjZSAmJiAhYW5kZXJGdW5jdGlvbiAmJiAhZ2V0dGVyRnVu
Y3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoZ2V0dGVyRnVuY3Rpb24gJiYgYW5kZXJGdW5jdGlvbikgeworCisgICAgaWYgKCFsZWZ0
QWRkcmVzc1NwYWNlICYmICF0aHJlYWRBbmRlckZ1bmN0aW9uICYmICFnZXR0ZXJGdW5jdGlvbikg
ewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYg
KHRocmVhZEFuZGVyRnVuY3Rpb24gJiYgZ2V0dGVyRnVuY3Rpb24pIHsKKyAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhbmRlckZ1bmN0aW9uICYm
IHRocmVhZEFuZGVyRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmFuZGVyUmV0dXJuVHlwZSwgKnRocmVh
ZEFuZGVyUmV0dXJuVHlwZSkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldHRlclJldHVy
blR5cGUgPyBnZXR0ZXJSZXR1cm5UeXBlIDogYW5kZXJSZXR1cm5UeXBlOworICAgIGlmIChnZXR0
ZXJGdW5jdGlvbiAmJiBhbmRlckZ1bmN0aW9uICYmICFtYXRjaGVzKCpnZXR0ZXJSZXR1cm5UeXBl
LCAqYW5kZXJSZXR1cm5UeXBlKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGdldHRlckZ1bmN0aW9uICYmIHRocmVhZEFuZGVyRnVuY3Rp
b24gJiYgIW1hdGNoZXMoKmdldHRlclJldHVyblR5cGUsICp0aHJlYWRBbmRlclJldHVyblR5cGUp
KSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1Q6OlVubmFtZWRUeXBlKiBmaWVsZFR5cGUgPSBnZXR0ZXJSZXR1cm5UeXBlID8gZ2V0dGVyUmV0
dXJuVHlwZSA6IGFuZGVyUmV0dXJuVHlwZSA/IGFuZGVyUmV0dXJuVHlwZSA6IHRocmVhZEFuZGVy
UmV0dXJuVHlwZTsKIAogICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0dGVyRnVuY3Rp
b24gPSBudWxscHRyOwogICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldHRlclJldHVyblR5cGUgPSBu
dWxscHRyOwogICAgIHsKICAgICAgICAgUmVzb2x2aW5nVHlwZSBmaWVsZFJlc29sdmluZ1R5cGUo
ZmllbGRUeXBlLT5jbG9uZSgpKTsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IHNldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2
aW5nVHlwZSwgZmllbGRSZXNvbHZpbmdUeXBlIH07Ci0gICAgICAgIHNldHRlckZ1bmN0aW9uID0g
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZVNldHRlck92ZXJs
b2FkcygpLCBzZXR0ZXJBcmd1bWVudFR5cGVzKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHNldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5m
by0+cmVzb2x2aW5nVHlwZSB9OworICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50VHlwZSkK
KyAgICAgICAgICAgIHNldHRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1l
bnRUeXBlKTsKKyAgICAgICAgc2V0dGVyQXJndW1lbnRUeXBlcy5hcHBlbmQoZmllbGRSZXNvbHZp
bmdUeXBlKTsKKyAgICAgICAgc2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9h
ZChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVTZXR0ZXJPdmVybG9hZHMoKSwgc2V0
dGVyQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIGlmIChzZXR0ZXJGdW5jdGlvbikKICAgICAgICAg
ICAgIHNldHRlclJldHVyblR5cGUgPSAmc2V0dGVyRnVuY3Rpb24tPnR5cGUoKTsKICAgICB9CiAK
LSAgICBpZiAoc2V0dGVyRnVuY3Rpb24gJiYgYW5kZXJGdW5jdGlvbikgeworICAgIGlmIChzZXR0
ZXJGdW5jdGlvbiAmJiAhZ2V0dGVyRnVuY3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRvdEV4cHJlc3Npb24uc2V0R2V0dGVyRnVuY3Rp
b24oZ2V0dGVyRnVuY3Rpb24pOwotICAgIGRvdEV4cHJlc3Npb24uc2V0QW5kZXJGdW5jdGlvbihh
bmRlckZ1bmN0aW9uKTsKLSAgICBkb3RFeHByZXNzaW9uLnNldFRocmVhZEFuZGVyRnVuY3Rpb24o
dGhyZWFkQW5kZXJGdW5jdGlvbik7Ci0gICAgZG90RXhwcmVzc2lvbi5zZXRTZXR0ZXJGdW5jdGlv
bihzZXR0ZXJGdW5jdGlvbik7CisgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEdldHRl
ckZ1bmN0aW9uKGdldHRlckZ1bmN0aW9uKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
c2V0QW5kZXJGdW5jdGlvbihhbmRlckZ1bmN0aW9uKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uc2V0VGhyZWFkQW5kZXJGdW5jdGlvbih0aHJlYWRBbmRlckZ1bmN0aW9uKTsKKyAgICBw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0U2V0dGVyRnVuY3Rpb24oc2V0dGVyRnVuY3Rpb24p
OwogCiAgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRW
YWx1ZSgpOwogICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFu
bm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CkBAIC0xMDQ1LDE0ICsxMTA3LDIyIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiAKICAgICAgICAgICAgIHR5cGVB
bm5vdGF0aW9uID0gQVNUOjpMZWZ0VmFsdWUgeyAqbGVmdEFkZHJlc3NTcGFjZSB9OwogICAgICAg
ICBlbHNlIGlmIChzZXR0ZXJGdW5jdGlvbikKICAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0g
QVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOwotICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZvLT50eXBl
QW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSAmJiAoc2V0dGVyRnVuY3Rpb24gfHwgYW5kZXJGdW5j
dGlvbikpCisgICAgfSBlbHNlIGlmICghYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRW
YWx1ZSgpICYmIChzZXR0ZXJGdW5jdGlvbiB8fCB0aHJlYWRBbmRlckZ1bmN0aW9uKSkKICAgICAg
ICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7Ci0gICAgYXNzaWdu
VHlwZShkb3RFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90
YXRpb24pKTsKKyAgICBhc3NpZ25UeXBlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgZmllbGRU
eXBlLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKLXZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjMgSW1wbGVtZW50IHRoaXMuCisg
ICAgZmluaXNoVmlzaXRpbmcoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIGJh
c2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lv
bigpKTsKKyAgICBpZiAoIWJhc2VJbmZvKQorICAgICAgICByZXR1cm47CisgICAgZmluaXNoVmlz
aXRpbmcoaW5kZXhFeHByZXNzaW9uLCAmYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJl
bmNlKQpAQCAtMTM2Miw3ICsxNDMyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNvbW1h
RXhwcmVzc2lvbgogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBs
YXN0SW5mbyA9IGdldEluZm8oY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZv
cndhcmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJ
bmZvLT50eXBlQW5ub3RhdGlvbik7CisgICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBs
YXN0SW5mby0+cmVzb2x2aW5nVHlwZSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpU
ZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCkBAIC0xMzk5LDcgKzE0NjksNyBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mCiAgICAgQVNTRVJUKGNh
bGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkKCpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlwZXMsIGNh
bGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpOwogICAgIGlmICghZnVuY3Rpb24pIHsKLSAg
ICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKGNhbGxF
eHByZXNzaW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICBpZiAoYXV0byBuZXdG
dW5jdGlvbiA9IHJlc29sdmVCeUluc3RhbnRpYXRpb24oY2FsbEV4cHJlc3Npb24ubmFtZSgpLCBj
YWxsRXhwcmVzc2lvbi5vcmlnaW4oKSwgdHlwZXMsIG1faW50cmluc2ljcykpIHsKICAgICAgICAg
ICAgIG1fcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKICAgICAgICAgICAg
IGZ1bmN0aW9uID0gJm1fcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxhc3Qo
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcAko
cmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyAr
MTc1LDggQEAgT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaQogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgR2F0aGVyZXIgb3V0cHV0R2F0
aGVyZXIoaW50cmluc2ljcywgZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgPyAmKmZ1bmN0
aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpIDogbnVsbHB0cik7Ci0gICAgb3V0cHV0R2F0aGVyZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGlmICgq
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkgIT0gQVNUOjpFbnRyeVBvaW50VHlw
ZTo6Q29tcHV0ZSkKKyAgICAgICAgb3V0cHV0R2F0aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0KGZ1
bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgIGlmIChvdXRwdXRHYXRoZXJlci5lcnJvcigp
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaAkocmV2aXNp
b24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAgY2xhc3MgVW5uYW1l
ZFR5cGU7CiBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmKTsKIGJvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYsIGNvbnN0
IEFTVDo6TmFtZWRUeXBlJik7CiBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYs
IGNvbnN0IEFTVDo6TmFtZWRUeXBlJik7Ci0vLyBGSVhNRTogSXMgYW55b25lIGFjdHVhbGx5IHVz
aW5nIHRoZSByZXR1cm4gdHlwZSBoZXJlPwogT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxl
VHlwZSYpOwogT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENv
bW1pdChBU1Q6Ok5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKIE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxl
VHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQaXBlbGluZURlc2NyaXB0
b3IuaAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDE4
ICsxMTQsMjggQEAgZW51bSBjbGFzcyBTaGFkZXJTdGFnZSA6IHVpbnQ4X3QgewogICAgIENvbXB1
dGUgPSAxIDw8IDIKIH07CiAKLWVudW0gY2xhc3MgQmluZGluZ1R5cGUgOiB1aW50OF90IHsKLSAg
ICBVbmlmb3JtQnVmZmVyLAotICAgIFNhbXBsZXIsCi0gICAgVGV4dHVyZSwKLSAgICBTdG9yYWdl
QnVmZmVyLAotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTY4IEFkZCB0aGUgZHluYW1pYyB0eXBlcworc3RydWN0IFVuaWZvcm1CdWZmZXJC
aW5kaW5nIHsKKyAgICB1bnNpZ25lZCBsZW5ndGhOYW1lOwogfTsKIAorc3RydWN0IFNhbXBsZXJC
aW5kaW5nIHsKK307CisKK3N0cnVjdCBUZXh0dXJlQmluZGluZyB7Cit9OworCitzdHJ1Y3QgU3Rv
cmFnZUJ1ZmZlckJpbmRpbmcgeworICAgIHVuc2lnbmVkIGxlbmd0aE5hbWU7Cit9OworCisvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OCBBZGQg
dGhlIGR5bmFtaWMgdHlwZXMKKwogc3RydWN0IEJpbmRpbmcgeworICAgIHVzaW5nIEJpbmRpbmdE
ZXRhaWxzID0gVmFyaWFudDxVbmlmb3JtQnVmZmVyQmluZGluZywgU2FtcGxlckJpbmRpbmcsIFRl
eHR1cmVCaW5kaW5nLCBTdG9yYWdlQnVmZmVyQmluZGluZz47CiAgICAgT3B0aW9uU2V0PFNoYWRl
clN0YWdlPiB2aXNpYmlsaXR5OwotICAgIEJpbmRpbmdUeXBlIGJpbmRpbmdUeXBlOwotICAgIHVu
c2lnbmVkIG5hbWU7CisgICAgQmluZGluZ0RldGFpbHMgYmluZGluZzsKKyAgICB1bnNpZ25lZCBp
bnRlcm5hbE5hbWU7CisgICAgdW5zaWduZWQgZXh0ZXJuYWxOYW1lOwogfTsKIAogc3RydWN0IEJp
bmRHcm91cCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXSExTTEF1dG9Jbml0aWFsaXplVmFyaWFibGVz
LmgiCiAjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IldITFNMQ2hlY2tlci5oIgorI2luY2x1ZGUgIldITFNMQ29tcHV0ZURpbWVuc2lvbnMuaCIKICNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xIaWdo
Wm9tYmllRmluZGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaCIKQEAg
LTU4LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogc3RhdGljIGNvbnN0ZXhwciBib29s
IGR1bXBBU1RCZWZvcmVFYWNoUGFzcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1
bXBBU1RBZnRlclBhcnNpbmcgPSBmYWxzZTsKLXN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNU
QXRFbmQgPSBmYWxzZTsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQXRFbmQgPSB0cnVl
Owogc3RhdGljIGNvbnN0ZXhwciBib29sIGFsd2F5c0R1bXBQYXNzRmFpbHVyZXMgPSBmYWxzZTsK
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wUGFzc0ZhaWx1cmUgPSBkdW1wQVNUQmVmb3JlRWFj
aFBhc3MgfHwgZHVtcEFTVEFmdGVyUGFyc2luZyB8fCBkdW1wQVNUQXRFbmQgfHwgYWx3YXlzRHVt
cFBhc3NGYWlsdXJlczsKIApAQCAtMTcwLDEyICsxNzEsMTYgQEAgT3B0aW9uYWw8Q29tcHV0ZVBy
ZXBhcmVSZXN1bHQ+IHByZXBhcmUoUwogICAgIGF1dG8gbWF0Y2hlZFNlbWFudGljcyA9IG1hdGNo
U2VtYW50aWNzKCpwcm9ncmFtLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKICAgICBpZiAo
IW1hdGNoZWRTZW1hbnRpY3MpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0
byBjb21wdXRlRGltZW5zaW9ucyA9IFdITFNMOjpjb21wdXRlRGltZW5zaW9ucygqcHJvZ3JhbSwg
Km1hdGNoZWRTZW1hbnRpY3MtPnNoYWRlcik7CisgICAgaWYgKCFjb21wdXRlRGltZW5zaW9ucykK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gZ2VuZXJhdGVkQ29kZSA9
IE1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSgqcHJvZ3JhbSwgV1RGTW92ZSgqbWF0Y2hlZFNlbWFu
dGljcyksIGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IubGF5b3V0KTsKIAogICAgIENvbXB1dGVQ
cmVwYXJlUmVzdWx0IHJlc3VsdDsKICAgICByZXN1bHQubWV0YWxTb3VyY2UgPSBXVEZNb3ZlKGdl
bmVyYXRlZENvZGUubWV0YWxTb3VyY2UpOwogICAgIHJlc3VsdC5tYW5nbGVkRW50cnlQb2ludE5h
bWUgPSBXVEZNb3ZlKGdlbmVyYXRlZENvZGUubWFuZ2xlZEVudHJ5UG9pbnROYW1lKTsKKyAgICBy
ZXN1bHQuY29tcHV0ZURpbWVuc2lvbnMgPSBXVEZNb3ZlKCpjb21wdXRlRGltZW5zaW9ucyk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgJKHJldmlzaW9uIDI0NjMyNikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw5ICs0MiwxNiBAQCBzdHJ1Y3QgUmVuZGVyUHJlcGFyZVJlc3VsdCB7CiB9
OwogT3B0aW9uYWw8UmVuZGVyUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNsU291
cmNlLCBSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImKTsKIAorc3RydWN0IENvbXB1dGVEaW1lbnNp
b25zIHsKKyAgICB1bnNpZ25lZCB3aWR0aDsKKyAgICB1bnNpZ25lZCBoZWlnaHQ7CisgICAgdW5z
aWduZWQgZGVwdGg7Cit9OworCiBzdHJ1Y3QgQ29tcHV0ZVByZXBhcmVSZXN1bHQgewogICAgIFN0
cmluZyBtZXRhbFNvdXJjZTsKICAgICBTdHJpbmcgbWFuZ2xlZEVudHJ5UG9pbnROYW1lOworICAg
IENvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOwogfTsKIE9wdGlvbmFsPENvbXB1
dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIENvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVM
aWZldGltZXMuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgICAgIGF1dG8gcmhzID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlOjp3cmFwKHZhcmlhYmxlKSk7CiAgICAgICAgIHJocy0+c2V0VHlwZSh2YXJpYWJsZS50eXBl
KCktPmNsb25lKCkpOwotICAgICAgICByaHMtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRW
YWx1ZSgpKTsKKyAgICAgICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7
IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAgICAgYXV0byBhc3NpZ25tZW50
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPih2YXJpYWJsZS5vcmln
aW4oKSwgV1RGTW92ZShsaHMpLCBXVEZNb3ZlKHJocykpOwogICAgICAgICBhc3NpZ25tZW50LT5z
ZXRUeXBlKHZhcmlhYmxlLnR5cGUoKS0+Y2xvbmUoKSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHVi
bGljOgogCiAgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGZ1bmN0aW9uRGVmaW5pdGlvbi5vcmln
aW4oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSkpOwogICAgICAgICAgICAgbWFr
ZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1fcG9pbnRlclRvU3RydWN0VHlwZS0+Y2xvbmUo
KSk7Ci0gICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKyAgICAgICAg
ICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOwogCiAgICAgICAgICAgICBhdXRvIHBvaW50ZXJEZWNsYXJhdGlvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihmdW5jdGlvbkRlZmluaXRpb24ub3JpZ2lu
KCksIEFTVDo6UXVhbGlmaWVycygpLAogICAgICAgICAgICAgICAgIG1fcG9pbnRlclRvU3RydWN0
VHlwZS0+Y2xvbmUoKSwgIndyYXBwZXIiX3MsIFdURjo6bnVsbG9wdCwgT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+KFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNzaW9uKSkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV0hMU0xEb3RFeHBy
ZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKICNpbmNsdWRlICJXSExTTFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKQEAgLTUxLDEwICs1MiwxMSBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsK
ICAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBzaW1wbGlm
eVJpZ2h0VmFsdWUoQVNUOjpEb3RFeHByZXNzaW9uJik7CisgICAgdm9pZCBzaW1wbGlmeVJpZ2h0
VmFsdWUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKICAgICBib29sIHNpbXBsaWZ5
QWJzdHJhY3RMZWZ0VmFsdWUoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYsIEFTVDo6RG90RXhw
cmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmlnaHQpOwogICAgIHZvaWQg
c2ltcGxpZnlMZWZ0VmFsdWUoQVNUOjpFeHByZXNzaW9uJik7CiAKQEAgLTY0LDggKzY2LDE0IEBA
IHByaXZhdGU6CiB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lv
biYgZG90RXhwcmVzc2lvbikKIHsKICAgICAvLyBVbmxlc3Mgd2UncmUgaW5zaWRlIGFuIEFzc2ln
bm1lbnRFeHByZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgd2UncmUgYSBy
aWdodCB2YWx1ZS4KLSAgICBpZiAoIXNpbXBsaWZ5UmlnaHRWYWx1ZShkb3RFeHByZXNzaW9uKSkK
LSAgICAgICAgc2V0RXJyb3IoKTsKKyAgICBzaW1wbGlmeVJpZ2h0VmFsdWUoZG90RXhwcmVzc2lv
bik7Cit9CisKK3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Np
b24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW5kZXhFeHBy
ZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICAvLyBVbmxlc3Mgd2UncmUgaW5zaWRlIGFu
IEFzc2lnbm1lbnRFeHByZXNzaW9uIG9yIGEgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgd2Un
cmUgYSByaWdodCB2YWx1ZS4KKyAgICBzaW1wbGlmeVJpZ2h0VmFsdWUoaW5kZXhFeHByZXNzaW9u
KTsKIH0KIAogdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQpAQCAtNzUsNzkgKzgzLDE4MiBAQCB2b2lkIFByb3Bl
cnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3RpCiAgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlv
bi5ibG9jaygpLnN0YXRlbWVudHMoKS5pbnNlcnQoMCwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihMZXhlcjo6VG9rZW4obV92YXJpYWJsZURlY2xhcmF0
aW9uc1swXS0+b3JpZ2luKCkpLCBXVEZNb3ZlKG1fdmFyaWFibGVEZWNsYXJhdGlvbnMpKSk7CiB9
CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2Fs
bChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+JiYgbmV3VmFsdWUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4oKT4mIGxlZnRWYWx1ZUZhY3RvcnksIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCitlbnVt
IGNsYXNzIFdoaWNoQW5kZXIgeworICAgIFRocmVhZEFuZGVyLAorICAgIEFuZGVyCit9OworCitz
dHJ1Y3QgQW5kZXJDYWxsQXJndW1lbnRSZXN1bHQgeworICAgIFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+IGV4cHJlc3Npb247CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4+IHZhcmlhYmxlRGVjbGFyYXRpb247CisgICAgV2hpY2hBbmRlciB3aGljaEFu
ZGVyOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEV4cHJlc3Npb25Db25zdHJ1Y3RvciwgdHlw
ZW5hbWUgVHlwZUNvbnN0cnVjdG9yPgorc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50
UmVzdWx0PiB3cmFwQW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4m
IGV4cHJlc3Npb24sIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRBbmRlckZ1bmN0aW9u
KQogewotICAgIGlmIChkb3RFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSkgewotICAgICAgICAv
LyAqb3BlcmF0b3ImLmZvbygmdikgPSBuZXdWYWx1ZQotICAgICAgICBpZiAoIWRvdEV4cHJlc3Np
b24udGhyZWFkQW5kZXJGdW5jdGlvbigpKQorICAgIGlmIChhdXRvIGFkZHJlc3NTcGFjZSA9IGV4
cHJlc3Npb24tPnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKSB7CisgICAgICAg
IGlmICghYW5kZXJGdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgIAorICAgICAgICBhdXRvIG9yaWdpbiA9IGV4cHJlc3Npb24tPm9yaWdpbigpOworICAg
ICAgICBhdXRvIGJhc2VUeXBlID0gZXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsK
KyAgICAgICAgYXV0byBtYWtlQXJyYXlSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Np
b25Db25zdHJ1Y3Rvcj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbikp
OworICAgICAgICBtYWtlQXJyYXlSZWZlcmVuY2UtPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxUeXBl
Q29uc3RydWN0b3I+KFdURk1vdmUob3JpZ2luKSwgKmFkZHJlc3NTcGFjZSwgV1RGTW92ZShiYXNl
VHlwZSkpKTsKKyAgICAgICAgbWFrZUFycmF5UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKG1ha2VBcnJheVJl
ZmVyZW5jZSksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIgfX07CisgICAgfQorICAg
IGlmICh0aHJlYWRBbmRlckZ1bmN0aW9uKSB7CisgICAgICAgIGF1dG8gb3JpZ2luID0gZXhwcmVz
c2lvbi0+b3JpZ2luKCk7CisgICAgICAgIGF1dG8gYmFzZVR5cGUgPSBleHByZXNzaW9uLT5yZXNv
bHZlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIEFTVDo6UXVhbGlmaWVycygpLCBiYXNlVHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNl
MSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlMS0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlMS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOworCisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmln
aW4pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMSksIFdURk1vdmUoZXhwcmVzc2lvbikpOwor
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShiYXNlVHlwZS0+Y2xvbmUoKSk7
CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJp
Z2h0VmFsdWUoKSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTIgPSBtYWtlVW5p
cXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6Ondy
YXAodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNl
dFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCB9KTsKKworICAgICAgICBhdXRvIGV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Np
b25Db25zdHJ1Y3Rvcj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFdURk1vdmUodmFyaWFibGVSZWZl
cmVuY2UyKSk7CisgICAgICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1ha2VVbmlxdWVSZWY8VHlwZUNv
bnN0cnVjdG9yPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZCwgV1RGTW92ZShiYXNlVHlwZSkpOworICAgICAgICBleHByZXNzaW9uLT5zZXRUeXBlKHJlc3Vs
dFR5cGUtPmNsb25lKCkpOworICAgICAgICBleHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiBleHByZXNzaW9uczsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUo
YXNzaWdubWVudEV4cHJlc3Npb24pKTsKKyAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1v
dmUoZXhwcmVzc2lvbikpOworICAgICAgICBhdXRvIGNvbW1hRXhwcmVzc2lvbiA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpDb21tYUV4cHJlc3Npb24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShleHBy
ZXNzaW9ucykpOworICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGUoV1RGTW92ZShyZXN1
bHRUeXBlKSk7CisgICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOworICAgICAgICByZXR1cm4ge3sgV1RGTW92ZShjb21tYUV4cHJlc3Np
b24pLCB7IFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikgfSwgV2hpY2hBbmRlcjo6VGhyZWFk
QW5kZXJ9fTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9w
dGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiBhbmRlckNhbGxBcmd1bWVudChVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbiwgYm9vbCBhbmRlckZ1bmN0aW9uLCBib29s
IHRocmVhZEFuZGVyRnVuY3Rpb24pCit7CisgICAgYXV0byYgdW5pZnlOb2RlID0gZXhwcmVzc2lv
bi0+cmVzb2x2ZWRUeXBlKCkudW5pZnlOb2RlKCk7CisgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5
cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxB
U1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICBBU1NFUlQoIWlzPEFTVDo6UG9p
bnRlclR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHt7IFdURk1vdmUoZXhw
cmVzc2lvbiksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIgfX07CisgICAgICAgIGlm
IChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHdy
YXBBbmRlckNhbGxBcmd1bWVudDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihleHByZXNzaW9uLCBhbmRlckZ1bmN0aW9uLCB0aHJlYWRB
bmRlckZ1bmN0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBBbmRlckNhbGxBcmd1bWVudDxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiwgQVNUOjpQb2ludGVyVHlwZT4oZXhwcmVzc2lvbiwg
YW5kZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2FsbChBU1Q6OlByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qIHJlbGV2YW50QW5kZXIsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbmV3
VmFsdWUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4m
IGxlZnRWYWx1ZUZhY3RvcnksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogaW5kZXhWYXJpYWJs
ZSkKK3sKKyAgICBhdXRvIG1heWJlQWRkSW5kZXhBcmd1bWVudCA9IFsmXShWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMpIHsKKyAgICAgICAgaWYgKCFpbmRleFZh
cmlhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKCppbmRleFZhcmlhYmxlKSk7CisgICAgICAgIEFTU0VSVChpbmRleFZh
cmlhYmxlLT50eXBlKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShpbmRl
eFZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5ODE2OSBJcyB0aGlzIHJpZ2h0PworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUo
dmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICB9OworCisgICAgaWYgKHJlbGV2YW50QW5kZXIpIHsK
KyAgICAgICAgLy8gKm9wZXJhdG9yJi5mb28oJnYpID0gbmV3VmFsdWUKKyAgICAgICAgYXV0byBs
ZWZ0VmFsdWUgPSBsZWZ0VmFsdWVGYWN0b3J5KCk7CisgICAgICAgIGF1dG8gYXJndW1lbnQgPSBh
bmRlckNhbGxBcmd1bWVudChsZWZ0VmFsdWUsIHRydWUsIHRydWUpOworICAgICAgICBBU1NFUlQo
YXJndW1lbnQpOworICAgICAgICBBU1NFUlQoIWFyZ3VtZW50LT52YXJpYWJsZURlY2xhcmF0aW9u
KTsKKyAgICAgICAgQVNTRVJUKGFyZ3VtZW50LT53aGljaEFuZGVyID09IFdoaWNoQW5kZXI6OkFu
ZGVyKTsKICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVu
dHM7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocG9pbnRlclRvTGVmdFZhbHVlRmFjdG9yeSgp
KTsKLSAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxs
RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmco
ZG90RXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJn
dW1lbnRzKSk7Ci0gICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24u
dGhyZWFkQW5kZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQoV1RGTW92ZShhcmd1bWVudC0+ZXhwcmVzc2lvbikpOworICAgICAgICBtYXliZUFk
ZEluZGV4QXJndW1lbnQoYXJndW1lbnRzKTsKKworICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9u
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKHJlbGV2YW50QW5kZXItPm5hbWUo
KSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
KHJlbGV2YW50QW5kZXItPnR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgY2FsbEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKLSAgICAgICAgY2FsbEV4cHJl
c3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKSk7
CisgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqcmVsZXZhbnRBbmRlcik7CiAK
LSAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4o
KSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKLSAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGRvdEV4cHJlc3Npb24udGhy
ZWFkQW5kZXJGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAg
ICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5v
cmlnaW4oKSksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHJlbGV2YW50QW5k
ZXItPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgZGVyZWZlcmVuY2VF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7CiAKLSAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiksIFdU
Rk1vdmUobmV3VmFsdWUpKTsKLSAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUo
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0
aW9uKCktPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgYXV0byBhc3Np
Z25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1v
dmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSwgV1RGTW92ZShuZXdWYWx1ZSkpOworICAgICAgICBh
c3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihy
ZWxldmFudEFuZGVyLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgICAgIGFz
c2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
CiAKICAgICAgICAgcmV0dXJuIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoYXNz
aWdubWVudEV4cHJlc3Npb24pKTsKICAgICB9CiAKICAgICAvLyB2ID0gb3BlcmF0b3IuZm9vPSh2
LCBuZXdWYWx1ZSkKLSAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsK
KyAgICBBU1NFUlQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uKCkpOwog
CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7CiAgICAg
YXJndW1lbnRzLmFwcGVuZChsZWZ0VmFsdWVGYWN0b3J5KCkpOworICAgIG1heWJlQWRkSW5kZXhB
cmd1bWVudChhcmd1bWVudHMpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShuZXdWYWx1
ZSkpOwotICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRv
dEV4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMp
KTsKLSAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnNldHRlckZ1bmN0
aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKworICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dHRlckZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgY2FsbEV4
cHJlc3Npb24tPnNldFR5cGUocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9u
KCktPnR5cGUoKS5jbG9uZSgpKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOwotICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigq
ZG90RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0
RnVuY3Rpb24oKnByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsKIAot
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdu
bWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgbGVm
dFZhbHVlRmFjdG9yeSgpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Ci0gICAgYXNzaWdubWVu
dEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBl
KCkuY2xvbmUoKSk7CisgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5vcmlnaW4oKSksIGxlZnRWYWx1ZUZhY3RvcnkoKSwgV1RGTW92ZShjYWxsRXhw
cmVzc2lvbikpOworICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7CiAgICAgYXNz
aWdubWVudEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsK
IAogICAgIHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1l
bnRFeHByZXNzaW9uKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPj4gZ2V0dGVyQ2FsbChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24sIGNv
bnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxlZnRWYWx1
ZUZhY3RvcnksIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4o
KT4mIHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkpCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4+IGdldHRlckNhbGwoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBy
ZWxldmFudEFuZGVyLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGluZGV4
VmFyaWFibGUpCiB7Ci0gICAgaWYgKGRvdEV4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpKSB7Cisg
ICAgYXV0byBtYXliZUFkZEluZGV4QXJndW1lbnQgPSBbJl0oVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+PiYgYXJndW1lbnRzKSB7CisgICAgICAgIGlmICghaW5kZXhWYXJpYWJsZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZTo6d3JhcCgqaW5kZXhWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQoaW5kZXhWYXJpYWJsZS0+
dHlwZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoaW5kZXhWYXJpYWJs
ZS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkg
SXMgdGhpcyByaWdodD8KKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlKSk7CisgICAgfTsKKworICAgIGlmIChyZWxldmFudEFuZGVyKSB7CiAgICAgICAg
IC8vICpvcGVyYXRvciYuZm9vKCZ2KQotICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFk
QW5kZXJGdW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAg
ICAgCisgICAgICAgIGF1dG8gbGVmdFZhbHVlID0gbGVmdFZhbHVlRmFjdG9yeSgpOworICAgICAg
ICBhdXRvIGFyZ3VtZW50ID0gYW5kZXJDYWxsQXJndW1lbnQobGVmdFZhbHVlLCB0cnVlLCB0cnVl
KTsKKyAgICAgICAgQVNTRVJUKGFyZ3VtZW50KTsKKyAgICAgICAgQVNTRVJUKCFhcmd1bWVudC0+
dmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgICAgIEFTU0VSVChhcmd1bWVudC0+d2hpY2hBbmRl
ciA9PSBXaGljaEFuZGVyOjpBbmRlcik7CiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHBvaW50ZXJU
b0xlZnRWYWx1ZUZhY3RvcnkoKSk7Ci0gICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtl
VW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9u
Lm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpLT5u
YW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0
VHlwZShkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkp
OworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoYXJndW1lbnQtPmV4cHJlc3Npb24p
KTsKKyAgICAgICAgbWF5YmVBZGRJbmRleEFyZ3VtZW50KGFyZ3VtZW50cyk7CisKKyAgICAgICAg
YXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhy
ZWxldmFudEFuZGVyLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgICAgICBjYWxs
RXhwcmVzc2lvbi0+c2V0VHlwZShyZWxldmFudEFuZGVyLT50eXBlKCkuY2xvbmUoKSk7CiAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7
Ci0gICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi50aHJl
YWRBbmRlckZ1bmN0aW9uKCkpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24o
KnJlbGV2YW50QW5kZXIpOwogCi0gICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0g
bWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Ci0gICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
Pihkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+dHlwZSgpKS5lbGVtZW50VHlw
ZSgpLmNsb25lKCkpOworICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7Cisg
ICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPihyZWxldmFudEFuZGVyLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAg
ICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogCiAgICAgICAgIHJldHVybiBV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbikp
OwogICAgIH0KIAogICAgIC8vIG9wZXJhdG9yLmZvbyh2KQotICAgIEFTU0VSVChkb3RFeHByZXNz
aW9uLmdldHRlckZ1bmN0aW9uKCkpOwotICAgIAorICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24oKSk7CisKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKGxlZnRWYWx1ZUZh
Y3RvcnkoKSk7Ci0gICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJp
bmcoZG90RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3Vt
ZW50cykpOwotICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGRvdEV4cHJlc3Npb24uZ2V0dGVy
RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIG1heWJlQWRkSW5kZXhBcmd1bWVudChh
cmd1bWVudHMpOworCisgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5v
cmlnaW4oKSksIFN0cmluZyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24o
KS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0
VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0dGVyRnVuY3Rpb24oKS0+dHlwZSgpLmNs
b25lKCkpOwogICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0
VmFsdWUoKSk7Ci0gICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpkb3RFeHByZXNzaW9u
LmdldHRlckZ1bmN0aW9uKCkpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCkpOwogCiAgICAgcmV0dXJuIFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKIH0KQEAg
LTE2MSw3ICsyNzIsNyBAQCBzdHJ1Y3QgTW9kaWZpY2F0aW9uUmVzdWx0IHsKICAgICBWZWN0b3I8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwogICAgIFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+IHJlc3VsdDsKIH07Ci1zdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0
PiBtb2RpZnkoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBzdGQ6OmZ1bmN0aW9u
PE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+JiYpPiBtb2RpZmljYXRpb24pCitzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0
PiBtb2RpZnkoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiwgc3RkOjpmdW5jdGlvbjxPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+KE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKT4gbW9kaWZpY2F0aW9uKQogewogICAg
IC8vIENvbnNpZGVyIGEuYi5jLmQrKzsKICAgICAvLyBUaGlzIHdvdWxkIGdldCB0cmFuc2Zvcm1l
ZCBpbnRvOgpAQCAtMTgxLDIyICsyOTIsMjIgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3Vs
dD4gbW9kaWZ5KEFTVAogICAgIC8vIHIgPSBvcGVyYXRvci5kPShyLCBuZXdWYWx1ZSk7CiAgICAg
Ly8gcSA9IG9wZXJhdG9yLmM9KHEsIHIpOwogICAgIC8vCi0gICAgLy8gU3RlcCA0OgorICAgIC8v
IFN0ZXAgNToKICAgICAvLyAqcCA9IG9wZXJhdG9yLmI9KCpwLCBxKTsKIAogICAgIC8vIElmIHRo
ZSBleHByZXNzaW9uIGlzIGEuYi5jLmQgPSBlLCBTdGVwIDMgZGlzYXBwZWFycyBhbmQgIm5ld1Zh
bHVlIiBpbiBzdGVwIDQgYmVjb21lcyAiZSIuCiAgICAgCiAKICAgICAvLyBGaW5kIHRoZSAiLmIi
ICIuYyIgYW5kICIuZCIgZXhwcmVzc2lvbnMuIFRoZXkgZW5kIHVwIGluIHRoZSBvcmRlciBbIi5k
IiwgIi5jIiwgIi5iIl0uCi0gICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpE
b3RFeHByZXNzaW9uPj4gY2hhaW47Ci0gICAgQVNUOjpEb3RFeHByZXNzaW9uKiBpdGVyYXRvciA9
ICZkb3RFeHByZXNzaW9uOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPj4gY2hhaW47CisgICAgQVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24qIGl0ZXJhdG9yID0gJnByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjsKICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICBjaGFpbi5hcHBlbmQoKml0ZXJhdG9yKTsKICAgICAgICAg
aWYgKGl0ZXJhdG9yLT5iYXNlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgQVNTRVJUKCFpdGVyYXRvci0+YmFzZSgpLnR5
cGVBbm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkpOwotICAgICAgICBBU1NFUlQoaXM8QVNUOjpE
b3RFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIE1ha2UgdGhpcyB3b3JrIHdpdGggaW5k
ZXggZXhwcmVzc2lvbnMKLSAgICAgICAgaXRlcmF0b3IgPSAmZG93bmNhc3Q8QVNUOjpEb3RFeHBy
ZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uPihpdGVyYXRvci0+YmFzZSgpKSk7CisgICAgICAgIGl0ZXJhdG9y
ID0gJmRvd25jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihpdGVyYXRvci0+YmFz
ZSgpKTsKICAgICB9CiAgICAgYXV0byBsZWZ0RXhwcmVzc2lvbiA9IGl0ZXJhdG9yLT50YWtlQmFz
ZSgpOwogICAgIEFTVDo6RXhwcmVzc2lvbiYgaW5uZXJMZWZ0RXhwcmVzc2lvbiA9IGxlZnRFeHBy
ZXNzaW9uOwpAQCAtMjA4LDggKzMxOSwzOSBAQCBzdGF0aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0
PiBtb2RpZnkoQVNUCiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24+PiBpbnRlcm1lZGlhdGVWYXJpYWJsZXM7CiAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY2hhaW4uc2l6ZSgpIC0gMSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDE7IGkgPCBjaGFpbi5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBkb3RFeHByZXNz
aW9uID0gc3RhdGljX2Nhc3Q8QVNUOjpEb3RFeHByZXNzaW9uJj4oY2hhaW5baV0pOwotICAgICAg
ICBpbnRlcm1lZGlhdGVWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBkb3RFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLmNsb25l
KCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgICAgICBhdXRv
JiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24gPSBzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbiY+KGNoYWluW2ldKTsKKyAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFibGVz
LnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4o
TGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkuY2xvbmUo
KSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgfQorCisgICAg
Ly8gQ29uc2lkZXIgYVtmb28oKV1bYl0gPSBjOworICAgIC8vIE5haXZlbHksIFRoaXMgd291bGQg
Z2V0IGV4cGFuZGVkIHRvOgorICAgIC8vCisgICAgLy8gdGVtcCA9IG9wZXJhdG9yW10oYSwgZm9v
KCkpOworICAgIC8vIHRlbXAgPSBvcGVyYXRvcltdPSh0ZW1wLCBiLCBjKTsKKyAgICAvLyBhID0g
b3BlcmF0b3JbXT0oYSwgZm9vKCksIHRlbXApOworICAgIC8vCisgICAgLy8gSG93ZXZlciwgaWYg
d2UgZGlkIHRoaXMsIHdlIHdvdWxkIGhhdmUgdG8gcnVuIGZvbygpIHR3aWNlLCB3aGljaCB3b3Vs
ZCBiZSBpbmNvcnJlY3QuCisgICAgLy8gSW5zdGVhZCwgd2UgbmVlZCB0byBzYXZlIGZvbygpIGFu
ZCBiIGludG8gbW9yZSB0ZW1wb3JhcnkgdmFyaWFibGVzLgorICAgIC8vIFRoZXNlIHRlbXBvcmFy
eSB2YXJpYWJsZXMgYXJlIHBhcmFsbGVsIHRvICJjaGFpbiIgYWJvdmUsIHdpdGggbnVsbG9wdCBy
ZWZlcnJpbmcgdG8gYSBEb3RFeHByZXNzaW9uICh3aGljaCBkb2Vzbid0IGhhdmUgYW4gaW5kZXgg
dmFsdWUgdG8gc2F2ZSB0byBhIHZhcmlhYmxlKS4KKyAgICAvLworICAgIC8vIEluc3RlYWQsIHRo
aXMgZ2V0cyBleHBhbmRlZCB0bzoKKyAgICAvLworICAgIC8vIHAgPSAmYTsKKyAgICAvLyB0ZW1w
ID0gZm9vKCk7CisgICAgLy8gcSA9IG9wZXJhdG9yW10oKnAsIHRlbXApOworICAgIC8vIHRlbXAy
ID0gYjsKKyAgICAvLyBxID0gb3BlcmF0b3JbXT0ocSwgdGVtcDIsIGMpOworICAgIC8vICpwID0g
b3BlcmF0b3JbXT0oKnAsIHRlbXAsIHEpOworCisgICAgVmVjdG9yPE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+Pj4gaW5kZXhWYXJpYWJsZXM7CisgICAgaW5kZXhW
YXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjaGFpbi5zaXplKCkpOworICAgIGZvciAo
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiA6
IGNoYWluKSB7CisgICAgICAgIGlmICghaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbikpIHsKKyAgICAgICAgICAgIGluZGV4VmFyaWFibGVzLmFwcGVuZChX
VEY6Om51bGxvcHQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
YXV0byYgaW5kZXhFeHByZXNzaW9uID0gZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7CisgICAgICAgIGluZGV4VmFyaWFibGVzLnVuY2hlY2tl
ZEFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRv
a2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUo
KSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CiAgICAgfQogCiAgICAg
VmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKQEAgLTI0Miw0
MyArMzg0LDQ0IEBAIHN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAg
ICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAgICAg
ICAgICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CiAgICAgICAgIH0KLSAgICAKKwogICAg
ICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkp
OwogICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwogICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7
CiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKLSAg
ICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVy
ZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSks
IFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKKyAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4
cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJp
YWJsZVJlZmVyZW5jZSkpOwogICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkp
OwogICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25l
KCkpOwogICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJs
ZS0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKICAgICAgICAgcmV0dXJuIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbjsKICAgICB9OwotICAgIGF1dG8gcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUg
PSBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7Ci0gICAgICAgIGlmIChwcmV2
aW91cykgewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgq
cHJldmlvdXMpKTsKLSAgICAgICAgICAgIEFTU0VSVChwcmV2aW91cy0+dHlwZSgpKTsKLSAgICAg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHByZXZpb3VzLT50eXBlKCktPmNsb25l
KCkpOwotICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdo
dD8KKyAgICBhdXRvIGFwcGVuZEluZGV4QXNzaWdubWVudCA9IFsmXShBU1Q6OlByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBPcHRpb25hbDxVbmlxdWVS
ZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4mIGluZGV4VmFyaWFibGUpIHsKKyAgICAgICAg
aWYgKCFpbmRleFZhcmlhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8m
IGluZGV4RXhwcmVzc2lvbiA9IGRvd25jYXN0PEFTVDo6SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24pOworCisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U6OndyYXAoKmluZGV4VmFyaWFibGUpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4VmFyaWFibGUt
PmdldCgpLnR5cGUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGluZGV4
VmFyaWFibGUtPmdldCgpLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVmZXJl
bmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKLSAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50
ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVm
ZXJlbmNlKSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7Ci0gICAgICAg
ICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQsIHByZXZpb3VzLT50eXBlKCktPmNsb25lKCkpKTsKLSAgICAgICAg
ICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKLSAgICAg
ICAgfQorICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSksIGluZGV4RXhwcmVz
c2lvbi50YWtlSW5kZXgoKSk7CisgICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBl
KGluZGV4VmFyaWFibGUtPmdldCgpLnR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIGFzc2lnbm1l
bnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKLSAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUp
KTsKLSAgICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKLSAgICAgICAgdmFy
aWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkp
OwotICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwotICAg
ICAgICByZXR1cm4gdmFyaWFibGVSZWZlcmVuY2U7CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CiAgICAgfTsKICAgICBmb3IgKHNpemVf
dCBpID0gY2hhaW4uc2l6ZSgpOyAtLWk7ICkgewotICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24gPSBjaGFpbltpXTsKKyAgICAgICAgQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiA9IGNoYWluW2ldOwogICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlh
dGVWYXJpYWJsZXNbaSAtIDFdOworICAgICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uPj4mIGluZGV4VmFyaWFibGUgPSBpbmRleFZhcmlhYmxlc1tpXTsKIAot
ICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gZ2V0dGVyQ2FsbChkb3RFeHByZXNzaW9uLCBw
cmV2aW91c0xlZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworICAgICAgICBh
cHBlbmRJbmRleEFzc2lnbm1lbnQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBpbmRleFZhcmlh
YmxlKTsKKworICAgICAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlbGV2YW50QW5kZXIg
PSBpID09IGNoYWluLnNpemUoKSAtIDEgPyBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJG
dW5jdGlvbigpIDogcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24o
KTsKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IGdldHRlckNhbGwocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLCByZWxldmFudEFuZGVyLCBwcmV2aW91c0xlZnRWYWx1ZSwgaW5kZXhWYXJp
YWJsZSA/ICYqaW5kZXhWYXJpYWJsZSA6IG51bGxwdHIpOwogCiAgICAgICAgIGlmICghY2FsbEV4
cHJlc3Npb24pCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMjg4LDE1ICs0
MzEsMTcgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAgICAg
ICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+
Y2xvbmUoKSk7CiAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmln
aHQ/CiAKLSAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqY2FsbEV4cHJlc3Np
b24pKTsKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBXVEZNb3ZlKCpj
YWxsRXhwcmVzc2lvbikpOwogICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZSh2
YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CiAgICAgICAgIGFzc2lnbm1lbnRF
eHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICAg
ICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKLSAg
ICAgICAgCisKICAgICAgICAgcHJldmlvdXMgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9
Ci0gICAgYXV0byBsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGNoYWluWzBd
LCBwcmV2aW91c0xlZnRWYWx1ZSwgcG9pbnRlclRvUHJldmlvdXNMZWZ0VmFsdWUpOworICAgIGFw
cGVuZEluZGV4QXNzaWdubWVudChjaGFpblswXSwgaW5kZXhWYXJpYWJsZXNbMF0pOworICAgIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVsZXZhbnRBbmRlciA9IGNoYWluLnNpemUoKSA9PSAx
ID8gcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSA6IHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCk7CisgICAgYXV0byBsYXN0R2V0dGVy
Q2FsbEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKGNoYWluWzBdLCByZWxldmFudEFuZGVyLCBwcmV2
aW91c0xlZnRWYWx1ZSwgaW5kZXhWYXJpYWJsZXNbMF0gPyAmKihpbmRleFZhcmlhYmxlc1swXSkg
OiBudWxscHRyKTsKIAogICAgIC8vIFN0ZXAgMzoKICAgICBhdXRvIG1vZGlmaWNhdGlvblJlc3Vs
dCA9IG1vZGlmaWNhdGlvbihXVEZNb3ZlKGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikpOwpAQCAt
MzA5LDI3ICs0NTQsMTcgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFT
VAogICAgIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHJpZ2h0VmFsdWUgPSBXVEZNb3ZlKG1v
ZGlmaWNhdGlvblJlc3VsdC0+cmVzdWx0KTsKICAgICBhdXRvIGV4cHJlc3Npb25UeXBlID0gcmln
aHRWYWx1ZS0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoYWluLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24gPSBjaGFpbltpXTsKKyAgICAgICAgQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiA9IGNoYWluW2ldOwogICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBpbnRlcm1lZGlh
dGVWYXJpYWJsZXNbaV07CisgICAgICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+PiYgaW5kZXhWYXJpYWJsZSA9IGluZGV4VmFyaWFibGVzW2ldOwogCi0gICAg
ICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKGRvdEV4cHJlc3Npb24s
IFdURk1vdmUocmlnaHRWYWx1ZSksIFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
IHsKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9IHNldHRlckNhbGwocHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24udGhyZWFkQW5kZXJG
dW5jdGlvbigpLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiB7CiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3
cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURl
Y2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlw
ZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7CiAgICAgICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogICAgICAgICAgICAgcmV0dXJu
IHZhcmlhYmxlUmVmZXJlbmNlOwotICAgICAgICB9LCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiB7Ci0gICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3
cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURl
Y2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlw
ZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKS0+Y2xvbmUoKSk7Ci0gICAgICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwotCi0gICAgICAgICAgICBhdXRv
IG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2
YXJpYWJsZVJlZmVyZW5jZSkpOwotICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRp
b24udHlwZSgpKTsKLSAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZSht
YWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9u
Lm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgdmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCktPmNsb25lKCkpKTsKLSAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwotICAgICAgICAgICAgcmV0dXJu
IG1ha2VQb2ludGVyRXhwcmVzc2lvbjsKLSAgICAgICAgfSk7CisgICAgICAgIH0sIGluZGV4VmFy
aWFibGUgPyAmKmluZGV4VmFyaWFibGUgOiBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWFzc2ln
bm1lbnRFeHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTM0
NCwyNCArNDc5LDE5IEBAIHN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QK
IAogICAgIC8vIFN0ZXAgNToKICAgICB7Ci0gICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Np
b24gPSBzZXR0ZXJDYWxsKGNoYWluW2NoYWluLnNpemUoKSAtIDFdLCBXVEZNb3ZlKHJpZ2h0VmFs
dWUpLCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgIEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24gPSBjaGFp
bltjaGFpbi5zaXplKCkgLSAxXTsKKyAgICAgICAgYXV0byBhc3NpZ25tZW50RXhwcmVzc2lvbiA9
IHNldHRlckNhbGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uYW5kZXJGdW5jdGlvbigpLCBXVEZNb3ZlKHJpZ2h0VmFsdWUpLCBbJl0oKSAtPiBVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJl
bmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlOjp3cmFwKHBvaW50ZXJWYXJpYWJsZSkpOwogICAgICAgICAgICAgQVNTRVJUKHBv
aW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKICAgICAgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5z
ZXRUeXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKICAgICAgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CiAKLSAgICAgICAgICAgIGF1
dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNl
RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3Zl
KHZhcmlhYmxlUmVmZXJlbmNlKSk7CisgICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlKSk7CiAgICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkp
OwogICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKICAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9pbnRl
clZhcmlhYmxlLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOwogICAgICAgICAgICAgcmV0dXJu
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbjsKLSAgICAgICAgfSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4gewotICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKLSAgICAgICAgICAgIEFTU0VSVChwb2ludGVyVmFy
aWFibGUtPnR5cGUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShw
b2ludGVyVmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwotICAgICAgICAgICAgcmV0dXJuIHZhcmlh
YmxlUmVmZXJlbmNlOwotICAgICAgICB9KTsKKyAgICAgICAgfSwgaW5kZXhWYXJpYWJsZXNbaW5k
ZXhWYXJpYWJsZXMuc2l6ZSgpIC0gMV0gPyAmKihpbmRleFZhcmlhYmxlc1tpbmRleFZhcmlhYmxl
cy5zaXplKCkgLSAxXSkgOiBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWFzc2lnbm1lbnRFeHBy
ZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTM3Myw2ICs1MDMs
MTAgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAgIHZhcmlh
YmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHBvaW50ZXJWYXJpYWJsZSkpOwogICAgIGZv
ciAoYXV0byYgaW50ZXJtZWRpYXRlVmFyaWFibGUgOiBpbnRlcm1lZGlhdGVWYXJpYWJsZXMpCiAg
ICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKGludGVybWVkaWF0ZVZh
cmlhYmxlKSk7CisgICAgZm9yIChhdXRvJiBpbmRleFZhcmlhYmxlIDogaW5kZXhWYXJpYWJsZXMp
IHsKKyAgICAgICAgaWYgKGluZGV4VmFyaWFibGUpCisgICAgICAgICAgICB2YXJpYWJsZURlY2xh
cmF0aW9ucy5hcHBlbmQoV1RGTW92ZSgqaW5kZXhWYXJpYWJsZSkpOworICAgIH0KIAogICAgIHJl
dHVybiB7eyBpbm5lckxlZnRFeHByZXNzaW9uLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSwgV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9ucykgfX07CiB9CkBAIC0zODUsMTYgKzUxOSwxMyBAQCB2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6QXNzaWduCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgQVNTRVJUKCFhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkudHlwZUFubm90YXRp
b24oKS5pc1JpZ2h0VmFsdWUoKSk7Ci0gICAgaWYgKCFpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGFz
c2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSkpIHsKLSAgICAgICAgc2V0RXJyb3IoKTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjMgTWFrZSB0
aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9ucy4KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBBU1NFUlQoaXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGFzc2lnbm1lbnRF
eHByZXNzaW9uLmxlZnQoKSkpOwogCiAgICAgYXV0byB0eXBlID0gYXNzaWdubWVudEV4cHJlc3Np
b24ucmlnaHQoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpOwogCiAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwogCi0gICAgYXV0byBtb2RpZnlSZXN1
bHQgPSBtb2RpZnkoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVz
c2lvbi5sZWZ0KCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYp
IC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4geworICAgIGF1dG8gbW9kaWZ5UmVzdWx0
ID0gbW9kaWZ5KGRvd25jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihhc3NpZ25t
ZW50RXhwcmVzc2lvbi5sZWZ0KCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+JiYpIC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4gewogICAgICAgICByZXR1
cm4ge3sgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PigpLCBhc3NpZ25tZW50RXhw
cmVzc2lvbi50YWtlUmlnaHQoKSB9fTsKICAgICB9KTsKIApAQCAtNDI0LDYgKzU1NSw4IEBAIHZv
aWQgUHJvcGVydHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KICAgICAgICAgLy8gbmV3VmFs
dWUgPSAuLi47CiAgICAgICAgIC8vICpwID0gbmV3VmFsdWU7CiAKKyAgICAgICAgc2ltcGxpZnlM
ZWZ0VmFsdWUocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CisKICAgICAg
ICAgYXV0byBiYXNlVHlwZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCku
cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKICAgICAgICAgYXV0byBwb2ludGVyVHlwZSA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ubGVmdFZhbHVlKCkub3JpZ2luKCkpLCAqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSwgYmFzZVR5
cGUtPmNsb25lKCkpOwogCkBAIC01MjAsMTEgKzY1MywxMSBAQCB2b2lkIFByb3BlcnR5UmVzb2x2
ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgfQogCiAgICAgQVNTRVJUKCFyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnR5cGVBbm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkp
OwotICAgIGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpKSkgewotICAgICAgICBzZXRFcnJvcigpOyAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MyBNYWtlIHRoaXMgd29yayB3
aXRoIGluZGV4IGV4cHJlc3Npb25zLgorICAgIGlmICghaXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpKSB7CisgICAg
ICAgIHNldEVycm9yKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXV0byBtb2RpZnlS
ZXN1bHQgPSBtb2RpZnkoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKSwgWyZdKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+PiYmIGxhc3RHZXR0ZXJDYWxsRXhwcmVzc2lvbikgLT4gT3B0aW9uYWw8TW9kaWZp
Y2F0aW9uUmVzdWx0PiB7CisgICAgYXV0byBtb2RpZnlSZXN1bHQgPSBtb2RpZnkoZG93bmNhc3Q8
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bGVmdFZhbHVlKCkpLCBbJl0oT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYg
bGFzdEdldHRlckNhbGxFeHByZXNzaW9uKSAtPiBPcHRpb25hbDxNb2RpZmljYXRpb25SZXN1bHQ+
IHsKICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9u
czsKICAgICAgICAgaWYgKCFsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtNTU0LDcgKzY4NywxMSBAQCB2b2lkIFByb3BlcnR5UmVz
b2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQo
V1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0
dXJuIHt7IFdURk1vdmUoZXhwcmVzc2lvbnMpLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5l
d1ZhcmlhYmxlUmVmZXJlbmNlKCkgfX07CisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2Ug
PSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7CisgICAg
ICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24u
bGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgcmV0dXJuIHt7IFdURk1v
dmUoZXhwcmVzc2lvbnMpLCAgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkgfX07CiAgICAgfSk7
CiAKICAgICBpZiAoIW1vZGlmeVJlc3VsdCkgewpAQCAtNTgxLDEyOCArNzE4LDEwNyBAQCB2b2lk
IFByb3BlcnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgbV92YXJpYWJsZURlY2xh
cmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuZXdWYXJpYWJsZURlY2xhcmF0aW9uKSk7CiB9CiAKLWJv
b2wgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6RG90RXhwcmVzc2lv
biYgZG90RXhwcmVzc2lvbikKK3N0YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3Vs
dD4gYW5kZXJDYWxsQXJndW1lbnQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbikKIHsKLSAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhw
cmVzc2lvbi5vcmlnaW4oKTsKLQotICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3RFeHByZXNzaW9u
LmJhc2UoKSk7Ci0KLSAgICBpZiAoYXV0byogYW5kZXJGdW5jdGlvbiA9IGRvdEV4cHJlc3Npb24u
YW5kZXJGdW5jdGlvbigpKSB7Ci0gICAgICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9uLmJh
c2UoKTsKLSAgICAgICAgaWYgKGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9IGJhc2UudHlwZUFubm90
YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gbWFrZVBvaW50
ZXJFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKG9yaWdpbiksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7Ci0gICAgICAg
ICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgKmxlZnRBZGRyZXNzU3BhY2UsIGJhc2Uu
cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSkpOwotICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNz
aW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7Ci0KLSAgICAgICAgICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgICAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOwotICAg
ICAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmluZyhhbmRlckZ1bmN0aW9uLT5uYW1l
KCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNl
dFR5cGUoYW5kZXJGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwotICAgICAgICAgICAgY2FsbEV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKLSAgICAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kZXJGdW5jdGlvbik7Ci0KLSAgICAg
ICAgICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IEFTVDo6cmVwbGFjZVdpdGg8QVNU
OjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGRvdEV4cHJlc3Npb24sIFdURk1vdmUob3JpZ2luKSwg
V1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwotICAgICAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNz
aW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5
cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBoYXZl
IGFuIGFuZGVyLCBidXQgbm8gbGVmdCB2YWx1ZSB0byBjYWxsIGl0IG9uLiBMZXQncyBzYXZlIHRo
ZSB2YWx1ZSBpbnRvIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIGNyZWF0ZSBhIGxlZnQgdmFsdWUu
Ci0gICAgICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgaW5saW5pbmcgdGhlIGZ1bmN0aW9ucyB0
aGUgc3BlYyBzYXlzIGFyZSBnZW5lcmF0ZWQuCi0gICAgICAgIGlmICghZG90RXhwcmVzc2lvbi50
aHJlYWRBbmRlckZ1bmN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgYmFz
ZS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51
bGxvcHQpOwotCi0gICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UxLT5zZXRUeXBl
KGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJlbmNl
MS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOwotCi0gICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBX
VEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMSksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7Ci0g
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCku
Y2xvbmUoKSk7Ci0gICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlv
bihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgcmV0dXJuIGFuZGVyQ2FsbEFyZ3VtZW50KHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlUmVmZXJlbmNlKCksIHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5hbmRlckZ1bmN0aW9uKCksIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi50aHJlYWRBbmRl
ckZ1bmN0aW9uKCkpOworfQogCi0gICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
Ojp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Uy
LT5zZXRUeXBlKGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlMi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJl
c3NTcGFjZTo6VGhyZWFkIH0pOwordm9pZCBQcm9wZXJ0eVJlc29sdmVyOjpzaW1wbGlmeVJpZ2h0
VmFsdWUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbikKK3sKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gcHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLm9yaWdpbigpOwogCi0gICAgICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UyKSk7Ci0gICAgICAgIG1ha2VQb2ludGVyRXhw
cmVzc2lvbi0+c2V0VHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihvcmlnaW4pLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNlLnJlc29sdmVkVHlw
ZSgpLmNsb25lKCkpKTsKLSAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwogCisgICAgaWYgKGF1dG8gYXJndW1lbnQgPSBh
bmRlckNhbGxBcmd1bWVudChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKSB7CisgICAgICAgIGF1
dG8qIGFuZGVyRnVuY3Rpb24gPSBhcmd1bWVudC0+d2hpY2hBbmRlciA9PSBXaGljaEFuZGVyOjpU
aHJlYWRBbmRlciA/IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9u
KCkgOiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpOworICAgICAgICBB
U1NFUlQoYW5kZXJGdW5jdGlvbik7CisgICAgICAgIGF1dG8gb3JpZ2luID0gcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLm9yaWdpbigpOwogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+IGFyZ3VtZW50czsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKG1h
a2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUo
YXJndW1lbnQtPmV4cHJlc3Npb24pKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6SW5kZXhFeHByZXNz
aW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uKS50YWtlSW5kZXgoKSk7CiAgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5p
cXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmco
YW5kZXJGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKICAgICAgICAgY2Fs
bEV4cHJlc3Npb24tPnNldFR5cGUoYW5kZXJGdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwogICAg
ICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OwogICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmFuZGVyRnVuY3Rpb24pOwog
Ci0gICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHBy
ZXNzaW9uKSk7CisgICAgICAgIGF1dG8qIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IEFTVDo6cmVw
bGFjZVdpdGg8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CiAgICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
PihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7Ci0gICAgICAg
IGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUg
eyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworICAgICAgICBkZXJlZmVyZW5jZUV4cHJl
c3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKIAot
ICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGV4cHJlc3Npb25zOwot
ICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikp
OwotICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Np
b24pKTsKLSAgICAgICAgYXV0byogY29tbWFFeHByZXNzaW9uID0gQVNUOjpyZXBsYWNlV2l0aDxB
U1Q6OkNvbW1hRXhwcmVzc2lvbj4oZG90RXhwcmVzc2lvbiwgV1RGTW92ZShvcmlnaW4pLCBXVEZN
b3ZlKGV4cHJlc3Npb25zKSk7Ci0gICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZShkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBl
KCkuY2xvbmUoKSk7Ci0gICAgICAgIGNvbW1hRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24o
QVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOworICAgICAgICBp
ZiAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA9IGFyZ3VtZW50LT52YXJpYWJsZURlY2xhcmF0
aW9uKQorICAgICAgICAgICAgbV92YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZSgq
dmFyaWFibGVEZWNsYXJhdGlvbikpOwogCi0gICAgICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChkb3RFeHByZXNzaW9uLmdl
dHRlckZ1bmN0aW9uKCkpOwotICAgIGF1dG8mIGdldHRlckZ1bmN0aW9uID0gKmRvdEV4cHJlc3Np
b24uZ2V0dGVyRnVuY3Rpb24oKTsKKyAgICBBU1NFUlQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmdldHRlckZ1bmN0aW9uKCkpOworICAgIGF1dG8mIGdldHRlckZ1bmN0aW9uID0gKnByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpOwogICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoZG90RXhw
cmVzc2lvbi50YWtlQmFzZSgpKTsKLSAgICBhdXRvKiBjYWxsRXhwcmVzc2lvbiA9IEFTVDo6cmVw
bGFjZVdpdGg8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZG90RXhwcmVzc2lvbiwgV1RGTW92ZShvcmln
aW4pLCBTdHJpbmcoZ2V0dGVyRnVuY3Rpb24ubmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsK
KyAgICBhcmd1bWVudHMuYXBwZW5kKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi50YWtlQmFzZSgp
KTsKKyAgICBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbikpCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJl
c3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikudGFrZUluZGV4KCkpOworICAgIGF1dG8q
IGNhbGxFeHByZXNzaW9uID0gQVNUOjpyZXBsYWNlV2l0aDxBU1Q6OkNhbGxFeHByZXNzaW9uPihw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIFdURk1vdmUob3JpZ2luKSwgU3RyaW5nKGdldHRlckZ1
bmN0aW9uLm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CiAgICAgY2FsbEV4cHJlc3Npb24t
PnNldEZ1bmN0aW9uKGdldHRlckZ1bmN0aW9uKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlw
ZShnZXR0ZXJGdW5jdGlvbi50eXBlKCkuY2xvbmUoKSk7CiAgICAgY2FsbEV4cHJlc3Npb24tPnNl
dFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogY2xhc3MgTGVmdFZhbHVlU2ltcGxpZmllciA6IHB1YmxpYyBWaXNpdG9yIHsKLXB1YmxpYzoK
K3ByaXZhdGU6CiAgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogCi1wcml2YXRl
OgorICAgIHZvaWQgZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24m
KTsKIH07CiAKLXZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNz
aW9uJiBkb3RFeHByZXNzaW9uKQordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjpmaW5pc2hWaXNp
dGluZyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uKQogewotICAgIFZpc2l0b3I6OnZpc2l0KGRvdEV4cHJlc3Npb24pOwotICAgIEFTU0VSVChk
b3RFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSk7
Ci0gICAgQVNTRVJUKGRvdEV4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpKTsKKyAgICBBU1NFUlQo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRy
ZXNzU3BhY2UoKSk7CisgICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRlckZ1
bmN0aW9uKCkpOworCisgICAgVmlzaXRvcjo6dmlzaXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmJhc2UoKSk7CisKKyAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gcHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLm9yaWdpbigpOworICAgIGF1dG8qIGFuZGVyRnVuY3Rpb24gPSBwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpOwogCi0gICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9
IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7Ci0gICAgYXV0byogYW5kZXJGdW5jdGlvbiA9IGRvdEV4
cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpOwotICAgIGF1dG8mIGJhc2UgPSBkb3RFeHByZXNzaW9u
LmJhc2UoKTsKLSAgICBhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSAqZG90RXhwcmVzc2lvbi5iYXNl
KCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCk7Ci0gICAgYXV0byBtYWtlUG9p
bnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgZG90RXhwcmVzc2lvbi50YWtlQmFzZSgpKTsKLSAgICBt
YWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgbGVmdEFkZHJlc3NTcGFjZSwgYmFzZS5yZXNvbHZl
ZFR5cGUoKS5jbG9uZSgpKSk7Ci0gICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgYXV0byBhcmd1bWVudCA9IGFuZGVyQ2Fs
bEFyZ3VtZW50KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7CisgICAgQVNTRVJUKGFyZ3VtZW50
KTsKKyAgICBBU1NFUlQoIWFyZ3VtZW50LT52YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICBBU1NF
UlQoYXJndW1lbnQtPndoaWNoQW5kZXIgPT0gV2hpY2hBbmRlcjo6QW5kZXIpOwogCiAgICAgVmVj
dG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7Ci0gICAgYXJndW1lbnRz
LmFwcGVuZChXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpOworICAgIGFyZ3VtZW50cy5h
cHBlbmQoV1RGTW92ZShhcmd1bWVudC0+ZXhwcmVzc2lvbikpOworICAgIGlmIChpczxBU1Q6Oklu
ZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKSkKKyAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uKS50YWtlSW5kZXgoKSk7CiAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdpbiksIFN0cmlu
ZyhhbmRlckZ1bmN0aW9uLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwogICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRUeXBlKGFuZGVyRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogICAg
IGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigqYW5kZXJGdW5jdGlvbik7CiAKLSAgICBhdXRv
KiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6RGVyZWZlcmVu
Y2VFeHByZXNzaW9uPihkb3RFeHByZXNzaW9uLCBXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2Fs
bEV4cHJlc3Npb24pKTsKKyAgICBhdXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBBU1Q6OnJl
cGxhY2VXaXRoPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24sIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwogICAgIGRl
cmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihh
bmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgZGVyZWZl
cmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuYWRkcmVzc1NwYWNl
KCkgfSk7CiB9CiAKK3ZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6dmlzaXQoQVNUOjpEb3RFeHBy
ZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIFZpc2l0b3I6OnZpc2l0KGRvdEV4cHJlc3Np
b24pOworICAgIGZpbmlzaFZpc2l0aW5nKGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIExlZnRW
YWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Np
b24pCit7CisgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZpc2l0KGluZGV4RXhwcmVz
c2lvbi5pbmRleEV4cHJlc3Npb24oKSk7CisgICAgZmluaXNoVmlzaXRpbmcoaW5kZXhFeHByZXNz
aW9uKTsKK30KKwogdm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQogewogICAgIC8vIERlcmVmZXJl
bmNlIGV4cHJlc3Npb25zIGFyZSB0aGUgb25seSBleHByZXNzaW9ucyB3aGVyZSB0aGUgY2hpbGRy
ZW4gbWlnaHQgYmUgbW9yZS1yaWdodCB0aGFuIHdlIGFyZS4KICAgICAvLyBGb3IgZXhhbXBsZSwg
YSBkZXJlZmVyZW5jZSBleHByZXNzaW9uIG1heSBiZSBhIGxlZnQgdmFsdWUgYnV0IGl0cyBjaGls
ZCBtYXkgYmUgYSBjYWxsIGV4cHJlc3Npb24gd2hpY2ggaXMgYSByaWdodCB2YWx1ZS4KICAgICAv
LyBMZWZ0VmFsdWVTaW1wbGlmaWVyIGRvZXNuJ3QgaGFuZGxlIHJpZ2h0IHZhbHVlcywgc28gd2Ug
aW5zdGVhZCBuZWVkIHRvIHVzZSBQcm9wZXJ0eVJlc29sdmVyLgotICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTcwIFdoYXQgYWJvdXQgZnVu
Y3Rpb24gY2FsbCBhcmd1bWVudHM/CiAgICAgUHJvcGVydHlSZXNvbHZlcigpLlZpc2l0b3I6OnZp
c2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGljTWF0Y2hl
ci5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU2VtYW50aWNNYXRjaGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTkg
KzU1LDE3IEBAIHN0YXRpYyBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZmluZEVudHIKICAgICBy
ZXR1cm4gJippdGVyYXRvcjsKIH07CiAKLXN0YXRpYyBib29sIG1hdGNoTW9kZShCaW5kaW5nVHlw
ZSBiaW5kaW5nVHlwZSwgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1vZGUpCitzdGF0aWMg
Ym9vbCBtYXRjaE1vZGUoQmluZGluZzo6QmluZGluZ0RldGFpbHMgYmluZGluZ1R5cGUsIEFTVDo6
UmVzb3VyY2VTZW1hbnRpYzo6TW9kZSBtb2RlKQogewotICAgIHN3aXRjaCAoYmluZGluZ1R5cGUp
IHsKLSAgICBjYXNlIEJpbmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgorICAgIHJldHVybiBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaWZvcm1CdWZmZXJCaW5kaW5nKSAtPiBib29s
IHsKICAgICAgICAgcmV0dXJuIG1vZGUgPT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpC
dWZmZXI7Ci0gICAgY2FzZSBCaW5kaW5nVHlwZTo6U2FtcGxlcjoKKyAgICB9LCBbJl0oU2FtcGxl
ckJpbmRpbmcpIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gbW9kZSA9PSBBU1Q6OlJlc291cmNl
U2VtYW50aWM6Ok1vZGU6OlNhbXBsZXI7Ci0gICAgY2FzZSBCaW5kaW5nVHlwZTo6VGV4dHVyZToK
KyAgICB9LCBbJl0oVGV4dHVyZUJpbmRpbmcpIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gbW9k
ZSA9PSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlRleHR1cmU7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUKGJpbmRpbmdUeXBlID09IEJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVy
KTsKKyAgICB9LCBbJl0oU3RvcmFnZUJ1ZmZlckJpbmRpbmcpIC0+IGJvb2wgewogICAgICAgICBy
ZXR1cm4gbW9kZSA9PSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlVub3JkZXJlZEFjY2Vz
c1ZpZXc7Ci0gICAgfQorICAgIH0pLCBiaW5kaW5nVHlwZSk7CiB9CiAKIHN0YXRpYyBPcHRpb25h
bDxIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3Q+PiBtYXRjaFJlc291cmNlcyhWZWN0b3I8RW50cnlQ
b2ludEl0ZW0+JiBlbnRyeVBvaW50SXRlbXMsIExheW91dCYgbGF5b3V0LCBTaGFkZXJTdGFnZSBz
aGFkZXJTdGFnZSkKQEAgLTg3LDkgKzg1LDkgQEAgc3RhdGljIE9wdGlvbmFsPEhhc2hNYXA8Qmlu
ZGluZyosIHNpemVfdAogICAgICAgICAgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxBU1Q6OlJlc291cmNlU2VtYW50aWM+KHNlbWFudGljKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgYXV0byYgcmVzb3VyY2VTZW1hbnRpYyA9IFdURjo6
Z2V0PEFTVDo6UmVzb3VyY2VTZW1hbnRpYz4oc2VtYW50aWMpOwotICAgICAgICAgICAgICAgIGlm
ICghbWF0Y2hNb2RlKGJpbmRpbmcuYmluZGluZ1R5cGUsIHJlc291cmNlU2VtYW50aWMubW9kZSgp
KSkKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoTW9kZShiaW5kaW5nLmJpbmRpbmcsIHJlc291
cmNlU2VtYW50aWMubW9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJpbmRpbmcubmFtZSAhPSByZXNvdXJjZVNlbWFudGljLmluZGV4KCkp
CisgICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcuZXh0ZXJuYWxOYW1lICE9IHJlc291cmNlU2Vt
YW50aWMuaW5kZXgoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgaWYgKHNwYWNlICE9IHJlc291cmNlU2VtYW50aWMuc3BhY2UoKSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CShyZXZpc2lv
biAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0
YW5kYXJkTGlicmFyeS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTM3NSwxNCArMzc1LDYyIEBAIG5h
dGl2ZSB0eXBlZGVmIFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQKIG5hdGl2ZSB0eXBlZGVmIFJX
VGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD47CiBuYXRpdmUgdHlwZWRlZiBUZXh0dXJlRGVwdGhD
dWJlPGZsb2F0PjsKIAotbmF0aXZlIGZsb2F0IG9wZXJhdG9yLngoZmxvYXQ0KTsKLW5hdGl2ZSBm
bG9hdCBvcGVyYXRvci55KGZsb2F0NCk7Ci1uYXRpdmUgZmxvYXQgb3BlcmF0b3IueihmbG9hdDQp
OwotbmF0aXZlIGZsb2F0IG9wZXJhdG9yLncoZmxvYXQ0KTsKLW5hdGl2ZSBmbG9hdDQgb3BlcmF0
b3IueD0oZmxvYXQ0LCBmbG9hdCk7Ci1uYXRpdmUgZmxvYXQ0IG9wZXJhdG9yLnk9KGZsb2F0NCwg
ZmxvYXQpOwotbmF0aXZlIGZsb2F0NCBvcGVyYXRvci56PShmbG9hdDQsIGZsb2F0KTsKLW5hdGl2
ZSBmbG9hdDQgb3BlcmF0b3Iudz0oZmxvYXQ0LCBmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgdWNo
YXIodXNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciB1Y2hhcih1aW50KTsKK25hdGl2ZSBvcGVyYXRv
ciB1Y2hhcihjaGFyKTsKK25hdGl2ZSBvcGVyYXRvciB1Y2hhcihzaG9ydCk7CituYXRpdmUgb3Bl
cmF0b3IgdWNoYXIoaW50KTsKK25hdGl2ZSBvcGVyYXRvciB1Y2hhcihoYWxmKTsKK25hdGl2ZSBv
cGVyYXRvciB1Y2hhcihmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgdXNob3J0KHVjaGFyKTsKK25h
dGl2ZSBvcGVyYXRvciB1c2hvcnQodWludCk7CituYXRpdmUgb3BlcmF0b3IgdXNob3J0KGNoYXIp
OworbmF0aXZlIG9wZXJhdG9yIHVzaG9ydChzaG9ydCk7CituYXRpdmUgb3BlcmF0b3IgdXNob3J0
KGludCk7CituYXRpdmUgb3BlcmF0b3IgdXNob3J0KGhhbGYpOworbmF0aXZlIG9wZXJhdG9yIHVz
aG9ydChmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgdWludCh1Y2hhcik7CituYXRpdmUgb3BlcmF0
b3IgdWludCh1c2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIHVpbnQoY2hhcik7CituYXRpdmUgb3Bl
cmF0b3IgdWludChzaG9ydCk7CituYXRpdmUgb3BlcmF0b3IgdWludChpbnQpOworbmF0aXZlIG9w
ZXJhdG9yIHVpbnQoaGFsZik7CituYXRpdmUgb3BlcmF0b3IgdWludChmbG9hdCk7CituYXRpdmUg
b3BlcmF0b3IgY2hhcih1Y2hhcik7CituYXRpdmUgb3BlcmF0b3IgY2hhcih1c2hvcnQpOworbmF0
aXZlIG9wZXJhdG9yIGNoYXIodWludCk7CituYXRpdmUgb3BlcmF0b3IgY2hhcihzaG9ydCk7Citu
YXRpdmUgb3BlcmF0b3IgY2hhcihpbnQpOworbmF0aXZlIG9wZXJhdG9yIGNoYXIoaGFsZik7Citu
YXRpdmUgb3BlcmF0b3IgY2hhcihmbG9hdCk7CituYXRpdmUgb3BlcmF0b3Igc2hvcnQodWNoYXIp
OworbmF0aXZlIG9wZXJhdG9yIHNob3J0KHVzaG9ydCk7CituYXRpdmUgb3BlcmF0b3Igc2hvcnQo
dWludCk7CituYXRpdmUgb3BlcmF0b3Igc2hvcnQoY2hhcik7CituYXRpdmUgb3BlcmF0b3Igc2hv
cnQoaW50KTsKK25hdGl2ZSBvcGVyYXRvciBzaG9ydChoYWxmKTsKK25hdGl2ZSBvcGVyYXRvciBz
aG9ydChmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgaW50KHVjaGFyKTsKK25hdGl2ZSBvcGVyYXRv
ciBpbnQodXNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciBpbnQodWludCk7CituYXRpdmUgb3BlcmF0
b3IgaW50KGNoYXIpOworbmF0aXZlIG9wZXJhdG9yIGludChzaG9ydCk7CituYXRpdmUgb3BlcmF0
b3IgaW50KGhhbGYpOworbmF0aXZlIG9wZXJhdG9yIGludChmbG9hdCk7CituYXRpdmUgb3BlcmF0
b3IgaGFsZih1Y2hhcik7CituYXRpdmUgb3BlcmF0b3IgaGFsZih1c2hvcnQpOworbmF0aXZlIG9w
ZXJhdG9yIGhhbGYodWludCk7CituYXRpdmUgb3BlcmF0b3IgaGFsZihjaGFyKTsKK25hdGl2ZSBv
cGVyYXRvciBoYWxmKHNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciBoYWxmKGludCk7CituYXRpdmUg
b3BlcmF0b3IgaGFsZihmbG9hdCk7CituYXRpdmUgb3BlcmF0b3IgZmxvYXQodWNoYXIpOworbmF0
aXZlIG9wZXJhdG9yIGZsb2F0KHVzaG9ydCk7CituYXRpdmUgb3BlcmF0b3IgZmxvYXQodWludCk7
CituYXRpdmUgb3BlcmF0b3IgZmxvYXQoY2hhcik7CituYXRpdmUgb3BlcmF0b3IgZmxvYXQoc2hv
cnQpOworbmF0aXZlIG9wZXJhdG9yIGZsb2F0KGludCk7CituYXRpdmUgb3BlcmF0b3IgZmxvYXQo
aGFsZik7CiAKIG5hdGl2ZSBmbG9hdCBvcGVyYXRvcisoZmxvYXQsIGZsb2F0KTsKIG5hdGl2ZSBm
bG9hdCBvcGVyYXRvci0oZmxvYXQsIGZsb2F0KTsKQEAgLTM5MSw2ICs0MzksMTcxIEBAIG5hdGl2
ZSB1aW50IG9wZXJhdG9yKyh1aW50LCB1aW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPChpbnQs
IGludCk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcjwodWludCwgdWludCk7CiBuYXRpdmUgYm9vbCBv
cGVyYXRvcjwoZmxvYXQsIGZsb2F0KTsKK25hdGl2ZSBmbG9hdCBvcGVyYXRvciooZmxvYXQsIGZs
b2F0KTsKK25hdGl2ZSBib29sIG9wZXJhdG9yPT0oZmxvYXQsIGZsb2F0KTsKKworLyogbmF0aXZl
IGJvb2wgb3BlcmF0b3IueChib29sMik7CituYXRpdmUgYm9vbCBvcGVyYXRvci55KGJvb2wyKTsK
K25hdGl2ZSBib29sIG9wZXJhdG9yLngoYm9vbDMpOworbmF0aXZlIGJvb2wgb3BlcmF0b3IueShi
b29sMyk7CituYXRpdmUgYm9vbCBvcGVyYXRvci56KGJvb2wzKTsKK25hdGl2ZSBib29sIG9wZXJh
dG9yLngoYm9vbDQpOworbmF0aXZlIGJvb2wgb3BlcmF0b3IueShib29sNCk7CituYXRpdmUgYm9v
bCBvcGVyYXRvci56KGJvb2w0KTsKK25hdGl2ZSBib29sIG9wZXJhdG9yLncoYm9vbDQpOworbmF0
aXZlIGJvb2wyIG9wZXJhdG9yLng9KGJvb2wyLCBib29sKTsKK25hdGl2ZSBib29sMiBvcGVyYXRv
ci55PShib29sMiwgYm9vbCk7CituYXRpdmUgYm9vbDMgb3BlcmF0b3IueD0oYm9vbDMsIGJvb2wp
OworbmF0aXZlIGJvb2wzIG9wZXJhdG9yLnk9KGJvb2wzLCBib29sKTsKK25hdGl2ZSBib29sMyBv
cGVyYXRvci56PShib29sMywgYm9vbCk7CituYXRpdmUgYm9vbDQgb3BlcmF0b3IueD0oYm9vbDQs
IGJvb2wpOworbmF0aXZlIGJvb2w0IG9wZXJhdG9yLnk9KGJvb2w0LCBib29sKTsKK25hdGl2ZSBi
b29sNCBvcGVyYXRvci56PShib29sNCwgYm9vbCk7CituYXRpdmUgYm9vbDQgb3BlcmF0b3Iudz0o
Ym9vbDQsIGJvb2wpOworbmF0aXZlIHVjaGFyIG9wZXJhdG9yLngodWNoYXIyKTsKK25hdGl2ZSB1
Y2hhciBvcGVyYXRvci55KHVjaGFyMik7CituYXRpdmUgdWNoYXIgb3BlcmF0b3IueCh1Y2hhcjMp
OworbmF0aXZlIHVjaGFyIG9wZXJhdG9yLnkodWNoYXIzKTsKK25hdGl2ZSB1Y2hhciBvcGVyYXRv
ci56KHVjaGFyMyk7CituYXRpdmUgdWNoYXIgb3BlcmF0b3IueCh1Y2hhcjQpOworbmF0aXZlIHVj
aGFyIG9wZXJhdG9yLnkodWNoYXI0KTsKK25hdGl2ZSB1Y2hhciBvcGVyYXRvci56KHVjaGFyNCk7
CituYXRpdmUgdWNoYXIgb3BlcmF0b3Iudyh1Y2hhcjQpOworbmF0aXZlIHVjaGFyMiBvcGVyYXRv
ci54PSh1Y2hhcjIsIHVjaGFyKTsKK25hdGl2ZSB1Y2hhcjIgb3BlcmF0b3IueT0odWNoYXIyLCB1
Y2hhcik7CituYXRpdmUgdWNoYXIzIG9wZXJhdG9yLng9KHVjaGFyMywgdWNoYXIpOworbmF0aXZl
IHVjaGFyMyBvcGVyYXRvci55PSh1Y2hhcjMsIHVjaGFyKTsKK25hdGl2ZSB1Y2hhcjMgb3BlcmF0
b3Iuej0odWNoYXIzLCB1Y2hhcik7CituYXRpdmUgdWNoYXI0IG9wZXJhdG9yLng9KHVjaGFyNCwg
dWNoYXIpOworbmF0aXZlIHVjaGFyNCBvcGVyYXRvci55PSh1Y2hhcjQsIHVjaGFyKTsKK25hdGl2
ZSB1Y2hhcjQgb3BlcmF0b3Iuej0odWNoYXI0LCB1Y2hhcik7CituYXRpdmUgdWNoYXI0IG9wZXJh
dG9yLnc9KHVjaGFyNCwgdWNoYXIpOworbmF0aXZlIHVzaG9ydCBvcGVyYXRvci54KHVzaG9ydDIp
OworbmF0aXZlIHVzaG9ydCBvcGVyYXRvci55KHVzaG9ydDIpOworbmF0aXZlIHVzaG9ydCBvcGVy
YXRvci54KHVzaG9ydDMpOworbmF0aXZlIHVzaG9ydCBvcGVyYXRvci55KHVzaG9ydDMpOworbmF0
aXZlIHVzaG9ydCBvcGVyYXRvci56KHVzaG9ydDMpOworbmF0aXZlIHVzaG9ydCBvcGVyYXRvci54
KHVzaG9ydDQpOworbmF0aXZlIHVzaG9ydCBvcGVyYXRvci55KHVzaG9ydDQpOworbmF0aXZlIHVz
aG9ydCBvcGVyYXRvci56KHVzaG9ydDQpOworbmF0aXZlIHVzaG9ydCBvcGVyYXRvci53KHVzaG9y
dDQpOworbmF0aXZlIHVzaG9ydDIgb3BlcmF0b3IueD0odXNob3J0MiwgdXNob3J0KTsKK25hdGl2
ZSB1c2hvcnQyIG9wZXJhdG9yLnk9KHVzaG9ydDIsIHVzaG9ydCk7CituYXRpdmUgdXNob3J0MyBv
cGVyYXRvci54PSh1c2hvcnQzLCB1c2hvcnQpOworbmF0aXZlIHVzaG9ydDMgb3BlcmF0b3IueT0o
dXNob3J0MywgdXNob3J0KTsKK25hdGl2ZSB1c2hvcnQzIG9wZXJhdG9yLno9KHVzaG9ydDMsIHVz
aG9ydCk7CituYXRpdmUgdXNob3J0NCBvcGVyYXRvci54PSh1c2hvcnQ0LCB1c2hvcnQpOworbmF0
aXZlIHVzaG9ydDQgb3BlcmF0b3IueT0odXNob3J0NCwgdXNob3J0KTsKK25hdGl2ZSB1c2hvcnQ0
IG9wZXJhdG9yLno9KHVzaG9ydDQsIHVzaG9ydCk7CituYXRpdmUgdXNob3J0NCBvcGVyYXRvci53
PSh1c2hvcnQ0LCB1c2hvcnQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3IueCh1aW50Mik7CituYXRp
dmUgdWludCBvcGVyYXRvci55KHVpbnQyKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLngodWludDMp
OworbmF0aXZlIHVpbnQgb3BlcmF0b3IueSh1aW50Myk7CituYXRpdmUgdWludCBvcGVyYXRvci56
KHVpbnQzKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLngodWludDQpOworbmF0aXZlIHVpbnQgb3Bl
cmF0b3IueSh1aW50NCk7CituYXRpdmUgdWludCBvcGVyYXRvci56KHVpbnQ0KTsKK25hdGl2ZSB1
aW50IG9wZXJhdG9yLncodWludDQpOworbmF0aXZlIHVpbnQyIG9wZXJhdG9yLng9KHVpbnQyLCB1
aW50KTsKK25hdGl2ZSB1aW50MiBvcGVyYXRvci55PSh1aW50MiwgdWludCk7CituYXRpdmUgdWlu
dDMgb3BlcmF0b3IueD0odWludDMsIHVpbnQpOworbmF0aXZlIHVpbnQzIG9wZXJhdG9yLnk9KHVp
bnQzLCB1aW50KTsKK25hdGl2ZSB1aW50MyBvcGVyYXRvci56PSh1aW50MywgdWludCk7CituYXRp
dmUgdWludDQgb3BlcmF0b3IueD0odWludDQsIHVpbnQpOworbmF0aXZlIHVpbnQ0IG9wZXJhdG9y
Lnk9KHVpbnQ0LCB1aW50KTsKK25hdGl2ZSB1aW50NCBvcGVyYXRvci56PSh1aW50NCwgdWludCk7
CituYXRpdmUgdWludDQgb3BlcmF0b3Iudz0odWludDQsIHVpbnQpOworbmF0aXZlIGNoYXIgb3Bl
cmF0b3IueChjaGFyMik7CituYXRpdmUgY2hhciBvcGVyYXRvci55KGNoYXIyKTsKK25hdGl2ZSBj
aGFyIG9wZXJhdG9yLngoY2hhcjMpOworbmF0aXZlIGNoYXIgb3BlcmF0b3IueShjaGFyMyk7Citu
YXRpdmUgY2hhciBvcGVyYXRvci56KGNoYXIzKTsKK25hdGl2ZSBjaGFyIG9wZXJhdG9yLngoY2hh
cjQpOworbmF0aXZlIGNoYXIgb3BlcmF0b3IueShjaGFyNCk7CituYXRpdmUgY2hhciBvcGVyYXRv
ci56KGNoYXI0KTsKK25hdGl2ZSBjaGFyIG9wZXJhdG9yLncoY2hhcjQpOworbmF0aXZlIGNoYXIy
IG9wZXJhdG9yLng9KGNoYXIyLCBjaGFyKTsKK25hdGl2ZSBjaGFyMiBvcGVyYXRvci55PShjaGFy
MiwgY2hhcik7CituYXRpdmUgY2hhcjMgb3BlcmF0b3IueD0oY2hhcjMsIGNoYXIpOworbmF0aXZl
IGNoYXIzIG9wZXJhdG9yLnk9KGNoYXIzLCBjaGFyKTsKK25hdGl2ZSBjaGFyMyBvcGVyYXRvci56
PShjaGFyMywgY2hhcik7CituYXRpdmUgY2hhcjQgb3BlcmF0b3IueD0oY2hhcjQsIGNoYXIpOwor
bmF0aXZlIGNoYXI0IG9wZXJhdG9yLnk9KGNoYXI0LCBjaGFyKTsKK25hdGl2ZSBjaGFyNCBvcGVy
YXRvci56PShjaGFyNCwgY2hhcik7CituYXRpdmUgY2hhcjQgb3BlcmF0b3Iudz0oY2hhcjQsIGNo
YXIpOworbmF0aXZlIHNob3J0IG9wZXJhdG9yLngoc2hvcnQyKTsKK25hdGl2ZSBzaG9ydCBvcGVy
YXRvci55KHNob3J0Mik7CituYXRpdmUgc2hvcnQgb3BlcmF0b3IueChzaG9ydDMpOworbmF0aXZl
IHNob3J0IG9wZXJhdG9yLnkoc2hvcnQzKTsKK25hdGl2ZSBzaG9ydCBvcGVyYXRvci56KHNob3J0
Myk7CituYXRpdmUgc2hvcnQgb3BlcmF0b3IueChzaG9ydDQpOworbmF0aXZlIHNob3J0IG9wZXJh
dG9yLnkoc2hvcnQ0KTsKK25hdGl2ZSBzaG9ydCBvcGVyYXRvci56KHNob3J0NCk7CituYXRpdmUg
c2hvcnQgb3BlcmF0b3IudyhzaG9ydDQpOworbmF0aXZlIHNob3J0MiBvcGVyYXRvci54PShzaG9y
dDIsIHNob3J0KTsKK25hdGl2ZSBzaG9ydDIgb3BlcmF0b3IueT0oc2hvcnQyLCBzaG9ydCk7Citu
YXRpdmUgc2hvcnQzIG9wZXJhdG9yLng9KHNob3J0Mywgc2hvcnQpOworbmF0aXZlIHNob3J0MyBv
cGVyYXRvci55PShzaG9ydDMsIHNob3J0KTsKK25hdGl2ZSBzaG9ydDMgb3BlcmF0b3Iuej0oc2hv
cnQzLCBzaG9ydCk7CituYXRpdmUgc2hvcnQ0IG9wZXJhdG9yLng9KHNob3J0NCwgc2hvcnQpOwor
bmF0aXZlIHNob3J0NCBvcGVyYXRvci55PShzaG9ydDQsIHNob3J0KTsKK25hdGl2ZSBzaG9ydDQg
b3BlcmF0b3Iuej0oc2hvcnQ0LCBzaG9ydCk7CituYXRpdmUgc2hvcnQ0IG9wZXJhdG9yLnc9KHNo
b3J0NCwgc2hvcnQpOworbmF0aXZlIGludCBvcGVyYXRvci54KGludDIpOworbmF0aXZlIGludCBv
cGVyYXRvci55KGludDIpOworbmF0aXZlIGludCBvcGVyYXRvci54KGludDMpOworbmF0aXZlIGlu
dCBvcGVyYXRvci55KGludDMpOworbmF0aXZlIGludCBvcGVyYXRvci56KGludDMpOworbmF0aXZl
IGludCBvcGVyYXRvci54KGludDQpOworbmF0aXZlIGludCBvcGVyYXRvci55KGludDQpOworbmF0
aXZlIGludCBvcGVyYXRvci56KGludDQpOworbmF0aXZlIGludCBvcGVyYXRvci53KGludDQpOwor
bmF0aXZlIGludDIgb3BlcmF0b3IueD0oaW50MiwgaW50KTsKK25hdGl2ZSBpbnQyIG9wZXJhdG9y
Lnk9KGludDIsIGludCk7CituYXRpdmUgaW50MyBvcGVyYXRvci54PShpbnQzLCBpbnQpOworbmF0
aXZlIGludDMgb3BlcmF0b3IueT0oaW50MywgaW50KTsKK25hdGl2ZSBpbnQzIG9wZXJhdG9yLno9
KGludDMsIGludCk7CituYXRpdmUgaW50NCBvcGVyYXRvci54PShpbnQ0LCBpbnQpOworbmF0aXZl
IGludDQgb3BlcmF0b3IueT0oaW50NCwgaW50KTsKK25hdGl2ZSBpbnQ0IG9wZXJhdG9yLno9KGlu
dDQsIGludCk7CituYXRpdmUgaW50NCBvcGVyYXRvci53PShpbnQ0LCBpbnQpOworbmF0aXZlIGhh
bGYgb3BlcmF0b3IueChoYWxmMik7CituYXRpdmUgaGFsZiBvcGVyYXRvci55KGhhbGYyKTsKK25h
dGl2ZSBoYWxmIG9wZXJhdG9yLngoaGFsZjMpOworbmF0aXZlIGhhbGYgb3BlcmF0b3IueShoYWxm
Myk7CituYXRpdmUgaGFsZiBvcGVyYXRvci56KGhhbGYzKTsKK25hdGl2ZSBoYWxmIG9wZXJhdG9y
LngoaGFsZjQpOworbmF0aXZlIGhhbGYgb3BlcmF0b3IueShoYWxmNCk7CituYXRpdmUgaGFsZiBv
cGVyYXRvci56KGhhbGY0KTsKK25hdGl2ZSBoYWxmIG9wZXJhdG9yLncoaGFsZjQpOworbmF0aXZl
IGhhbGYyIG9wZXJhdG9yLng9KGhhbGYyLCBoYWxmKTsKK25hdGl2ZSBoYWxmMiBvcGVyYXRvci55
PShoYWxmMiwgaGFsZik7CituYXRpdmUgaGFsZjMgb3BlcmF0b3IueD0oaGFsZjMsIGhhbGYpOwor
bmF0aXZlIGhhbGYzIG9wZXJhdG9yLnk9KGhhbGYzLCBoYWxmKTsKK25hdGl2ZSBoYWxmMyBvcGVy
YXRvci56PShoYWxmMywgaGFsZik7CituYXRpdmUgaGFsZjQgb3BlcmF0b3IueD0oaGFsZjQsIGhh
bGYpOworbmF0aXZlIGhhbGY0IG9wZXJhdG9yLnk9KGhhbGY0LCBoYWxmKTsKK25hdGl2ZSBoYWxm
NCBvcGVyYXRvci56PShoYWxmNCwgaGFsZik7CituYXRpdmUgaGFsZjQgb3BlcmF0b3Iudz0oaGFs
ZjQsIGhhbGYpOworbmF0aXZlIGZsb2F0IG9wZXJhdG9yLngoZmxvYXQyKTsKK25hdGl2ZSBmbG9h
dCBvcGVyYXRvci55KGZsb2F0Mik7Ki8KK25hdGl2ZSBmbG9hdCBvcGVyYXRvci54KGZsb2F0Myk7
CituYXRpdmUgZmxvYXQgb3BlcmF0b3IueShmbG9hdDMpOworbmF0aXZlIGZsb2F0IG9wZXJhdG9y
LnooZmxvYXQzKTsKK25hdGl2ZSBmbG9hdCBvcGVyYXRvci54KGZsb2F0NCk7CituYXRpdmUgZmxv
YXQgb3BlcmF0b3IueShmbG9hdDQpOworbmF0aXZlIGZsb2F0IG9wZXJhdG9yLnooZmxvYXQ0KTsK
K25hdGl2ZSBmbG9hdCBvcGVyYXRvci53KGZsb2F0NCk7LyoKK25hdGl2ZSBmbG9hdDIgb3BlcmF0
b3IueD0oZmxvYXQyLCBmbG9hdCk7CituYXRpdmUgZmxvYXQyIG9wZXJhdG9yLnk9KGZsb2F0Miwg
ZmxvYXQpOyovCituYXRpdmUgZmxvYXQzIG9wZXJhdG9yLng9KGZsb2F0MywgZmxvYXQpOworbmF0
aXZlIGZsb2F0MyBvcGVyYXRvci55PShmbG9hdDMsIGZsb2F0KTsKK25hdGl2ZSBmbG9hdDMgb3Bl
cmF0b3Iuej0oZmxvYXQzLCBmbG9hdCk7CituYXRpdmUgZmxvYXQ0IG9wZXJhdG9yLng9KGZsb2F0
NCwgZmxvYXQpOworbmF0aXZlIGZsb2F0NCBvcGVyYXRvci55PShmbG9hdDQsIGZsb2F0KTsKK25h
dGl2ZSBmbG9hdDQgb3BlcmF0b3Iuej0oZmxvYXQ0LCBmbG9hdCk7CituYXRpdmUgZmxvYXQ0IG9w
ZXJhdG9yLnc9KGZsb2F0NCwgZmxvYXQpOwogCiBuYXRpdmUgZmxvYXQgZGR4KGZsb2F0KTsKIG5h
dGl2ZSBmbG9hdCBkZHkoZmxvYXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyOCArNDQsNiBAQCBib29sIHN5bnRoZXNpemVTdHJ1
Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhCiAgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICBm
b3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRp
b25zKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJl
RGVmaW5pdGlvbi0+c3RydWN0dXJlRWxlbWVudHMoKSkgewotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCi0gICAgICAgICAgICAgICAg
YXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1
cmVEZWZpbml0aW9uKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0g
ICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bikpOwotICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBtYWtlU3RyaW5nKCJv
cGVyYXRvci4iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwotICAgICAgICAgICAgICAgIGlmICghcHJvZ3Jh
bS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQotICAgICAgICAg
ICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbjEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+KEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IHN0cnVjdHVyZURlZmluaXRpb24pKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0KTsKLSAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24yID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHN0cnVjdHVyZUVsZW1lbnQudHlw
ZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAg
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwotICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEp
KTsKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24yKSk7Ci0gICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIHN0cnVjdHVyZURlZmluaXRpb24pLCBtYWtlU3Ry
aW5nKCJvcGVyYXRvci4iLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSwgJz0nKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCiAgICAg
ICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAogICAgICAgICAgICAgYXV0byBj
cmVhdGVBbmRlciA9IFsmXShBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiAgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVu
dFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBZGRyZXNzU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBZGRyZXNzU3BhY2UuaAkocmV2aXNpb24gMjQ2MzI2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVz
c1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgZW51bSBjbGFzcyBBZGRy
ZXNzU3BhY2UgOiB1aW50OF90IHsKICAgICBUaHJlYWQKIH07CiAKLXN0YXRpYyBBTFdBWVNfSU5M
SU5FIFN0cmluZyB0b1N0cmluZyhBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorQUxXQVlTX0lO
TElORSBTdHJpbmcgdG9TdHJpbmcoQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKIHsKICAgICBz
d2l0Y2ggKGFkZHJlc3NTcGFjZSkgewogICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpDb25zdGFudDoK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5
UG9pbnRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRW50cnlQb2ludFR5cGUuaAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW50cnlQb2ludFR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBlbnVtIGNsYXNzIEVudHJ5UG9pbnRU
eXBlIDogdWludDhfdCB7CiAgICAgQ29tcHV0ZSwKIH07CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5F
IFN0cmluZyB0b1N0cmluZyhFbnRyeVBvaW50VHlwZSB0eXBlKQorQUxXQVlTX0lOTElORSBTdHJp
bmcgdG9TdHJpbmcoRW50cnlQb2ludFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICBjYXNlIEVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4
cHJlc3Npb24uaAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDE1ICs1OSwxNiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgc2V0dGVyRnVuY3Rpb25OYW1l
KCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iX3N0
cjsKKyAgICAgICAgcmV0dXJuICJvcGVyYXRvcltdPSJfc3RyOwogICAgIH0KIAogICAgIFN0cmlu
ZyBhbmRlckZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1
cm4gIm9wZXJhdG9yW109Il9zdHI7CisgICAgICAgIHJldHVybiAib3BlcmF0b3ImW10iX3N0cjsK
ICAgICB9CiAKICAgICBFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24oKSB7IHJldHVybiBtX2lu
ZGV4OyB9CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IHRha2VJbmRleCgpIHsgcmV0dXJuIFdU
Rk1vdmUobV9pbmRleCk7IH0KIAogcHJpdmF0ZToKICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4g
bV9pbmRleDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5oCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAkod29ya2luZyBjb3B5KQpA
QCAtOTksNiArOTksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgp
IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYgYmFzZVJlZmVy
ZW5jZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQogICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiB0YWtl
QmFzZSgpIHsgcmV0dXJuIFdURk1vdmUobV9iYXNlKTsgfQogCiBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFJlZmVyZW5jZVR5cGUuaAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICBSZWZlcmVuY2VUeXBlKGNvbnN0IFJl
ZmVyZW5jZVR5cGUmKSA9IGRlbGV0ZTsKICAgICBSZWZlcmVuY2VUeXBlKFJlZmVyZW5jZVR5cGUm
JikgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CiAgICAgY29uc3QgVW5uYW1lZFR5cGUm
IGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50VHlwZTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRp
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw2IEBAIGJvb2wgUmVzb3VyY2VTZW1hbnRp
Yzo6aXNBY2NlcHRhYmxlVHlwZSgKICAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZVR5cGUgPSBk
b3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CiAgICAgICAgICAgICByZXR1cm4g
cmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSA9PSBBZGRyZXNzU3BhY2U6OkNvbnN0YW50IHx8
IHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkgPT0gQWRkcmVzc1NwYWNlOjpEZXZpY2U7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVk
VHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBl
UmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CiAgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPih0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKQEAgLTcxLDcgKzY5LDcg
QEAgYm9vbCBSZXNvdXJjZVNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKAogICAgIGNhc2UgTW9k
ZTo6QnVmZmVyOgogICAgICAgICBpZiAoaXM8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQog
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKS5h
ZGRyZXNzU3BhY2UoKSA9PSBBZGRyZXNzU3BhY2U6OkNvbnN0YW50OwotICAgICAgICByZXR1cm4g
aXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBj
YXNlIE1vZGU6OlNhbXBsZXI6CiAgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBp
bnRyaW5zaWNzLnNhbXBsZXJUeXBlKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZm
b2xkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldI
TFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaCIKICNpbmNsdWRlICJXSExTTFBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IldITFNMUmVmZXJlbmNlVHlwZS5oIgogI2luY2x1ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRpYy5o
IgogI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xT
dHJ1Y3R1cmVEZWZpbml0aW9uLmgiCkBAIC0xMDgsNyArMTA5LDE2IEBAIEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6RW50cnlQb2ludFNjYWZmb2wKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCBtX2xheW91dFtpXS5iaW5kaW5ncy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgTmFtZWRC
aW5kaW5nIG5hbWVkQmluZGluZzsKICAgICAgICAgICAgIG5hbWVkQmluZGluZy5lbGVtZW50TmFt
ZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCk7Ci0gICAg
ICAgICAgICBuYW1lZEJpbmRpbmcuaW5kZXggPSBtX2xheW91dFtpXS5iaW5kaW5nc1tqXS5uYW1l
OyAvLyBHUFVCaW5kR3JvdXBMYXlvdXQ6OnRyeUNyZWF0ZSgpIG1ha2VzIHN1cmUgdGhlc2UgZG9u
J3QgY29sbGlkZS4KKyAgICAgICAgICAgIG5hbWVkQmluZGluZy5pbmRleCA9IG1fbGF5b3V0W2ld
LmJpbmRpbmdzW2pdLmludGVybmFsTmFtZTsKKyAgICAgICAgICAgIFdURjo6dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oVW5pZm9ybUJ1ZmZlckJpbmRpbmcmIHVuaWZvcm1CdWZmZXJCaW5kaW5n
KSB7CisgICAgICAgICAgICAgICAgTGVuZ3RoSW5mb3JtYXRpb24gbGVuZ3RoSW5mb3JtYXRpb24g
eyBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpLCBtX2dlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpLCB1bmlmb3JtQnVmZmVyQmluZGluZy5sZW5ndGhOYW1lIH07
CisgICAgICAgICAgICAgICAgbmFtZWRCaW5kaW5nLmxlbmd0aEluZm9ybWF0aW9uID0gbGVuZ3Ro
SW5mb3JtYXRpb247CisgICAgICAgICAgICB9LCBbJl0oU2FtcGxlckJpbmRpbmcmKSB7CisgICAg
ICAgICAgICB9LCBbJl0oVGV4dHVyZUJpbmRpbmcmKSB7CisgICAgICAgICAgICB9LCBbJl0oU3Rv
cmFnZUJ1ZmZlckJpbmRpbmcmIHN0b3JhZ2VCdWZmZXJCaW5kaW5nKSB7CisgICAgICAgICAgICAg
ICAgTGVuZ3RoSW5mb3JtYXRpb24gbGVuZ3RoSW5mb3JtYXRpb24geyBtX3R5cGVOYW1lci5nZW5l
cmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpLCBtX2dlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpLCBzdG9yYWdlQnVmZmVyQmluZGluZy5sZW5ndGhOYW1lIH07CisgICAgICAgICAgICAgICAg
bmFtZWRCaW5kaW5nLmxlbmd0aEluZm9ybWF0aW9uID0gbGVuZ3RoSW5mb3JtYXRpb247CisgICAg
ICAgICAgICB9KSwgbV9sYXlvdXRbaV0uYmluZGluZ3Nbal0uYmluZGluZyk7CiAgICAgICAgICAg
ICBuYW1lZEJpbmRHcm91cC5uYW1lZEJpbmRpbmdzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5h
bWVkQmluZGluZykpOwogICAgICAgICB9CiAgICAgICAgIG1fbmFtZWRCaW5kR3JvdXBzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkQmluZEdyb3VwKSk7CkBAIC0xMzcsMTAgKzE0NywxNiBA
QCBTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpyZXNvdXJjZUhlCiAgICAgICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJjZU1hcC5maW5kKCZtX2xheW91dFtpXS5iaW5kaW5nc1tq
XSk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9yZXNvdXJjZU1hcC5lbmQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1l
ID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptX2VudHJ5UG9pbnRJdGVtcy5pbnB1
dHNbaXRlcmF0b3ItPnZhbHVlXS51bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBhdXRvJiB1bm5h
bWVkVHlwZSA9ICptX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZhbHVlXS51bm5h
bWVkVHlwZTsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKSk7CisgICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QVNU
OjpSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBhdXRvIG1hbmdsZWRU
eXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShyZWZlcmVuY2VUeXBlLmVs
ZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgYXV0byBhZGRyZXNzU3BhY2UgPSB0b1N0cmluZyhy
ZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKTsKICAgICAgICAgICAgIGF1dG8gZWxlbWVudE5h
bWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmVsZW1lbnROYW1lOwog
ICAgICAgICAgICAgYXV0byBpbmRleCA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVkQmluZGlu
Z3Nbal0uaW5kZXg7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAiIFtbaWQoIiwgaW5k
ZXgsICIpXV07XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIgICAgIiwgYWRkcmVzc1NwYWNlLCAiICIsIG1hbmdsZWRUeXBlTmFtZSwgIiogIiwgZWxl
bWVudE5hbWUsICIgW1tpZCgiLCBpbmRleCwgIildXTtcbiIpKTsKKyAgICAgICAgICAgIGlmIChh
dXRvIGxlbmd0aEluZm9ybWF0aW9uID0gbV9uYW1lZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5n
c1tqXS5sZW5ndGhJbmZvcm1hdGlvbikKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgdWludDIgIiwgbGVuZ3RoSW5mb3JtYXRpb24tPmVsZW1lbnRO
YW1lLCAiIFtbaWQoIiwgbGVuZ3RoSW5mb3JtYXRpb24tPmluZGV4LCAiKV1dO1xuIikpOwogICAg
ICAgICB9CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuXG4iKTsKICAgICB9CkBA
IC0xNjIsNiArMTc4LDQxIEBAIE9wdGlvbmFsPFN0cmluZz4gRW50cnlQb2ludFNjYWZmb2xkaW5n
OjoKICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCitzdGF0aWMgU3Ry
aW5nIGludGVybmFsVHlwZUZvclNlbWFudGljKGNvbnN0IEFTVDo6QnVpbHRJblNlbWFudGljJiBi
dWlsdEluU2VtYW50aWMpCit7CisgICAgc3dpdGNoIChidWlsdEluU2VtYW50aWMudmFyaWFibGUo
KSkgeworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkluc3RhbmNl
SUQ6CisgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2Vt
YW50aWM6OlZhcmlhYmxlOjpTVlZlcnRleElEOgorICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsK
KyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6UFNpemU6CisgICAgICAg
IHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJp
YWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgcmV0dXJuICJmbG9hdDQiX3N0cjsKKyAgICBjYXNl
IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJc0Zyb250RmFjZToKKyAgICAgICAg
cmV0dXJuICJib29sIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFi
bGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgIGNhc2Ug
QVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVklubmVyQ292ZXJhZ2U6CisgICAgICAg
IHJldHVybiAidWludCJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlh
YmxlOjpTVlRhcmdldDoKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGNhc2UgQVNUOjpC
dWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICByZXR1cm4gImZsb2F0
Il9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWQ292ZXJh
Z2U6CisgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2Vt
YW50aWM6OlZhcmlhYmxlOjpTVkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgIHJldHVybiAidWlu
dDMiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91
cElEOgorICAgICAgICByZXR1cm4gInVpbnQzIl9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBJbmRleDoKKyAgICAgICAgcmV0dXJuICJ1aW50Il9z
dHI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGJ1aWx0SW5TZW1hbnRpYy52YXJpYWJs
ZSgpID09IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEKTsK
KyAgICAgICAgcmV0dXJuICJ1aW50MyJfc3RyOworICAgIH0KK30KKwogT3B0aW9uYWw8U3RyaW5n
PiBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmJ1aWx0SW5zU2lnbmF0dXJlKCkKIHsKICAgICBpZiAo
IW1fbmFtZWRCdWlsdElucy5zaXplKCkpCkBAIC0xNzQsOSArMjI1LDExIEBAIE9wdGlvbmFsPFN0
cmluZz4gRW50cnlQb2ludFNjYWZmb2xkaW5nOjoKICAgICAgICAgYXV0byYgbmFtZWRCdWlsdElu
ID0gbV9uYW1lZEJ1aWx0SW5zW2ldOwogICAgICAgICBhdXRvJiBpdGVtID0gbV9lbnRyeVBvaW50
SXRlbXMuaW5wdXRzW25hbWVkQnVpbHRJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXTsKICAgICAg
ICAgYXV0byYgYnVpbHRJblNlbWFudGljID0gV1RGOjpnZXQ8QVNUOjpCdWlsdEluU2VtYW50aWM+
KCppdGVtLnNlbWFudGljKTsKLSAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKml0ZW0udW5uYW1lZFR5cGUpOworICAgICAgICBhdXRv
IGludGVybmFsVHlwZSA9IGludGVybmFsVHlwZUZvclNlbWFudGljKGJ1aWx0SW5TZW1hbnRpYyk7
CisgICAgICAgIGlmIChpbnRlcm5hbFR5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBpbnRlcm5h
bFR5cGUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKml0ZW0udW5uYW1lZFR5cGUp
OwogICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJpYWJsZU5hbWU7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1l
LCAnICcsIHZhcmlhYmxlTmFtZSwgJyAnLCBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhidWlsdEluU2Vt
YW50aWMpKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoaW50ZXJu
YWxUeXBlLCAnICcsIHZhcmlhYmxlTmFtZSwgJyAnLCBhdHRyaWJ1dGVGb3JTZW1hbnRpYyhidWls
dEluU2VtYW50aWMpKSk7CiAgICAgfQogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7CiB9CkBAIC0yNTcsMTYgKzMxMCwzNyBAQCBTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5n
Ojp1bnBhY2tSZXNvCiAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZXNvdXJjZU1hcC5m
aW5kKCZtX2xheW91dFtpXS5iaW5kaW5nc1tqXSk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9yZXNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNbaXRlcmF0b3ItPnZh
bHVlXS5wYXRoOwotICAgICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG1fbmFtZWRCaW5kR3Jv
dXBzW2ldLm5hbWVkQmluZGluZ3Nbal0uZWxlbWVudE5hbWU7Ci0gICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCB2
YXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICI7XG4iKSk7CisgICAgICAgICAgICBpZiAo
bV9uYW1lZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5sZW5ndGhJbmZvcm1hdGlvbikg
eworICAgICAgICAgICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5pbnB1dHNb
aXRlcmF0b3ItPnZhbHVlXS5wYXRoOworICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudE5hbWUg
PSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmVsZW1lbnROYW1lOworICAg
ICAgICAgICAgICAgIGF1dG8gbGVuZ3RoRWxlbWVudE5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tp
XS5uYW1lZEJpbmRpbmdzW2pdLmxlbmd0aEluZm9ybWF0aW9uLT5lbGVtZW50TmFtZTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGxlbmd0aFRlbXBvcmFyeU5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tp
XS5uYW1lZEJpbmRpbmdzW2pdLmxlbmd0aEluZm9ybWF0aW9uLT50ZW1wb3JhcnlOYW1lOworCisg
ICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSAqbV9lbnRyeVBvaW50SXRlbXMuaW5w
dXRzW2l0ZXJhdG9yLT52YWx1ZV0udW5uYW1lZFR5cGU7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgICAgICAgICBh
dXRvJiByZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih1bm5hbWVk
VHlwZSk7CisgICAgICAgICAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKKworICAg
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInNpemVfdCAiLCBs
ZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0gIiwgdmFyaWFibGVOYW1lLCAnLicsIGxlbmd0aEVsZW1l
bnROYW1lLCAiLng7XG4iKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0gIiwgbGVuZ3RoVGVtcG9yYXJ5TmFt
ZSwgIiA8PCAzMjtcbiIpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKGxlbmd0aFRlbXBvcmFyeU5hbWUsICIgPSAiLCBsZW5ndGhUZW1wb3JhcnlOYW1l
LCAiIHwgIiwgdmFyaWFibGVOYW1lLCAnLicsIGxlbmd0aEVsZW1lbnROYW1lLCAiLnk7XG4iKSk7
CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZW5ndGhU
ZW1wb3JhcnlOYW1lLCAiID0gIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiAvIHNpemVvZigiLCBt
YW5nbGVkVHlwZU5hbWUsICIpO1xuIikpOworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID4gMHhGRkZG
RkZGRikgIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA9IDB4RkZGRkZGRkY7XG4iKSk7CisgICAg
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQ
YXRoKHBhdGgpLCAiID0geyAiLCB2YXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICIsIHN0
YXRpY19jYXN0PHVpbnQzMl90PigiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiKSB9O1xuIikpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRy
eVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1ZV0ucGF0aDsKKyAgICAgICAgICAgICAg
ICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tq
XS5lbGVtZW50TmFtZTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCB2YXJpYWJsZU5hbWUsICcuJywg
ZWxlbWVudE5hbWUsICI7XG4iKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBmb3IgKGF1dG8mIG5hbWVkQnVpbHRJbiA6IG1fbmFtZWRCdWlsdElucykgewotICAgICAg
ICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW25hbWVkQnVpbHRJbi5pbmRl
eEluRW50cnlQb2ludEl0ZW1zXS5wYXRoOworICAgICAgICBhdXRvJiBpdGVtID0gbV9lbnRyeVBv
aW50SXRlbXMuaW5wdXRzW25hbWVkQnVpbHRJbi5pbmRleEluRW50cnlQb2ludEl0ZW1zXTsKKyAg
ICAgICAgYXV0byYgcGF0aCA9IGl0ZW0ucGF0aDsKICAgICAgICAgYXV0byYgdmFyaWFibGVOYW1l
ID0gbmFtZWRCdWlsdEluLnZhcmlhYmxlTmFtZTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0gIiwgdmFyaWFibGVOYW1l
LCAiO1xuIikpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqaXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChwYXRoKSwgIiA9ICIsIG1hbmds
ZWRUeXBlTmFtZSwgJygnLCB2YXJpYWJsZU5hbWUsICIpO1xuIikpOwogICAgIH0KICAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQpAQCAtMjg5LDggKzM2MywxMyBAQCBWZXJ0
ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OlZlcnRleEVudHJ5CiAKICAgICBtX25hbWVkT3V0cHV0
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgb3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0
ZW1zLm91dHB1dHNbaV07CiAgICAgICAgIE5hbWVkT3V0cHV0IG5hbWVkT3V0cHV0OwogICAgICAg
ICBuYW1lZE91dHB1dC5lbGVtZW50TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFN0cnVj
dHVyZUVsZW1lbnROYW1lKCk7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFT
VDo6QnVpbHRJblNlbWFudGljPigqb3V0cHV0SXRlbS5zZW1hbnRpYykpCisgICAgICAgICAgICBu
YW1lZE91dHB1dC5pbnRlcm5hbFR5cGVOYW1lID0gaW50ZXJuYWxUeXBlRm9yU2VtYW50aWMoV1RG
OjpnZXQ8QVNUOjpCdWlsdEluU2VtYW50aWM+KCpvdXRwdXRJdGVtLnNlbWFudGljKSk7CisgICAg
ICAgIGlmIChuYW1lZE91dHB1dC5pbnRlcm5hbFR5cGVOYW1lLmlzTnVsbCgpKQorICAgICAgICAg
ICAgbmFtZWRPdXRwdXQuaW50ZXJuYWxUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqb3V0cHV0SXRlbS51bm5hbWVkVHlwZSk7CiAgICAgICAgIG1fbmFtZWRPdXRwdXRz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5hbWVkT3V0cHV0KSk7CiAgICAgfQogfQpAQCAtMzEx
LDEwICszOTAsMTAgQEAgU3RyaW5nIFZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscAog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtX3JldHVyblN0
cnVjdE5hbWUsICIge1xuIikpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBv
aW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiBvdXRwdXRJdGVt
ID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0c1tpXTsKLSAgICAgICAgYXV0byBtYW5nbGVkVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1l
ZFR5cGUpOworICAgICAgICBhdXRvJiBpbnRlcm5hbFR5cGVOYW1lID0gbV9uYW1lZE91dHB1dHNb
aV0uaW50ZXJuYWxUeXBlTmFtZTsKICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG1fbmFtZWRP
dXRwdXRzW2ldLmVsZW1lbnROYW1lOwogICAgICAgICBhdXRvIGF0dHJpYnV0ZSA9IGF0dHJpYnV0
ZUZvclNlbWFudGljKCpvdXRwdXRJdGVtLnNlbWFudGljKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50
TmFtZSwgJyAnLCBhdHRyaWJ1dGUsICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1l
LCAnICcsIGF0dHJpYnV0ZSwgIjtcbiIpKTsKICAgICB9CiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn07XG5cbiIpOwogCkBAIC0zNjMsOCArNDQyLDkgQEAgU3RyaW5nIFZlcnRleEVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6cGFjawogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgZWxl
bWVudE5hbWUgPSBtX25hbWVkT3V0cHV0c1tpXS5lbGVtZW50TmFtZTsKKyAgICAgICAgYXV0byYg
aW50ZXJuYWxUeXBlTmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmludGVybmFsVHlwZU5hbWU7CiAg
ICAgICAgIGF1dG8mIHBhdGggPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldLnBhdGg7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcob3V0cHV0VmFyaWFibGVOYW1l
LCAnLicsIGVsZW1lbnROYW1lLCAiID0gIiwgaW5wdXRWYXJpYWJsZU5hbWUsIG1hbmdsZWRPdXRw
dXRQYXRoKHBhdGgpLCAiO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG91dHB1dFZhcmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIiA9ICIsIGludGVy
bmFsVHlwZU5hbWUsICcoJywgaW5wdXRWYXJpYWJsZU5hbWUsIG1hbmdsZWRPdXRwdXRQYXRoKHBh
dGgpLCAiKTtcbiIpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKIH0KQEAgLTM4OSw4ICs0NjksMTMgQEAgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OkZyYWdtZW50RQogCiAgICAgbV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1
dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOwogICAgICAgICBO
YW1lZE91dHB1dCBuYW1lZE91dHB1dDsKICAgICAgICAgbmFtZWRPdXRwdXQuZWxlbWVudE5hbWUg
PSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1
dEl0ZW0uc2VtYW50aWMpKQorICAgICAgICAgICAgbmFtZWRPdXRwdXQuaW50ZXJuYWxUeXBlTmFt
ZSA9IGludGVybmFsVHlwZUZvclNlbWFudGljKFdURjo6Z2V0PEFTVDo6QnVpbHRJblNlbWFudGlj
Pigqb3V0cHV0SXRlbS5zZW1hbnRpYykpOworICAgICAgICBpZiAobmFtZWRPdXRwdXQuaW50ZXJu
YWxUeXBlTmFtZS5pc051bGwoKSkKKyAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1l
ZFR5cGUpOwogICAgICAgICBtX25hbWVkT3V0cHV0cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShu
YW1lZE91dHB1dCkpOwogICAgIH0KIH0KQEAgLTQxMSwxMCArNDk2LDEwIEBAIFN0cmluZyBGcmFn
bWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGUKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9yZXR1cm5TdHJ1Y3ROYW1lLCAiIHtcbiIpKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgYXV0byYgb3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1
dHNbaV07Ci0gICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpvdXRwdXRJdGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byYgaW50
ZXJuYWxUeXBlTmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmludGVybmFsVHlwZU5hbWU7CiAgICAg
ICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX25hbWVkT3V0cHV0c1tpXS5lbGVtZW50TmFtZTsKICAg
ICAgICAgYXV0byBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVGb3JTZW1hbnRpYygqb3V0cHV0SXRlbS5z
ZW1hbnRpYyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAi
LCBtYW5nbGVkVHlwZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICcgJywgYXR0cmlidXRlLCAiO1xu
IikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgaW50
ZXJuYWxUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgJyAnLCBhdHRyaWJ1dGUsICI7XG4iKSk7
CiAgICAgfQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuXG4iKTsKIApAQCAtNDYzLDgg
KzU0OCw5IEBAIFN0cmluZyBGcmFnbWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGEKICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1dHNb
aV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIGludGVybmFsVHlwZU5hbWUgPSBtX25hbWVk
T3V0cHV0c1tpXS5pbnRlcm5hbFR5cGVOYW1lOwogICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRy
eVBvaW50SXRlbXMub3V0cHV0c1tpXS5wYXRoOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG91dHB1dFZhcmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIiA9ICIs
IGlucHV0VmFyaWFibGVOYW1lLCBtYW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIjtcbiIpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhvdXRwdXRWYXJpYWJsZU5hbWUs
ICcuJywgZWxlbWVudE5hbWUsICIgPSAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnKCcsIGlucHV0VmFy
aWFibGVOYW1lLCBtYW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIik7XG4iKSk7CiAgICAgfQogICAg
IHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CkBAIC00ODMsNyArNTY5LDcgQEAg
U3RyaW5nIENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZwogewogICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoImNvbXB1dGUgdm9pZCAiLCBmdW5jdGlvbk5hbWUsICcoJykpOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoImtlcm5lbCB2b2lkICIsIGZ1bmN0aW9uTmFtZSwgJygnKSk7
CiAgICAgYm9vbCBlbXB0eSA9IHRydWU7CiAgICAgaWYgKGF1dG8gcmVzb3VyY2VTaWduYXR1cmUg
PSB0aGlzLT5yZXNvdXJjZVNpZ25hdHVyZSgpKSB7CiAgICAgICAgIGVtcHR5ID0gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5
UG9pbnRTY2FmZm9sZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgJKHJldmlzaW9u
IDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDkgKzc3LDE1
IEBAIHByb3RlY3RlZDoKICAgICBMYXlvdXQmIG1fbGF5b3V0OwogICAgIHN0ZDo6ZnVuY3Rpb248
U3RyaW5nKCk+IG1fZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lOwogCisgICAgc3RydWN0IExlbmd0
aEluZm9ybWF0aW9uIHsKKyAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOworICAgICAgICBTdHJp
bmcgdGVtcG9yYXJ5TmFtZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXg7CisgICAgfTsKICAgICBz
dHJ1Y3QgTmFtZWRCaW5kaW5nIHsKICAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOwogICAgICAg
ICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgT3B0aW9uYWw8TGVuZ3RoSW5mb3JtYXRpb24+IGxl
bmd0aEluZm9ybWF0aW9uOwogICAgIH07CiAgICAgc3RydWN0IE5hbWVkQmluZEdyb3VwIHsKICAg
ICAgICAgU3RyaW5nIHN0cnVjdE5hbWU7CkBAIC0xMjMsNiArMTI5LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7CiAgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAg
ICAgICAgU3RyaW5nIGludGVybmFsVHlwZU5hbWU7CiAgICAgfTsKICAgICBWZWN0b3I8TmFtZWRP
dXRwdXQ+IG1fbmFtZWRPdXRwdXRzOwogfTsKQEAgLTE1MSw2ICsxNTgsNyBAQCBwcml2YXRlOgog
CiAgICAgc3RydWN0IE5hbWVkT3V0cHV0IHsKICAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1lOwor
ICAgICAgICBTdHJpbmcgaW50ZXJuYWxUeXBlTmFtZTsKICAgICB9OwogICAgIFZlY3RvcjxOYW1l
ZE91dHB1dD4gbV9uYW1lZE91dHB1dHM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaW5jbHVkZSAiV0hMU0xBU1REdW1wZXIu
aCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewpAQCAtMTUzLDEy
ICsxNTUsNDQgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygidmFyaWFi
bGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAgc3RydWN0IFN0YWNrSXRlbSB7
CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgU3RyaW5nIGxlZnRWYWx1ZTsKKyAgICB9
OworCisgICAgdm9pZCBhcHBlbmRSaWdodFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
biwgU3RyaW5nIHZhbHVlKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb24p
OworICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1vdmUodmFsdWUpLCBTdHJpbmcoKSB9KTsK
KyAgICB9CisKKyAgICB2b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24sIFN0cmluZyB2YWx1ZSwgU3RyaW5nIGxlZnRWYWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICghZXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSkKKyAgICAg
ICAgICAgIGRhdGFMb2dMbigibm90IGFuIGx2YWx1ZSEhITogIiwgRXhwcmVzc2lvbkR1bXBlcihl
eHByZXNzaW9uKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4cHJlc3Npb24udHlwZUFubm90
YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IFdU
Rk1vdmUodmFsdWUpLCBXVEZNb3ZlKGxlZnRWYWx1ZSkgfSk7CisgICAgfQorCisgICAgU3RyaW5n
IHRha2VMYXN0VmFsdWUoKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zdGFjay5s
YXN0KCkudmFsdWUpOworICAgICAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpLnZhbHVlOwor
ICAgIH0KKworICAgIFN0cmluZyB0YWtlTGFzdExlZnRWYWx1ZSgpCisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3N0YWNrLmxhc3QoKS5sZWZ0VmFsdWUpOworICAgICAgICByZXR1cm4g
bV9zdGFjay50YWtlTGFzdCgpLmxlZnRWYWx1ZTsKKyAgICB9CisKICAgICBJbnRyaW5zaWNzJiBt
X2ludHJpbnNpY3M7CiAgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKICAgICBIYXNoTWFwPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOwogICAg
IEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgU3RyaW5nPiBtX3ZhcmlhYmxlTWFw
cGluZzsKICAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBtX3N0YWNrOworCisgICAgVmVjdG9yPFN0YWNrSXRlbT4gbV9zdGFjazsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGlu
ZzsKICAgICBMYXlvdXQmIG1fbGF5b3V0OwogICAgIHVuc2lnbmVkIG1fdmFyaWFibGVDb3VudCB7
IDAgfTsKQEAgLTI0Niw3ICsyODAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQog
ewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVm
ZmVjdGZ1bEV4cHJlc3Npb24oKSk7Ci0gICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBUaGUgc3Rh
dGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRo
aW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICB0YWtlTGFzdFZhbHVlKCk7IC8vIFRoZSBzdGF0ZW1l
bnQgaXMgYWxyZWFkeSBlZmZlY3RmdWwsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcg
d2l0aCB0aGUgcmVzdWx0LgogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpGYWxsdGhyb3VnaCYpCkBAIC0yNjQsNyArMjk4LDcgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKAogCiAgICAgaWYgKGxvb3BDb25kaXRpb25Mb2NhdGlv
biA9PSBMb29wQ29uZGl0aW9uTG9jYXRpb246OkJlZm9yZUJvZHkgJiYgY29uZGl0aW9uRXhwcmVz
c2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmNvbmRpdGlvbkV4cHJlc3Npb24p
OwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9z
dGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIHRha2VMYXN0VmFsdWUoKSwgIikgYnJlYWs7XG4i
KSk7CiAgICAgfQogCiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiZG8ge1xuIik7CkBAIC0y
NzYsMTIgKzMxMCwxMiBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6ZW1pdExvb3Ao
CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaW5jcmVtZW50KTsKICAgICAgICAgLy8gRXhw
cmVzc2lvbiByZXN1bHRzIGdldCBwdXNoZWQgdG8gbV9zdGFjay4gV2UgZG9uJ3QgdXNlIHRoZSBy
ZXN1bHQKICAgICAgICAgLy8gb2YgaW5jcmVtZW50LCBzbyB3ZSBkaXNwZW5zZSBvZiB0aGF0IG5v
dy4KLSAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICB0YWtlTGFzdFZhbHVlKCk7
CiAgICAgfQogCiAgICAgaWYgKGxvb3BDb25kaXRpb25Mb2NhdGlvbiA9PSBMb29wQ29uZGl0aW9u
TG9jYXRpb246OkFmdGVyQm9keSAmJiBjb25kaXRpb25FeHByZXNzaW9uKSB7CiAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqY29uZGl0aW9uRXhwcmVzc2lvbik7Ci0gICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIp
IGJyZWFrO1xuIikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
ImlmICghIiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSBicmVhaztcbiIpKTsKICAgICB9CiAKICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IFxuIik7CkBAIC0zMDUsNyArMzM5LDcgQEAgdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoc3RhdGVtZW50KTsKICAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4m
IGV4cHJlc3Npb24pIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwot
ICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhp
bmcgd2l0aCB0aGUgcmVzdWx0LgorICAgICAgICB0YWtlTGFzdFZhbHVlKCk7IC8vIFdlIGRvbid0
IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgogICAgIH0pLCBmb3JMb29wLmlu
aXRpYWxpemF0aW9uKCkpOwogCiAgICAgZW1pdExvb3AoTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpC
ZWZvcmVCb2R5LCBmb3JMb29wLmNvbmRpdGlvbigpLCBmb3JMb29wLmluY3JlbWVudCgpLCBmb3JM
b29wLmJvZHkoKSk7CkBAIC0zMTUsNyArMzQ5LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChp
ZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoImlmICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHtcbiIpKTsKKyAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCB0YWtlTGFzdFZhbHVlKCksICIp
IHtcbiIpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKICAg
ICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgewogICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKCJ9IGVsc2Uge1xuIik7CkBAIC0zMzAsMTAgKzM2NCwxMCBAQCB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
cmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9lbnRyeVBvaW50U2NhZmZv
bGRpbmcpIHsKICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQ
b2ludFNjYWZmb2xkaW5nLT5wYWNrKG1fc3RhY2sudGFrZUxhc3QoKSwgdmFyaWFibGVOYW1lKSk7
CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xk
aW5nLT5wYWNrKHRha2VMYXN0VmFsdWUoKSwgdmFyaWFibGVOYW1lKSk7CiAgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInJldHVybiAiLCB2YXJpYWJsZU5hbWUs
ICI7XG4iKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOwor
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwg
dGFrZUxhc3RWYWx1ZSgpLCAiO1xuIikpOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCJyZXR1cm47XG4iKTsKIH0KQEAgLTM0Miw3ICszNzYsNyBAQCB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiB7CiAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKIAotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygic3dpdGNoICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHsiKSk7Cisg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzd2l0Y2ggKCIsIHRha2VMYXN0
VmFsdWUoKSwgIikgeyIpKTsKICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0
ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENh
c2UpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwpAQCAtMzc1LDcgKzQwOSw3
IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIGF1dG8gbWFuZ2xl
ZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGludGVnZXJMaXRlcmFs
LnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1h
bmdsZWRUeXBlTmFtZSwgIj4oIiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7Ci0g
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGlu
dGVnZXJMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsKQpAQCAtMzgzLDcgKzQxNyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1QKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwogICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywg
dmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCB1
bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCksICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZSh1bnNpZ25lZEludGVnZXJM
aXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkKQEAgLTM5MSw3ICs0MjUs
NyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2
YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmds
ZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmbG9hdExpdGVyYWwu
cmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
YW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFu
Z2xlZFR5cGVOYW1lLCAiPigiLCBmbG9hdExpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7Ci0gICAg
bV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGZsb2F0
TGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKQpAQCAtNDA4LDcgKzQ0Miw3
IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBlbHNlCiAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIm51bGxwdHIiKTsKICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCI7XG4iKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwor
ICAgIGFwcGVuZFJpZ2h0VmFsdWUobnVsbExpdGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJiBi
b29sZWFuTGl0ZXJhbCkKQEAgLTQxNiw3ICs0NTAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShib29sZWFuTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJp
YWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGJvb2xl
YW5MaXRlcmFsLnZhbHVlKCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCAiKTtcbiIpKTsKLSAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoYm9vbGVhbkxp
dGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsKQpAQCAtNDI2LDcgKzQ2MCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1QKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICcuJywgbV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVu
dW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxl
TmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwsIHZh
cmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCkBAIC00MzQsMzcgKzQ2OCwzOSBAQCB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgVmlzaXRvcjo6dmlzaXQoZXhw
cmVzc2lvbik7CiB9CiAKLXZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mKQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKIHsKICAgICAvLyBUaGlzIHNob3VsZCBi
ZSBsb3dlcmVkIGFscmVhZHkuCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTU3ODggUmVwbGFjZSB0aGlzIHdpdGggQVNTRVJUX05PVF9SRUFD
SEVEKCkuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBtX3N0YWNrLmFwcGVuZCgiZHVtbXki
KTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGRvdEV4cHJlc3Npb24sICJkdW1teSIpOwogfQogCiB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpHbG9iYWxWYXJpYWJsZVJl
ZmVyZW5jZSYgZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2UpCiB7Ci0gICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRvIHZhbHVlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gcG9pbnRlck5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5yZXNvbHZlZFR5
cGUoKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLmJh
c2UoKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0aHJlYWQgIiwg
bWFuZ2xlZFR5cGVOYW1lLCAiJiAiLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VM
YXN0KCksICItPiIsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudChn
bG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5zdHJ1Y3RGaWVsZCgpKSwgIjtcbiIpKTsKLSAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygidGhyZWFkICIsIG1hbmdsZWRUeXBlTmFtZSwgIiogIiwgcG9pbnRlck5hbWUsICIg
PSAmIiwgdGFrZUxhc3RWYWx1ZSgpLCAiLT4iLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0
cnVjdHVyZUVsZW1lbnQoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2Uuc3RydWN0RmllbGQoKSksICI7
XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCB2YWx1ZU5hbWUsICIgPSAiLCAiKiIsIHBvaW50ZXJOYW1lLCAiO1xuIikpOwor
ICAgIGFwcGVuZExlZnRWYWx1ZShnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZSwgdmFsdWVOYW1lLCBw
b2ludGVyTmFtZSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OkluZGV4RXhwcmVzc2lvbiYpCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKIHsKICAgICAvLyBUaGlz
IHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3ODggUmVwbGFjZSB0aGlzIHdpdGggQVNTRVJU
X05PVF9SRUFDSEVEKCkuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBtX3N0YWNrLmFwcGVu
ZCgiZHVtbXkiKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGluZGV4RXhwcmVzc2lvbiwgImR1bW15
Iik7CiB9CiAKLXZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiYpCit2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bikKIHsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCiAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3ODggUmVwbGFj
ZSB0aGlzIHdpdGggQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICBtX3N0YWNrLmFwcGVuZCgiZHVtbXkiKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiwgImR1bW15Iik7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFy
YXRpb24pCkBAIC00NzYsNyArNTEyLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVAogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4MTYwIEltcGxlbWVudCBxdWFsaWZpZXJzLgogICAgIGlmICh2YXJpYWJsZURl
Y2xhcmF0aW9uLmluaXRpYWxpemVyKCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2
YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJp
YWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFj
ay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJpYWJsZURlY2xhcmF0
aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgdGFrZUxhc3RWYWx1ZSgpLCAi
O1xuIikpOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9u
LnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiO1xuIikpOwogfQpAQCAtNDg0LDExICs1MjAs
MTIgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFz
c2lnbm1lbnRFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50
RXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgIGF1dG8gbGVmdE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0
KCk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CiAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAgIGF1dG8g
cmlnaHROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhsZWZ0TmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKLSAgICBt
X3N0YWNrLmFwcGVuZChyaWdodE5hbWUpOworICAgIGF1dG8gcmlnaHROYW1lID0gdGFrZUxhc3RW
YWx1ZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIHBv
aW50ZXJOYW1lLCAiKSAqIiwgcG9pbnRlck5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7
CisgICAgLy9tX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIioiLCBwb2ludGVyTmFt
ZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGFzc2ln
bm1lbnRFeHByZXNzaW9uLCByaWdodE5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCkBAIC00
OTYsNyArNTMzLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAog
ICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50TmFtZXM7CiAgICAgZm9yIChhdXRvJiBhcmd1bWVu
dCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChhcmd1bWVudCk7Ci0gICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKG1fc3RhY2sudGFr
ZUxhc3QoKSk7CisgICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKHRha2VMYXN0VmFsdWUoKSk7
CiAgICAgfQogICAgIEFTU0VSVChjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZChjYWxsRXhwcmVzc2lvbi5mdW5jdGlv
bigpKTsKQEAgLTUwOSw3ICs1NDYsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1lc1tp
XSk7CiAgICAgfQogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKLSAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoY2FsbEV4cHJl
c3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQpAQCAtNTE3LDI2
ICs1NTQsMzAgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAg
IFN0cmluZyByZXN1bHQ7CiAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNz
aW9uLmxpc3QoKSkgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7Ci0g
ICAgICAgIHJlc3VsdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmVzdWx0ID0gdGFr
ZUxhc3RWYWx1ZSgpOwogICAgIH0KLSAgICBtX3N0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIGFw
cGVuZFJpZ2h0VmFsdWUoY29tbWFFeHByZXNzaW9uLCByZXN1bHQpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRl
cmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVu
Y2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7Ci0gICAgYXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKKyAgICBhdXRvIHJpZ2h0ID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKEFTVDo6dG9TdHJpbmcoKmRlcmVmZXJlbmNlRXhwcmVzc2lvbi50
eXBlQW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSksICcgJywgbV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICIm
ICIsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdodCwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFw
cGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGF1dG8gcG9pbnRlck5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVy
KCkucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHBvaW50ZXJOYW1lLCAiID0gIiwgcmlnaHQsICI7XG4i
KSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAn
ICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoImlmICgiLCBwb2ludGVyTmFtZSwgIikgIiwgdmFyaWFibGVOYW1lLCAiID0gKiIs
IHJpZ2h0LCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ZWxzZSBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZigiLCBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgIik7ICsr
aSkgc3RhdGljX2Nhc3Q8dGhyZWFkIGNoYXIqPihzdGF0aWNfY2FzdDx0aHJlYWQgdm9pZCo+KCYi
LCB2YXJpYWJsZU5hbWUsICIpKVtpXSA9IDA7XG4iKSk7CisgICAgYXBwZW5kTGVmdFZhbHVlKGRl
cmVmZXJlbmNlRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lLCBwb2ludGVyTmFtZSk7CiB9CiAKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9u
JiBsb2dpY2FsRXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4
cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRvIGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7Cisg
ICAgYXV0byBsZWZ0ID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChs
b2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKLSAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtl
TGFzdCgpOworICAgIGF1dG8gcmlnaHQgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJp
YWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvZ2lj
YWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBs
ZWZ0KSk7CiAgICAgc3dpdGNoIChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkpIHsKQEAgLTU0OSwy
MiArNTkwLDIyIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhyaWdodCwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAg
IGFwcGVuZFJpZ2h0VmFsdWUobG9naWNhbEV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAK
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHBy
ZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
bG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKLSAgICBhdXRvIG9wZXJhbmQgPSBtX3N0
YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBvcGVyYW5kID0gdGFrZUxhc3RWYWx1ZSgpOwogICAg
IGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZShsb2dpY2FsTm90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVO
YW1lLCAiID0gISIsIG9wZXJhbmQsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFi
bGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGxvZ2ljYWxOb3RFeHByZXNzaW9uLCB2YXJp
YWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLmxlZnRWYWx1ZSgpKTsKLSAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
KyAgICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1l
ID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPihtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkKQEAgLTU3NCwxNiArNjE1
LDE2IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSB7ICYoIiwgbFZhbHVlLCAiWzBdKSwgIiwgYXJyYXlUeXBlLm51bUVs
ZW1lbnRzKCksICIgfTtcbiIpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSB7ICYiLCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJs
ZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCiB7
CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7Ci0gICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBwb2lu
dGVyID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAmIiwgbFZhbHVlLCAiO1xu
IikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtl
UG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
ICIsIHBvaW50ZXIsICI7XG4iKSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKQpAQCAtNTk1LDI3ICs2
MzYsMzEgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRl
cm5hcnlFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVz
c2lvbi5wcmVkaWNhdGUoKSk7Ci0gICAgYXV0byBjaGVjayA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
KyAgICBhdXRvIGNoZWNrID0gdGFrZUxhc3RWYWx1ZSgpOwogCiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRlcm5hcnlFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CiAKICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBjaGVjaywgIikge1xu
IikpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVz
c2lvbigpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVO
YW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAiLCB0YWtlTGFzdFZhbHVl
KCksICI7XG4iKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOwog
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigp
KTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAi
ID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAiLCB0YWtlTGFzdFZhbHVlKCksICI7
XG4iKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Ci0gICAgbV9zdGFjay5h
cHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKHRlcm5hcnlFeHByZXNz
aW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCiB7CiAgICAg
QVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOworICAgIC8vIEZJWE1FOiBBcmUg
IHdlIGFsd2F5cyB0aHJlYWQgYWRkciBzcGFjZSBoZXJlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY2IAorICAgIC8vIE9PUFMKICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV92YXJpYWJsZU1hcHBpbmcuZmluZCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsK
ICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV92YXJpYWJsZU1hcHBpbmcuZW5kKCkpOwotICAgIG1f
c3RhY2suYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygidGhyZWFkICIsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh2YXJpYWJs
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSksICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIsIGl0
ZXJhdG9yLT52YWx1ZSwgIjtcbiIpKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFibGVSZWZl
cmVuY2UsIGl0ZXJhdG9yLT52YWx1ZSwgcG9pbnRlck5hbWUpOwogfQogCiBTdHJpbmcgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjpjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFu
dEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3Jp
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMjEgKzYzLDYgQEAgc3RhdGljIFN0cmluZyBt
YXBGdW5jdGlvbk5hbWUoU3RyaW5nJiBmdQogICAgIHJldHVybiBmdW5jdGlvbk5hbWU7CiB9CiAK
LXN0YXRpYyBTdHJpbmcgY29udmVydEFkZHJlc3NTcGFjZShBU1Q6OkFkZHJlc3NTcGFjZSBhZGRy
ZXNzU3BhY2UpCi17Ci0gICAgc3dpdGNoIChhZGRyZXNzU3BhY2UpIHsKLSAgICBjYXNlIEFTVDo6
QWRkcmVzc1NwYWNlOjpDb25zdGFudDoKLSAgICAgICAgcmV0dXJuICJjb25zdGFudCJfc3RyOwot
ICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OkRldmljZToKLSAgICAgICAgcmV0dXJuICJkZXZp
Y2UiX3N0cjsKLSAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDoKLSAgICAg
ICAgcmV0dXJuICJ0aHJlYWRncm91cCJfc3RyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VChhZGRyZXNzU3BhY2UgPT0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCk7Ci0gICAgICAgIHJl
dHVybiAidGhyZWFkIl9zdHI7Ci0gICAgfQotfQotCiBzdGF0aWMgU3RyaW5nIGF0b21pY05hbWUo
U3RyaW5nIGlucHV0KQogewogICAgIGlmIChpbnB1dCA9PSAiQWRkIikKQEAgLTI0Niw5ICsyMzEs
OSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAg
ICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgYXV0byBmaWVsZE5h
bWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9y
JltdLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFs
UGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gJih2
LnBvaW50ZXJbbl0pO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIGlm
IChuIDwgdi5sZW5ndGgpIHJldHVybiAmKHYucG9pbnRlcltuXSk7XG4iKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4gbnVsbHB0cjtcbiIpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CiAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7CiAgICAgfQpAQCAtMzc2LDcgKzM2MSw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9p
bnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKTsKICAgICAgICAgICAgIGF1dG8gZm91cnRoQXJn
dW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7
CiAgICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoZm91cnRoQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRG
dW5jdGlvbk5hbWUsICcoJywgY29udmVydEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVz
c1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRB
cmd1bWVudCwgIiBjb21wYXJlLCAiLCB0aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIGNvbnZl
cnRBZGRyZXNzU3BhY2UoZm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFy
Z3VtZW50UG9pbnRlZSwgIiogb3V0KSB7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0
cmluZyhmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRl
ZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBjb21wYXJlLCAiLCB0aGlyZEFyZ3Vt
ZW50LCAiIGRlc2lyZWQsICIsIHRvU3RyaW5nKGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwg
JyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOwogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4
cGxpY2l0KG9iamVjdCwgJmNvbXBhcmUsIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtc
biIpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICAqb3V0ID0gY29tcGFy
ZTtcbiIpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwpAQCAtMzk0
LDcgKzM3OSw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgYXV0byB0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVudFBvaW50
ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50ZWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1lbnRU
eXBlKCkpOwogICAgICAgICBhdXRvIG5hbWUgPSBhdG9taWNOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygiSW50ZXJsb2NrZWQiX3N0ci5sZW5ndGgoKSkpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNz
U3BhY2UpLCAnICcsIGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFy
Z3VtZW50LCAiIG9wZXJhbmQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2UodGhpcmRBcmd1bWVudEFk
ZHJlc3NTcGFjZSksICcgJywgdGhpcmRBcmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCB0b1N0cmluZyhmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAn
LCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBv
cGVyYW5kLCAiLCB0b1N0cmluZyh0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGly
ZEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoIiAgICAqb3V0ID0gYXRvbWljX2ZldGNoXyIsIG5hbWUsICJfZXhw
bGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKSk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKICAgICAgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9u
IDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMVHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQg
VHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW8KICAgICAgICAgQVNTRVJUKGJhc2VU
eXBlTmFtZU5vZGUucGFyZW50KCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCksICJ7IFxu
IikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgdG9T
dHJpbmcoYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBhcnJheVJlZmVy
ZW5jZVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIqIHBvaW50ZXI7XG4iKSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdWludCBsZW5ndGg7XG4iKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB1aW50MzJfdCBsZW5ndGg7XG4iKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NF
UlQoaXM8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjM5NCw2ICs2Mzk0LDEwIEBACiAJCTFDODQwQjk5
MjFFQzQwMDgwMEQwNTAwRCAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDODQwQjlBMjFFQzQwMDkwMEQwNTAwRCAvKiBXSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJ
dGVtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzg0MEI5QjIxRUM0MDA5MDBE
MDUwMEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDODZDQTRCMjJBQTE5RkYwMDFC
Rjk2MSAvKiBXSExTTENvbXB1dGVEaW1lbnNpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
Qzg2Q0E0QzIyQUExOUZGMDAxQkY5NjEgLyogV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTENvbXB1dGVEaW1lbnNpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDODZDQTRFMjJBQTIzQzkwMDFCRjk2MSAvKiBHUFVQaXBlbGluZU1ldGFsQ29u
dmVydExheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVQaXBlbGluZU1ldGFsQ29udmVy
dExheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDODZDQTRGMjJBQTIz
QzkwMDFCRjk2MSAvKiBHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQzkwNERGOTBCQTlEMkM4MDA4MUU5RDAgLyogVmVyc2lvbi54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQzlBRTVDQTIxRUQ5REY1MDA2OUQ1RjIgLyogV0hMU0xI
aWdoWm9tYmllRmluZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSGlnaFpvbWJpZUZp
bmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOUFFNUNCMjFFRDlERjUw
MDY5RDVGMiAvKiBXSExTTEhpZ2hab21iaWVGaW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xI
aWdoWm9tYmllRmluZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTQ0OCw2
ICsyNTQ1Miw4IEBACiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNMQ2hlY2tE
dXBsaWNhdGVGdW5jdGlvbnMuaCAqLywKIAkJCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUwMEQgLyog
V0hMU0xDaGVja2VyLmNwcCAqLywKIAkJCQkxQzg0MEI5NzIxRUM0MDA3MDBEMDUwMEQgLyogV0hM
U0xDaGVja2VyLmggKi8sCisJCQkJMUM4NkNBNEIyMkFBMTlGRjAwMUJGOTYxIC8qIFdITFNMQ29t
cHV0ZURpbWVuc2lvbnMuY3BwICovLAorCQkJCTFDODZDQTRDMjJBQTE5RkYwMDFCRjk2MSAvKiBX
SExTTENvbXB1dGVEaW1lbnNpb25zLmggKi8sCiAJCQkJMUNBMEMyRTQyMUVFRDEyQTAwQTExODYw
IC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwICovLAogCQkJCTFDQTBDMkU1MjFFRUQx
MkEwMEExMTg2MCAvKiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmggKi8sCiAJCQkJMUM4NDBC
OTkyMUVDNDAwODAwRDA1MDBEIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLywK
QEAgLTI1OTg3LDYgKzI1OTkzLDggQEAKIAkJCQlEMDg5MDM0MDIyNDFDRTQ2MDBGM0Y0NDAgLyog
R1BVQ29tcHV0ZVBhc3NFbmNvZGVyTWV0YWwubW0gKi8sCiAJCQkJRDA4OTAzM0IyMjQxNzlCNTAw
RjNGNDQwIC8qIEdQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tICovLAogCQkJCUQwODdDRTNDMjFB
Q0E5NDIwMEJERTE3NCAvKiBHUFVEZXZpY2VNZXRhbC5tbSAqLywKKwkJCQkxQzg2Q0E0RTIyQUEy
M0M5MDAxQkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuY3BwICovLAorCQkJ
CTFDODZDQTRGMjJBQTIzQzkwMDFCRjk2MSAvKiBHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91
dC5oICovLAogCQkJCUQwODdDRTNCMjFBQ0E5NDIwMEJERTE3NCAvKiBHUFVQcm9ncmFtbWFibGVQ
YXNzRW5jb2Rlck1ldGFsLm1tICovLAogCQkJCUQwODdDRTM5MjFBQ0E5NDIwMEJERTE3NCAvKiBH
UFVRdWV1ZU1ldGFsLm1tICovLAogCQkJCUQwODdDRTNBMjFBQ0E5NDIwMEJERTE3NCAvKiBHUFVS
ZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cExheW91dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3JvdXBMYXlvdXQuaAkocmV2
aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQ
VUJpbmRHcm91cExheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBVU0Uo
TUVUQUwpCiBPQkpDX1BST1RPQ09MKE1UTEFyZ3VtZW50RW5jb2Rlcik7CkBAIC00Nyw3ICs0OCwz
NyBAQCBjbGFzcyBHUFVCaW5kR3JvdXBMYXlvdXQgOiBwdWJsaWMgUmVmQ291CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZlB0cjxHUFVCaW5kR3JvdXBMYXlvdXQ+IHRyeUNyZWF0ZShjb25zdCBHUFVE
ZXZpY2UmLCBjb25zdCBHUFVCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJik7CiAKLSAgICB1c2lu
ZyBCaW5kaW5nc01hcFR5cGUgPSBIYXNoTWFwPHVpbnQ2NF90LCBHUFVCaW5kR3JvdXBMYXlvdXRC
aW5kaW5nLCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVpbnQ2NF90Pj47CisgICAgc3RydWN0IFVuaWZvcm1CdWZmZXIgeworICAgICAg
ICB1bnNpZ25lZCBpbnRlcm5hbExlbmd0aE5hbWU7CisgICAgfTsKKworICAgIHN0cnVjdCBEeW5h
bWljVW5pZm9ybUJ1ZmZlciB7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsTGVuZ3RoTmFtZTsK
KyAgICB9OworCisgICAgc3RydWN0IFNhbXBsZXIgeworICAgIH07CisKKyAgICBzdHJ1Y3QgU2Ft
cGxlZFRleHR1cmUgeworICAgIH07CisKKyAgICBzdHJ1Y3QgU3RvcmFnZUJ1ZmZlciB7CisgICAg
ICAgIHVuc2lnbmVkIGludGVybmFsTGVuZ3RoTmFtZTsKKyAgICB9OworCisgICAgc3RydWN0IER5
bmFtaWNTdG9yYWdlQnVmZmVyIHsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxMZW5ndGhOYW1l
OworICAgIH07CisKKyAgICB1c2luZyBJbnRlcm5hbEJpbmRpbmdEZXRhaWxzID0gVmFyaWFudDxV
bmlmb3JtQnVmZmVyLCBEeW5hbWljVW5pZm9ybUJ1ZmZlciwgU2FtcGxlciwgU2FtcGxlZFRleHR1
cmUsIFN0b3JhZ2VCdWZmZXIsIER5bmFtaWNTdG9yYWdlQnVmZmVyPjsKKworICAgIHN0cnVjdCBC
aW5kaW5nIHsKKyAgICAgICAgR1BVQmluZEdyb3VwTGF5b3V0QmluZGluZyBleHRlcm5hbEJpbmRp
bmc7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsTmFtZTsKKyAgICAgICAgSW50ZXJuYWxCaW5k
aW5nRGV0YWlscyBpbnRlcm5hbEJpbmRpbmdEZXRhaWxzOworICAgIH07CisKKyAgICB1c2luZyBC
aW5kaW5nc01hcFR5cGUgPSBIYXNoTWFwPHVpbnQ2NF90LCBCaW5kaW5nLCBXVEY6OkludEhhc2g8
dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj47
CiAgICAgY29uc3QgQmluZGluZ3NNYXBUeXBlJiBiaW5kaW5nc01hcCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmluZGluZ3NNYXA7IH0KICNpZiBVU0UoTUVUQUwpCiAgICAgTVRMQXJndW1lbnRFbmNvZGVy
ICp2ZXJ0ZXhFbmNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhFbmNvZGVyLmdldCgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tcHV0ZVBp
cGVsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVUNvbXB1dGVQaXBlbGluZS5oCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tcHV0ZVBpcGVsaW5lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRl
ICJXSExTTFByZXBhcmUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OCwxMCArNDks
MTMgQEAgcHVibGljOgogCiAgICAgY29uc3QgUGxhdGZvcm1Db21wdXRlUGlwZWxpbmUqIHBsYXRm
b3JtQ29tcHV0ZVBpcGVsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUNvbXB1dGVQaXBl
bGluZS5nZXQoKTsgfQogCisgICAgV0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1l
bnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlRGltZW5zaW9uczsgfQorCiBwcml2YXRl
OgotICAgIEdQVUNvbXB1dGVQaXBlbGluZShQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZVNtYXJ0UHRy
JiYpOworICAgIEdQVUNvbXB1dGVQaXBlbGluZShQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZVNtYXJ0
UHRyJiYsIFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyk7CiAKICAgICBQbGF0Zm9ybUNvbXB1dGVQ
aXBlbGluZVNtYXJ0UHRyIG1fcGxhdGZvcm1Db21wdXRlUGlwZWxpbmU7CisgICAgV0hMU0w6OkNv
bXB1dGVEaW1lbnNpb25zIG1fY29tcHV0ZURpbWVuc2lvbnMgeyAwLCAwLCAwIH07CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRHcm91cExh
eW91dE1ldGFsLm1tCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDYgKzc3LDE4IEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNv
ZGVyPiB0cnkKICAgICByZXR1cm4gZW5jb2RlcjsKIH07CiAKK3N0YXRpYyBSZXRhaW5QdHI8TVRM
QXJndW1lbnREZXNjcmlwdG9yPiBhcmd1bWVudERlc2NyaXB0b3IoTVRMRGF0YVR5cGUgZGF0YVR5
cGUsIE5TVUludGVnZXIgaW5kZXgpCit7CisgICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50RGVzY3Jp
cHRvcj4gbXRsQXJndW1lbnQ7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IG10bEFyZ3VtZW50ID0gYWRvcHROUyhbTVRMQXJndW1lbnREZXNjcmlwdG9yIG5ld10pOworICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBbbXRsQXJndW1lbnQgc2V0RGF0YVR5
cGU6ZGF0YVR5cGVdOworICAgIFttdGxBcmd1bWVudCBzZXRJbmRleDppbmRleF07CisgICAgcmV0
dXJuIG10bEFyZ3VtZW50OworfQorCiBSZWZQdHI8R1BVQmluZEdyb3VwTGF5b3V0PiBHUFVCaW5k
R3JvdXBMYXlvdXQ6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BV
QmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBpZiAoIWRldmlj
ZS5wbGF0Zm9ybURldmljZSgpKSB7CkBAIC04Nyw0OCArOTksNzMgQEAgUmVmUHRyPEdQVUJpbmRH
cm91cExheW91dD4gR1BVQmluZEdyb3VwTAogICAgIEFyZ3VtZW50QXJyYXkgdmVydGV4QXJnc0Fy
cmF5LCBmcmFnbWVudEFyZ3NBcnJheSwgY29tcHV0ZUFyZ3NBcnJheTsKICAgICBCaW5kaW5nc01h
cFR5cGUgYmluZGluZ3NNYXA7CiAKKyAgICB1bnNpZ25lZCBpbnRlcm5hbE5hbWUgPSAwOworICAg
IHVuc2lnbmVkIGludGVybmFsTGVuZ3RoQmFzZSA9IGRlc2NyaXB0b3IuYmluZGluZ3Muc2l6ZSgp
OwogICAgIGZvciAoY29uc3QgYXV0byYgYmluZGluZyA6IGRlc2NyaXB0b3IuYmluZGluZ3MpIHsK
LSAgICAgICAgaWYgKCFiaW5kaW5nc01hcC5hZGQoYmluZGluZy5iaW5kaW5nLCBiaW5kaW5nKSkg
eworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gZXh0cmFJbmRleDsKKyAgICAgICAgYXV0byBp
bnRlcm5hbERldGFpbHMgPSAoWyZdKCkgLT4gR1BVQmluZEdyb3VwTGF5b3V0OjpJbnRlcm5hbEJp
bmRpbmdEZXRhaWxzIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmluZGluZy50eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgorICAgICAgICAgICAg
ICAgIGV4dHJhSW5kZXggPSBpbnRlcm5hbExlbmd0aEJhc2UrKzsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR1BVQmluZEdyb3VwTGF5b3V0OjpVbmlmb3JtQnVmZmVyIHsgKmV4dHJhSW5kZXggfTsK
KyAgICAgICAgICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OkR5bmFtaWNVbmlmb3JtQnVmZmVyOgor
ICAgICAgICAgICAgICAgIGV4dHJhSW5kZXggPSBpbnRlcm5hbExlbmd0aEJhc2UrKzsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWljVW5pZm9ybUJ1ZmZl
ciB7ICpleHRyYUluZGV4IH07CisgICAgICAgICAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpTYW1w
bGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBHUFVCaW5kR3JvdXBMYXlvdXQ6OlNhbXBsZXIg
eyB9OworICAgICAgICAgICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U2FtcGxlZFRleHR1cmU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91cExheW91dDo6U2FtcGxlZFRleHR1cmUg
eyB9OworICAgICAgICAgICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1ZmZlcjoKKyAg
ICAgICAgICAgICAgICBleHRyYUluZGV4ID0gaW50ZXJuYWxMZW5ndGhCYXNlKys7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91cExheW91dDo6U3RvcmFnZUJ1ZmZlciB7ICpleHRy
YUluZGV4IH07CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChi
aW5kaW5nLnR5cGUgPT0gR1BVQmluZGluZ1R5cGU6OkR5bmFtaWNTdG9yYWdlQnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICBleHRyYUluZGV4ID0gaW50ZXJuYWxMZW5ndGhCYXNlKys7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91cExheW91dDo6RHluYW1pY1N0b3JhZ2VCdWZmZXIg
eyAqZXh0cmFJbmRleCB9OworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworICAgICAgICBC
aW5kaW5nIGJpbmRpbmdEZXRhaWxzID0geyBiaW5kaW5nLCBpbnRlcm5hbE5hbWUrKywgV1RGTW92
ZShpbnRlcm5hbERldGFpbHMpIH07CisgICAgICAgIGlmICghYmluZGluZ3NNYXAuYWRkKGJpbmRp
bmcuYmluZGluZywgYmluZGluZ0RldGFpbHMpKSB7CiAgICAgICAgICAgICBMT0coV2ViR1BVLCAi
R1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUoKTogRHVwbGljYXRlIGJpbmRpbmcgJXUgZm91
bmQgaW4gR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciEiLCBiaW5kaW5nLmJpbmRpbmcpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBSZXRhaW5Q
dHI8TVRMQXJndW1lbnREZXNjcmlwdG9yPiBtdGxBcmd1bWVudDsKKyAgICAgICAgUmV0YWluUHRy
PE1UTEFyZ3VtZW50RGVzY3JpcHRvcj4gbXRsQXJndW1lbnQgPSBhcmd1bWVudERlc2NyaXB0b3Io
TVRMRGF0YVR5cGVGb3JCaW5kaW5nVHlwZShiaW5kaW5nLnR5cGUpLCBiaW5kaW5nRGV0YWlscy5p
bnRlcm5hbE5hbWUpOwogCi0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAgICAgbXRsQXJndW1lbnQgPSBhZG9wdE5TKFtNVExBcmd1bWVudERlc2NyaXB0b3IgbmV3XSk7
Ci0gICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIGlmICghbXRsQXJn
dW1lbnQpIHsKICAgICAgICAgICAgIExPRyhXZWJHUFUsICJHUFVCaW5kR3JvdXBMYXlvdXQ6OnRy
eUNyZWF0ZSgpOiBVbmFibGUgdG8gY3JlYXRlIE1UTEFyZ3VtZW50RGVzY3JpcHRvciBmb3IgYmlu
ZGluZyAldSEiLCBiaW5kaW5nLmJpbmRpbmcpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIH0KIAotICAgICAgICBbbXRsQXJndW1lbnQgc2V0RGF0YVR5cGU6TVRMRGF0YVR5
cGVGb3JCaW5kaW5nVHlwZShiaW5kaW5nLnR5cGUpXTsKLSAgICAgICAgW210bEFyZ3VtZW50IHNl
dEluZGV4OmJpbmRpbmcuYmluZGluZ107Ci0KLSAgICAgICAgaWYgKGJpbmRpbmcudmlzaWJpbGl0
eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KQotICAgICAgICAgICAgYXBwZW5k
QXJndW1lbnRUb0FycmF5KHZlcnRleEFyZ3NBcnJheSwgbXRsQXJndW1lbnQpOwotICAgICAgICBp
ZiAoYmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpGcmFnbWVu
dCkKLSAgICAgICAgICAgIGFwcGVuZEFyZ3VtZW50VG9BcnJheShmcmFnbWVudEFyZ3NBcnJheSwg
bXRsQXJndW1lbnQpOwotICAgICAgICBpZiAoYmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVy
U3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlKQotICAgICAgICAgICAgYXBwZW5kQXJndW1lbnRUb0Fy
cmF5KGNvbXB1dGVBcmdzQXJyYXksIG10bEFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICBSZXRhaW5Q
dHI8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0ZXgsIGZyYWdtZW50LCBjb21wdXRlOwotCi0gICAg
aWYgKHZlcnRleEFyZ3NBcnJheSkgewotICAgICAgICBpZiAoISh2ZXJ0ZXggPSB0cnlDcmVhdGVN
dGxBcmd1bWVudEVuY29kZXIoZGV2aWNlLCB2ZXJ0ZXhBcmdzQXJyYXkpKSkKKyAgICAgICAgYXV0
byBhZGRJbmRpY2VzID0gWyZdKEFyZ3VtZW50QXJyYXkmIGFycmF5KSAtPiBib29sIHsKKyAgICAg
ICAgICAgIGFwcGVuZEFyZ3VtZW50VG9BcnJheShhcnJheSwgbXRsQXJndW1lbnQpOworICAgICAg
ICAgICAgaWYgKGV4dHJhSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8TVRMQXJn
dW1lbnREZXNjcmlwdG9yPiBtdGxBcmd1bWVudCA9IGFyZ3VtZW50RGVzY3JpcHRvcihNVExEYXRh
VHlwZVVJbnQyLCAqZXh0cmFJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFtdGxBcmd1bWVu
dCkgeworICAgICAgICAgICAgICAgICAgICBMT0coV2ViR1BVLCAiR1BVQmluZEdyb3VwTGF5b3V0
Ojp0cnlDcmVhdGUoKTogVW5hYmxlIHRvIGNyZWF0ZSBNVExBcmd1bWVudERlc2NyaXB0b3IgZm9y
IGJpbmRpbmcgJXUhIiwgYmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcHBlbmRBcmd1
bWVudFRvQXJyYXkoYXJyYXksIG10bEFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworICAgICAgICBpZiAoKGJpbmRpbmcudmlzaWJp
bGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KSAmJiAhYWRkSW5kaWNlcyh2
ZXJ0ZXhBcmdzQXJyYXkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAg
IGlmIChmcmFnbWVudEFyZ3NBcnJheSkgewotICAgICAgICBpZiAoIShmcmFnbWVudCA9IHRyeUNy
ZWF0ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UsIGZyYWdtZW50QXJnc0FycmF5KSkpCisgICAg
ICAgIGlmICgoYmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpG
cmFnbWVudCkgJiYgIWFkZEluZGljZXMoZnJhZ21lbnRBcmdzQXJyYXkpKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChjb21wdXRlQXJnc0FycmF5KSB7Ci0gICAg
ICAgIGlmICghKGNvbXB1dGUgPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2aWNlLCBj
b21wdXRlQXJnc0FycmF5KSkpCisgICAgICAgIGlmICgoYmluZGluZy52aXNpYmlsaXR5ICYgR1BV
U2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlKSAmJiAhYWRkSW5kaWNlcyhjb21wdXRlQXJn
c0FycmF5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAgIFJldGFp
blB0cjxNVExBcmd1bWVudEVuY29kZXI+IHZlcnRleCwgZnJhZ21lbnQsIGNvbXB1dGU7CisKKyAg
ICBpZiAodmVydGV4QXJnc0FycmF5ICYmICEodmVydGV4ID0gdHJ5Q3JlYXRlTXRsQXJndW1lbnRF
bmNvZGVyKGRldmljZSwgdmVydGV4QXJnc0FycmF5KSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGlmIChmcmFnbWVudEFyZ3NBcnJheSAmJiAhKGZyYWdtZW50ID0gdHJ5Q3JlYXRlTXRs
QXJndW1lbnRFbmNvZGVyKGRldmljZSwgZnJhZ21lbnRBcmdzQXJyYXkpKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKGNvbXB1dGVBcmdzQXJyYXkgJiYgIShjb21wdXRlID0gdHJ5
Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVyKGRldmljZSwgY29tcHV0ZUFyZ3NBcnJheSkpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BVQmluZEdy
b3VwTGF5b3V0KFdURk1vdmUoYmluZGluZ3NNYXApLCBXVEZNb3ZlKHZlcnRleCksIFdURk1vdmUo
ZnJhZ21lbnQpLCBXVEZNb3ZlKGNvbXB1dGUpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmlu
ZEdyb3VwTWV0YWwubW0JKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQkod29ya2luZyBjb3B5
KQpAQCAtNzIsMTMgKzcyLDE1IEBAIHN0YXRpYyBPcHRpb25hbDxHUFVCdWZmZXJCaW5kaW5nPiB0
cnlHZXQKICAgICByZXR1cm4gR1BVQnVmZmVyQmluZGluZyB7IGJ1ZmZlckJpbmRpbmcuYnVmZmVy
LmNvcHlSZWYoKSwgYnVmZmVyQmluZGluZy5vZmZzZXQsIGJ1ZmZlckJpbmRpbmcuc2l6ZSB9Owog
fQogCi1zdGF0aWMgdm9pZCBzZXRCdWZmZXJPbkVuY29kZXIoTVRMQXJndW1lbnRFbmNvZGVyICph
cmd1bWVudEVuY29kZXIsIGNvbnN0IEdQVUJ1ZmZlckJpbmRpbmcmIGJ1ZmZlckJpbmRpbmcsIHVu
c2lnbmVkIGluZGV4KQorc3RhdGljIHZvaWQgc2V0QnVmZmVyT25FbmNvZGVyKE1UTEFyZ3VtZW50
RW5jb2RlciAqYXJndW1lbnRFbmNvZGVyLCBjb25zdCBHUFVCdWZmZXJCaW5kaW5nJiBidWZmZXJC
aW5kaW5nLCB1bnNpZ25lZCBuYW1lLCB1bnNpZ25lZCBsZW5ndGhOYW1lKQogewogICAgIEFTU0VS
VChhcmd1bWVudEVuY29kZXIgJiYgYnVmZmVyQmluZGluZy5idWZmZXItPnBsYXRmb3JtQnVmZmVy
KCkpOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIC8vIEJvdW5kcyBj
aGVjayB3aGVuIGNvbnZlcnRpbmcgR1BVQnVmZmVyQmluZGluZyBlbnN1cmVzIHRoYXQgTlNVSW50
ZWdlciBjYXN0IG9mIHVpbnQ2NF90IG9mZnNldCBpcyBzYWZlLgotICAgIFthcmd1bWVudEVuY29k
ZXIgc2V0QnVmZmVyOmJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpIG9mZnNl
dDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihidWZmZXJCaW5kaW5nLm9mZnNldCkgYXRJbmRleDpp
bmRleF07CisgICAgW2FyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyQmluZGluZy5idWZm
ZXItPnBsYXRmb3JtQnVmZmVyKCkgb2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGJ1ZmZl
ckJpbmRpbmcub2Zmc2V0KSBhdEluZGV4Om5hbWVdOworICAgIHZvaWQqIGxlbmd0aFBvaW50ZXIg
PSBbYXJndW1lbnRFbmNvZGVyIGNvbnN0YW50RGF0YUF0SW5kZXg6bGVuZ3RoTmFtZV07CisgICAg
bWVtY3B5KGxlbmd0aFBvaW50ZXIsICZidWZmZXJCaW5kaW5nLnNpemUsIHNpemVvZih1aW50NjRf
dCkpOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAgICAgCkBAIC0xNzEsMTIg
KzE3MywxMiBAQCBSZWZQdHI8R1BVQmluZEdyb3VwPiBHUFVCaW5kR3JvdXA6OnRyeUNyCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBhdXRvIGxheW91dEJp
bmRpbmcgPSBsYXlvdXRJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmIChsYXlvdXRCaW5kaW5n
LnZpc2liaWxpdHkgPT0gR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpOb25lKQorICAgICAgICBp
ZiAobGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRpbmcudmlzaWJpbGl0eSA9PSBHUFVTaGFkZXJT
dGFnZUJpdDo6RmxhZ3M6Ok5vbmUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBi
b29sIGlzRm9yVmVydGV4ID0gbGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3Rh
Z2VCaXQ6OkZsYWdzOjpWZXJ0ZXg7Ci0gICAgICAgIGJvb2wgaXNGb3JGcmFnbWVudCA9IGxheW91
dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQ7
Ci0gICAgICAgIGJvb2wgaXNGb3JDb21wdXRlID0gbGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYg
R1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlOworICAgICAgICBib29sIGlzRm9yVmVy
dGV4ID0gbGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRl
clN0YWdlQml0OjpGbGFnczo6VmVydGV4OworICAgICAgICBib29sIGlzRm9yRnJhZ21lbnQgPSBs
YXlvdXRCaW5kaW5nLmV4dGVybmFsQmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VC
aXQ6OkZsYWdzOjpGcmFnbWVudDsKKyAgICAgICAgYm9vbCBpc0ZvckNvbXB1dGUgPSBsYXlvdXRC
aW5kaW5nLmV4dGVybmFsQmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZs
YWdzOjpDb21wdXRlOwogCiAgICAgICAgIGlmIChpc0ZvclZlcnRleCAmJiAhdmVydGV4RW5jb2Rl
cikgewogICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyB2ZXJ0ZXggYXJndW1lbnQgZW5j
b2RlciBmb3VuZCBmb3IgYmluZGluZyAldSEiLCBmdW5jdGlvbk5hbWUsIGluZGV4KTsKQEAgLTE5
MSwzOSArMTkzLDM5IEBAIFJlZlB0cjxHUFVCaW5kR3JvdXA+IEdQVUJpbmRHcm91cDo6dHJ5Q3IK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNo
IChsYXlvdXRCaW5kaW5nLnR5cGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSBy
ZXNvdXJjZSB0eXBlcy4KLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2b2lkIHRoaXMgdWds
eSBzd2l0Y2gtb24tdHlwZSB1c2luZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpZiBHUFVCaW5kaW5nUmVz
b3VyY2UgaXMgcmVmYWN0b3JlZCBhcyBhIGJhc2UgY2xhc3MgcmF0aGVyIHRoYW4gYSBWYXJpYW50
LgotICAgICAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgotICAgICAgICBj
YXNlIEdQVUJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyOiB7CisgICAgICAgIGF1dG8gaGFuZGxl
QnVmZmVyID0gWyZdKHVuc2lnbmVkIGludGVybmFsTGVuZ3RoTmFtZSkgLT4gYm9vbCB7CiAgICAg
ICAgICAgICBhdXRvIGJ1ZmZlclJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc0J1ZmZlckJpbmRp
bmcocmVzb3VyY2VCaW5kaW5nLnJlc291cmNlLCBmdW5jdGlvbk5hbWUpOwogICAgICAgICAgICAg
aWYgKCFidWZmZXJSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXNGb3JWZXJ0ZXgp
Ci0gICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKHZlcnRleEVuY29kZXIsICpidWZm
ZXJSZXNvdXJjZSwgaW5kZXgpOworICAgICAgICAgICAgICAgIHNldEJ1ZmZlck9uRW5jb2Rlcih2
ZXJ0ZXhFbmNvZGVyLCAqYnVmZmVyUmVzb3VyY2UsIGxheW91dEJpbmRpbmcuaW50ZXJuYWxOYW1l
LCBpbnRlcm5hbExlbmd0aE5hbWUpOwogICAgICAgICAgICAgaWYgKGlzRm9yRnJhZ21lbnQpCi0g
ICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKGZyYWdtZW50RW5jb2RlciwgKmJ1ZmZl
clJlc291cmNlLCBpbmRleCk7CisgICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKGZy
YWdtZW50RW5jb2RlciwgKmJ1ZmZlclJlc291cmNlLCBsYXlvdXRCaW5kaW5nLmludGVybmFsTmFt
ZSwgaW50ZXJuYWxMZW5ndGhOYW1lKTsKICAgICAgICAgICAgIGlmIChpc0ZvckNvbXB1dGUpCi0g
ICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKGNvbXB1dGVFbmNvZGVyLCAqYnVmZmVy
UmVzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgICAgICAgICBzZXRCdWZmZXJPbkVuY29kZXIoY29t
cHV0ZUVuY29kZXIsICpidWZmZXJSZXNvdXJjZSwgbGF5b3V0QmluZGluZy5pbnRlcm5hbE5hbWUs
IGludGVybmFsTGVuZ3RoTmFtZSk7CiAgICAgICAgICAgICBib3VuZEJ1ZmZlcnMuYXBwZW5kKGJ1
ZmZlclJlc291cmNlLT5idWZmZXIuY29weVJlZigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlNhbXBsZXI6IHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpVbmlmb3Jt
QnVmZmVyJiB1bmlmb3JtQnVmZmVyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBoYW5k
bGVCdWZmZXIodW5pZm9ybUJ1ZmZlci5pbnRlcm5hbExlbmd0aE5hbWUpOworICAgICAgICB9LCBb
Jl0oR1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWljVW5pZm9ybUJ1ZmZlciYgZHluYW1pY1VuaWZv
cm1CdWZmZXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUJ1ZmZlcihkeW5h
bWljVW5pZm9ybUJ1ZmZlci5pbnRlcm5hbExlbmd0aE5hbWUpOworICAgICAgICB9LCBbJl0oR1BV
QmluZEdyb3VwTGF5b3V0OjpTYW1wbGVyJikgLT4gYm9vbCB7CiAgICAgICAgICAgICBhdXRvIHNh
bXBsZXJTdGF0ZSA9IHRyeUdldFJlc291cmNlQXNNdGxTYW1wbGVyKHJlc291cmNlQmluZGluZy5y
ZXNvdXJjZSwgZnVuY3Rpb25OYW1lKTsKICAgICAgICAgICAgIGlmICghc2FtcGxlclN0YXRlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGlmIChpc0ZvclZlcnRleCkKICAgICAgICAgICAgICAgICBzZXRT
YW1wbGVyT25FbmNvZGVyKHZlcnRleEVuY29kZXIsIHNhbXBsZXJTdGF0ZSwgaW5kZXgpOwogICAg
ICAgICAgICAgaWYgKGlzRm9yRnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgc2V0U2FtcGxlck9u
RW5jb2RlcihmcmFnbWVudEVuY29kZXIsIHNhbXBsZXJTdGF0ZSwgaW5kZXgpOwogICAgICAgICAg
ICAgaWYgKGlzRm9yQ29tcHV0ZSkKICAgICAgICAgICAgICAgICBzZXRTYW1wbGVyT25FbmNvZGVy
KGNvbXB1dGVFbmNvZGVyLCBzYW1wbGVyU3RhdGUsIGluZGV4KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlNhbXBsZWRUZXh0dXJl
OiB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwgWyZdKEdQVUJpbmRHcm91
cExheW91dDo6U2FtcGxlZFRleHR1cmUmKSAtPiBib29sIHsKICAgICAgICAgICAgIGF1dG8gdGV4
dHVyZVJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc1RleHR1cmUocmVzb3VyY2VCaW5kaW5nLnJl
c291cmNlLCBmdW5jdGlvbk5hbWUpOwogICAgICAgICAgICAgaWYgKCF0ZXh0dXJlUmVzb3VyY2Up
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgaWYgKGlzRm9yVmVydGV4KQogICAgICAgICAgICAgICAgIHNl
dFRleHR1cmVPbkVuY29kZXIodmVydGV4RW5jb2RlciwgdGV4dHVyZVJlc291cmNlLT5wbGF0Zm9y
bVRleHR1cmUoKSwgaW5kZXgpOwogICAgICAgICAgICAgaWYgKGlzRm9yRnJhZ21lbnQpCkBAIC0y
MzEsMTIgKzIzMywxNCBAQCBSZWZQdHI8R1BVQmluZEdyb3VwPiBHUFVCaW5kR3JvdXA6OnRyeUNy
CiAgICAgICAgICAgICBpZiAoaXNGb3JDb21wdXRlKQogICAgICAgICAgICAgICAgIHNldFRleHR1
cmVPbkVuY29kZXIoY29tcHV0ZUVuY29kZXIsIHRleHR1cmVSZXNvdXJjZS0+cGxhdGZvcm1UZXh0
dXJlKCksIGluZGV4KTsKICAgICAgICAgICAgIGJvdW5kVGV4dHVyZXMuYXBwZW5kKHRleHR1cmVS
ZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IFJlc291cmNl
IHR5cGUgbm90IHlldCBpbXBsZW1lbnRlZC4iLCBmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OlN0b3JhZ2VC
dWZmZXImIHN0b3JhZ2VCdWZmZXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGhhbmRs
ZUJ1ZmZlcihzdG9yYWdlQnVmZmVyLmludGVybmFsTGVuZ3RoTmFtZSk7CisgICAgICAgIH0sIFsm
XShHUFVCaW5kR3JvdXBMYXlvdXQ6OkR5bmFtaWNTdG9yYWdlQnVmZmVyJiBkeW5hbWljU3RvcmFn
ZUJ1ZmZlcikgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlQnVmZmVyKGR5bmFt
aWNTdG9yYWdlQnVmZmVyLmludGVybmFsTGVuZ3RoTmFtZSk7CisgICAgICAgIH0pLCBsYXlvdXRC
aW5kaW5nLmludGVybmFsQmluZGluZ0RldGFpbHMpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEdQVUJpbmRHcm91cChXVEZNb3ZlKHZlcnRleEFyZ3NCdWZmZXIp
LCBXVEZNb3ZlKGZyYWdtZW50QXJnc0J1ZmZlciksIFdURk1vdmUoY29tcHV0ZUFyZ3NCdWZmZXIp
LCBXVEZNb3ZlKGJvdW5kQnVmZmVycyksIFdURk1vdmUoYm91bmRUZXh0dXJlcykpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGFz
c0VuY29kZXJNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBhc3NFbmNvZGVyTWV0YWwubW0JKHJldmlzaW9u
IDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVDb21wdXRlUGFzc0VuY29kZXJNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsMTYgKzky
LDExIEBAIHZvaWQgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpkaXNwYXRjaCh1bnMKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcGlwZWxpbmVTdGF0ZSA9IG1fcGlwZWxpbmUtPnBs
YXRmb3JtQ29tcHV0ZVBpcGVsaW5lKCk7Ci0gICAgQVNTRVJUKHBpcGVsaW5lU3RhdGUpOworICAg
IEFTU0VSVChtX3BpcGVsaW5lLT5wbGF0Zm9ybUNvbXB1dGVQaXBlbGluZSgpKTsKIAogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIGF1dG8gdyA9IHBpcGVsaW5lU3RhdGUu
dGhyZWFkRXhlY3V0aW9uV2lkdGg7Ci0gICAgYXV0byBoID0gcGlwZWxpbmVTdGF0ZS5tYXhUb3Rh
bFRocmVhZHNQZXJUaHJlYWRncm91cCAvIHc7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgZ2xlYW5lZCBmcm9tIHRoZSBzaGFkZXIgaWYgbm90IHVzaW5nIE1TTC4gRm9yIG5vdywgdXNl
IHRoZSBkb2NzJyBleGFtcGxlIGNhbGN1bGF0aW9uLgotICAgIGF1dG8gdGhyZWFkc1BlclRocmVh
ZGdyb3VwID0gTVRMU2l6ZU1ha2UodywgaCwgMSk7CisgICAgYXV0byB0aHJlYWRzUGVyVGhyZWFk
Z3JvdXAgPSBNVExTaXplTWFrZShtX3BpcGVsaW5lLT5jb21wdXRlRGltZW5zaW9ucygpLndpZHRo
LCBtX3BpcGVsaW5lLT5jb21wdXRlRGltZW5zaW9ucygpLmhlaWdodCwgbV9waXBlbGluZS0+Y29t
cHV0ZURpbWVuc2lvbnMoKS5kZXB0aCk7CiAKICAgICBhdXRvIHRocmVhZGdyb3Vwc1BlckdyaWQg
PSBNVExTaXplTWFrZSh4LCB5LCB6KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRl
UGlwZWxpbmVNZXRhbC5tbQkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2OCArMzAsMTcyIEBACiAKICNpbXBvcnQgIkdQVUNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3IuaCIKICNpbXBvcnQgIkdQVURldmljZS5oIgorI2ltcG9ydCAiR1BVUGlw
ZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
IldITFNMUHJlcGFyZS5oIgogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KICNpbXBvcnQgPHd0Zi9C
bG9ja09iakNFeGNlcHRpb25zLmg+CiAKLU9CSkNfUFJPVE9DT0woTVRMRnVuY3Rpb24pOwotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8TVRMRnVuY3Rpb24+IHRyeUNy
ZWF0ZU10bENvbXB1dGVGdW5jdGlvbihjb25zdCBHUFVQaXBlbGluZVN0YWdlRGVzY3JpcHRvciYg
c3RhZ2UpCitzdGF0aWMgYm9vbCB0cnlTZXRNZXRhbEZ1bmN0aW9ucyhjb25zdCBjaGFyKiBjb25z
dCBmdW5jdGlvbk5hbWUsIE1UTExpYnJhcnkgKmNvbXB1dGVNZXRhbExpYnJhcnksIE1UTENvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IgKm10bERlc2NyaXB0b3IsIGNvbnN0IFN0cmluZyYgY29tcHV0
ZUVudHJ5UG9pbnROYW1lKQogewotICAgIGlmICghc3RhZ2UubW9kdWxlLT5wbGF0Zm9ybVNoYWRl
ck1vZHVsZSgpIHx8IHN0YWdlLmVudHJ5UG9pbnQuaXNOdWxsKCkpIHsKLSAgICAgICAgTE9HKFdl
YkdQVSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKCk6IEludmFsaWQgR1BVU2hhZGVy
TW9kdWxlISIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNpZiBMT0dfRElTQUJMRUQKKyAg
ICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKKyNlbmRpZgorCisgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOworCisgICAgaWYgKCFjb21wdXRlTWV0YWxMaWJyYXJ5KSB7CisgICAg
ICAgIExPRyhXZWJHUFUsICIlczogTVRMTGlicmFyeSBmb3IgY29tcHV0ZSBzdGFnZSBkb2VzIG5v
dCBleGlzdCEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgUmV0YWluUHRyPE1UTEZ1bmN0aW9uPiBmdW5jdGlvbjsKKyAgICBhdXRvIGZ1bmN0aW9u
ID0gYWRvcHROUyhbY29tcHV0ZU1ldGFsTGlicmFyeSBuZXdGdW5jdGlvbldpdGhOYW1lOmNvbXB1
dGVFbnRyeVBvaW50TmFtZV0pOworICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgTE9HKFdl
YkdQVSwgIiVzOiBDYW5ub3QgY3JlYXRlIGNvbXB1dGUgTVRMRnVuY3Rpb24gXCIlc1wiISIsIGZ1
bmN0aW9uTmFtZSwgY29tcHV0ZUVudHJ5UG9pbnROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgW210bERlc2NyaXB0b3Igc2V0Q29tcHV0ZUZ1
bmN0aW9uOmZ1bmN0aW9uLmdldCgpXTsKKyAgICByZXR1cm4gdHJ1ZTsKKworICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBPcHRp
b25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnM+IHRyeVNldEZ1bmN0aW9ucyhjb25zdCBjaGFy
KiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVVBpcGVsaW5lU3RhZ2VEZXNjcmlwdG9yJiBj
b21wdXRlU3RhZ2UsIGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBNVExDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yKiBtdGxEZXNjcmlwdG9yLCBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvcj4mIHdobHNsRGVzY3JpcHRvcikKK3sKKyNpZiBMT0dfRElTQUJMRUQKKyAgICBV
TlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKKyNlbmRpZgorICAgIFJldGFpblB0cjxNVExMaWJy
YXJ5PiBjb21wdXRlTGlicmFyeTsKKyAgICBTdHJpbmcgY29tcHV0ZUVudHJ5UG9pbnQ7CisKKyAg
ICBXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnMgeyAxLCAxLCAxIH07
CisKKyAgICBpZiAod2hsc2xEZXNjcmlwdG9yKSB7CisgICAgICAgIC8vIFdITFNMIGZ1bmN0aW9u
cyBhcmUgY29tcGlsZWQgdG8gTVNMIGZpcnN0LgorICAgICAgICBTdHJpbmcgd2hsc2xTb3VyY2Ug
PSBjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpOworICAgICAgICBBU1NFUlQoIXdo
bHNsU291cmNlLmlzTnVsbCgpKTsKKworICAgICAgICB3aGxzbERlc2NyaXB0b3ItPmVudHJ5UG9p
bnROYW1lID0gY29tcHV0ZVN0YWdlLmVudHJ5UG9pbnQ7CisKKyAgICAgICAgYXV0byB3aGxzbENv
bXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSh3aGxzbFNvdXJjZSwgKndobHNsRGVzY3JpcHRv
cik7CisgICAgICAgIGlmICghd2hsc2xDb21waWxlUmVzdWx0KQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgY29tcHV0ZURpbWVuc2lvbnMgPSB3aGxzbENvbXBpbGVS
ZXN1bHQtPmNvbXB1dGVEaW1lbnNpb25zOworCisgICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OworCisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgY29tcHV0
ZUxpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0
aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFsU291cmNlIG9wdGlvbnM6bmlsIGVycm9y
OiZlcnJvcl0pOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgICAg
IEFTU0VSVChjb21wdXRlTGlicmFyeSk7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzcxIE9uY2Ugd2UgemVyby1maWxsIHZhcmlh
YmxlcywgdGhlcmUgc2hvdWxkIGJlIG5vIHdhcm5pbmdzLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0
byBBU1NFUlQoIWVycm9yKSBoZXJlLgorCisgICAgICAgIGNvbXB1dGVFbnRyeVBvaW50ID0gd2hs
c2xDb21waWxlUmVzdWx0LT5tYW5nbGVkRW50cnlQb2ludE5hbWU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgY29tcHV0ZUxpYnJhcnkgPSBjb21wdXRlU3RhZ2UubW9kdWxlLT5wbGF0Zm9ybVNoYWRl
ck1vZHVsZSgpOworICAgICAgICBjb21wdXRlRW50cnlQb2ludCA9IGNvbXB1dGVTdGFnZS5lbnRy
eVBvaW50OworICAgIH0KKworICAgIGlmICh0cnlTZXRNZXRhbEZ1bmN0aW9ucyhmdW5jdGlvbk5h
bWUsIGNvbXB1dGVMaWJyYXJ5LmdldCgpLCBtdGxEZXNjcmlwdG9yLCBjb21wdXRlRW50cnlQb2lu
dCkpCisgICAgICAgIHJldHVybiBjb21wdXRlRGltZW5zaW9uczsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCitzdHJ1Y3QgQ29udmVydFJlc3VsdCB7CisgICAgUmV0YWluUHRyPE1UTENv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3I+IHBpcGVsaW5lRGVzY3JpcHRvcjsKKyAgICBXSExTTDo6
Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnM7Cit9Oworc3RhdGljIE9wdGlvbmFs
PENvbnZlcnRSZXN1bHQ+IGNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKGNvbnN0IGNo
YXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UpCit7CisgICAgUmV0YWluUHRy
PE1UTENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3I+IG10bERlc2NyaXB0b3I7CiAKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgZnVuY3Rpb24gPSBhZG9wdE5TKFtzdGFnZS5t
b2R1bGUtPnBsYXRmb3JtU2hhZGVyTW9kdWxlKCkgbmV3RnVuY3Rpb25XaXRoTmFtZTpzdGFnZS5l
bnRyeVBvaW50XSk7CisKKyAgICBtdGxEZXNjcmlwdG9yID0gYWRvcHROUyhbTVRMQ29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvciBuZXddKTsKKwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CiAKLSAgICBpZiAoIWZ1bmN0aW9uKQotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0ZVBp
cGVsaW5lOjp0cnlDcmVhdGUoKTogQ2Fubm90IGNyZWF0ZSBjb21wdXRlIE1UTEZ1bmN0aW9uIFwi
JXNcIiEiLCBzdGFnZS5lbnRyeVBvaW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghbXRsRGVz
Y3JpcHRvcikgeworICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEVycm9yIGNyZWF0aW5nIE1UTERl
c2NyaXB0b3IhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBjb21wdXRlU3RhZ2UgPSBkZXNjcmlwdG9yLmNvbXB1
dGVTdGFnZTsKIAotICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICBib29sIGlzV2hsc2wgPSAhY29t
cHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKS5pc051bGwoKTsKKworICAgIE9wdGlvbmFs
PFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERlc2NyaXB0b3I7CisgICAg
aWYgKGlzV2hsc2wpCisgICAgICAgIHdobHNsRGVzY3JpcHRvciA9IFdITFNMOjpDb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yKCk7CisKKyAgICBpZiAoZGVzY3JpcHRvci5sYXlvdXQgJiYgd2hsc2xE
ZXNjcmlwdG9yKSB7CisgICAgICAgIGlmIChhdXRvIGxheW91dCA9IGNvbnZlcnRMYXlvdXQoKmRl
c2NyaXB0b3IubGF5b3V0KSkKKyAgICAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+bGF5b3V0ID0g
V1RGTW92ZSgqbGF5b3V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBMT0coV2ViR1BV
LCAiJXM6IEVycm9yIGNvbnZlcnRpbmcgR1BVUGlwZWxpbmVMYXlvdXQhIiwgZnVuY3Rpb25OYW1l
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoYXV0byBjb21wdXRlRGltZW5zaW9ucyA9IHRyeVNldEZ1bmN0aW9ucyhmdW5jdGlv
bk5hbWUsIGNvbXB1dGVTdGFnZSwgZGV2aWNlLCBtdGxEZXNjcmlwdG9yLmdldCgpLCB3aGxzbERl
c2NyaXB0b3IpKQorICAgICAgICByZXR1cm4ge3sgbXRsRGVzY3JpcHRvciwgKmNvbXB1dGVEaW1l
bnNpb25zIH19OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotc3RhdGljIFJldGFp
blB0cjxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4gdHJ5Q3JlYXRlTVRMQ29tcHV0ZVBpcGVsaW5l
U3RhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCitzdHJ1Y3QgQ3JlYXRlUmVzdWx0IHsKKyAgICBSZXRhaW5Q
dHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3RhdGU7CisgICAgV0hMU0w6OkNv
bXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOworfTsKK3N0YXRpYyBPcHRpb25hbDxD
cmVhdGVSZXN1bHQ+IHRyeUNyZWF0ZU1UTENvbXB1dGVQaXBlbGluZVN0YXRlKGNvbnN0IGNoYXIq
IGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUNv
bXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgaWYgKCFkZXZpY2Uu
cGxhdGZvcm1EZXZpY2UoKSkgewogICAgICAgICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0ZVBpcGVs
aW5lOjp0cnlDcmVhdGUoKTogSW52YWxpZCBHUFVEZXZpY2UhIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGF1dG8g
Y29tcHV0ZUZ1bmN0aW9uID0gdHJ5Q3JlYXRlTXRsQ29tcHV0ZUZ1bmN0aW9uKGRlc2NyaXB0b3Iu
Y29tcHV0ZVN0YWdlKTsKLSAgICBpZiAoIWNvbXB1dGVGdW5jdGlvbikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgYXV0byBjb252ZXJ0UmVzdWx0ID0gY29udmVydENvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3IoZnVuY3Rpb25OYW1lLCBkZXNjcmlwdG9yLCBkZXZpY2UpOworICAgIGlmICgh
Y29udmVydFJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBBU1NFUlQo
Y29udmVydFJlc3VsdC0+cGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICBhdXRvIG10bERlc2NyaXB0
b3IgPSBjb252ZXJ0UmVzdWx0LT5waXBlbGluZURlc2NyaXB0b3I7CiAKLSAgICBSZXRhaW5QdHI8
TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3RhdGU7Ci0gICAgTlNFcnJvciAqZXJy
b3IgPSBuaWw7CisgICAgUmV0YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBwaXBlbGlu
ZTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBwaXBlbGluZVN0YXRl
ID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3Q29tcHV0ZVBpcGVsaW5lU3Rh
dGVXaXRoRnVuY3Rpb246Y29tcHV0ZUZ1bmN0aW9uLmdldCgpIGVycm9yOiZlcnJvcl0pOwotICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBpZiAoIXBpcGVsaW5lU3RhdGUpCisg
ICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgcGlwZWxpbmUgPSBhZG9wdE5TKFtkZXZpY2Uu
cGxhdGZvcm1EZXZpY2UoKSBuZXdDb21wdXRlUGlwZWxpbmVTdGF0ZVdpdGhEZXNjcmlwdG9yOm10
bERlc2NyaXB0b3IuZ2V0KCkgb3B0aW9uczpNVExQaXBlbGluZU9wdGlvbk5vbmUgcmVmbGVjdGlv
bjpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAgaWYgKCFwaXBlbGluZSkgewogICAgICAgICBMT0co
V2ViR1BVLCAiR1BVQ29tcHV0ZVBpcGVsaW5lOjp0cnlDcmVhdGUoKTogJXMhIiwgZXJyb3IgPyBl
cnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nIDogIlVuYWJsZSB0byBjcmVhdGUg
TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGUhIik7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHJldHVybiBw
aXBlbGluZVN0YXRlOworICAgIHJldHVybiB7eyBwaXBlbGluZSwgY29udmVydFJlc3VsdC0+Y29t
cHV0ZURpbWVuc2lvbnMgfX07CiB9CiAKIFJlZlB0cjxHUFVDb21wdXRlUGlwZWxpbmU+IEdQVUNv
bXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBH
UFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGF1dG8gbXRs
UGlwZWxpbmUgPSB0cnlDcmVhdGVNVExDb21wdXRlUGlwZWxpbmVTdGF0ZShkZXZpY2UsIGRlc2Ny
aXB0b3IpOwotICAgIGlmICghbXRsUGlwZWxpbmUpCisgICAgY29uc3QgY2hhciogY29uc3QgZnVu
Y3Rpb25OYW1lID0gIkdQVVJlbmRlclBpcGVsaW5lOjpjcmVhdGUoKSI7CisKKyAgICBhdXRvIGNy
ZWF0ZVJlc3VsdCA9IHRyeUNyZWF0ZU1UTENvbXB1dGVQaXBlbGluZVN0YXRlKGZ1bmN0aW9uTmFt
ZSwgZGV2aWNlLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAoIWNyZWF0ZVJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVUNvbXB1dGVQaXBl
bGluZShXVEZNb3ZlKG10bFBpcGVsaW5lKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BV
Q29tcHV0ZVBpcGVsaW5lKFdURk1vdmUoY3JlYXRlUmVzdWx0LT5waXBlbGluZVN0YXRlKSwgY3Jl
YXRlUmVzdWx0LT5jb21wdXRlRGltZW5zaW9ucykpOwogfQogCi1HUFVDb21wdXRlUGlwZWxpbmU6
OkdQVUNvbXB1dGVQaXBlbGluZShSZXRhaW5QdHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+JiYg
cGlwZWxpbmUpCitHUFVDb21wdXRlUGlwZWxpbmU6OkdQVUNvbXB1dGVQaXBlbGluZShSZXRhaW5Q
dHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+JiYgcGlwZWxpbmUsIFdITFNMOjpDb21wdXRlRGlt
ZW5zaW9ucyBjb21wdXRlRGltZW5zaW9ucykKICAgICA6IG1fcGxhdGZvcm1Db21wdXRlUGlwZWxp
bmUoV1RGTW92ZShwaXBlbGluZSkpCisgICAgLCBtX2NvbXB1dGVEaW1lbnNpb25zKGNvbXB1dGVE
aW1lbnNpb25zKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVN
ZXRhbC5tbQkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiR1BVRGV2aWNlLmgiCiAjaW1wb3J0ICJHUFVM
aW1pdHMuaCIKKyNpbXBvcnQgIkdQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0LmgiCiAjaW1w
b3J0ICJHUFVVdGlscy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV0hMU0xQcmVw
YXJlLmgiCkBAIC05OCwzNCArOTksNiBAQCBzdGF0aWMgV0hMU0w6OlZlcnRleEZvcm1hdCBjb252
ZXJ0VmVydGV4CiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uU2V0PFdITFNMOjpTaGFkZXJTdGFn
ZT4gY29udmVydFNoYWRlclN0YWdlRmxhZ3MoR1BVU2hhZGVyU3RhZ2VGbGFncyBmbGFncykKLXsK
LSAgICBPcHRpb25TZXQ8V0hMU0w6OlNoYWRlclN0YWdlPiByZXN1bHQ7Ci0gICAgaWYgKGZsYWdz
ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpWZXJ0ZXgpCi0gICAgICAgIHJlc3VsdC5hZGQo
V0hMU0w6OlNoYWRlclN0YWdlOjpWZXJ0ZXgpOwotICAgIGlmIChmbGFncyAmIEdQVVNoYWRlclN0
YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpCi0gICAgICAgIHJlc3VsdC5hZGQoV0hMU0w6OlNoYWRl
clN0YWdlOjpGcmFnbWVudCk7Ci0gICAgaWYgKGZsYWdzICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZs
YWdzOjpDb21wdXRlKQotICAgICAgICByZXN1bHQuYWRkKFdITFNMOjpTaGFkZXJTdGFnZTo6Q29t
cHV0ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPFdITFNMOjpC
aW5kaW5nVHlwZT4gY29udmVydEJpbmRpbmdUeXBlKEdQVUJpbmRpbmdUeXBlIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6VW5pZm9ybUJ1ZmZl
cjoKLSAgICAgICAgcmV0dXJuIFdITFNMOjpCaW5kaW5nVHlwZTo6VW5pZm9ybUJ1ZmZlcjsKLSAg
ICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpTYW1wbGVyOgotICAgICAgICByZXR1cm4gV0hMU0w6OkJp
bmRpbmdUeXBlOjpTYW1wbGVyOwotICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlNhbXBsZWRUZXh0
dXJlOgotICAgICAgICByZXR1cm4gV0hMU0w6OkJpbmRpbmdUeXBlOjpUZXh0dXJlOwotICAgIGNh
c2UgR1BVQmluZGluZ1R5cGU6OlN0b3JhZ2VCdWZmZXI6Ci0gICAgICAgIHJldHVybiBXSExTTDo6
QmluZGluZ1R5cGU6OlN0b3JhZ2VCdWZmZXI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICB9Ci19Ci0KIHN0YXRpYyBPcHRpb25hbDxXSExTTDo6VGV4dHVy
ZUZvcm1hdD4gY29udmVydFRleHR1cmVGb3JtYXQoR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiB7
CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKQEAgLTM2NywzMyArMzQwLDYgQEAgc3RhdGljIGJvb2wg
dHJ5U2V0Q29sb3JTdGF0ZXMoY29uc3QgY2hhcgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgT3B0aW9uYWw8V0hMU0w6OkxheW91dD4gY29udmVydExheW91dChjb25zdCBHUFVQaXBlbGlu
ZUxheW91dCYgbGF5b3V0KQotewotICAgIFdITFNMOjpMYXlvdXQgcmVzdWx0OwotICAgIGlmIChs
YXlvdXQuYmluZEdyb3VwTGF5b3V0cygpLnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheW91dC5iaW5kR3JvdXBMYXlvdXRzKCkuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgY29uc3QgYXV0byYgYmluZEdyb3VwTGF5b3V0ID0gbGF5b3V0LmJpbmRHcm91cExh
eW91dHMoKVtpXTsKLSAgICAgICAgV0hMU0w6OkJpbmRHcm91cCBiaW5kR3JvdXA7Ci0gICAgICAg
IGJpbmRHcm91cC5uYW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpOwotICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IGJpbmRHcm91cExheW91dC0+YmluZGluZ3NNYXAo
KSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgZ3B1QmluZEdyb3VwTGF5b3V0QmluZGluZyA9
IGtleVZhbHVlUGFpci52YWx1ZTsKLSAgICAgICAgICAgIFdITFNMOjpCaW5kaW5nIGJpbmRpbmc7
Ci0gICAgICAgICAgICBiaW5kaW5nLnZpc2liaWxpdHkgPSBjb252ZXJ0U2hhZGVyU3RhZ2VGbGFn
cyhncHVCaW5kR3JvdXBMYXlvdXRCaW5kaW5nLnZpc2liaWxpdHkpOwotICAgICAgICAgICAgaWYg
KGF1dG8gYmluZGluZ1R5cGUgPSBjb252ZXJ0QmluZGluZ1R5cGUoZ3B1QmluZEdyb3VwTGF5b3V0
QmluZGluZy50eXBlKSkKLSAgICAgICAgICAgICAgICBiaW5kaW5nLmJpbmRpbmdUeXBlID0gKmJp
bmRpbmdUeXBlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgICAgICBpZiAoZ3B1QmluZEdyb3VwTGF5b3V0QmluZGluZy5iaW5k
aW5nID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICBiaW5kaW5nLm5hbWUgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZ3B1QmluZEdyb3VwTGF5b3V0QmluZGluZy5iaW5kaW5nKTsKLSAg
ICAgICAgICAgIGJpbmRHcm91cC5iaW5kaW5ncy5hcHBlbmQoV1RGTW92ZShiaW5kaW5nKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGJpbmRHcm91cCkpOwotICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgYm9vbCB0cnlTZXRNZXRhbEZ1bmN0
aW9ucyhjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIE1UTExpYnJhcnkgKnZlcnRleE1l
dGFsTGlicmFyeSwgTVRMTGlicmFyeSAqZnJhZ21lbnRNZXRhbExpYnJhcnksIE1UTFJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciAqbXRsRGVzY3JpcHRvciwgY29uc3QgU3RyaW5nJiB2ZXJ0ZXhFbnRy
eVBvaW50TmFtZSwgY29uc3QgU3RyaW5nJiBmcmFnbWVudEVudHJ5UG9pbnROYW1lKQogewogI2lm
IExPR19ESVNBQkxFRApAQCAtNDY0LDEzICs0MTAsMTMgQEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVu
Y3Rpb25zKGNvbnN0IGNoYXIqIAogICAgICAgICBpZiAoIXdobHNsQ29tcGlsZVJlc3VsdCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBXVEZMb2dBbHdheXMoIk1ldGFsIFNv
dXJjZTogJXMiLCB3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFsU291cmNlLnV0ZjgoKS5kYXRhKCkp
OwotCiAgICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogCiAgICAgICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKICAgICAgICAgdmVydGV4TGlicmFyeSA9IGFkb3B0TlMoW2Rldmlj
ZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlXaXRoU291cmNlOndobHNsQ29tcGlsZVJlc3Vs
dC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVycm9yXSk7CiAgICAgICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgIGlmICghdmVydGV4TGlicmFyeSkKKyAgICAg
ICAgICAgIE5TTG9nKEAiJUAiLCBlcnJvcik7CiAKICAgICAgICAgQVNTRVJUKHZlcnRleExpYnJh
cnkpOwogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NTc3MSBPbmNlIHdlIHplcm8tZmlsbCB2YXJpYWJsZXMsIHRoZXJlIHNob3VsZCBi
ZSBubyB3YXJuaW5ncywgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKCFlcnJvcikgaGVy
ZS4KQEAgLTU0MCw2ICs0ODYsMTEgQEAgc3RhdGljIFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGlu
ZURlc2NyaQogCiBzdGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+IHRyeUNy
ZWF0ZU10bFJlbmRlclBpcGVsaW5lU3RhdGUoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1l
LCBjb25zdCBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGNvbnN0IEdQ
VURldmljZSYgZGV2aWNlKQogeworICAgIGlmICghZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkpIHsK
KyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKCk6IElu
dmFsaWQgR1BVRGV2aWNlISIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKICAg
ICBhdXRvIG10bERlc2NyaXB0b3IgPSBjb252ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKGZ1
bmN0aW9uTmFtZSwgZGVzY3JpcHRvciwgZGV2aWNlKTsKICAgICBpZiAoIW10bERlc2NyaXB0b3Ip
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNTQ4LDcgKzQ5OSw3IEBAIHN0YXRpYyBSZXRh
aW5QdHI8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4KIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKIAotICAgIE5TRXJyb3IgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWlu
OkAiY29tLmFwcGxlLldlYktpdC5HUFUiIGNvZGU6MSB1c2VySW5mbzpuaWxdOworICAgIE5TRXJy
b3IgKmVycm9yID0gbmlsOwogICAgIHBpcGVsaW5lID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3Jt
RGV2aWNlKCkgbmV3UmVuZGVyUGlwZWxpbmVTdGF0ZVdpdGhEZXNjcmlwdG9yOm10bERlc2NyaXB0
b3IuZ2V0KCkgZXJyb3I6JmVycm9yXSk7CiAgICAgaWYgKCFwaXBlbGluZSkKICAgICAgICAgTE9H
KFdlYkdQVSwgIiVzOiAlcyEiLCBmdW5jdGlvbk5hbWUsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0
aW9uLlVURjhTdHJpbmcpOwpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvYW5kZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItYWJzdHJhY3QtbHZhbHVlLWV4
cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvYW5kZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3Qg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNv
bnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAw
LCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvYW5kZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItYWJzdHJhY3QtbHZhbHVl
Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvYW5kZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5Pgor
PGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8
c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFk
ZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICBy
ZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK3Ro
cmVhZCBmbG9hdCogb3BlcmF0b3ImLnkodGhyZWFkIEZvbyogZikgeworICAgIHJldHVybiAmZi0+
eDsKK30KKworc3RydWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK0ZvbyBvcGVyYXRvci53KEJh
ciBiKSB7CisgICAgcmV0dXJuIGIuejsKK30KKworQmFyIG9wZXJhdG9yLnc9KEJhciBiLCBGb28g
YSkgeworICAgIGIueiA9IGE7CisgICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBm
cmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGIudy55ID0g
MS4wOworICAgIHJldHVybiBmbG9hdDQoYi53LnksIGIudy55LCBiLncueSwgMS4wKTsKK30KK2A7
Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2
aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFk
YXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBw
cmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXph
dGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29u
c3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9y
QmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29u
c3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAg
PSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0
MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwg
cHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRo
U3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRl
clBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25z
dCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFp
bkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qg
c3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRv
cik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVy
ZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVE
ZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRl
Q29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjog
MSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0
cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3Rv
cmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2ls
QXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29s
b3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVy
UGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rl
c2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1leHBlY3RlZC5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVy
L2FuZGVyLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cith
c3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250
ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQu
ZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIndoaXRl
IjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItbHZh
bHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5k
ZXItbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+
Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4K
KzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNh
bnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0
eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7
Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvYW5kZXItbHZhbHVlLTMtbGV2ZWxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItbHZhbHVlLTMtbGV2ZWxzLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItbHZh
bHVlLTMtbGV2ZWxzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29u
c3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRp
b247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCog
b3BlcmF0b3ImLnkodGhyZWFkIEZvbyogZikgeworICAgIHJldHVybiAmZi0+eDsKK30KKworc3Ry
dWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK3RocmVhZCBGb28qIG9wZXJhdG9yJi53KHRocmVh
ZCBCYXIqIGIpIHsKKyAgICByZXR1cm4gJmItPno7Cit9CisKK3N0cnVjdCBCYXogeworICAgIEJh
ciBwOworfQorCit0aHJlYWQgQmFyKiBvcGVyYXRvciYucSh0aHJlYWQgQmF6KiBiKSB7CisgICAg
cmV0dXJuICZiLT5wOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNW
X1RhcmdldCAwIHsKKyAgICBCYXogYjsKKyAgICBiLnEudy55ID0gMS4wOworICAgIHJldHVybiBm
bG9hdDQoYi5xLncueSwgYi5xLncueSwgYi5xLncueSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5y
ZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVz
dERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6
IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsK
KworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRz
OiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRl
c2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0g
Y2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3Ig
PSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0g
Y29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29u
c3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNv
bnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmlldygp
OworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29k
ZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Cisg
ICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZp
ZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3Jl
IiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9
IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50
cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIg
PSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0p
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvYW5kZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItbHZhbHVlLWV4cGVjdGVk
Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvYW5kZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8
Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxz
Y3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZh
cy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9
Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIv
YW5kZXItbHZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3Bl
cnR5cmVzb2x2ZXIvYW5kZXItbHZhbHVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXItbHZhbHVlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZs
b2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bv
c2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZs
b2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCogb3BlcmF0b3ImLnkodGhyZWFkIEZvbyogZikgewor
ICAgIHJldHVybiAmZi0+eDsKK30KKworc3RydWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK3Ro
cmVhZCBGb28qIG9wZXJhdG9yJi53KHRocmVhZCBCYXIqIGIpIHsKKyAgICByZXR1cm4gJmItPno7
Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgewor
ICAgIEJhciBiOworICAgIGIudy55ID0gMS4wOworICAgIHJldHVybiBmbG9hdDQoYi53LnksIGIu
dy55LCBiLncueSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBj
b25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAg
IGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAg
IAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZs
b2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFth
dHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVy
dGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0
ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25T
dGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxl
Q291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVS
VEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdw
dSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJi
Z3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2Fw
Q2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3
YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3
ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFu
ZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25z
dCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2ht
ZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51
bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
blJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwor
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXIu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9h
bmRlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJl
c29sdmVyL2FuZGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29u
c3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBv
c2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRp
b247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCog
b3BlcmF0b3ImLnkodGhyZWFkIEZvbyogZikgeworICAgIHJldHVybiAmZi0+eDsKK30KKworRm9v
IGdlbmVyYXRlRm9vKCkgeworICAgIEZvbyBmOworICAgIGYueCA9IDEuMDsKKyAgICByZXR1cm4g
ZjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7
CisgICAgcmV0dXJuIGZsb2F0NChnZW5lcmF0ZUZvbygpLnksIGdlbmVyYXRlRm9vKCkueSwgZ2Vu
ZXJhdGVGb28oKS55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAg
IGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7Cisg
ICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBj
b25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFk
ZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1
bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0
IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFn
bWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0
cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBj
dWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2Jh
OHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVD
b2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7Cisg
ICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAi
ZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDog
W2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2
ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBw
aXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91
dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3Zl
cnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlv
blN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1w
bGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQz
MkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5W
RVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVB
c3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMy
QXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRl
eEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgi
Z3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDog
ImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3
YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0g
c3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZp
ZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21t
YW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNv
bnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFj
aG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDog
bnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9
XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCBy
ZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRh
Y2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJl
Z2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29k
ZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNl
dFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7
CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAg
IGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9nZXR0
ZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9nZXR0ZXItZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9nZXR0ZXItZXhwZWN0ZWQuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0
PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAg
IGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxs
U3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7Cisg
ICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAw
LCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3Rh
cnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9nZXR0ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9nZXR0ZXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9nZXR0ZXIuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXgg
ZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1Zf
UG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAg
ZmxvYXQgeDsKK30KKworZmxvYXQgb3BlcmF0b3IueShGb28gZikgeworICAgIHJldHVybiBmLng7
Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgewor
ICAgIEZvbyBmOworICAgIGYueCA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGYueSwgZi55LCBm
LnksIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRh
cHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBk
ZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRl
ck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwg
aXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVy
TW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVy
In07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAg
IGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAi
bm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBh
bHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVC
aXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBj
b25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsK
KyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRl
MF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0
ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERl
c2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5
b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2Us
IGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNv
bG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAx
LCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisg
ICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllU
RVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0
ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0g
LTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVu
bWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAg
ICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9y
bSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3
YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4u
Z2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1
dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVy
ID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0g
e3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBb
e2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2Fk
T3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNv
bnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NE
ZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9Owor
ICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQ
YXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBl
bGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVm
ZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3
KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25z
dCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdl
dFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXIt
YWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1hYnN0cmFjdC1sdmFsdWUtZXhw
ZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHly
ZXNvbHZlci9pbmRleGVyLWFuZGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZp
bGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsK
KyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgx
MDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBz
dGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhl
ci1hbmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWFic3RyYWN0LWx2YWx1ZS5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9
IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJj
ZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJp
YnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1
Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCit0aHJlYWQgZmxvYXQqIG9wZXJhdG9yJltdKHRo
cmVhZCBGb28qIGYsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gJmYtPng7Cit9CisKK3N0cnVj
dCBCYXIgeworICAgIEZvbyB6OworfQorCitGb28gb3BlcmF0b3JbXShCYXIgYiwgdWludCBpbmRl
eCkgeworICAgIHJldHVybiBiLno7Cit9CisKK0JhciBvcGVyYXRvcltdPShCYXIgYiwgdWludCBp
bmRleCwgRm9vIGEpIHsKKyAgICBiLnogPSBhOworICAgIHJldHVybiBiOworfQorCitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBCYXIgYjsKKyAg
ICBiWzJdWzNdID0gMS4wOworICAgIHJldHVybiBmbG9hdDQoYlsyXVszXSwgYlsyXVszXSwgYlsy
XVszXSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBh
ZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0
IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hh
ZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNl
LCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFk
ZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVu
dFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFk
ZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7Cisg
ICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6
ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxl
bmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIs
IGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0
ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAg
IGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9
OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1
dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5w
dXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVM
YXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFn
ZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwg
Y29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6
IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0g
ZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZp
Y2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRl
eEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZl
cnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0g
PSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEw
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIu
dW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOwor
ICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVu
b3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4o
c3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFp
bi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0
cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29k
ZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQg
PSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9
IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxv
YWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAg
Y29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFz
c0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07
CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRl
clBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBp
cGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhC
dWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRy
YXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNv
bnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2Uu
Z2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93
LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRl
ci1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0
eXJlc29sdmVyL2luZGV4ZXItYW5kZXItZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWV4cGVjdGVk
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRo
PSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBz
dGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAg
IGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwg
NDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0
LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUtMy1s
ZXZlbHMtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJv
cGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2lu
ZGV4ZXItYW5kZXItbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48
L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29u
dGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0g
ImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRl
eHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAy
MDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3Bl
cnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUtMy1sZXZlbHMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2
YWx1ZS0zLWxldmVscy5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9w
cm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLTMtbGV2ZWxzLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28gewor
ICAgIGZsb2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyog
ZiwgdWludCBpbmRleCkgeworICAgIHJldHVybiAmZi0+eDsKK30KKworc3RydWN0IEJhciB7Cisg
ICAgRm9vIHo7Cit9CisKK3RocmVhZCBGb28qIG9wZXJhdG9yJltdKHRocmVhZCBCYXIqIGIsIHVp
bnQgaW5kZXgpIHsKKyAgICByZXR1cm4gJmItPno7Cit9CisKK3N0cnVjdCBCYXogeworICAgIEJh
ciBwOworfQorCit0aHJlYWQgQmFyKiBvcGVyYXRvciZbXSh0aHJlYWQgQmF6KiBiLCB1aW50IGlu
ZGV4KSB7CisgICAgcmV0dXJuICZiLT5wOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRT
aGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBCYXogYjsKKyAgICBiWzFdWzJdWzNdID0gMS4w
OworICAgIHJldHVybiBmbG9hdDQoYlsxXVsyXVszXSwgYlsxXVsyXVszXSwgYlsxXVsyXVszXSwg
MS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVy
ID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmlj
ZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1
bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdl
ID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsK
KyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29u
c3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25l
In07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7
fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhh
QmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMu
QUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0
IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAg
IGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07
CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7
dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQg
PSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJh
Z21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JT
dGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1
ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsz
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEu
MDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
M10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNv
bnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07
CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENo
YWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRD
dXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4
dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjog
MCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0
YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDog
ImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3Qg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2Ny
aXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAg
Y29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3Mo
cmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJz
KDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwg
MSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNv
bW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVl
dWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFs
dWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXIt
bHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlk
PSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cith
c3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250
ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNvbnRleHQu
ZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gIndoaXRl
IjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1h
bmRlci1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNl
ID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVj
dCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCogb3BlcmF0b3ImW10odGhy
ZWFkIEZvbyogZiwgdWludCBpbmRleCkgeworICAgIHJldHVybiAmZi0+eDsKK30KKworc3RydWN0
IEJhciB7CisgICAgRm9vIHo7Cit9CisKK3RocmVhZCBGb28qIG9wZXJhdG9yJltdKHRocmVhZCBC
YXIqIGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gJmItPno7Cit9CisKK2ZyYWdtZW50IGZs
b2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGJb
MV1bMl0gPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiWzFdWzJdLCBiWzFdWzJdLCBiWzFdWzJd
LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0
ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2
aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJN
b2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlz
V0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1v
ZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3Rh
Z2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9
OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBj
b25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5v
bmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9
IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxw
aGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0
cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29u
c3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07Cisg
ICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBd
fTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9
IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBm
cmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xv
clN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwg
bGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZp
Y2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVC
dWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5j
cmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4
QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0w
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1h
cCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAg
Y29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0i
fTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2Fw
Q2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdl
dEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRU
ZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9
IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHty
OiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3th
dHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9w
OiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25z
dCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVz
Y3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFz
cyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxp
bmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZl
cnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0
LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3Qg
Y29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRR
dWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5k
ZXhlci1hbmRlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9w
ZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+
Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4K
KzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNo
YWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAg
IHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwor
dGhyZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmLCB1aW50IGluZGV4KSB7Cisg
ICAgcmV0dXJuICZmLT54OworfQorCitGb28gZ2VuZXJhdGVGb28oKSB7CisgICAgRm9vIGY7Cisg
ICAgZi54ID0gMS4wOworICAgIHJldHVybiBmOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21l
bnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gZmxvYXQ0KGdlbmVyYXRlRm9v
KClbMF0sIGdlbmVyYXRlRm9vKClbMV0sIGdlbmVyYXRlRm9vKClbMl0sIDEuMCk7Cit9CitgOwor
YXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmln
YXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFw
dGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5j
cmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOwor
ICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50
OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJp
bWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRp
b25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0
IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3Qg
Y29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJs
ZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0
IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0g
e3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAg
PSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlu
cHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6
IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdy
b3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0
ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBy
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHBy
aW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0
ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5l
TGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQ
aXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVm
ZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0
ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9X
UklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0
ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9
IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZl
cik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAt
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3Qg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5E
ZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3
YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3Ip
OworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUo
KTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVm
YXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNv
bW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEs
IGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1
dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3Jl
T3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0
dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9y
QXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBh
c3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNj
cmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGlu
ZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVm
ZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0g
Y29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtj
b21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRl
c3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItZ2V0dGVyLWV4cGVjdGVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1n
ZXR0ZXItZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUv
cHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWdldHRlci1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHls
ZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEw
MCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9w
cm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItZ2V0dGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1nZXR0ZXIuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWdl
dHRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRl
clNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6
IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQor
CitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCitmbG9hdCBvcGVyYXRvcltdKEZvbyBm
LCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuIGZsb2F0KGluZGV4KTsKK30KKworZnJhZ21lbnQg
ZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgRm9vIGY7CisgICAg
cmV0dXJuIGZsb2F0NChmWzFdLCBmWzFdLCBmWzFdLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJl
cXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0
RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2
ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTog
MTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5w
dXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0
ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
OF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBj
YW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9
IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBj
b250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29u
c3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7
CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rl
cigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAg
ICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmll
dywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUi
LCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0g
bnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRz
LCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJv
cGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMtZXhw
ZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9pbmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9p
bmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVp
Z2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewor
ICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAg
ICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5m
aWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7
CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3Qo
MTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwg
c3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93
ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1s
ZXZlbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9pbmRleGVyLXNldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNl
dHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewor
ICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30K
KworZmxvYXQgb3BlcmF0b3JbXShGb28gZiwgdWludCBpbmRleCkgeworICAgIHJldHVybiBmLng7
Cit9CisKK0ZvbyBvcGVyYXRvcltdPShGb28gZiwgdWludCBpbmRleCwgZmxvYXQgeCkgeworICAg
IGYueCA9IHg7CisgICAgcmV0dXJuIGY7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6Owor
fQorCitGb28gb3BlcmF0b3JbXShCYXIgYiwgdWludCBpbmRleCkgeworICAgIHJldHVybiBiLno7
Cit9CisKK0JhciBvcGVyYXRvcltdPShCYXIgYiwgdWludCBpbmRleCwgRm9vIGEpIHsKKyAgICBi
LnogPSBhOworICAgIHJldHVybiBiOworfQorCitzdHJ1Y3QgQmF6IHsKKyAgICBCYXIgcDsKK30K
KworQmFyIG9wZXJhdG9yW10oQmF6IGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gYi5wOwor
fQorCitCYXogb3BlcmF0b3JbXT0oQmF6IGIsIHVpbnQgaW5kZXgsIEJhciBhKSB7CisgICAgYi5w
ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmF6IGI7CisgICAgYlsyXVszXVs0XSA9IDEuMDsKKyAg
ICByZXR1cm4gZmxvYXQ0KGJbMl1bM11bNF0sIGJbMl1bM11bNF0sIGJbMl1bM11bNF0sIDEuMCk7
Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3
YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBh
d2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAg
Y29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJh
c3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9Owor
ICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5k
LCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRy
aWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25z
dCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3Ig
PSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2
aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50
U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVz
LCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6
IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVh
dGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
dmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVz
YWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1
ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJB
cnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisK
KyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cisg
ICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBz
d2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAg
IGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRl
c2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUu
Y3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6
IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1l
bnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVh
ciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9y
ID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0
IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRl
clBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5k
ZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0
LWx2YWx1ZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9w
cm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVy
L2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHls
ZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEw
MCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9w
cm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0
dGVyLWFic3RyYWN0LWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9
IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3Qg
Rm9vIHsKKyAgICBmbG9hdCB4OworfQorCitmbG9hdCBvcGVyYXRvcltdKEZvbyBmLCB1aW50IGlu
ZGV4KSB7CisgICAgcmV0dXJuIGYueDsKK30KKworRm9vIG9wZXJhdG9yW109KEZvbyBmLCB1aW50
IGluZGV4LCBmbG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICByZXR1cm4gZjsKK30KKworc3Ry
dWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK0ZvbyBvcGVyYXRvcltdKEJhciBiLCB1aW50IGlu
ZGV4KSB7CisgICAgcmV0dXJuIGIuejsKK30KKworQmFyIG9wZXJhdG9yW109KEJhciBiLCB1aW50
IGluZGV4LCBGb28gYSkgeworICAgIGIueiA9IGE7CisgICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdt
ZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOwor
ICAgIGJbMl1bM10gPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiWzJdWzNdLCBiWzJdWzNdLCBi
WzJdWzNdLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0
IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29u
c3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNo
YWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdt
ZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNo
YWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsK
KyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9k
ZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3Jt
IiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldy
aXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisg
ICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0
In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJp
YnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJ
bnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlv
dXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0
YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRl
LCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3Vu
dDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUg
PSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsK
KworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVgg
fCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRl
dmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVy
dGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygp
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXko
dmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsw
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0g
MTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZl
ci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7
CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4
dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFp
bihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENo
YWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBv
dXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJl
ZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRz
ID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwg
bG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQ
YXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50
fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVu
ZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0
UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRl
eEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIu
ZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAg
Y29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmlj
ZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNl
dHRlci1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9w
ZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItZXhw
ZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7
CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgw
LCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNv
bnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1sdmFs
dWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVy
dHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRl
ci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENv
bnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4
dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hp
dGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVy
LXNldHRlci1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJv
cGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1sdmFsdWUuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1sdmFs
dWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdp
ZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJT
b3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKwor
c3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKworZmxvYXQgb3BlcmF0b3JbXShGb28gZiwg
dWludCBpbmRleCkgeworICAgIHJldHVybiBmLng7Cit9CisKK0ZvbyBvcGVyYXRvcltdPShGb28g
ZiwgdWludCBpbmRleCwgZmxvYXQgeCkgeworICAgIGYueCA9IHg7CisgICAgcmV0dXJuIGY7Cit9
CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCit0aHJlYWQgRm9vKiBvcGVyYXRvciZb
XSh0aHJlYWQgQmFyKiBiLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuICZiLT56OworfQorCitm
cmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBCYXIg
YjsKKyAgICBiWzJdWzNdID0gMS4wOworICAgIHJldHVybiBmbG9hdDQoYlsyXVszXSwgYlsyXVsz
XSwgYlsyXVszXSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBj
b25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAg
IGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBm
cmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21l
bnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJp
cCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3Vs
bE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNv
bG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1
bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29s
b3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAg
IAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZs
b2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFth
dHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVy
dGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlw
ZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0
ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25T
dGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxl
Q291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
cik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJB
cnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVS
VEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5
bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFy
cmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3
XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9
IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdw
dSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJi
Z3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2Fw
Q2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3
YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3
ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFu
ZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25z
dCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2ht
ZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51
bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNo
bWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdp
blJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRW
ZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNv
ZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOwor
ICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBk
ZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhl
ci1zZXR0ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHly
ZXNvbHZlci9pbmRleGVyLXNldHRlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZs
b2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bv
c2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZs
b2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCogb3BlcmF0b3ImW10odGhyZWFkIEZvbyogZiwgdWlu
dCBpbmRleCkgeworICAgIHJldHVybiAmZi0+eDsKK30KKworc3RydWN0IEJhciB7CisgICAgRm9v
IHo7Cit9CisKK0ZvbyBvcGVyYXRvcltdKEJhciBiLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJu
IGIuejsKK30KKworQmFyIG9wZXJhdG9yW109KEJhciBiLCB1aW50IGluZGV4LCBGb28gYSkgewor
ICAgIGIueiA9IGE7CisgICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVu
dFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIEZvbyBmb287CisgICAg
Zm9vLnggPSAxLjA7CisgICAgYlsxXSA9IGZvbzsKKyAgICBmb28gPSBiWzFdOworICAgIHJldHVy
biBmbG9hdDQoZm9vLngsIGZvby54LCBmb28ueCwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5jdGlv
biBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1
ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERl
dmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1v
ZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgdmVy
dGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFk
ZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3BvbG9n
eSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0ge2Zy
b250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVuZCA9
IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRlcyA9
IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFz
azogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVuY2ls
U3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRp
b246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2
LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lucHV0
MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsKKwor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBb
XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xv
Z3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2
ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAg
IGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRl
clBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBj
b25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRlc2Ny
aXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4
QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5Wzhd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVd
ID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2Fu
dmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7
ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0gY29u
dGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29uc3Qg
b3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNvbnN0
IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0VmlldygpOwor
CisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07CisgICAg
Y29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZpZXcs
IHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3JlIiwg
Y2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9IG51
bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50cywg
ZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIgPSBj
b21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAg
IHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFzc0Vu
Y29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rl
ci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJd
KTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3Bl
cnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRl
ci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZh
bHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2Fu
dmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3Jp
cHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5n
ZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJsdWUiOworICAgIGNv
bnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0g
IndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCk7Cit9Cit3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0
dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZl
bHMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLTMtbGV2ZWxzLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMzMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVydGV4IGZsb2F0
NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0
aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28geworICAgIGZsb2F0
IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yLnkoRm9vIGYpIHsKKyAgICByZXR1cm4gZi54OworfQor
CitGb28gb3BlcmF0b3IueT0oRm9vIGYsIGZsb2F0IHgpIHsKKyAgICBmLnggPSB4OworICAgIHJl
dHVybiBmOworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKworRm9vIG9wZXJhdG9y
LncoQmFyIGIpIHsKKyAgICByZXR1cm4gYi56OworfQorCitCYXIgb3BlcmF0b3Iudz0oQmFyIGIs
IEZvbyBhKSB7CisgICAgYi56ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworc3RydWN0IEJheiB7
CisgICAgQmFyIHA7Cit9CisKK0JhciBvcGVyYXRvci5xKEJheiBiKSB7CisgICAgcmV0dXJuIGIu
cDsKK30KKworQmF6IG9wZXJhdG9yLnE9KEJheiBiLCBCYXIgYSkgeworICAgIGIucCA9IGE7Cisg
ICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1Zf
VGFyZ2V0IDAgeworICAgIEJheiBiOworICAgIGIucS53LnkgPSAxLjA7CisgICAgcmV0dXJuIGZs
b2F0NChiLnEudy55LCBiLnEudy55LCBiLnEudy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJl
cXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0
RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2
ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNo
YWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9s
b2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7
ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5k
ID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVz
ID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVN
YXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5j
aWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2Nh
dGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTog
MTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5w
dXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9Owor
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxh
eW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3Bv
bG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUs
IHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVu
ZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0
b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAg
IGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVz
Y3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0
ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9
IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
OF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
NV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBj
YW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9
IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBj
b250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29u
c3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7
CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rl
cigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAg
ICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmll
dywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUi
LCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0g
bnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRz
LCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9
IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJl
bmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNz
RW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNv
ZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZl
cl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJv
cGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFic3Ry
YWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29u
dGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAs
IDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmls
bFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJs
b2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVy
LWFic3RyYWN0LWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdw
dS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXgg
ZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1Zf
UG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAg
ZmxvYXQgeDsKK30KKworZmxvYXQgb3BlcmF0b3IueShGb28gZikgeworICAgIHJldHVybiBmLng7
Cit9CisKK0ZvbyBvcGVyYXRvci55PShGb28gZiwgZmxvYXQgeCkgeworICAgIGYueCA9IHg7Cisg
ICAgcmV0dXJuIGY7Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCitGb28gb3Bl
cmF0b3IudyhCYXIgYikgeworICAgIHJldHVybiBiLno7Cit9CisKK0JhciBvcGVyYXRvci53PShC
YXIgYiwgRm9vIGEpIHsKKyAgICBiLnogPSBhOworICAgIHJldHVybiBiOworfQorCitmcmFnbWVu
dCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBCYXIgYjsKKyAg
ICBiLncueSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGIudy55LCBiLncueSwgYi53LnksIDEu
MCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9
IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2Ug
PSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVs
ZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExT
TDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07Cisg
ICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0
IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9
OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJs
ZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFM
TAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBh
dHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBj
b25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19Owor
ICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3Zl
cnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0
b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdt
ZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3Rh
dGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlv
dXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5j
cmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29u
c3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0
ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJB
cnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZm
ZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10g
PSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNd
ID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7
CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25z
dCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9Owor
ICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFp
bkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3Vy
cmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1
cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2
aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAs
IGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFj
aG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJj
bGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRl
cHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlw
dG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNv
bnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJl
bmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShy
ZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygw
LCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEs
IDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21t
YW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVl
KCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1sdmFsdWUtZXhwZWN0
ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZl
ci9zZXR0ZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWx2YWx1ZS1leHBlY3RlZC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
ICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0
LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAw
KTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItbHZhbHVlLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0
dGVyLWx2YWx1ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNh
bnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0
IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3Np
dGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9u
OworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCitmbG9hdCBvcGVyYXRvci55
KEZvbyBmKSB7CisgICAgcmV0dXJuIGYueDsKK30KKworRm9vIG9wZXJhdG9yLnk9KEZvbyBmLCBm
bG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICByZXR1cm4gZjsKK30KKworc3RydWN0IEJhciB7
CisgICAgRm9vIHo7Cit9CisKK3RocmVhZCBGb28qIG9wZXJhdG9yJi53KHRocmVhZCBCYXIqIGIp
IHsKKyAgICByZXR1cm4gJmItPno7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGIudy55ID0gMS4wOworICAgIHJl
dHVybiBmbG9hdDQoYi53LnksIGIudy55LCBiLncueSwgMS4wKTsKK30KK2A7Cithc3luYyBmdW5j
dGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5y
ZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVz
dERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRl
ck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3Qg
dmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhT
aGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxl
LCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVUb3Bv
bG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRlID0g
e2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0YXRl
cyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdyaXRl
TWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVyTG9j
YXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJpZGU6
IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0gW2lu
cHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRzfTsK
KworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRz
OiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVM
YXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9w
b2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRl
LCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9Owor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1c2Fn
ZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAg
ICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlckRl
c2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgdmVy
dGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNV0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0gMC41
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0g
Y2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0b3Ig
PSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWluID0g
Y29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAgY29u
c3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAgIGNv
bnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmlldygp
OworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29k
ZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07Cisg
ICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVyZVZp
ZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0b3Jl
IiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVudCA9
IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2htZW50
cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29kZXIg
PSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBbMF0p
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5j
b2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZm
ZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5u
b3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWRvbnQtY3Jhc2gtcGFyc2luZy1lbnVtLmh0bWwJKHJldmlzaW9uIDI0
NjMyNikKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1kb250LWNyYXNoLXBhcnNpbmctZW51
bS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMCArNzQsMTAgQEAgYXN5bmMgZnVuY3Rpb24g
c3RhcnQoKSB7CiAgICAgY29uc3QgdmVydGV4QnVmZmVyMSA9IGRldmljZS5jcmVhdGVCdWZmZXIo
dmVydGV4QnVmZmVyMURlc2NyaXB0b3IpOwogICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjFBcnJheUJ1
ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlcjEubWFwV3JpdGVBc3luYygpOwogICAgIGNvbnN0IHZl
cnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlcjFB
cnJheUJ1ZmZlcik7Ci0gICAgdmVydGV4QnVmZmVyMURlc2NyaXB0b3JbMF0gPSAxOwotICAgIHZl
cnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzFdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRv
clsyXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMURlc2NyaXB0b3JbM10gPSAxOworICAgIHZlcnRl
eEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJy
YXlbMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbMl0gPSAxOworICAgIHZl
cnRleEJ1ZmZlcjFGbG9hdDMyQXJyYXlbM10gPSAxOwogICAgIHZlcnRleEJ1ZmZlcjEudW5tYXAo
KTsKIAogICAgIGNvbnN0IHJlc291cmNlQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5VTklGT1JNIHwg
R1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC5odG1sCShyZXZp
c2lvbiAyNDYzMjYpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtNjksMTAgKzY5LDEwIEBAIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgIGNv
bnN0IHZlcnRleEJ1ZmZlcjEgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZlcjFEZXNj
cmlwdG9yKTsKICAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0
ZXhCdWZmZXIxLm1hcFdyaXRlQXN5bmMoKTsKICAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZmZXIpOwotICAg
IHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzBdID0gMTsKLSAgICB2ZXJ0ZXhCdWZmZXIxRGVzY3Jp
cHRvclsxXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMURlc2NyaXB0b3JbMl0gPSAxOwotICAgIHZl
cnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFy
cmF5WzBdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzFdID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzJdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQz
MkFycmF5WzNdID0gMTsKICAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7CiAKICAgICBjb25zdCBy
ZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURX07CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRl
ci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQu
aHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZl
ci9hbmRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2Fu
dmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1
ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5m
aWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwg
MjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHly
ZXNvbHZlci9hbmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRl
ci1hYnN0cmFjdC1sdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+
Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9h
dDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBw
b3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhyZWFkIGZs
b2F0KiBvcGVyYXRvciYueSh0aHJlYWQgRm9vKiBmKSB7CisgICAgcmV0dXJuICZmLT54OworfQor
CitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKworRm9vIG9wZXJhdG9yLncoQmFyIGIpIHsK
KyAgICByZXR1cm4gYi56OworfQorCitCYXIgb3BlcmF0b3Iudz0oQmFyIGIsIEZvbyBhKSB7Cisg
ICAgYi56ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50
U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYi53LnkgPSAxLjA7Cisg
ICAgcmV0dXJuIGZsb2F0NChiLncueSwgYi53LnksIGIudy55LCAxLjApOworfQorYDsKK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3Iu
Z3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5y
ZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZl
cnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJN
b2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2
ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3Rh
dGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBo
YUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9y
U3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwg
d3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0
aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFk
ZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0
cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMg
PSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1
dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExh
eW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBl
bGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVy
UGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRp
dmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2ls
U3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91
dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxp
bmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQs
IHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9
OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVm
ZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRl
eHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3Jp
cHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hh
aW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAg
ICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7Cisg
ICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRW
aWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5k
RW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAx
fTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0
dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAi
c3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2ht
ZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFj
aG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRv
cik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOwor
ICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0s
IFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3Rh
cnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLWV4cGVjdGVkLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvYW5kZXIt
ZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJk
Iik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtMy1s
ZXZlbHMtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJv
cGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFs
dWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdl
dENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29u
dGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAi
d2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRl
ci1sdmFsdWUtMy1sZXZlbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUv
cHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtMy1sZXZlbHMuaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtMy1s
ZXZlbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFk
ZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24g
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30K
Kworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRv
ciYueSh0aHJlYWQgRm9vKiBmKSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFy
IHsKKyAgICBGb28gejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0b3ImLncodGhyZWFkIEJhciog
YikgeworICAgIHJldHVybiAmYi0+ejsKK30KKworc3RydWN0IEJheiB7CisgICAgQmFyIHA7Cit9
CisKK3RocmVhZCBCYXIqIG9wZXJhdG9yJi5xKHRocmVhZCBCYXoqIGIpIHsKKyAgICByZXR1cm4g
JmItPnA7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0
IDAgeworICAgIEJheiBiOworICAgIGIucS53LnkgPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChi
LnEudy55LCBiLnEudy55LCBiLnEudy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RB
ZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNl
KCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjog
MCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0
dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
KyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChw
aXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwg
cmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRl
eElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRv
cik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZm
ZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMu
Z2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZp
Y2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0
LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRw
dXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0
cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAg
ICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAv
LyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25z
dCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVz
b2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVh
ckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsK
KyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1h
bmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZp
bmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwor
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHly
ZXNvbHZlci9hbmRlci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRl
ci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4K
K2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENv
bnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4
dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hp
dGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1s
dmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9hbmRlci1sdmFsdWUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci1sdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZl
cnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24g
eworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsK
K30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciYueSh0aHJlYWQgRm9vKiBmKSB7CisgICAgcmV0
dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30KKwordGhyZWFkIEZv
byogb3BlcmF0b3ImLncodGhyZWFkIEJhciogYikgeworICAgIHJldHVybiAmYi0+ejsKK30KKwor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFy
IGI7CisgICAgYi53LnkgPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiLncueSwgYi53LnksIGIu
dy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFk
YXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3Qg
ZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRl
ciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAg
ICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTog
Im5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwg
YWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRl
Qml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07
CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0
ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1
dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVy
dGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51
bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Cisg
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
KyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJh
dyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9hbmRlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2FuZGVyLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIv
YW5kZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMi
IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFk
ZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24g
OiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30K
Kworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRv
ciYueSh0aHJlYWQgRm9vKiBmKSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitGb28gZ2VuZXJh
dGVGb28oKSB7CisgICAgRm9vIGY7CisgICAgZi54ID0gMS4wOworICAgIHJldHVybiBmOworfQor
CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBy
ZXR1cm4gZmxvYXQ0KGdlbmVyYXRlRm9vKCkueSwgZ2VuZXJhdGVGb28oKS55LCBnZW5lcmF0ZUZv
bygpLnksIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3Qg
YWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25z
dCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNo
YWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJj
ZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hh
ZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21l
bnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hh
ZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOwor
ICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2Rl
OiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJs
ZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0i
LCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3Jp
dGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAg
ICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQi
fTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmli
dXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElu
cHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3Rh
Z2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUs
IGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50
OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9
IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXku
QllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2
aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2
ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
MF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVy
LnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsK
KyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1
bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWlu
KHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hh
aW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91
dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVk
ID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMg
PSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBs
b2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAg
IGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBh
c3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9
OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5k
ZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQ
aXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4
QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5k
cmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBj
b25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNl
LmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2dldHRlci1leHBl
Y3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL2dldHRlci1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL2dldHRlci1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVh
ZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+
PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3Qg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNv
bnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9
ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250
ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwg
MjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9w
ZXJ0eXJlc29sdmVyL2dldHRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdw
dS9wcm9wZXJ0eXJlc29sdmVyL2dldHRlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2dldHRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQg
dmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlv
biB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4
OworfQorCitmbG9hdCBvcGVyYXRvci55KEZvbyBmKSB7CisgICAgcmV0dXJuIGYueDsKK30KKwor
ZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgRm9v
IGY7CisgICAgZi54ID0gMS4wOworICAgIHJldHVybiBmbG9hdDQoZi55LCBmLnksIGYueSwgMS4w
KTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0g
YXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9
IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxl
ID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNM
OiB0cnVlfSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUs
IGVudHJ5UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0g
e21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAg
ICBjb25zdCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3Qg
cmFzdGVyaXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07
CisgICAgY29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxl
bmQsIGNvbG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxM
CisgICAgY29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0
dHJpYnV0ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNv
bnN0IGlucHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07Cisg
ICAgY29uc3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVy
dGV4QnVmZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRv
ciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBk
ZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21l
bnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0
ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91
dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNy
ZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRl
QnVmZmVyKHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFy
cmF5QnVmZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZl
ckFycmF5QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9
IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzZdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs5XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10g
PSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsK
KworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
KyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0
IHN3YXBDaGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07Cisg
ICAgY29uc3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWlu
RGVzY3JpcHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJy
ZW50VGV4dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVy
ZS5jcmVhdGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZp
Y2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwg
ZzogMCwgYjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNo
bWVudDogb3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNs
ZWFyIiwgc3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVw
dGhTdGVuY2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0
b3IgPSB7Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29u
c3QgcmVuZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVu
ZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJl
bmRlclBpcGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAs
IFt2ZXJ0ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwg
MCwgMCk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1h
bmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUo
KS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1hYnN0cmFj
dC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUv
cHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVy
L2luZGV4ZXItYW5kZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3Qg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNv
bnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAw
LCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVy
LWFic3RyYWN0LWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdw
dS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBo
ZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAor
dmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDAp
KSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28g
eworICAgIGZsb2F0IHg7Cit9CisKK3RocmVhZCBmbG9hdCogb3BlcmF0b3ImW10odGhyZWFkIEZv
byogZiwgdWludCBpbmRleCkgeworICAgIHJldHVybiAmZi0+eDsKK30KKworc3RydWN0IEJhciB7
CisgICAgRm9vIHo7Cit9CisKK0ZvbyBvcGVyYXRvcltdKEJhciBiLCB1aW50IGluZGV4KSB7Cisg
ICAgcmV0dXJuIGIuejsKK30KKworQmFyIG9wZXJhdG9yW109KEJhciBiLCB1aW50IGluZGV4LCBG
b28gYSkgeworICAgIGIueiA9IGE7CisgICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGJbMl1b
M10gPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiWzJdWzNdLCBiWzJdWzNdLCBiWzJdWzNdLCAx
LjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIg
PSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNl
ID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1
bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hM
U0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVs
ZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9Owor
ICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25z
dCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUi
fTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9
OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFC
bGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5B
TEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3Qg
YXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAg
Y29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsK
KyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2
ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlw
dG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFn
bWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0
YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2Uu
Y3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZm
ZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVh
dGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVy
QXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNv
bnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVm
ZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNd
ID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEz
XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIp
OworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29u
c3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsK
KyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hh
aW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1
cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0
dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRl
dmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAw
LCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRh
Y2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAi
Y2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBk
ZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3Jp
cHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBj
b25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhy
ZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUo
cmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMo
MCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAx
LCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29t
bWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1
ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWV4cGVj
dGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2
ZXIvaW5kZXhlci1hbmRlci1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItZXhwZWN0ZWQuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIg
aGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkg
eworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsK
KyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4
dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQw
MCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJl
Y3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2Fk
Iiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS0zLWxldmVscy1l
eHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJl
c29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1h
bmRlci1sdmFsdWUtMy1sZXZlbHMtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFz
PgorPHNjcmlwdD4KK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0g
Y2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7
CisgICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxs
U3R5bGUgPSAid2hpdGUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAw
KTsKK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS0zLWxldmVscy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLTMt
bGV2ZWxzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUtMy1sZXZlbHMuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAw
Ij48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxv
YXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9z
aXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxv
YXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmLCB1aW50
IGluZGV4KSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28g
ejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0b3ImW10odGhyZWFkIEJhciogYiwgdWludCBpbmRl
eCkgeworICAgIHJldHVybiAmYi0+ejsKK30KKworc3RydWN0IEJheiB7CisgICAgQmFyIHA7Cit9
CisKK3RocmVhZCBCYXIqIG9wZXJhdG9yJltdKHRocmVhZCBCYXoqIGIsIHVpbnQgaW5kZXgpIHsK
KyAgICByZXR1cm4gJmItPnA7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRlcigp
IDogU1ZfVGFyZ2V0IDAgeworICAgIEJheiBiOworICAgIGJbMV1bMl1bM10gPSAxLjA7CisgICAg
cmV0dXJuIGZsb2F0NChiWzFdWzJdWzNdLCBiWzFdWzJdWzNdLCBiWzFdWzJdWzNdLCAxLjApOwor
fQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2Fp
dCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdh
aXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBk
ZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRy
dWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9k
dWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNv
bnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0
ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAg
ICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAg
IGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwg
Y29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAg
ICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmli
dXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3Qg
aW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBj
b25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhC
dWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmlj
ZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0
YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywg
ZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBw
aXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRl
UmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlC
dWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJy
YXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0g
PSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dh
cENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBj
b25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRU
ZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNy
ZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5j
cmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAw
LCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50
OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIi
LCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9
IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCBy
ZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQ
YXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVy
UGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3Zl
cnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAw
KTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1
ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1
Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2YWx1ZS1leHBl
Y3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUt
ZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2FzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJk
Iik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5maWxsUmVj
dCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUiOworICAg
IGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFuZGVyLWx2
YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL2luZGV4ZXItYW5kZXItbHZhbHVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1hbmRlci1sdmFsdWUuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhl
aWdodD0iNDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2
ZXJ0ZXggZmxvYXQ0IHZlcnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkp
IDogU1ZfUG9zaXRpb24geworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7
CisgICAgZmxvYXQgeDsKK30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9v
KiBmLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsK
KyAgICBGb28gejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0b3ImW10odGhyZWFkIEJhciogYiwg
dWludCBpbmRleCkgeworICAgIHJldHVybiAmYi0+ejsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZy
YWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYlsxXVsyXSA9
IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGJbMV1bMl0sIGJbMV1bMl0sIGJbMV1bMl0sIDEuMCk7
Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3
YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBh
d2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDog
dHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBl
bnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHtt
b2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAg
Y29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJh
c3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9Owor
ICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5k
LCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAor
ICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRy
aWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25z
dCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAg
IGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRl
eEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3Ig
PSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2
aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50
U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVz
LCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6
IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVh
dGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qg
dmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVz
YWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1
ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJh
eUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJB
cnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAx
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2
XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisK
KyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cisg
ICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBz
d2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAg
IGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRl
c2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUu
Y3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6
IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1l
bnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVh
ciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9y
ID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0
IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRl
clBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5k
ZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBb
dmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAs
IDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5k
QnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCku
c3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItYW5kZXIuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWFu
ZGVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVz
b2x2ZXIvaW5kZXhlci1hbmRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52
YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlw
dD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZs
b2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJu
IHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCit0aHJlYWQg
ZmxvYXQqIG9wZXJhdG9yJltdKHRocmVhZCBGb28qIGYsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1
cm4gJmYtPng7Cit9CisKK0ZvbyBnZW5lcmF0ZUZvbygpIHsKKyAgICBGb28gZjsKKyAgICBmLngg
PSAxLjA7CisgICAgcmV0dXJuIGY7Cit9CisKK2ZyYWdtZW50IGZsb2F0NCBmcmFnbWVudFNoYWRl
cigpIDogU1ZfVGFyZ2V0IDAgeworICAgIHJldHVybiBmbG9hdDQoZ2VuZXJhdGVGb28oKVswXSwg
Z2VuZXJhdGVGb28oKVsxXSwgZ2VuZXJhdGVGb28oKVsyXSwgMS4wKTsKK30KK2A7Cithc3luYyBm
dW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdw
dS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVx
dWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNo
YWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29u
c3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJ2ZXJ0
ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBwcmltaXRpdmVU
b3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXphdGlvblN0YXRl
ID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29uc3QgYWxwaGFC
bGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvclN0
YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9yQmxlbmQsIHdy
aXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29uc3QgZGVwdGhT
dGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAgPSB7c2hhZGVy
TG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0MCA9IHtzdHJp
ZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3QgaW5wdXRzID0g
W2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVyczogaW5wdXRz
fTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlv
dXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxp
bmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHJlbmRlclBp
cGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZl
VG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0
YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9
OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5l
KHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJEZXNj
cmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDQgKiA0LCB1
c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsK
KyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZlcnRleEJ1ZmZl
ckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
dmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZs
b2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzJdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
NV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4wOworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9IC0wLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTJdID0g
MC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7CisgICAgdmVydGV4
QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IGNhbnZh
cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0
ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFpbkRlc2NyaXB0
b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qgc3dhcENoYWlu
ID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRvcik7CisgICAg
Y29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVyZSgpOworICAg
IGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVEZWZhdWx0Vmll
dygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVu
Y29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjogMSwgYTogMX07
CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0cHV0VGV4dHVy
ZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3RvcmVPcDogInN0
b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2lsQXR0YWNobWVu
dCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29sb3JBdHRhY2ht
ZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVyUGFzc0VuY29k
ZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3Ip
OworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVsaW5lKTsKKyAg
ICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhCdWZmZXJdLCBb
MF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5k
RW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRC
dWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5l
ci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1nZXR0ZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWdldHRlci1l
eHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0
eXJlc29sdmVyL2luZGV4ZXItZ2V0dGVyLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJs
dWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQu
ZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAs
IDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvaW5kZXhlci1nZXR0ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLWdldHRlci5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItZ2V0dGVyLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNl
ID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVj
dCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yW10oRm9vIGYsIHVpbnQg
aW5kZXgpIHsKKyAgICByZXR1cm4gZmxvYXQoaW5kZXgpOworfQorCitmcmFnbWVudCBmbG9hdDQg
ZnJhZ21lbnRTaGFkZXIoKSA6IFNWX1RhcmdldCAwIHsKKyAgICBGb28gZjsKKyAgICByZXR1cm4g
ZmxvYXQ0KGZbMV0sIGZbMV0sIGZbMV0sIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFk
YXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2Uo
KTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07
CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAi
dHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZh
Y2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zv
cm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1
fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRl
ID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0
cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwor
ICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119Owor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCBy
YXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4
SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7
CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5n
ZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2Rldmlj
ZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQu
Y29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1
dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRw
dXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAg
IGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8v
IHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0
IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNv
bHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFy
Q29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwor
ICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFu
ZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmlu
aXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJl
c29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2lu
ZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXIt
c2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQw
MCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29u
c3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0
IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHls
ZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEw
MCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9w
cm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2lu
ZGV4ZXItc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWFi
c3RyYWN0LWx2YWx1ZS0zLWxldmVscy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMz
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxj
YW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNj
cmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVy
KGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0
dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4OworfQorCitmbG9h
dCBvcGVyYXRvcltdKEZvbyBmLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuIGYueDsKK30KKwor
Rm9vIG9wZXJhdG9yW109KEZvbyBmLCB1aW50IGluZGV4LCBmbG9hdCB4KSB7CisgICAgZi54ID0g
eDsKKyAgICByZXR1cm4gZjsKK30KKworc3RydWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK0Zv
byBvcGVyYXRvcltdKEJhciBiLCB1aW50IGluZGV4KSB7CisgICAgcmV0dXJuIGIuejsKK30KKwor
QmFyIG9wZXJhdG9yW109KEJhciBiLCB1aW50IGluZGV4LCBGb28gYSkgeworICAgIGIueiA9IGE7
CisgICAgcmV0dXJuIGI7Cit9CisKK3N0cnVjdCBCYXogeworICAgIEJhciBwOworfQorCitCYXIg
b3BlcmF0b3JbXShCYXogYiwgdWludCBpbmRleCkgeworICAgIHJldHVybiBiLnA7Cit9CisKK0Jh
eiBvcGVyYXRvcltdPShCYXogYiwgdWludCBpbmRleCwgQmFyIGEpIHsKKyAgICBiLnAgPSBhOwor
ICAgIHJldHVybiBiOworfQorCitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRTaGFkZXIoKSA6IFNW
X1RhcmdldCAwIHsKKyAgICBCYXogYjsKKyAgICBiWzJdWzNdWzRdID0gMS4wOworICAgIHJldHVy
biBmbG9hdDQoYlsyXVszXVs0XSwgYlsyXVszXVs0XSwgYlsyXVszXVs0XSwgMS4wKTsKK30KK2A7
Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2
aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFk
YXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNl
LmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7
CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25zdCBw
cmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVyaXph
dGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAgY29u
c3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBjb25z
dCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNvbG9y
QmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAgY29u
c3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0ZTAg
PSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlucHV0
MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29uc3Qg
aW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVmZmVy
czogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5k
R3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3Jl
YXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0
IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwg
cHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRo
U3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxp
bmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRl
clBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZl
cnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVmZmVy
ID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5QnVm
ZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0gMS4w
OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5XSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAgIGNv
bnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25z
dCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBDaGFp
bkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29uc3Qg
c3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3JpcHRv
cik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4dHVy
ZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVhdGVE
ZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRl
Q29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwgYjog
MSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDogb3V0
cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwgc3Rv
cmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVuY2ls
QXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7Y29s
b3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVuZGVy
UGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rl
c2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBpcGVs
aW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0ZXhC
dWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7Cisg
ICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIg
PSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQo
W2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
dGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVl
LWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhl
ci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4
dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0eWxlID0gImJs
dWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAgIGNvbnRleHQu
ZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwgMTAwLCAyMDAs
IDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0KTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5
cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJz
dHJhY3QtbHZhbHVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordmVy
dGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmlidXRlKDApKSA6
IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKK3N0cnVjdCBGb28gewor
ICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yW10oRm9vIGYsIHVpbnQgaW5kZXgpIHsK
KyAgICByZXR1cm4gZi54OworfQorCitGb28gb3BlcmF0b3JbXT0oRm9vIGYsIHVpbnQgaW5kZXgs
IGZsb2F0IHgpIHsKKyAgICBmLnggPSB4OworICAgIHJldHVybiBmOworfQorCitzdHJ1Y3QgQmFy
IHsKKyAgICBGb28gejsKK30KKworRm9vIG9wZXJhdG9yW10oQmFyIGIsIHVpbnQgaW5kZXgpIHsK
KyAgICByZXR1cm4gYi56OworfQorCitCYXIgb3BlcmF0b3JbXT0oQmFyIGIsIHVpbnQgaW5kZXgs
IEZvbyBhKSB7CisgICAgYi56ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxv
YXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYlsy
XVszXSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGJbMl1bM10sIGJbMl1bM10sIGJbMl1bM10s
IDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRl
ciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZp
Y2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1v
ZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNX
SExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07CisgICAgY29uc3QgZnJhZ21lbnRTdGFn
ZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImZyYWdtZW50U2hhZGVyIn07
CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAidHJpYW5nbGUtc3RyaXAiOworICAgIGNv
bnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZhY2U6ICJjdyIsIGN1bGxNb2RlOiAibm9u
ZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsKKyAgICBjb25zdCBjb2xvckJsZW5kID0g
e307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zvcm1hdDogInJnYmE4dW5vcm0iLCBhbHBo
YUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRz
LkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRlID0gbnVsbDsKKyAgICAKKyAgICBjb25z
dCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAwLCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAg
ICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0cmlidXRlU2V0OiBbYXR0cmlidXRlMF19
OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOworICAgIGNvbnN0IHZlcnRleElucHV0ID0g
e3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2Ny
aXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZy
YWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCByYXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9y
U3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBs
YXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAg
Y29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNf
UEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1
ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3QgdmVydGV4QnVmZmVyID0gZGV2aWNlLmNy
ZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAg
Y29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhC
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzBdID0gLTAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
M10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IC0wLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbN10gPSAxOworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAx
LjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzExXSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNF0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7CisgICAgdmVydGV4QnVmZmVyLnVubWFw
KCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFz
Iik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCJncHUiKTsKKyAgICBj
b25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2RldmljZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9
OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQuY29uZmlndXJlU3dhcENoYWluKHN3YXBD
aGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0
Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlVmlldyA9IG91dHB1dFRl
eHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0g
ZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29uc3QgcmVkID0ge3I6
IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0
dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNvbHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6
ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFyQ29sb3I6IHJlZH1dOworICAgIGNvbnN0
IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOworICAgIGNvbnN0IHJlbmRlclBhc3NEZXNj
cmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRoU3RlbmNpbEF0dGFjaG1lbnR9OworICAg
IGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNz
KHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0VmVydGV4QnVmZmVy
cygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQs
IDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBj
b21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1
ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQoraWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWV4
cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVz
b2x2ZXIvaW5kZXhlci1zZXR0ZXItZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRlci1leHBlY3RlZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBj
b250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQw
MCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5m
aWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS1leHBl
Y3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29s
dmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1
ZS1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2Fu
dmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgi
MmQiKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KDAsIDAsIDQwMCwgNDAwKTsKKyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7Cisg
ICAgY29udGV4dC5maWxsUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVy
LWx2YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJl
c29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL2luZGV4ZXItc2V0dGVyLWx2YWx1ZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQw
MCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9
IGAKK3ZlcnRleCBmbG9hdDQgdmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0
ZSgwKSkgOiBTVl9Qb3NpdGlvbiB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3Qg
Rm9vIHsKKyAgICBmbG9hdCB4OworfQorCitmbG9hdCBvcGVyYXRvcltdKEZvbyBmLCB1aW50IGlu
ZGV4KSB7CisgICAgcmV0dXJuIGYueDsKK30KKworRm9vIG9wZXJhdG9yW109KEZvbyBmLCB1aW50
IGluZGV4LCBmbG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICByZXR1cm4gZjsKK30KKworc3Ry
dWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK3RocmVhZCBGb28qIG9wZXJhdG9yJltdKHRocmVh
ZCBCYXIqIGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gJmItPno7Cit9CisKK2ZyYWdtZW50
IGZsb2F0NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAg
IGJbMl1bM10gPSAxLjA7CisgICAgcmV0dXJuIGZsb2F0NChiWzJdWzNdLCBiWzJdWzNdLCBiWzJd
WzNdLCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFk
YXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3Qg
ZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFk
ZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2Us
IGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFnZSA9IHttb2R1bGU6IHNoYWRl
ck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9OworICAgIGNvbnN0IGZyYWdtZW50
U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJmcmFnbWVudFNoYWRl
ciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRyaWFuZ2xlLXN0cmlwIjsKKyAg
ICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNlOiAiY3ciLCBjdWxsTW9kZTog
Im5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JCbGVu
ZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3JtYXQ6ICJyZ2JhOHVub3JtIiwg
YWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1dOyAvLyBHUFVDb2xvcldyaXRl
Qml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9IG51bGw7CisgICAgCisgICAg
Y29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwgZm9ybWF0OiAiZmxvYXQ0In07
CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJpYnV0ZVNldDogW2F0dHJpYnV0
ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAgICBjb25zdCB2ZXJ0ZXhJbnB1
dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXRE
ZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAgICBjb25zdCBwaXBlbGluZUxh
eW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0
b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yID0ge3ZlcnRleFN0YWdl
LCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFzdGVyaXphdGlvblN0YXRlLCBj
b2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElucHV0LCBzYW1wbGVDb3VudDog
MSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmUgPSBk
ZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5WRVJURVggfCBH
UFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZlcnRleEJ1ZmZlciA9IGRldmlj
ZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgdmVydGV4
QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIubWFwV3JpdGVBc3luYygpOwor
ICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVy
dGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFdID0gLTAuNTsKKyAgICB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNF0gPSAtMC41OworICAg
IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTBd
ID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMV0gPSAxOworICAgIHZlcnRl
eEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFy
cmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTRdID0gMS4wOwor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOworICAgIHZlcnRleEJ1ZmZlci51
bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNh
bnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiZ3B1Iik7Cisg
ICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2UsIGZvcm1hdDogImJncmE4dW5v
cm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNvbmZpZ3VyZVN3YXBDaGFpbihz
d2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRUZXh0dXJlID0gc3dhcENoYWlu
LmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZVZpZXcgPSBvdXRw
dXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbnN0IHJlZCA9
IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBjb2xvckF0dGFjaG1lbnRzID0g
W3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2ZVRhcmdldDogbnVsbCwgbG9h
ZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNvbG9yOiByZWR9XTsKKyAgICBj
b25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAgICBjb25zdCByZW5kZXJQYXNz
RGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50fTsK
KyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luUmVuZGVy
UGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFZlcnRleEJ1
ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZHJh
dyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29u
c3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5n
ZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9pbmRleGVyLXNldHRl
ci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVy
L2luZGV4ZXItc2V0dGVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvaW5kZXhlci1zZXR0ZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2Nh
bnZhcz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZl
cnRleFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24g
eworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsK
K30KKwordGhyZWFkIGZsb2F0KiBvcGVyYXRvciZbXSh0aHJlYWQgRm9vKiBmLCB1aW50IGluZGV4
KSB7CisgICAgcmV0dXJuICZmLT54OworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBGb28gejsKK30K
KworRm9vIG9wZXJhdG9yW10oQmFyIGIsIHVpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gYi56Owor
fQorCitCYXIgb3BlcmF0b3JbXT0oQmFyIGIsIHVpbnQgaW5kZXgsIEZvbyBhKSB7CisgICAgYi56
ID0gYTsKKyAgICByZXR1cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVy
KCkgOiBTVl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgRm9vIGZvbzsKKyAgICBmb28ueCA9
IDEuMDsKKyAgICBiWzFdID0gZm9vOworICAgIGZvbyA9IGJbMV07CisgICAgcmV0dXJuIGZsb2F0
NChmb28ueCwgZm9vLngsIGZvby54LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0
KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFw
dGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7
CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtj
b2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhTdGFn
ZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9Owor
ICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9p
bnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0gInRy
aWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRGYWNl
OiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307Cisg
ICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tmb3Jt
YXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAxNX1d
OyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0ZSA9
IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjogMCwg
Zm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0dHJp
YnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsKKyAg
ICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsKKyAg
ICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBl
bGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwgcmFz
dGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRleElu
cHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3Qg
cmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlwZWxp
bmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0IHZl
cnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRvcik7
CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9IG5l
dyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1ZmZl
ckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzFd
ID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJy
YXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsKKyAg
ICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxv
YXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsx
MV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAgdmVy
dGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAxOwor
ICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0
Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZpY2Us
IGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0LmNv
bmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRwdXRU
ZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0cHV0
VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAgICBj
b25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7
fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25zdCBj
b2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVzb2x2
ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVhckNv
bG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsKKyAg
ICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0aFN0
ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVuZGVy
UGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBhc3NF
bmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5l
bmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlz
aCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNv
bHZlci9zZXR0ZXItYWJzdHJhY3QtbHZhbHVlLTMtbGV2ZWxzLWV4cGVjdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFic3Ry
YWN0LWx2YWx1ZS0zLWxldmVscy1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUtMy1s
ZXZlbHMtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9
ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwvY2FudmFzPgorPHNjcmlwdD4KK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRl
eHQoIjJkIik7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAiYmx1ZSI7CisgICAgY29udGV4dC5m
aWxsUmVjdCgwLCAwLCA0MDAsIDQwMCk7CisgICAgY29udGV4dC5maWxsU3R5bGUgPSAid2hpdGUi
OworICAgIGNvbnRleHQuZmlsbFJlY3QoMTAwLCAxMDAsIDIwMCwgMjAwKTsKK30KK3dpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJz
dHJhY3QtbHZhbHVlLTMtbGV2ZWxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS0zLWxldmVscy5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3Nl
dHRlci1hYnN0cmFjdC1sdmFsdWUtMy1sZXZlbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj48L2NhbnZh
cz4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit2ZXJ0ZXggZmxvYXQ0IHZlcnRl
eFNoYWRlcihmbG9hdDQgcG9zaXRpb24gOiBhdHRyaWJ1dGUoMCkpIDogU1ZfUG9zaXRpb24gewor
ICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworc3RydWN0IEZvbyB7CisgICAgZmxvYXQgeDsKK30K
KworZmxvYXQgb3BlcmF0b3IueShGb28gZikgeworICAgIHJldHVybiBmLng7Cit9CisKK0ZvbyBv
cGVyYXRvci55PShGb28gZiwgZmxvYXQgeCkgeworICAgIGYueCA9IHg7CisgICAgcmV0dXJuIGY7
Cit9CisKK3N0cnVjdCBCYXIgeworICAgIEZvbyB6OworfQorCitGb28gb3BlcmF0b3IudyhCYXIg
YikgeworICAgIHJldHVybiBiLno7Cit9CisKK0JhciBvcGVyYXRvci53PShCYXIgYiwgRm9vIGEp
IHsKKyAgICBiLnogPSBhOworICAgIHJldHVybiBiOworfQorCitzdHJ1Y3QgQmF6IHsKKyAgICBC
YXIgcDsKK30KKworQmFyIG9wZXJhdG9yLnEoQmF6IGIpIHsKKyAgICByZXR1cm4gYi5wOworfQor
CitCYXogb3BlcmF0b3IucT0oQmF6IGIsIEJhciBhKSB7CisgICAgYi5wID0gYTsKKyAgICByZXR1
cm4gYjsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBTVl9UYXJnZXQg
MCB7CisgICAgQmF6IGI7CisgICAgYi5xLncueSA9IDEuMDsKKyAgICByZXR1cm4gZmxvYXQ0KGIu
cS53LnksIGIucS53LnksIGIucS53LnksIDEuMCk7Cit9CitgOworYXN5bmMgZnVuY3Rpb24gc3Rh
cnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFk
YXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2Uo
KTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUo
e2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IHZlcnRleFN0
YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAidmVydGV4U2hhZGVyIn07
CisgICAgY29uc3QgZnJhZ21lbnRTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQ
b2ludDogImZyYWdtZW50U2hhZGVyIn07CisgICAgY29uc3QgcHJpbWl0aXZlVG9wb2xvZ3kgPSAi
dHJpYW5nbGUtc3RyaXAiOworICAgIGNvbnN0IHJhc3Rlcml6YXRpb25TdGF0ZSA9IHtmcm9udEZh
Y2U6ICJjdyIsIGN1bGxNb2RlOiAibm9uZSJ9OworICAgIGNvbnN0IGFscGhhQmxlbmQgPSB7fTsK
KyAgICBjb25zdCBjb2xvckJsZW5kID0ge307CisgICAgY29uc3QgY29sb3JTdGF0ZXMgPSBbe2Zv
cm1hdDogInJnYmE4dW5vcm0iLCBhbHBoYUJsZW5kLCBjb2xvckJsZW5kLCB3cml0ZU1hc2s6IDE1
fV07IC8vIEdQVUNvbG9yV3JpdGVCaXRzLkFMTAorICAgIGNvbnN0IGRlcHRoU3RlbmNpbFN0YXRl
ID0gbnVsbDsKKyAgICAKKyAgICBjb25zdCBhdHRyaWJ1dGUwID0ge3NoYWRlckxvY2F0aW9uOiAw
LCBmb3JtYXQ6ICJmbG9hdDQifTsKKyAgICBjb25zdCBpbnB1dDAgPSB7c3RyaWRlOiAxNiwgYXR0
cmlidXRlU2V0OiBbYXR0cmlidXRlMF19OworICAgIGNvbnN0IGlucHV0cyA9IFtpbnB1dDBdOwor
ICAgIGNvbnN0IHZlcnRleElucHV0ID0ge3ZlcnRleEJ1ZmZlcnM6IGlucHV0c307CisKKyAgICBj
b25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW119Owor
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBp
cGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCByZW5kZXJQaXBlbGluZURlc2Ny
aXB0b3IgPSB7dmVydGV4U3RhZ2UsIGZyYWdtZW50U3RhZ2UsIHByaW1pdGl2ZVRvcG9sb2d5LCBy
YXN0ZXJpemF0aW9uU3RhdGUsIGNvbG9yU3RhdGVzLCBkZXB0aFN0ZW5jaWxTdGF0ZSwgdmVydGV4
SW5wdXQsIHNhbXBsZUNvdW50OiAxLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25z
dCByZW5kZXJQaXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShyZW5kZXJQaXBl
bGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgdmVydGV4QnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA0ICogNCwgdXNhZ2U6IEdQVUJ1
ZmZlclVzYWdlLlZFUlRFWCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CisgICAgY29uc3Qg
dmVydGV4QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXJEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IHZlcnRleEJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5ID0g
bmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXJBcnJheUJ1ZmZlcik7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzBdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlb
MV0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbM10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJB
cnJheVs0XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzVdID0gMC41Owor
ICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbN10gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs4XSA9IDAu
NTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOV0gPSAtMC41OworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVsxMF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzExXSA9IDE7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEyXSA9IDAuNTsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTNdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0
MzJBcnJheVsxNF0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE1XSA9IDE7
CisgICAgdmVydGV4QnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5n
ZXRDb250ZXh0KCJncHUiKTsKKyAgICBjb25zdCBzd2FwQ2hhaW5EZXNjcmlwdG9yID0ge2Rldmlj
ZSwgZm9ybWF0OiAiYmdyYTh1bm9ybSJ9OworICAgIGNvbnN0IHN3YXBDaGFpbiA9IGNvbnRleHQu
Y29uZmlndXJlU3dhcENoYWluKHN3YXBDaGFpbkRlc2NyaXB0b3IpOworICAgIGNvbnN0IG91dHB1
dFRleHR1cmUgPSBzd2FwQ2hhaW4uZ2V0Q3VycmVudFRleHR1cmUoKTsKKyAgICBjb25zdCBvdXRw
dXRUZXh0dXJlVmlldyA9IG91dHB1dFRleHR1cmUuY3JlYXRlRGVmYXVsdFZpZXcoKTsKKworICAg
IGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8v
IHt9CisgICAgY29uc3QgcmVkID0ge3I6IDAsIGc6IDAsIGI6IDEsIGE6IDF9OworICAgIGNvbnN0
IGNvbG9yQXR0YWNobWVudHMgPSBbe2F0dGFjaG1lbnQ6IG91dHB1dFRleHR1cmVWaWV3LCByZXNv
bHZlVGFyZ2V0OiBudWxsLCBsb2FkT3A6ICJjbGVhciIsIHN0b3JlT3A6ICJzdG9yZSIsIGNsZWFy
Q29sb3I6IHJlZH1dOworICAgIGNvbnN0IGRlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBudWxsOwor
ICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0ge2NvbG9yQXR0YWNobWVudHMsIGRlcHRo
U3RlbmNpbEF0dGFjaG1lbnR9OworICAgIGNvbnN0IHJlbmRlclBhc3NFbmNvZGVyID0gY29tbWFu
ZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICByZW5k
ZXJQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShyZW5kZXJQaXBlbGluZSk7CisgICAgcmVuZGVyUGFz
c0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdmVydGV4QnVmZmVyXSwgWzBdKTsKKyAgICBy
ZW5kZXJQYXNzRW5jb2Rlci5kcmF3KDQsIDEsIDAsIDApOworICAgIHJlbmRlclBhc3NFbmNvZGVy
LmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmlu
aXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBzdGFydCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJl
c29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJhY3QtbHZh
bHVlLWV4cGVjdGVkLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3By
b3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS1leHBlY3RlZC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iNDAwIiBoZWln
aHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7Cisg
ICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAg
IGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjb250ZXh0LmZp
bGxTdHlsZSA9ICJibHVlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDQwMCwgNDAwKTsK
KyAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CisgICAgY29udGV4dC5maWxsUmVjdCgx
MDAsIDEwMCwgMjAwLCAyMDApOworfQord2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBz
dGFydCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dl
YmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1hYnN0cmFjdC1sdmFsdWUuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItYWJzdHJh
Y3QtbHZhbHVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3Byb3Bl
cnR5cmVzb2x2ZXIvc2V0dGVyLWFic3RyYWN0LWx2YWx1ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiPjwv
Y2FudmFzPgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3ZlcnRleCBmbG9hdDQg
dmVydGV4U2hhZGVyKGZsb2F0NCBwb3NpdGlvbiA6IGF0dHJpYnV0ZSgwKSkgOiBTVl9Qb3NpdGlv
biB7CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdHJ1Y3QgRm9vIHsKKyAgICBmbG9hdCB4
OworfQorCitmbG9hdCBvcGVyYXRvci55KEZvbyBmKSB7CisgICAgcmV0dXJuIGYueDsKK30KKwor
Rm9vIG9wZXJhdG9yLnk9KEZvbyBmLCBmbG9hdCB4KSB7CisgICAgZi54ID0geDsKKyAgICByZXR1
cm4gZjsKK30KKworc3RydWN0IEJhciB7CisgICAgRm9vIHo7Cit9CisKK0ZvbyBvcGVyYXRvci53
KEJhciBiKSB7CisgICAgcmV0dXJuIGIuejsKK30KKworQmFyIG9wZXJhdG9yLnc9KEJhciBiLCBG
b28gYSkgeworICAgIGIueiA9IGE7CisgICAgcmV0dXJuIGI7Cit9CisKK2ZyYWdtZW50IGZsb2F0
NCBmcmFnbWVudFNoYWRlcigpIDogU1ZfVGFyZ2V0IDAgeworICAgIEJhciBiOworICAgIGIudy55
ID0gMS4wOworICAgIHJldHVybiBmbG9hdDQoYi53LnksIGIudy55LCBiLncueSwgMS4wKTsKK30K
K2A7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQg
bmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0
IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgdmVydGV4U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJ2ZXJ0ZXhTaGFkZXIifTsKKyAgICBjb25zdCBmcmFnbWVudFN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiZnJhZ21lbnRTaGFkZXIifTsKKyAgICBjb25z
dCBwcmltaXRpdmVUb3BvbG9neSA9ICJ0cmlhbmdsZS1zdHJpcCI7CisgICAgY29uc3QgcmFzdGVy
aXphdGlvblN0YXRlID0ge2Zyb250RmFjZTogImN3IiwgY3VsbE1vZGU6ICJub25lIn07CisgICAg
Y29uc3QgYWxwaGFCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yQmxlbmQgPSB7fTsKKyAgICBj
b25zdCBjb2xvclN0YXRlcyA9IFt7Zm9ybWF0OiAicmdiYTh1bm9ybSIsIGFscGhhQmxlbmQsIGNv
bG9yQmxlbmQsIHdyaXRlTWFzazogMTV9XTsgLy8gR1BVQ29sb3JXcml0ZUJpdHMuQUxMCisgICAg
Y29uc3QgZGVwdGhTdGVuY2lsU3RhdGUgPSBudWxsOworICAgIAorICAgIGNvbnN0IGF0dHJpYnV0
ZTAgPSB7c2hhZGVyTG9jYXRpb246IDAsIGZvcm1hdDogImZsb2F0NCJ9OworICAgIGNvbnN0IGlu
cHV0MCA9IHtzdHJpZGU6IDE2LCBhdHRyaWJ1dGVTZXQ6IFthdHRyaWJ1dGUwXX07CisgICAgY29u
c3QgaW5wdXRzID0gW2lucHV0MF07CisgICAgY29uc3QgdmVydGV4SW5wdXQgPSB7dmVydGV4QnVm
ZmVyczogaW5wdXRzfTsKKworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHti
aW5kR3JvdXBMYXlvdXRzOiBbXX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNv
bnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFn
ZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rlcml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRl
cHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJl
bmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVO
VCAqIDQgKiA0LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVkVSVEVYIHwgR1BVQnVmZmVyVXNhZ2Uu
TUFQX1dSSVRFfTsKKyAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckFycmF5QnVm
ZmVyID0gYXdhaXQgdmVydGV4QnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHZlcnRleEJ1ZmZlckFycmF5
QnVmZmVyKTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAtMC41OworICAgIHZl
cnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQz
MkFycmF5WzJdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDE7Cisg
ICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzRdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJG
bG9hdDMyQXJyYXlbNV0gPSAwLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzZdID0g
MS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDE7CisgICAgdmVydGV4QnVm
ZmVyRmxvYXQzMkFycmF5WzhdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs5
XSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEwXSA9IDEuMDsKKyAgICB2
ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbMTJdID0gMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxM10gPSAwLjU7
CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDEuMDsKKyAgICB2ZXJ0ZXhCdWZm
ZXJGbG9hdDMyQXJyYXlbMTVdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIudW5tYXAoKTsKKworICAg
IGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKKyAgICBj
b25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoImdwdSIpOworICAgIGNvbnN0IHN3YXBD
aGFpbkRlc2NyaXB0b3IgPSB7ZGV2aWNlLCBmb3JtYXQ6ICJiZ3JhOHVub3JtIn07CisgICAgY29u
c3Qgc3dhcENoYWluID0gY29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oc3dhcENoYWluRGVzY3Jp
cHRvcik7CisgICAgY29uc3Qgb3V0cHV0VGV4dHVyZSA9IHN3YXBDaGFpbi5nZXRDdXJyZW50VGV4
dHVyZSgpOworICAgIGNvbnN0IG91dHB1dFRleHR1cmVWaWV3ID0gb3V0cHV0VGV4dHVyZS5jcmVh
dGVEZWZhdWx0VmlldygpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3Jl
YXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb25zdCByZWQgPSB7cjogMCwgZzogMCwg
YjogMSwgYTogMX07CisgICAgY29uc3QgY29sb3JBdHRhY2htZW50cyA9IFt7YXR0YWNobWVudDog
b3V0cHV0VGV4dHVyZVZpZXcsIHJlc29sdmVUYXJnZXQ6IG51bGwsIGxvYWRPcDogImNsZWFyIiwg
c3RvcmVPcDogInN0b3JlIiwgY2xlYXJDb2xvcjogcmVkfV07CisgICAgY29uc3QgZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCA9IG51bGw7CisgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7
Y29sb3JBdHRhY2htZW50cywgZGVwdGhTdGVuY2lsQXR0YWNobWVudH07CisgICAgY29uc3QgcmVu
ZGVyUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFz
c0Rlc2NyaXB0b3IpOworICAgIHJlbmRlclBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKHJlbmRlclBp
cGVsaW5lKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXJzKDAsIFt2ZXJ0
ZXhCdWZmZXJdLCBbMF0pOworICAgIHJlbmRlclBhc3NFbmNvZGVyLmRyYXcoNCwgMSwgMCwgMCk7
CisgICAgcmVuZGVyUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
bG9hZCIsIHN0YXJ0KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvd2ViZ3B1L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWx2YWx1ZS1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRl
ci1sdmFsdWUtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJn
cHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItbHZhbHVlLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSI0MDAiIGhlaWdodD0i
NDAwIj48L2NhbnZhcz4KKzxzY3JpcHQ+Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBj
b25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7CisgICAgY29u
c3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGNvbnRleHQuZmlsbFN0
eWxlID0gImJsdWUiOworICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgNDAwLCA0MDApOworICAg
IGNvbnRleHQuZmlsbFN0eWxlID0gIndoaXRlIjsKKyAgICBjb250ZXh0LmZpbGxSZWN0KDEwMCwg
MTAwLCAyMDAsIDIwMCk7Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHN0YXJ0
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1
L3Byb3BlcnR5cmVzb2x2ZXIvc2V0dGVyLWx2YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3dlYmdwdS9wcm9wZXJ0eXJlc29sdmVyL3NldHRlci1sdmFsdWUuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvcHJvcGVydHlyZXNvbHZlci9zZXR0ZXItbHZh
bHVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+PC9jYW52YXM+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVy
U291cmNlID0gYAordmVydGV4IGZsb2F0NCB2ZXJ0ZXhTaGFkZXIoZmxvYXQ0IHBvc2l0aW9uIDog
YXR0cmlidXRlKDApKSA6IFNWX1Bvc2l0aW9uIHsKKyAgICByZXR1cm4gcG9zaXRpb247Cit9CisK
K3N0cnVjdCBGb28geworICAgIGZsb2F0IHg7Cit9CisKK2Zsb2F0IG9wZXJhdG9yLnkoRm9vIGYp
IHsKKyAgICByZXR1cm4gZi54OworfQorCitGb28gb3BlcmF0b3IueT0oRm9vIGYsIGZsb2F0IHgp
IHsKKyAgICBmLnggPSB4OworICAgIHJldHVybiBmOworfQorCitzdHJ1Y3QgQmFyIHsKKyAgICBG
b28gejsKK30KKwordGhyZWFkIEZvbyogb3BlcmF0b3ImLncodGhyZWFkIEJhciogYikgeworICAg
IHJldHVybiAmYi0+ejsKK30KKworZnJhZ21lbnQgZmxvYXQ0IGZyYWdtZW50U2hhZGVyKCkgOiBT
Vl9UYXJnZXQgMCB7CisgICAgQmFyIGI7CisgICAgYi53LnkgPSAxLjA7CisgICAgcmV0dXJuIGZs
b2F0NChiLncueSwgYi53LnksIGIudy55LCAxLjApOworfQorYDsKK2FzeW5jIGZ1bmN0aW9uIHN0
YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RB
ZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNl
KCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxl
KHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCB2ZXJ0ZXhT
dGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogInZlcnRleFNoYWRlciJ9
OworICAgIGNvbnN0IGZyYWdtZW50U3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJmcmFnbWVudFNoYWRlciJ9OworICAgIGNvbnN0IHByaW1pdGl2ZVRvcG9sb2d5ID0g
InRyaWFuZ2xlLXN0cmlwIjsKKyAgICBjb25zdCByYXN0ZXJpemF0aW9uU3RhdGUgPSB7ZnJvbnRG
YWNlOiAiY3ciLCBjdWxsTW9kZTogIm5vbmUifTsKKyAgICBjb25zdCBhbHBoYUJsZW5kID0ge307
CisgICAgY29uc3QgY29sb3JCbGVuZCA9IHt9OworICAgIGNvbnN0IGNvbG9yU3RhdGVzID0gW3tm
b3JtYXQ6ICJyZ2JhOHVub3JtIiwgYWxwaGFCbGVuZCwgY29sb3JCbGVuZCwgd3JpdGVNYXNrOiAx
NX1dOyAvLyBHUFVDb2xvcldyaXRlQml0cy5BTEwKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxTdGF0
ZSA9IG51bGw7CisgICAgCisgICAgY29uc3QgYXR0cmlidXRlMCA9IHtzaGFkZXJMb2NhdGlvbjog
MCwgZm9ybWF0OiAiZmxvYXQ0In07CisgICAgY29uc3QgaW5wdXQwID0ge3N0cmlkZTogMTYsIGF0
dHJpYnV0ZVNldDogW2F0dHJpYnV0ZTBdfTsKKyAgICBjb25zdCBpbnB1dHMgPSBbaW5wdXQwXTsK
KyAgICBjb25zdCB2ZXJ0ZXhJbnB1dCA9IHt2ZXJ0ZXhCdWZmZXJzOiBpbnB1dHN9OworCisgICAg
Y29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtdfTsK
KyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChw
aXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgcmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yID0ge3ZlcnRleFN0YWdlLCBmcmFnbWVudFN0YWdlLCBwcmltaXRpdmVUb3BvbG9neSwg
cmFzdGVyaXphdGlvblN0YXRlLCBjb2xvclN0YXRlcywgZGVwdGhTdGVuY2lsU3RhdGUsIHZlcnRl
eElucHV0LCBzYW1wbGVDb3VudDogMSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29u
c3QgcmVuZGVyUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogNCAqIDQsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5WRVJURVggfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OworICAgIGNvbnN0
IHZlcnRleEJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIodmVydGV4QnVmZmVyRGVzY3JpcHRv
cik7CisgICAgY29uc3QgdmVydGV4QnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZm
ZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyQXJyYXlCdWZmZXIpOworICAgIHZlcnRleEJ1
ZmZlckZsb2F0MzJBcnJheVswXSA9IC0wLjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5
WzFdID0gLTAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAxLjA7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzNdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMy
QXJyYXlbNF0gPSAtMC41OworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDAuNTsK
KyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbNl0gPSAxLjA7CisgICAgdmVydGV4QnVmZmVy
RmxvYXQzMkFycmF5WzddID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9hdDMyQXJyYXlbOF0gPSAw
LjU7CisgICAgdmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzldID0gLTAuNTsKKyAgICB2ZXJ0ZXhC
dWZmZXJGbG9hdDMyQXJyYXlbMTBdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJh
eVsxMV0gPSAxOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxMl0gPSAwLjU7CisgICAg
dmVydGV4QnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDAuNTsKKyAgICB2ZXJ0ZXhCdWZmZXJGbG9h
dDMyQXJyYXlbMTRdID0gMS4wOworICAgIHZlcnRleEJ1ZmZlckZsb2F0MzJBcnJheVsxNV0gPSAx
OworICAgIHZlcnRleEJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOworICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMu
Z2V0Q29udGV4dCgiZ3B1Iik7CisgICAgY29uc3Qgc3dhcENoYWluRGVzY3JpcHRvciA9IHtkZXZp
Y2UsIGZvcm1hdDogImJncmE4dW5vcm0ifTsKKyAgICBjb25zdCBzd2FwQ2hhaW4gPSBjb250ZXh0
LmNvbmZpZ3VyZVN3YXBDaGFpbihzd2FwQ2hhaW5EZXNjcmlwdG9yKTsKKyAgICBjb25zdCBvdXRw
dXRUZXh0dXJlID0gc3dhcENoYWluLmdldEN1cnJlbnRUZXh0dXJlKCk7CisgICAgY29uc3Qgb3V0
cHV0VGV4dHVyZVZpZXcgPSBvdXRwdXRUZXh0dXJlLmNyZWF0ZURlZmF1bHRWaWV3KCk7CisKKyAg
ICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAv
LyB7fQorICAgIGNvbnN0IHJlZCA9IHtyOiAwLCBnOiAwLCBiOiAxLCBhOiAxfTsKKyAgICBjb25z
dCBjb2xvckF0dGFjaG1lbnRzID0gW3thdHRhY2htZW50OiBvdXRwdXRUZXh0dXJlVmlldywgcmVz
b2x2ZVRhcmdldDogbnVsbCwgbG9hZE9wOiAiY2xlYXIiLCBzdG9yZU9wOiAic3RvcmUiLCBjbGVh
ckNvbG9yOiByZWR9XTsKKyAgICBjb25zdCBkZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gbnVsbDsK
KyAgICBjb25zdCByZW5kZXJQYXNzRGVzY3JpcHRvciA9IHtjb2xvckF0dGFjaG1lbnRzLCBkZXB0
aFN0ZW5jaWxBdHRhY2htZW50fTsKKyAgICBjb25zdCByZW5kZXJQYXNzRW5jb2RlciA9IGNvbW1h
bmRFbmNvZGVyLmJlZ2luUmVuZGVyUGFzcyhyZW5kZXJQYXNzRGVzY3JpcHRvcik7CisgICAgcmVu
ZGVyUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocmVuZGVyUGlwZWxpbmUpOworICAgIHJlbmRlclBh
c3NFbmNvZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAg
cmVuZGVyUGFzc0VuY29kZXIuZHJhdyg0LCAxLCAwLCAwKTsKKyAgICByZW5kZXJQYXNzRW5jb2Rl
ci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZp
bmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOwor
CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRp
bERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372013</attachid>
            <date>2019-06-12 19:04:42 -0700</date>
            <delta_ts>2019-06-13 12:49:17 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>187310</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiw3IEBAIE1vZHVsZXMvd2Vi
c29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU28KIAogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFz
Q29udGV4dC5jcHAKIE1vZHVsZXMvd2ViZ3B1L05hdmlnYXRvckdQVS5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEFTVER1bXBlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQXV0b0luaXRp
YWxpemVWYXJpYWJsZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI0NjMyNikKKysrIFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICsz
MjYsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tbWFuZEJ1CiBwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBhc3NFbmNvZGVyTWV0YWwubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVURldmljZU1ldGFsLm1tCitwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVUHJvZ3JhbW1hYmxlUGFzc0VuY29kZXJNZXRhbC5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVF1ZXVlTWV0YWwubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBEZXNjcmlwdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBE
ZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV2ViR1BVQmluZEdyb3VwRGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBPcHRpb25hbDxHUFVCaW5kR3JvdXBEZXNjcmlwdG9yPiBXZWJHUFVC
CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlQnVmZmVyQmluZGluZ1R5cGUoYnVm
ZmVyLCBsYXlvdXRCaW5kaW5nLCBmdW5jdGlvbk5hbWUpKQorICAgICAgICAgICAgaWYgKCF2YWxp
ZGF0ZUJ1ZmZlckJpbmRpbmdUeXBlKGJ1ZmZlciwgbGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRp
bmcsIGZ1bmN0aW9uTmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQVUJpbmRpbmdSZXNvdXJjZT4oR1BV
QnVmZmVyQmluZGluZyB7IG1ha2VSZWYoKmJ1ZmZlciksIGJ1ZmZlckJpbmRpbmcub2Zmc2V0LCBi
dWZmZXJCaW5kaW5nLnNpemUgfSk7CkBAIC0xMTksNyArMTE5LDcgQEAgT3B0aW9uYWw8R1BVQmlu
ZEdyb3VwRGVzY3JpcHRvcj4gV2ViR1BVQgogCiAgICAgICAgIGF1dG8gYmluZGluZ1Jlc291cmNl
ID0gV1RGOjp2aXNpdChiaW5kaW5nUmVzb3VyY2VWaXNpdG9yLCBiaW5kaW5nLnJlc291cmNlKTsK
ICAgICAgICAgaWYgKCFiaW5kaW5nUmVzb3VyY2UpIHsKLSAgICAgICAgICAgIExPRyhXZWJHUFUs
ICIlczogSW52YWxpZCByZXNvdXJjZSBmb3IgYmluZGluZyAldSEiLCBmdW5jdGlvbk5hbWUsIGxh
eW91dEJpbmRpbmcuYmluZGluZyk7CisgICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFs
aWQgcmVzb3VyY2UgZm9yIGJpbmRpbmcgJXUhIiwgZnVuY3Rpb25OYW1lLCBsYXlvdXRCaW5kaW5n
LmV4dGVybmFsQmluZGluZy5iaW5kaW5nKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJl
c3Npb24uaCIKICNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCiAjaW5jbHVkZSAiV0hMU0xE
b3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5oIgogI2luY2x1
ZGUgIldITFNMRm9yTG9vcC5oIgogI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmgiCiAjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgpAQCAtMTE2LDI5ICsxMTcsMjkgQEAg
cHVibGljOgogICAgIH0KIH07CiAKLXN0YXRpYyBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNv
bnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCitzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoTGV4ZXI6OlRva2VuIG9y
aWdpbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJp
bnNpY3MmIGludHJpbnNpY3MpCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsK
LSAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1lbnQuYWRkcmVz
c1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICBhdXRv
IHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4pLCBmaXJzdEFyZ3VtZW50LmFkZHJlc3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVs
ZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVm
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCkpOwotICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmln
aW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVy
blR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOworICAg
IHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
PihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQu
Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcGFy
YW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExl
eGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ob3JpZ2luKSwg
aW50cmluc2ljcy51aW50VHlwZSgpKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCkpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRv
ciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIAotc3RhdGljIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4cHJl
c3Npb24mIGNhbGxFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3VtZW50LCBj
b25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKExleGVyOjpUb2tlbiBvcmlnaW4s
IEFTVDo6VW5uYW1lZFR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJp
bnNpY3MpCiB7CiAgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKLSAgICBhdXRvIHJl
dHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBhdXRvIHJldHVy
blR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG9yaWdpbiksIGlu
dHJpbnNpY3MudWludFR5cGUoKSk7CiAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6
OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpKTsKLSAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92
ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmly
c3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
KTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3IubGVu
Z3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcikpOwogfQogCi1zdGF0aWMgQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihBU1Q6OkNhbGxF
eHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgZmlyc3RBcmd1bWVudCwg
UmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNp
Y3MpCitzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHJlc29sdmVXaXRoUmVm
ZXJlbmNlQ29tcGFyYXRvcihMZXhlcjo6VG9rZW4gb3JpZ2luLCBSZXNvbHZpbmdUeXBlJiBmaXJz
dEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwgY29uc3QgSW50cmluc2lj
cyYgaW50cmluc2ljcykKIHsKICAgICBjb25zdCBib29sIGlzT3BlcmF0b3IgPSB0cnVlOwotICAg
IGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
Y2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGF1
dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IGZp
cnN0QXJndW1lbnQudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewog
ICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CiAgICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4g
ewpAQCAtMTQ4LDEzICsxNDksMTMgQEAgc3RhdGljIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiByZQogICAgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVsbCIuCiAg
ICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODE2MiBUaGlzIGNhbiBwcm9iYWJseSBiZSBnZW5lcmFsaXplZCwgdXNpbmcgdGhlICJw
cmVmZXJyZWQgdHlwZSIgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSBnZW5lcmljIGxpdGVyYWxzCiAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgaW50cmluc2ljcy5pbnRUeXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4ob3JpZ2luKSwgaW50cmluc2ljcy5pbnRUeXBlKCkp
OwogICAgICAgICB9KSk7CiAgICAgfSkpOwogICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbj4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Ci0gICAgcGFyYW1ldGVycy5hcHBlbmQobWFrZVVuaXF1
ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lv
bi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4oV1RGTW92ZShhcmd1bWVudFR5cGUpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpu
dWxsb3B0KSk7Ci0gICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlw
ZSksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKKyAgICBwYXJh
bWV0ZXJzLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oTGV4
ZXI6OlRva2VuKG9yaWdpbiksIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5cGUtPmNsb25l
KCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRl
cnMuYXBwZW5kKG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPihXVEZNb3ZlKGFyZ3VtZW50VHlwZSkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpBdHRyaWJ1
dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3Bl
cmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpKTsKIH0KIAogZW51bSBjbGFzcyBBY2NlcHRh
YmlsaXR5IHsKQEAgLTE2Myw5ICsxNjQsOSBAQCBlbnVtIGNsYXNzIEFjY2VwdGFiaWxpdHkgewog
ICAgIE5vCiB9OwogCi1zdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHBy
ZXNzaW9uLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihj
b25zdCBTdHJpbmcmIG5hbWUsIExleGVyOjpUb2tlbiBvcmlnaW4sIGNvbnN0IFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0IEludHJpbnNp
Y3MmIGludHJpbnNpY3MpCiB7Ci0gICAgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3ImW10iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CisgICAgaWYgKG5hbWUgPT0gIm9wZXJh
dG9yJltdIiAmJiB0eXBlcy5zaXplKCkgPT0gMikgewogICAgICAgICBhdXRvKiBmaXJzdEFyZ3Vt
ZW50QXJyYXlSZWYgPSB0eXBlc1swXS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlKiB7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19j
YXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOwpAQCAtMTc5LDggKzE4MCw4IEBA
IHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAgICAgIHJl
dHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZl
KGludHJpbnNpY3MudWludFR5cGUoKSk7CiAgICAgICAgIH0pKTsKICAgICAgICAgaWYgKGZpcnN0
QXJndW1lbnRBcnJheVJlZiAmJiBzZWNvbmRBcmd1bWVudElzVWludCkKLSAgICAgICAgICAgIHJl
dHVybiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKGNhbGxFeHByZXNzaW9uLCAqZmly
c3RBcmd1bWVudEFycmF5UmVmLCBpbnRyaW5zaWNzKTsKLSAgICB9IGVsc2UgaWYgKGNhbGxFeHBy
ZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkgPT0gMSkg
eworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIob3Jp
Z2luLCAqZmlyc3RBcmd1bWVudEFycmF5UmVmLCBpbnRyaW5zaWNzKTsKKyAgICB9IGVsc2UgaWYg
KG5hbWUgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgdHlwZXMuc2l6ZSgpID09IDEpIHsKICAgICAg
ICAgYXV0byogZmlyc3RBcmd1bWVudFJlZmVyZW5jZSA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlw
ZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewogICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gJnVubmFtZWRUeXBlOwpAQCAtMTg5LDggKzE5MCw4
IEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9KSk7CiAgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50
UmVmZXJlbmNlKQotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JMZW5ndGgo
Y2FsbEV4cHJlc3Npb24sICpmaXJzdEFyZ3VtZW50UmVmZXJlbmNlLCBpbnRyaW5zaWNzKTsKLSAg
ICB9IGVsc2UgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIgJiYgdHlw
ZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9y
TGVuZ3RoKG9yaWdpbiwgKmZpcnN0QXJndW1lbnRSZWZlcmVuY2UsIGludHJpbnNpY3MpOworICAg
IH0gZWxzZSBpZiAobmFtZSA9PSAib3BlcmF0b3I9PSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsK
ICAgICAgICAgYXV0byBhY2NlcHRhYmlsaXR5ID0gW10oUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5n
VHlwZSkgLT4gQWNjZXB0YWJpbGl0eSB7CiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2aW5nVHlw
ZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
dW5uYW1lZFR5cGUpIC0+IEFjY2VwdGFiaWxpdHkgewogICAgICAgICAgICAgICAgIHJldHVybiBp
czxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5h
bWVkVHlwZSkpID8gQWNjZXB0YWJpbGl0eTo6WWVzIDogQWNjZXB0YWJpbGl0eTo6Tm87CkBAIC0y
MDksNyArMjEwLDcgQEAgc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQog
ICAgICAgICAgICAgfHwgKGxlZnRBY2NlcHRhYmlsaXR5ID09IEFjY2VwdGFiaWxpdHk6OlllcyAm
JiByaWdodEFjY2VwdGFiaWxpdHkgPT0gQWNjZXB0YWJpbGl0eTo6TWF5YmUpKQogICAgICAgICAg
ICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihjYWxsRXhwcmVzc2lvbiwgdHlwZXNb
MF0uZ2V0KCksIHR5cGVzWzFdLmdldCgpLCBpbnRyaW5zaWNzKTsKKyAgICAgICAgICAgIHJldHVy
biByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3Iob3JpZ2luLCB0eXBlc1swXS5nZXQoKSwg
dHlwZXNbMV0uZ2V0KCksIGludHJpbnNpY3MpOwogICAgIH0KICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQpAQCAtMzU0LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVy
bG9hZChjb25zdCAKICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7
CiAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBh
cmd1bWVudFR5cGVSZWZlcmVuY2VzOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7ICsraSkKLSAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMu
YXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKS0+Y2xv
bmUoKSk7CisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbaV0tPnR5cGUoKSktPmNsb25lKCkpOwogICAgICAgICBmb3IgKGF1
dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMpCiAgICAgICAgICAgICBhcmd1bWVudFR5
cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwogICAgICAgICBhdXRvKiBvdmVybG9h
ZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVm
ZXJlbmNlcyk7CkBAIC00OTEsNiArNDkyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0KEFT
VDo6VGVybmFyeUV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6Q2Fs
bEV4cHJlc3Npb24mKSBvdmVycmlkZTsKIAorICAgIHZvaWQgZmluaXNoVmlzaXRpbmcoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBlKiBhZGRpdGlvbmFsQXJndW1l
bnRUeXBlID0gbnVsbHB0cik7CisKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29s
dmluZ1R5cGU+IG1fdHlwZU1hcDsKICAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIEFTVDo6
VHlwZUFubm90YXRpb24+IG1fdHlwZUFubm90YXRpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3ZlcnRleEVudHJ5UG9pbnRzOwpAQCAtOTY2LDkgKzk2OSwzMiBAQCB2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlCiAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhl
cjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsZWZ0QWRk
cmVzc1NwYWNlLCBsZWZ0VmFsdWVUeXBlLT5jbG9uZSgpKSk7CiB9CiAKLXZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQorc3RhdGljIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQo
QVNUOjpVbm5hbWVkVHlwZSYgYmFzZVR5cGUsIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFj
ZSkKK3sKKyAgICBhdXRvJiB1bmlmeU5vZGUgPSBiYXNlVHlwZS51bmlmeU5vZGUoKTsKKyAgICBp
ZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmFtZWRU
eXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIHJldHVy
biB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG5hbWVkVHlw
ZS5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihuYW1lZFR5cGUub3JpZ2luKCkpLCBuYW1lZFR5cGUpKSB9OworICAgIH0KKworICAg
IEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAgICBhdXRvJiB1bm5h
bWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisKKyAgICBp
ZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0
dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7CisKKyAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9yaWdpbigpKSwgYWRkcmVzc1Nw
YWNlLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgp
KSB9OworCisgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNU
OjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLm9yaWdpbigpKSwgYWRkcmVz
c1NwYWNlLCB1bm5hbWVkVHlwZS5jbG9uZSgpKSB9OworfQorCit2b2lkIENoZWNrZXI6OmZpbmlz
aFZpc2l0aW5nKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24sIFJlc29sdmluZ1R5cGUqIGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCiB7Ci0gICAg
YXV0byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGRvdEV4cHJlc3Npb24uYmFzZSgpKTsK
KyAgICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmJhc2UoKSk7CiAgICAgaWYgKCFiYXNlSW5mbykKICAgICAgICAgcmV0dXJuOwogICAg
IGF1dG8gYmFzZVVubmFtZWRUeXBlID0gY29tbWl0KGJhc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsK
QEAgLTk3OSw2NSArMTAwNSwxMDEgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvdEV4cHJl
c3Npb24mIAogICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldHRlclJldHVyblR5cGUgPSBudWxscHRy
OwogICAgIHsKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5n
VHlwZT4+IGdldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2aW5nVHlwZSB9Owot
ICAgICAgICBnZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKGRvdEV4cHJl
c3Npb24ucG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKSwgZ2V0dGVyQXJndW1lbnRUeXBlcyk7Ci0g
ICAgICAgIGlmIChnZXR0ZXJGdW5jdGlvbikKKyAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1bWVu
dFR5cGUpCisgICAgICAgICAgICBnZXR0ZXJBcmd1bWVudFR5cGVzLmFwcGVuZCgqYWRkaXRpb25h
bEFyZ3VtZW50VHlwZSk7CisgICAgICAgIGlmICgoZ2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVHZXR0ZXJPdmVy
bG9hZHMoKSwgZ2V0dGVyQXJndW1lbnRUeXBlcykpKQogICAgICAgICAgICAgZ2V0dGVyUmV0dXJu
VHlwZSA9ICZnZXR0ZXJGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0KIAogICAgIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiogYW5kZXJGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAgQVNUOjpVbm5hbWVk
VHlwZSogYW5kZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKLSAgICBpZiAoYXV0byBsZWZ0QWRkcmVz
c1NwYWNlID0gYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmxlZnRBZGRyZXNzU3BhY2UoKSkgewot
ICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCAqbGVmdEFkZHJlc3NTcGFj
ZSwgYmFzZVVubmFtZWRUeXBlLT5nZXQoKS5jbG9uZSgpKTsKLSAgICAgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZGVyQXJndW1lbnRUeXBlcyB7IGJh
c2VJbmZvLT5yZXNvbHZpbmdUeXBlIH07Ci0gICAgICAgIGFuZGVyRnVuY3Rpb24gPSByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9hZHMoKSwg
YW5kZXJBcmd1bWVudFR5cGVzKTsKLSAgICAgICAgaWYgKGFuZGVyRnVuY3Rpb24pCi0gICAgICAg
ICAgICBhbmRlclJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJG
dW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5k
ZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgIGF1dG8gbGVmdEFkZHJlc3NTcGFjZSA9
IGJhc2VJbmZvLT50eXBlQW5ub3RhdGlvbi5sZWZ0QWRkcmVzc1NwYWNlKCk7CisgICAgaWYgKGxl
ZnRBZGRyZXNzU3BhY2UpIHsKKyAgICAgICAgaWYgKGF1dG8gYXJndW1lbnRUeXBlRm9yQW5kT3Zl
cmxvYWQgPSBXSExTTDo6YXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQoKmJhc2VVbm5hbWVkVHlw
ZSwgKmxlZnRBZGRyZXNzU3BhY2UpKSB7CisgICAgICAgICAgICBSZXNvbHZpbmdUeXBlIGFyZ3Vt
ZW50VHlwZSA9IHsgV1RGTW92ZSgqYXJndW1lbnRUeXBlRm9yQW5kT3ZlcmxvYWQpIH07CisgICAg
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYW5k
ZXJBcmd1bWVudFR5cGVzIHsgYXJndW1lbnRUeXBlIH07CisgICAgICAgICAgICBpZiAoYWRkaXRp
b25hbEFyZ3VtZW50VHlwZSkKKyAgICAgICAgICAgICAgICBhbmRlckFyZ3VtZW50VHlwZXMuYXBw
ZW5kKCphZGRpdGlvbmFsQXJndW1lbnRUeXBlKTsKKyAgICAgICAgICAgIGlmICgoYW5kZXJGdW5j
dGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5w
b3NzaWJsZUFuZGVyT3ZlcmxvYWRzKCksIGFuZGVyQXJndW1lbnRUeXBlcykpKQorICAgICAgICAg
ICAgICAgIGFuZGVyUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRl
ckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhlIHJldHVybiBvZiBh
bmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCisgICAgICAgICAgICBlbHNlIGlmIChhdXRv
IG5ld0Z1bmN0aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uYW5kZXJGdW5jdGlvbk5hbWUoKSwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdp
bigpLCBhbmRlckFyZ3VtZW50VHlwZXMsIG1faW50cmluc2ljcykpIHsKKyAgICAgICAgICAgICAg
ICBtX3Byb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5ld0Z1bmN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgYW5kZXJGdW5jdGlvbiA9ICZtX3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMo
KS5sYXN0KCk7CisgICAgICAgICAgICAgICAgYW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5m
b3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogdGhyZWFkQW5kZXJGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAgQVNUOjpVbm5hbWVkVHlwZSog
dGhyZWFkQW5kZXJSZXR1cm5UeXBlID0gbnVsbHB0cjsKLSAgICB7Ci0gICAgICAgIGF1dG8gYXJn
dW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGJhc2VV
bm5hbWVkVHlwZS0+Z2V0KCkuY2xvbmUoKSk7Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBiYXNl
SW5mby0+cmVzb2x2aW5nVHlwZSB9OwotICAgICAgICB0aHJlYWRBbmRlckZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZUFuZGVyT3ZlcmxvYWRz
KCksIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcyk7Ci0gICAgICAgIGlmICh0aHJlYWRBbmRlckZ1
bmN0aW9uKQorICAgIGlmIChhdXRvIGFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkID0gV0hMU0w6
OmFyZ3VtZW50VHlwZUZvckFuZE92ZXJsb2FkKCpiYXNlVW5uYW1lZFR5cGUsIEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQpKSB7CisgICAgICAgIFJlc29sdmluZ1R5cGUgYXJndW1lbnRUeXBlID0g
eyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBiYXNl
VW5uYW1lZFR5cGUtPmdldCgpLmNsb25lKCkpIH07CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMgeyBh
cmd1bWVudFR5cGUgfTsKKyAgICAgICAgaWYgKGFkZGl0aW9uYWxBcmd1bWVudFR5cGUpCisgICAg
ICAgICAgICB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1l
bnRUeXBlKTsKKyAgICAgICAgaWYgKCh0aHJlYWRBbmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9h
ZHMoKSwgdGhyZWFkQW5kZXJBcmd1bWVudFR5cGVzKSkpCiAgICAgICAgICAgICB0aHJlYWRBbmRl
clJldHVyblR5cGUgPSAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odGhyZWFkQW5kZXJGdW5j
dGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJz
IHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRlcgorICAgICAgICBlbHNlIGlmIChhdXRvIG5ld0Z1bmN0
aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5k
ZXJGdW5jdGlvbk5hbWUoKSwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpLCB0aHJl
YWRBbmRlckFyZ3VtZW50VHlwZXMsIG1faW50cmluc2ljcykpIHsKKyAgICAgICAgICAgIG1fcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgICAgIHRocmVhZEFu
ZGVyRnVuY3Rpb24gPSAmbV9wcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkubGFz
dCgpOworICAgICAgICAgICAgdGhyZWFkQW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5mb3Jj
ZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKKyAgICAgICAg
fQogICAgIH0KIAotICAgIGlmICghZ2V0dGVyRnVuY3Rpb24gJiYgIWFuZGVyRnVuY3Rpb24pIHsK
KyAgICBpZiAobGVmdEFkZHJlc3NTcGFjZSAmJiAhYW5kZXJGdW5jdGlvbiAmJiAhZ2V0dGVyRnVu
Y3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoZ2V0dGVyRnVuY3Rpb24gJiYgYW5kZXJGdW5jdGlvbikgeworCisgICAgaWYgKCFsZWZ0
QWRkcmVzc1NwYWNlICYmICF0aHJlYWRBbmRlckZ1bmN0aW9uICYmICFnZXR0ZXJGdW5jdGlvbikg
ewogICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYg
KHRocmVhZEFuZGVyRnVuY3Rpb24gJiYgZ2V0dGVyRnVuY3Rpb24pIHsKKyAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChhbmRlckZ1bmN0aW9uICYm
IHRocmVhZEFuZGVyRnVuY3Rpb24gJiYgIW1hdGNoZXMoKmFuZGVyUmV0dXJuVHlwZSwgKnRocmVh
ZEFuZGVyUmV0dXJuVHlwZSkpIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIEFTVDo6VW5uYW1lZFR5cGUqIGZpZWxkVHlwZSA9IGdldHRlclJldHVy
blR5cGUgPyBnZXR0ZXJSZXR1cm5UeXBlIDogYW5kZXJSZXR1cm5UeXBlOworICAgIGlmIChnZXR0
ZXJGdW5jdGlvbiAmJiBhbmRlckZ1bmN0aW9uICYmICFtYXRjaGVzKCpnZXR0ZXJSZXR1cm5UeXBl
LCAqYW5kZXJSZXR1cm5UeXBlKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGdldHRlckZ1bmN0aW9uICYmIHRocmVhZEFuZGVyRnVuY3Rp
b24gJiYgIW1hdGNoZXMoKmdldHRlclJldHVyblR5cGUsICp0aHJlYWRBbmRlclJldHVyblR5cGUp
KSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1Q6OlVubmFtZWRUeXBlKiBmaWVsZFR5cGUgPSBnZXR0ZXJSZXR1cm5UeXBlID8gZ2V0dGVyUmV0
dXJuVHlwZSA6IGFuZGVyUmV0dXJuVHlwZSA/IGFuZGVyUmV0dXJuVHlwZSA6IHRocmVhZEFuZGVy
UmV0dXJuVHlwZTsKIAogICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0dGVyRnVuY3Rp
b24gPSBudWxscHRyOwogICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldHRlclJldHVyblR5cGUgPSBu
dWxscHRyOwogICAgIHsKICAgICAgICAgUmVzb2x2aW5nVHlwZSBmaWVsZFJlc29sdmluZ1R5cGUo
ZmllbGRUeXBlLT5jbG9uZSgpKTsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8UmVzb2x2aW5nVHlwZT4+IHNldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5mby0+cmVzb2x2
aW5nVHlwZSwgZmllbGRSZXNvbHZpbmdUeXBlIH07Ci0gICAgICAgIHNldHRlckZ1bmN0aW9uID0g
cmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQoZG90RXhwcmVzc2lvbi5wb3NzaWJsZVNldHRlck92ZXJs
b2FkcygpLCBzZXR0ZXJBcmd1bWVudFR5cGVzKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHNldHRlckFyZ3VtZW50VHlwZXMgeyBiYXNlSW5m
by0+cmVzb2x2aW5nVHlwZSB9OworICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50VHlwZSkK
KyAgICAgICAgICAgIHNldHRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFsQXJndW1l
bnRUeXBlKTsKKyAgICAgICAgc2V0dGVyQXJndW1lbnRUeXBlcy5hcHBlbmQoZmllbGRSZXNvbHZp
bmdUeXBlKTsKKyAgICAgICAgc2V0dGVyRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9h
ZChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVTZXR0ZXJPdmVybG9hZHMoKSwgc2V0
dGVyQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIGlmIChzZXR0ZXJGdW5jdGlvbikKICAgICAgICAg
ICAgIHNldHRlclJldHVyblR5cGUgPSAmc2V0dGVyRnVuY3Rpb24tPnR5cGUoKTsKICAgICB9CiAK
LSAgICBpZiAoc2V0dGVyRnVuY3Rpb24gJiYgYW5kZXJGdW5jdGlvbikgeworICAgIGlmIChzZXR0
ZXJGdW5jdGlvbiAmJiAhZ2V0dGVyRnVuY3Rpb24pIHsKICAgICAgICAgc2V0RXJyb3IoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRvdEV4cHJlc3Npb24uc2V0R2V0dGVyRnVuY3Rp
b24oZ2V0dGVyRnVuY3Rpb24pOwotICAgIGRvdEV4cHJlc3Npb24uc2V0QW5kZXJGdW5jdGlvbihh
bmRlckZ1bmN0aW9uKTsKLSAgICBkb3RFeHByZXNzaW9uLnNldFRocmVhZEFuZGVyRnVuY3Rpb24o
dGhyZWFkQW5kZXJGdW5jdGlvbik7Ci0gICAgZG90RXhwcmVzc2lvbi5zZXRTZXR0ZXJGdW5jdGlv
bihzZXR0ZXJGdW5jdGlvbik7CisgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEdldHRl
ckZ1bmN0aW9uKGdldHRlckZ1bmN0aW9uKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
c2V0QW5kZXJGdW5jdGlvbihhbmRlckZ1bmN0aW9uKTsKKyAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uc2V0VGhyZWFkQW5kZXJGdW5jdGlvbih0aHJlYWRBbmRlckZ1bmN0aW9uKTsKKyAgICBw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0U2V0dGVyRnVuY3Rpb24oc2V0dGVyRnVuY3Rpb24p
OwogCiAgICAgQVNUOjpUeXBlQW5ub3RhdGlvbiB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRW
YWx1ZSgpOwogICAgIGlmIChhdXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlSW5mby0+dHlwZUFu
bm90YXRpb24ubGVmdEFkZHJlc3NTcGFjZSgpKSB7CkBAIC0xMDQ1LDE0ICsxMTA3LDIyIEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiAKICAgICAgICAgICAgIHR5cGVB
bm5vdGF0aW9uID0gQVNUOjpMZWZ0VmFsdWUgeyAqbGVmdEFkZHJlc3NTcGFjZSB9OwogICAgICAg
ICBlbHNlIGlmIChzZXR0ZXJGdW5jdGlvbikKICAgICAgICAgICAgIHR5cGVBbm5vdGF0aW9uID0g
QVNUOjpBYnN0cmFjdExlZnRWYWx1ZSgpOwotICAgIH0gZWxzZSBpZiAoIWJhc2VJbmZvLT50eXBl
QW5ub3RhdGlvbi5pc1JpZ2h0VmFsdWUoKSAmJiAoc2V0dGVyRnVuY3Rpb24gfHwgYW5kZXJGdW5j
dGlvbikpCisgICAgfSBlbHNlIGlmICghYmFzZUluZm8tPnR5cGVBbm5vdGF0aW9uLmlzUmlnaHRW
YWx1ZSgpICYmIChzZXR0ZXJGdW5jdGlvbiB8fCB0aHJlYWRBbmRlckZ1bmN0aW9uKSkKICAgICAg
ICAgdHlwZUFubm90YXRpb24gPSBBU1Q6OkFic3RyYWN0TGVmdFZhbHVlKCk7Ci0gICAgYXNzaWdu
VHlwZShkb3RFeHByZXNzaW9uLCBmaWVsZFR5cGUtPmNsb25lKCksIFdURk1vdmUodHlwZUFubm90
YXRpb24pKTsKKyAgICBhc3NpZ25UeXBlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgZmllbGRU
eXBlLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CiB9CiAKLXZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjMgSW1wbGVtZW50IHRoaXMuCisg
ICAgZmluaXNoVmlzaXRpbmcoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIGJh
c2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lv
bigpKTsKKyAgICBpZiAoIWJhc2VJbmZvKQorICAgICAgICByZXR1cm47CisgICAgZmluaXNoVmlz
aXRpbmcoaW5kZXhFeHByZXNzaW9uLCAmYmFzZUluZm8tPnJlc29sdmluZ1R5cGUpOwogfQogCiB2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJl
bmNlKQpAQCAtMTM2Miw3ICsxNDMyLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNvbW1h
RXhwcmVzc2lvbgogICAgIGlmIChlcnJvcigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBs
YXN0SW5mbyA9IGdldEluZm8oY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkpOwotICAgIGZv
cndhcmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29sdmluZ1R5cGUsIGxhc3RJ
bmZvLT50eXBlQW5ub3RhdGlvbik7CisgICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBs
YXN0SW5mby0+cmVzb2x2aW5nVHlwZSk7CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpU
ZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCkBAIC0xMzk5LDcgKzE0NjksNyBA
QCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mCiAgICAgQVNTRVJUKGNh
bGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkKCpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlwZXMsIGNh
bGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpOwogICAgIGlmICghZnVuY3Rpb24pIHsKLSAg
ICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKGNhbGxF
eHByZXNzaW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICBpZiAoYXV0byBuZXdG
dW5jdGlvbiA9IHJlc29sdmVCeUluc3RhbnRpYXRpb24oY2FsbEV4cHJlc3Npb24ubmFtZSgpLCBj
YWxsRXhwcmVzc2lvbi5vcmlnaW4oKSwgdHlwZXMsIG1faW50cmluc2ljcykpIHsKICAgICAgICAg
ICAgIG1fcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKICAgICAgICAgICAg
IGZ1bmN0aW9uID0gJm1fcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxhc3Qo
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRl
RGltZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENvbXB1dGVEaW1lbnNpb25z
LmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xh
cmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9n
cmFtLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgQ29tcHV0ZURpbWVuc2lvbnNWaXNpdG9yIDog
cHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIENvbXB1dGVEaW1lbnNpb25zVmlzaXRvcihB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZW50cnlQb2ludCkKKyAgICAgICAgOiBtX2VudHJ5UG9p
bnQoZW50cnlQb2ludCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+Q29tcHV0ZURpbWVu
c2lvbnNWaXNpdG9yKCkgPSBkZWZhdWx0OworCisgICAgT3B0aW9uYWw8Q29tcHV0ZURpbWVuc2lv
bnM+IGNvbXB1dGVEaW1lbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlRGltZW5zaW9u
czsgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
JiBmdW5jdGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6
dmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGJvb2wgZm91bmROdW1UaHJlYWRz
RnVuY3Rpb25BdHRyaWJ1dGUgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0
dHJpYnV0ZSA6IGZ1bmN0aW9uRGVjbGFyYXRpb24uYXR0cmlidXRlQmxvY2soKSkgeworICAgICAg
ICAgICAgYXV0byBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6
Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
KSB7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgZm91
bmROdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGlm
ICgmZnVuY3Rpb25EZWNsYXJhdGlvbiA9PSAmbV9lbnRyeVBvaW50KSB7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghbV9jb21wdXRlRGltZW5zaW9ucyk7CisgICAgICAgICAgICAgICAgICAg
IG1fY29tcHV0ZURpbWVuc2lvbnMgPSB7eyBudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUud2lk
dGgoKSwgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmhlaWdodCgpLCBudW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUuZGVwdGgoKSB9fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOwor
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgbV9lbnRyeVBvaW50OworICAgIE9wdGlv
bmFsPENvbXB1dGVEaW1lbnNpb25zPiBtX2NvbXB1dGVEaW1lbnNpb25zOworfTsKKworT3B0aW9u
YWw8Q29tcHV0ZURpbWVuc2lvbnM+IGNvbXB1dGVEaW1lbnNpb25zKFByb2dyYW0mIHByb2dyYW0s
IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBlbnRyeVBvaW50KQoreworICAgIENvbXB1dGVEaW1l
bnNpb25zVmlzaXRvciBjb21wdXRlRGltZW5zaW9ucyhlbnRyeVBvaW50KTsKKyAgICBjb21wdXRl
RGltZW5zaW9ucy5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKKyAgICBpZiAoY29tcHV0ZURpbWVu
c2lvbnMuZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
Y29tcHV0ZURpbWVuc2lvbnMuY29tcHV0ZURpbWVuc2lvbnMoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29t
cHV0ZURpbWVuc2lvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1lbnNpb25zLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRlRGltZW5zaW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFByZXBhcmUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFt
OworCitPcHRpb25hbDxDb21wdXRlRGltZW5zaW9ucz4gY29tcHV0ZURpbWVuc2lvbnMoUHJvZ3Jh
bSYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisKK30KKworfQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAJKHJldmlzaW9uIDI0NjMyNikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw4IEBAIE9wdGlvbmFsPEVu
dHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2kKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgfQogICAgIEdhdGhlcmVyIG91dHB1dEdhdGhlcmVyKGludHJpbnNpY3MsIGZ1
bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpID8gJipmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50
aWMoKSA6IG51bGxwdHIpOwotICAgIG91dHB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChm
dW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBpZiAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5l
bnRyeVBvaW50VHlwZSgpICE9IEFTVDo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGUpCisgICAgICAg
IG91dHB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlw
ZSgpKTsKICAgICBpZiAob3V0cHV0R2F0aGVyZXIuZXJyb3IoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbmZlclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBAIGNsYXNzIFVubmFtZWRUeXBlOwogYm9vbCBtYXRjaGVz
KGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJik7CiBib29s
IG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYpOwog
Ym9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlw
ZSYpOwotLy8gRklYTUU6IElzIGFueW9uZSBhY3R1YWxseSB1c2luZyB0aGUgcmV0dXJuIHR5cGUg
aGVyZT8KIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21t
aXQoQVNUOjpVbm5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKIE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUm
LCBBU1Q6OlJlc29sdmFibGVUeXBlJik7CiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFi
bGVUeXBlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFBpcGVsaW5lRGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGlwZWxpbmVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDI0NjMy
NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGlwZWxpbmVE
ZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxOCArMTE0LDI4IEBAIGVudW0gY2xh
c3MgU2hhZGVyU3RhZ2UgOiB1aW50OF90IHsKICAgICBDb21wdXRlID0gMSA8PCAyCiB9OwogCi1l
bnVtIGNsYXNzIEJpbmRpbmdUeXBlIDogdWludDhfdCB7Ci0gICAgVW5pZm9ybUJ1ZmZlciwKLSAg
ICBTYW1wbGVyLAotICAgIFRleHR1cmUsCi0gICAgU3RvcmFnZUJ1ZmZlciwKLSAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OCBBZGQgdGhl
IGR5bmFtaWMgdHlwZXMKK3N0cnVjdCBVbmlmb3JtQnVmZmVyQmluZGluZyB7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoTmFtZTsKIH07CiAKK3N0cnVjdCBTYW1wbGVyQmluZGluZyB7Cit9OworCitzdHJ1
Y3QgVGV4dHVyZUJpbmRpbmcgeworfTsKKworc3RydWN0IFN0b3JhZ2VCdWZmZXJCaW5kaW5nIHsK
KyAgICB1bnNpZ25lZCBsZW5ndGhOYW1lOworfTsKKworLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjggQWRkIHRoZSBkeW5hbWljIHR5cGVzCisK
IHN0cnVjdCBCaW5kaW5nIHsKKyAgICB1c2luZyBCaW5kaW5nRGV0YWlscyA9IFZhcmlhbnQ8VW5p
Zm9ybUJ1ZmZlckJpbmRpbmcsIFNhbXBsZXJCaW5kaW5nLCBUZXh0dXJlQmluZGluZywgU3RvcmFn
ZUJ1ZmZlckJpbmRpbmc+OwogICAgIE9wdGlvblNldDxTaGFkZXJTdGFnZT4gdmlzaWJpbGl0eTsK
LSAgICBCaW5kaW5nVHlwZSBiaW5kaW5nVHlwZTsKLSAgICB1bnNpZ25lZCBuYW1lOworICAgIEJp
bmRpbmdEZXRhaWxzIGJpbmRpbmc7CisgICAgdW5zaWduZWQgaW50ZXJuYWxOYW1lOworICAgIHVu
c2lnbmVkIGV4dGVybmFsTmFtZTsKIH07CiAKIHN0cnVjdCBCaW5kR3JvdXAgewpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUu
Y3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiV0hMU0xBdXRvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIgogI2luY2x1ZGUgIldITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJXSExTTENoZWNrZXIuaCIKKyNp
bmNsdWRlICJXSExTTENvbXB1dGVEaW1lbnNpb25zLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlv
blN0YWdlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMSGlnaFpvbWJpZUZpbmRlci5oIgogI2lu
Y2x1ZGUgIldITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmgiCkBAIC01OCw3ICs1OSw3IEBAIG5hbWVz
cGFjZSBXSExTTCB7CiAKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQmVmb3JlRWFjaFBh
c3MgPSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wQVNUQWZ0ZXJQYXJzaW5nID0g
ZmFsc2U7Ci1zdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEF0RW5kID0gZmFsc2U7CitzdGF0
aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEF0RW5kID0gdHJ1ZTsKIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJv
b2wgZHVtcFBhc3NGYWlsdXJlID0gZHVtcEFTVEJlZm9yZUVhY2hQYXNzIHx8IGR1bXBBU1RBZnRl
clBhcnNpbmcgfHwgZHVtcEFTVEF0RW5kIHx8IGFsd2F5c0R1bXBQYXNzRmFpbHVyZXM7CiAKQEAg
LTE3MCwxMiArMTcxLDE2IEBAIE9wdGlvbmFsPENvbXB1dGVQcmVwYXJlUmVzdWx0PiBwcmVwYXJl
KFMKICAgICBhdXRvIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwg
Y29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CiAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gY29tcHV0ZURpbWVuc2lvbnMg
PSBXSExTTDo6Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNzLT5z
aGFkZXIpOworICAgIGlmICghY29tcHV0ZURpbWVuc2lvbnMpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICBhdXRvIGdlbmVyYXRlZENvZGUgPSBNZXRhbDo6Z2VuZXJhdGVNZXRh
bENvZGUoKnByb2dyYW0sIFdURk1vdmUoKm1hdGNoZWRTZW1hbnRpY3MpLCBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yLmxheW91dCk7CiAKICAgICBDb21wdXRlUHJlcGFyZVJlc3VsdCByZXN1bHQ7
CiAgICAgcmVzdWx0Lm1ldGFsU291cmNlID0gV1RGTW92ZShnZW5lcmF0ZWRDb2RlLm1ldGFsU291
cmNlKTsKICAgICByZXN1bHQubWFuZ2xlZEVudHJ5UG9pbnROYW1lID0gV1RGTW92ZShnZW5lcmF0
ZWRDb2RlLm1hbmdsZWRFbnRyeVBvaW50TmFtZSk7CisgICAgcmVzdWx0LmNvbXB1dGVEaW1lbnNp
b25zID0gV1RGTW92ZSgqY29tcHV0ZURpbWVuc2lvbnMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5oCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIs
MTYgQEAgc3RydWN0IFJlbmRlclByZXBhcmVSZXN1bHQgewogfTsKIE9wdGlvbmFsPFJlbmRlclBy
ZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVE
ZXNjcmlwdG9yJik7CiAKK3N0cnVjdCBDb21wdXRlRGltZW5zaW9ucyB7CisgICAgdW5zaWduZWQg
d2lkdGg7CisgICAgdW5zaWduZWQgaGVpZ2h0OworICAgIHVuc2lnbmVkIGRlcHRoOworfTsKKwog
c3RydWN0IENvbXB1dGVQcmVwYXJlUmVzdWx0IHsKICAgICBTdHJpbmcgbWV0YWxTb3VyY2U7CiAg
ICAgU3RyaW5nIG1hbmdsZWRFbnRyeVBvaW50TmFtZTsKKyAgICBDb21wdXRlRGltZW5zaW9ucyBj
b21wdXRlRGltZW5zaW9uczsKIH07CiBPcHRpb25hbDxDb21wdXRlUHJlcGFyZVJlc3VsdD4gcHJl
cGFyZShTdHJpbmcmIHdobHNsU291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVW
YXJpYWJsZUxpZmV0aW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkocmV2aXNp
b24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzEx
MCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBhdXRvIHJocyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZSkp
OwogICAgICAgICByaHMtPnNldFR5cGUodmFyaWFibGUudHlwZSgpLT5jbG9uZSgpKTsKLSAgICAg
ICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIHJo
cy0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkIH0pOwogCiAgICAgICAgIGF1dG8gYXNzaWdubWVudCA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpBc3NpZ25tZW50RXhwcmVzc2lvbj4odmFyaWFibGUub3JpZ2luKCksIFdURk1vdmUobGhzKSwg
V1RGTW92ZShyaHMpKTsKICAgICAgICAgYXNzaWdubWVudC0+c2V0VHlwZSh2YXJpYWJsZS50eXBl
KCktPmNsb25lKCkpOwpAQCAtMTM2LDcgKzEzNiw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAg
YXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50
ZXJFeHByZXNzaW9uPihmdW5jdGlvbkRlZmluaXRpb24ub3JpZ2luKCksIFdURk1vdmUoc3RydWN0
VmFyaWFibGVSZWZlcmVuY2UpKTsKICAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+
c2V0VHlwZShtX3BvaW50ZXJUb1N0cnVjdFR5cGUtPmNsb25lKCkpOwotICAgICAgICAgICAgbWFr
ZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFT
VDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJl
c3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKIAogICAgICAgICAg
ICAgYXV0byBwb2ludGVyRGVjbGFyYXRpb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbj4oZnVuY3Rpb25EZWZpbml0aW9uLm9yaWdpbigpLCBBU1Q6OlF1YWxpZmllcnMo
KSwKICAgICAgICAgICAgICAgICBtX3BvaW50ZXJUb1N0cnVjdFR5cGUtPmNsb25lKCksICJ3cmFw
cGVyIl9zLCBXVEY6Om51bGxvcHQsIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PihXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lvbikpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJl
c29sdmVyLmNwcAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExT
TFBvaW50ZXJUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmgiCkBAIC01MSwxMCArNTIsMTEgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHBy
ZXNzaW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24mKSBvdmVycmlkZTsKIAotICAgIGJvb2wgc2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6RG90
RXhwcmVzc2lvbiYpOworICAgIHZvaWQgc2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6UHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uJik7CiAgICAgYm9vbCBzaW1wbGlmeUFic3RyYWN0TGVmdFZhbHVlKEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mLCBBU1Q6OkRvdEV4cHJlc3Npb24mLCBVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiYmIHJpZ2h0KTsKICAgICB2b2lkIHNpbXBsaWZ5TGVmdFZhbHVlKEFT
VDo6RXhwcmVzc2lvbiYpOwogCkBAIC02NCw4ICs2NiwxNCBAQCBwcml2YXRlOgogdm9pZCBQcm9w
ZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7
CiAgICAgLy8gVW5sZXNzIHdlJ3JlIGluc2lkZSBhbiBBc3NpZ25tZW50RXhwcmVzc2lvbiBvciBh
IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24sIHdlJ3JlIGEgcmlnaHQgdmFsdWUuCi0gICAgaWYg
KCFzaW1wbGlmeVJpZ2h0VmFsdWUoZG90RXhwcmVzc2lvbikpCi0gICAgICAgIHNldEVycm9yKCk7
CisgICAgc2ltcGxpZnlSaWdodFZhbHVlKGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIFByb3Bl
cnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24p
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Np
b24oKSk7CisgICAgLy8gVW5sZXNzIHdlJ3JlIGluc2lkZSBhbiBBc3NpZ25tZW50RXhwcmVzc2lv
biBvciBhIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24sIHdlJ3JlIGEgcmlnaHQgdmFsdWUuCisg
ICAgc2ltcGxpZnlSaWdodFZhbHVlKGluZGV4RXhwcmVzc2lvbik7CiB9CiAKIHZvaWQgUHJvcGVy
dHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5p
dGlvbikKQEAgLTc1LDc5ICs4MywxODIgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChB
U1Q6OkZ1bmN0aQogICAgICAgICBmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKS5zdGF0ZW1lbnRz
KCkuaW5zZXJ0KDAsIG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudD4oTGV4ZXI6OlRva2VuKG1fdmFyaWFibGVEZWNsYXJhdGlvbnNbMF0tPm9yaWdpbigpKSwg
V1RGTW92ZShtX3ZhcmlhYmxlRGVjbGFyYXRpb25zKSkpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IHNldHRlckNhbGwoQVNUOjpEb3RFeHByZXNzaW9u
JiBkb3RFeHByZXNzaW9uLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIG5ld1ZhbHVlLCBj
b25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFs
dWVGYWN0b3J5LCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
KCk+JiBwb2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KQorZW51bSBjbGFzcyBXaGljaEFuZGVyIHsK
KyAgICBUaHJlYWRBbmRlciwKKyAgICBBbmRlcgorfTsKKworc3RydWN0IEFuZGVyQ2FsbEFyZ3Vt
ZW50UmVzdWx0IHsKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBleHByZXNzaW9uOwor
ICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+PiB2YXJpYWJs
ZURlY2xhcmF0aW9uOworICAgIFdoaWNoQW5kZXIgd2hpY2hBbmRlcjsKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBFeHByZXNzaW9uQ29uc3RydWN0b3IsIHR5cGVuYW1lIFR5cGVDb25zdHJ1Y3Rv
cj4KK3N0YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4gd3JhcEFuZGVyQ2Fs
bEFyZ3VtZW50KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uLCBib29sIGFu
ZGVyRnVuY3Rpb24sIGJvb2wgdGhyZWFkQW5kZXJGdW5jdGlvbikKIHsKLSAgICBpZiAoZG90RXhw
cmVzc2lvbi5hbmRlckZ1bmN0aW9uKCkpIHsKLSAgICAgICAgLy8gKm9wZXJhdG9yJi5mb28oJnYp
ID0gbmV3VmFsdWUKLSAgICAgICAgaWYgKCFkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rp
b24oKSkKKyAgICBpZiAoYXV0byBhZGRyZXNzU3BhY2UgPSBleHByZXNzaW9uLT50eXBlQW5ub3Rh
dGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSkgeworICAgICAgICBpZiAoIWFuZGVyRnVuY3Rpb24p
CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAKKyAgICAgICAgYXV0
byBvcmlnaW4gPSBleHByZXNzaW9uLT5vcmlnaW4oKTsKKyAgICAgICAgYXV0byBiYXNlVHlwZSA9
IGV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCk7CisgICAgICAgIGF1dG8gbWFrZUFy
cmF5UmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3RydWN0b3I+KExleGVy
OjpUb2tlbihvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKKyAgICAgICAgbWFrZUFycmF5
UmVmZXJlbmNlLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZUNvbnN0cnVjdG9yPihXVEZNb3Zl
KG9yaWdpbiksICphZGRyZXNzU3BhY2UsIFdURk1vdmUoYmFzZVR5cGUpKSk7CisgICAgICAgIG1h
a2VBcnJheVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
ICAgICAgICByZXR1cm4ge3sgV1RGTW92ZShtYWtlQXJyYXlSZWZlcmVuY2UpLCBXVEY6Om51bGxv
cHQsIFdoaWNoQW5kZXI6OkFuZGVyIH19OworICAgIH0KKyAgICBpZiAodGhyZWFkQW5kZXJGdW5j
dGlvbikgeworICAgICAgICBhdXRvIG9yaWdpbiA9IGV4cHJlc3Npb24tPm9yaWdpbigpOworICAg
ICAgICBhdXRvIGJhc2VUeXBlID0gZXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsK
KyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMo
KSwgYmFzZVR5cGUtPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFi
bGVEZWNsYXJhdGlvbikpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGUoYmFz
ZVR5cGUtPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKwor
ICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJs
ZVJlZmVyZW5jZTEpLCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKKyAgICAgICAgYXNzaWdubWVudEV4
cHJlc3Npb24tPnNldFR5cGUoYmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICBhc3NpZ25tZW50
RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOworCisgICAg
ICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UyID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlKGJhc2VUeXBlLT5jbG9u
ZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UyLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CisKKyAgICAgICAgYXV0
byBleHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3RydWN0b3I+KExleGVy
OjpUb2tlbihvcmlnaW4pLCBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlMikpOworICAgICAgICBh
dXRvIHJlc3VsdFR5cGUgPSBtYWtlVW5pcXVlUmVmPFR5cGVDb25zdHJ1Y3Rvcj4oTGV4ZXI6OlRv
a2VuKG9yaWdpbiksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIFdURk1vdmUoYmFzZVR5cGUp
KTsKKyAgICAgICAgZXhwcmVzc2lvbi0+c2V0VHlwZShyZXN1bHRUeXBlLT5jbG9uZSgpKTsKKyAg
ICAgICAgZXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwor
CisgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7
CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9u
KSk7CisgICAgICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKGV4cHJlc3Npb24pKTsKKyAg
ICAgICAgYXV0byBjb21tYUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFFeHBy
ZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbnMpKTsKKyAgICAgICAg
Y29tbWFFeHByZXNzaW9uLT5zZXRUeXBlKFdURk1vdmUocmVzdWx0VHlwZSkpOworICAgICAgICBj
b21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIHt7IFdURk1vdmUoY29tbWFFeHByZXNzaW9uKSwgeyBXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24pIH0sIFdoaWNoQW5kZXI6OlRocmVhZEFuZGVyfX07CisgICAgfQorICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1
bWVudFJlc3VsdD4gYW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4m
IGV4cHJlc3Npb24sIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRBbmRlckZ1bmN0aW9u
KQoreworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLnVu
aWZ5Tm9kZSgpOworICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7Cisg
ICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlw
ZSkpOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSkKKyAgICAgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKGV4cHJlc3Npb24pLCBXVEY6Om51bGxv
cHQsIFdoaWNoQW5kZXI6OkFuZGVyIH19OworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwQW5kZXJDYWxsQXJndW1lbnQ8
QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4oZXhwcmVzc2lvbiwgYW5kZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7CisgICAg
fQorICAgIHJldHVybiB3cmFwQW5kZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtlUG9pbnRlckV4cHJl
c3Npb24sIEFTVDo6UG9pbnRlclR5cGU+KGV4cHJlc3Npb24sIGFuZGVyRnVuY3Rpb24sIHRocmVh
ZEFuZGVyRnVuY3Rpb24pOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+IHNldHRlckNhbGwoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZWxldmFudEFu
ZGVyLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIG5ld1ZhbHVlLCBjb25zdCBzdGQ6OmZ1
bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGluZGV4VmFyaWFibGUpCit7CisgICAgYXV0byBtYXli
ZUFkZEluZGV4QXJndW1lbnQgPSBbJl0oVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
PiYgYXJndW1lbnRzKSB7CisgICAgICAgIGlmICghaW5kZXhWYXJpYWJsZSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCgqaW5k
ZXhWYXJpYWJsZSkpOworICAgICAgICBBU1NFUlQoaW5kZXhWYXJpYWJsZS0+dHlwZSgpKTsKKyAg
ICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUoaW5kZXhWYXJpYWJsZS0+dHlwZSgpLT5j
bG9uZSgpKTsKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdo
dD8KKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSk7
CisgICAgfTsKKworICAgIGlmIChyZWxldmFudEFuZGVyKSB7CisgICAgICAgIC8vICpvcGVyYXRv
ciYuZm9vKCZ2KSA9IG5ld1ZhbHVlCisgICAgICAgIGF1dG8gbGVmdFZhbHVlID0gbGVmdFZhbHVl
RmFjdG9yeSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYW5kZXJDYWxsQXJndW1lbnQobGVm
dFZhbHVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKGFyZ3VtZW50KTsKKyAgICAgICAg
QVNTRVJUKCFhcmd1bWVudC0+dmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgICAgIEFTU0VSVChh
cmd1bWVudC0+d2hpY2hBbmRlciA9PSBXaGljaEFuZGVyOjpBbmRlcik7CiAgICAgICAgIFZlY3Rv
cjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKHBvaW50ZXJUb0xlZnRWYWx1ZUZhY3RvcnkoKSk7Ci0gICAgICAgIGF1dG8gY2Fs
bEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4cHJlc3Npb24udGhyZWFk
QW5kZXJGdW5jdGlvbigpLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwotICAgICAgICBj
YWxsRXhwcmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24o
KS0+dHlwZSgpLmNsb25lKCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoYXJn
dW1lbnQtPmV4cHJlc3Npb24pKTsKKyAgICAgICAgbWF5YmVBZGRJbmRleEFyZ3VtZW50KGFyZ3Vt
ZW50cyk7CisKKyAgICAgICAgYXV0byBjYWxsRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5v
cmlnaW4oKSksIFN0cmluZyhyZWxldmFudEFuZGVyLT5uYW1lKCkpLCBXVEZNb3ZlKGFyZ3VtZW50
cykpOworICAgICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShyZWxldmFudEFuZGVyLT50eXBl
KCkuY2xvbmUoKSk7CiAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7Ci0gICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbigq
ZG90RXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCkpOworICAgICAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0RnVuY3Rpb24oKnJlbGV2YW50QW5kZXIpOwogCi0gICAgICAgIGF1dG8gZGVyZWZl
cmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNhbGxFeHBy
ZXNzaW9uKSk7Ci0gICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPihkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+
dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICBhdXRvIGRlcmVmZXJlbmNl
RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExl
eGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGNh
bGxFeHByZXNzaW9uKSk7CisgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShk
b3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihyZWxldmFudEFuZGVyLT50eXBlKCkpLmVsZW1lbnRU
eXBlKCkuY2xvbmUoKSk7CiAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwog
Ci0gICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6
QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigp
KSwgV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pLCBXVEZNb3ZlKG5ld1ZhbHVlKSk7Ci0g
ICAgICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRl
clR5cGU+KGRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpLT50eXBlKCkpLmVsZW1l
bnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKGRlcmVmZXJlbmNlRXhwcmVz
c2lvbiksIFdURk1vdmUobmV3VmFsdWUpKTsKKyAgICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24t
PnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4ocmVsZXZhbnRBbmRlci0+dHlwZSgp
KS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgIHJldHVybiBV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7
CiAgICAgfQogCiAgICAgLy8gdiA9IG9wZXJhdG9yLmZvbz0odiwgbmV3VmFsdWUpCi0gICAgQVNT
RVJUKGRvdEV4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb24oKSk7CisgICAgQVNTRVJUKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpKTsKIAogICAgIFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQobGVm
dFZhbHVlRmFjdG9yeSgpKTsKKyAgICBtYXliZUFkZEluZGV4QXJndW1lbnQoYXJndW1lbnRzKTsK
ICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUobmV3VmFsdWUpKTsKLSAgICBhdXRvIGNhbGxF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhkb3RFeHByZXNzaW9uLnNldHRlckZ1
bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7Ci0gICAgY2FsbEV4cHJlc3Np
b24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUo
KSk7CisKKyAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigp
KSwgU3RyaW5nKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT5uYW1l
KCkpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXR0ZXJGdW5jdGlvbigpLT50eXBlKCkuY2xvbmUoKSk7
CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgp
KTsKLSAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJlc3Npb24uc2V0dGVy
RnVuY3Rpb24oKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb24oKSk7CiAKLSAgICBhdXRvIGFzc2lnbm1lbnRF
eHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIGxlZnRWYWx1ZUZhY3RvcnkoKSwgV1RG
TW92ZShjYWxsRXhwcmVzc2lvbikpOwotICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5zZXRUeXBl
KGRvdEV4cHJlc3Npb24uc2V0dGVyRnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOworICAgIGF1
dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkp
LCBsZWZ0VmFsdWVGYWN0b3J5KCksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKKyAgICBhc3Np
Z25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0dGVy
RnVuY3Rpb24oKS0+dHlwZSgpLmNsb25lKCkpOwogICAgIGFzc2lnbm1lbnRFeHByZXNzaW9uLT5z
ZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CiAKICAgICByZXR1cm4gVW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGdldHRlckNhbGwo
QVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBjb25zdCBzdGQ6
OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBwb2ludGVyVG9MZWZ0VmFs
dWVGYWN0b3J5KQorc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBn
ZXR0ZXJDYWxsKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24sIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVsZXZhbnRBbmRlciwgY29uc3Qg
c3RkOjpmdW5jdGlvbjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPigpPiYgbGVmdFZhbHVlRmFj
dG9yeSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBpbmRleFZhcmlhYmxlKQogewotICAgIGlm
IChkb3RFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSkgeworICAgIGF1dG8gbWF5YmVBZGRJbmRl
eEFyZ3VtZW50ID0gWyZdKFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mIGFyZ3Vt
ZW50cykgeworICAgICAgICBpZiAoIWluZGV4VmFyaWFibGUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKmluZGV4VmFyaWFi
bGUpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4VmFyaWFibGUtPnR5cGUoKSk7CisgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKGluZGV4VmFyaWFibGUtPnR5cGUoKS0+Y2xvbmUoKSk7
CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRW
YWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOworICAgIH07
CisKKyAgICBpZiAocmVsZXZhbnRBbmRlcikgewogICAgICAgICAvLyAqb3BlcmF0b3ImLmZvbygm
dikKLSAgICAgICAgaWYgKCFkb3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIAorICAgICAgICBhdXRvIGxl
ZnRWYWx1ZSA9IGxlZnRWYWx1ZUZhY3RvcnkoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudCA9IGFu
ZGVyQ2FsbEFyZ3VtZW50KGxlZnRWYWx1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVChh
cmd1bWVudCk7CisgICAgICAgIEFTU0VSVCghYXJndW1lbnQtPnZhcmlhYmxlRGVjbGFyYXRpb24p
OworICAgICAgICBBU1NFUlQoYXJndW1lbnQtPndoaWNoQW5kZXIgPT0gV2hpY2hBbmRlcjo6QW5k
ZXIpOwogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50
czsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChwb2ludGVyVG9MZWZ0VmFsdWVGYWN0b3J5KCkp
OwotICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFN0cmluZyhk
b3RFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1
bWVudHMpKTsKLSAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZG90RXhwcmVzc2lvbi50
aHJlYWRBbmRlckZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChXVEZNb3ZlKGFyZ3VtZW50LT5leHByZXNzaW9uKSk7CisgICAgICAgIG1heWJlQWRk
SW5kZXhBcmd1bWVudChhcmd1bWVudHMpOworCisgICAgICAgIGF1dG8gY2FsbEV4cHJlc3Npb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbihwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcocmVsZXZhbnRBbmRlci0+bmFtZSgp
KSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUo
cmVsZXZhbnRBbmRlci0+dHlwZSgpLmNsb25lKCkpOwogICAgICAgICBjYWxsRXhwcmVzc2lvbi0+
c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwotICAgICAgICBjYWxsRXhwcmVz
c2lvbi0+c2V0RnVuY3Rpb24oKmRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpKTsK
KyAgICAgICAgY2FsbEV4cHJlc3Npb24tPnNldEZ1bmN0aW9uKCpyZWxldmFudEFuZGVyKTsKIAot
ICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigp
KSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwotICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oZG90RXhwcmVzc2lvbi50aHJl
YWRBbmRlckZ1bmN0aW9uKCktPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAg
ICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9y
aWdpbigpKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBkZXJlZmVyZW5jZUV4
cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4ocmVsZXZhbnRBbmRl
ci0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgICAgICBkZXJlZmVyZW5jZUV4
cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsKIAogICAgICAgICByZXR1cm4gVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4oV1RGTW92ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24pKTsKICAgICB9CiAKICAgICAvLyBv
cGVyYXRvci5mb28odikKLSAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigp
KTsKLSAgICAKKyAgICBBU1NFUlQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0
aW9uKCkpOworCiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVu
dHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0VmFsdWVGYWN0b3J5KCkpOwotICAgIGF1dG8g
Y2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVy
OjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgU3RyaW5nKGRvdEV4cHJlc3Npb24uZ2V0
dGVyRnVuY3Rpb24oKS0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKLSAgICBjYWxsRXhw
cmVzc2lvbi0+c2V0VHlwZShkb3RFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCktPnR5cGUoKS5j
bG9uZSgpKTsKKyAgICBtYXliZUFkZEluZGV4QXJndW1lbnQoYXJndW1lbnRzKTsKKworICAgIGF1
dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExl
eGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBTdHJpbmcocHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCktPm5hbWUoKSksIFdURk1vdmUo
YXJndW1lbnRzKSk7CisgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCktPnR5cGUoKS5jbG9uZSgpKTsKICAgICBjYWxsRXhw
cmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwotICAgIGNhbGxF
eHByZXNzaW9uLT5zZXRGdW5jdGlvbigqZG90RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpKTsK
KyAgICBjYWxsRXhwcmVzc2lvbi0+c2V0RnVuY3Rpb24oKnByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5nZXR0ZXJGdW5jdGlvbigpKTsKIAogICAgIHJldHVybiBVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPihXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CiB9CkBAIC0xNjEsNyArMjcyLDcgQEAgc3Ry
dWN0IE1vZGlmaWNhdGlvblJlc3VsdCB7CiAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiBleHByZXNzaW9uczsKICAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiByZXN1
bHQ7CiB9Owotc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVDo6RG90RXhw
cmVzc2lvbiYgZG90RXhwcmVzc2lvbiwgc3RkOjpmdW5jdGlvbjxPcHRpb25hbDxNb2RpZmljYXRp
b25SZXN1bHQ+KE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKT4gbW9kaWZp
Y2F0aW9uKQorc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIHN0ZDo6ZnVuY3Rp
b248T3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PihPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4mJik+IG1vZGlmaWNhdGlvbikKIHsKICAgICAvLyBDb25zaWRlciBhLmIuYy5k
Kys7CiAgICAgLy8gVGhpcyB3b3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50bzoKQEAgLTE4MSwyMiAr
MjkyLDIyIEBAIHN0YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICAv
LyByID0gb3BlcmF0b3IuZD0ociwgbmV3VmFsdWUpOwogICAgIC8vIHEgPSBvcGVyYXRvci5jPShx
LCByKTsKICAgICAvLwotICAgIC8vIFN0ZXAgNDoKKyAgICAvLyBTdGVwIDU6CiAgICAgLy8gKnAg
PSBvcGVyYXRvci5iPSgqcCwgcSk7CiAKICAgICAvLyBJZiB0aGUgZXhwcmVzc2lvbiBpcyBhLmIu
Yy5kID0gZSwgU3RlcCAzIGRpc2FwcGVhcnMgYW5kICJuZXdWYWx1ZSIgaW4gc3RlcCA0IGJlY29t
ZXMgImUiLgogICAgIAogCiAgICAgLy8gRmluZCB0aGUgIi5iIiAiLmMiIGFuZCAiLmQiIGV4cHJl
c3Npb25zLiBUaGV5IGVuZCB1cCBpbiB0aGUgb3JkZXIgWyIuZCIsICIuYyIsICIuYiJdLgotICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RG90RXhwcmVzc2lvbj4+IGNoYWlu
OwotICAgIEFTVDo6RG90RXhwcmVzc2lvbiogaXRlcmF0b3IgPSAmZG90RXhwcmVzc2lvbjsKKyAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbj4+IGNoYWluOworICAgIEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKiBpdGVyYXRv
ciA9ICZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb247CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICAgY2hhaW4uYXBwZW5kKCppdGVyYXRvcik7CiAgICAgICAgIGlmIChpdGVyYXRvci0+YmFzZSgp
LnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIEFTU0VSVCghaXRlcmF0b3ItPmJhc2UoKS50eXBlQW5ub3RhdGlvbigpLmlzUmln
aHRWYWx1ZSgpKTsKLSAgICAgICAgQVNTRVJUKGlzPEFTVDo6RG90RXhwcmVzc2lvbj4oaXRlcmF0
b3ItPmJhc2UoKSkpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODE2MyBNYWtlIHRoaXMgd29yayB3aXRoIGluZGV4IGV4cHJlc3Npb25zCi0gICAg
ICAgIGl0ZXJhdG9yID0gJmRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oaXRlcmF0b3ItPmJh
c2UoKSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4o
aXRlcmF0b3ItPmJhc2UoKSkpOworICAgICAgICBpdGVyYXRvciA9ICZkb3duY2FzdDxBU1Q6OlBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oaXRlcmF0b3ItPmJhc2UoKSk7CiAgICAgfQogICAgIGF1
dG8gbGVmdEV4cHJlc3Npb24gPSBpdGVyYXRvci0+dGFrZUJhc2UoKTsKICAgICBBU1Q6OkV4cHJl
c3Npb24mIGlubmVyTGVmdEV4cHJlc3Npb24gPSBsZWZ0RXhwcmVzc2lvbjsKQEAgLTIwOCw4ICsz
MTksMzkgQEAgc3RhdGljIE9wdGlvbmFsPE1vZGlmeVJlc3VsdD4gbW9kaWZ5KEFTVAogICAgIFZl
Y3RvcjxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4gaW50ZXJtZWRpYXRlVmFy
aWFibGVzOwogICAgIGludGVybWVkaWF0ZVZhcmlhYmxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGNoYWluLnNpemUoKSAtIDEpOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY2hhaW4uc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgZG90RXhwcmVzc2lvbiA9IHN0YXRpY19jYXN0PEFT
VDo6RG90RXhwcmVzc2lvbiY+KGNoYWluW2ldKTsKLSAgICAgICAgaW50ZXJtZWRpYXRlVmFyaWFi
bGVzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgZG90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICAgICAgYXV0byYgcHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uID0gc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihjaGFp
bltpXSk7CisgICAgICAgIGludGVybWVkaWF0ZVZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFr
ZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgcHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIH0KKworICAgIC8vIENvbnNpZGVyIGFbZm9vKCld
W2JdID0gYzsKKyAgICAvLyBOYWl2ZWx5LCBUaGlzIHdvdWxkIGdldCBleHBhbmRlZCB0bzoKKyAg
ICAvLworICAgIC8vIHRlbXAgPSBvcGVyYXRvcltdKGEsIGZvbygpKTsKKyAgICAvLyB0ZW1wID0g
b3BlcmF0b3JbXT0odGVtcCwgYiwgYyk7CisgICAgLy8gYSA9IG9wZXJhdG9yW109KGEsIGZvbygp
LCB0ZW1wKTsKKyAgICAvLworICAgIC8vIEhvd2V2ZXIsIGlmIHdlIGRpZCB0aGlzLCB3ZSB3b3Vs
ZCBoYXZlIHRvIHJ1biBmb28oKSB0d2ljZSwgd2hpY2ggd291bGQgYmUgaW5jb3JyZWN0LgorICAg
IC8vIEluc3RlYWQsIHdlIG5lZWQgdG8gc2F2ZSBmb28oKSBhbmQgYiBpbnRvIG1vcmUgdGVtcG9y
YXJ5IHZhcmlhYmxlcy4KKyAgICAvLyBUaGVzZSB0ZW1wb3JhcnkgdmFyaWFibGVzIGFyZSBwYXJh
bGxlbCB0byAiY2hhaW4iIGFib3ZlLCB3aXRoIG51bGxvcHQgcmVmZXJyaW5nIHRvIGEgRG90RXhw
cmVzc2lvbiAod2hpY2ggZG9lc24ndCBoYXZlIGFuIGluZGV4IHZhbHVlIHRvIHNhdmUgdG8gYSB2
YXJpYWJsZSkuCisgICAgLy8KKyAgICAvLyBJbnN0ZWFkLCB0aGlzIGdldHMgZXhwYW5kZWQgdG86
CisgICAgLy8KKyAgICAvLyBwID0gJmE7CisgICAgLy8gdGVtcCA9IGZvbygpOworICAgIC8vIHEg
PSBvcGVyYXRvcltdKCpwLCB0ZW1wKTsKKyAgICAvLyB0ZW1wMiA9IGI7CisgICAgLy8gcSA9IG9w
ZXJhdG9yW109KHEsIHRlbXAyLCBjKTsKKyAgICAvLyAqcCA9IG9wZXJhdG9yW109KCpwLCB0ZW1w
LCBxKTsKKworICAgIFZlY3RvcjxPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uPj4+IGluZGV4VmFyaWFibGVzOworICAgIGluZGV4VmFyaWFibGVzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoY2hhaW4uc2l6ZSgpKTsKKyAgICBmb3IgKEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24gOiBjaGFpbikgeworICAgICAgICBp
ZiAoIWlzPEFTVDo6SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKSB7
CisgICAgICAgICAgICBpbmRleFZhcmlhYmxlcy5hcHBlbmQoV1RGOjpudWxsb3B0KTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGF1dG8mIGluZGV4RXhwcmVzc2lv
biA9IGRvd25jYXN0PEFTVDo6SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24pOworICAgICAgICBpbmRleFZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZVJl
ZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgaW5kZXhFeHByZXNzaW9uLmlu
ZGV4RXhwcmVzc2lvbigpLnJlc29sdmVkVHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCkpOwogICAgIH0KIAogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CkBAIC0yNDIsNDMgKzM4NCw0NCBAQCBzdGF0aWMg
T3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAgICAgICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogICAgICAgICAgICAgcmV0dXJuIHZhcmlh
YmxlUmVmZXJlbmNlOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgYXV0byB2YXJpYWJsZVJl
ZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZTo6d3JhcChwb2ludGVyVmFyaWFibGUpKTsKICAgICAgICAgQVNTRVJUKHBv
aW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5
cGUocG9pbnRlclZhcmlhYmxlLT50eXBlKCktPmNsb25lKCkpOwogICAgICAgICB2YXJpYWJsZVJl
ZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogCi0gICAgICAgIGF1dG8gZGVyZWZlcmVu
Y2VFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBXVEZNb3ZlKHZhcmlhYmxlUmVm
ZXJlbmNlKSk7CisgICAgICAgIGF1dG8gZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsKICAg
ICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKICAgICAgICAgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uLT5zZXRUeXBlKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVy
VmFyaWFibGUtPnR5cGUoKSkuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgZGVyZWZl
cmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KCpwb2ludGVyVmFyaWFibGUtPnR5cGUoKSkuYWRkcmVzc1Nw
YWNlKCkgfSk7CiAgICAgICAgIHJldHVybiBkZXJlZmVyZW5jZUV4cHJlc3Npb247CiAgICAgfTsK
LSAgICBhdXRvIHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlID0gWyZdKCkgLT4gVW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4gewotICAgICAgICBpZiAocHJldmlvdXMpIHsKLSAgICAgICAgICAg
IGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAoKnByZXZpb3VzKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQocHJldmlvdXMtPnR5cGUoKSk7Ci0gICAgICAgICAgICB2YXJpYWJsZVJlZmVy
ZW5jZS0+c2V0VHlwZShwcmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKTsKLSAgICAgICAgICAgIHZh
cmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisgICAgYXV0byBhcHBlbmRJ
bmRleEFzc2lnbm1lbnQgPSBbJl0oQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiwgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbj4+JiBpbmRleFZhcmlhYmxlKSB7CisgICAgICAgIGlmICghaW5kZXhWYXJpYWJsZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvJiBpbmRleEV4cHJlc3Npb24gPSBk
b3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKTsK
KworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKCppbmRleFZhcmlh
YmxlKSk7CisgICAgICAgIEFTU0VSVChpbmRleFZhcmlhYmxlLT5nZXQoKS50eXBlKCkpOworICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShpbmRleFZhcmlhYmxlLT5nZXQoKS50eXBl
KCktPmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlz
IHJpZ2h0PwogCi0gICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihkb3RFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOwotICAgICAgICAg
ICAgQVNTRVJUKHByZXZpb3VzLT50eXBlKCkpOwotICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBw
cmV2aW91cy0+dHlwZSgpLT5jbG9uZSgpKSk7Ci0gICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJl
c3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKLSAgICAgICAgICAg
IHJldHVybiBtYWtlUG9pbnRlckV4cHJlc3Npb247Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBh
c3NpZ25tZW50RXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIFdU
Rk1vdmUodmFyaWFibGVSZWZlcmVuY2UpLCBpbmRleEV4cHJlc3Npb24udGFrZUluZGV4KCkpOwor
ICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZShpbmRleFZhcmlhYmxlLT5nZXQo
KS50eXBlKCktPmNsb25lKCkpOworICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlw
ZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCi0gICAgICAgIGF1dG8gdmFyaWFibGVS
ZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlhYmxlKSk7Ci0gICAgICAgIEFTU0VSVChw
b2ludGVyVmFyaWFibGUtPnR5cGUoKSk7Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRU
eXBlKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpLT5jbG9uZSgpKTsKLSAgICAgICAgdmFyaWFibGVS
ZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KLSAgICAgICAgcmV0dXJuIHZhcmlhYmxl
UmVmZXJlbmNlOworICAgICAgICBleHByZXNzaW9ucy5hcHBlbmQoV1RGTW92ZShhc3NpZ25tZW50
RXhwcmVzc2lvbikpOwogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IGNoYWluLnNpemUoKTsg
LS1pOyApIHsKLSAgICAgICAgQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uID0gY2hh
aW5baV07CisgICAgICAgIEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24gPSBjaGFpbltpXTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uID0gaW50ZXJtZWRpYXRlVmFyaWFibGVzW2kgLSAxXTsK
KyAgICAgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4+JiBp
bmRleFZhcmlhYmxlID0gaW5kZXhWYXJpYWJsZXNbaV07CiAKLSAgICAgICAgYXV0byBjYWxsRXhw
cmVzc2lvbiA9IGdldHRlckNhbGwoZG90RXhwcmVzc2lvbiwgcHJldmlvdXNMZWZ0VmFsdWUsIHBv
aW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlKTsKKyAgICAgICAgYXBwZW5kSW5kZXhBc3NpZ25tZW50
KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgaW5kZXhWYXJpYWJsZSk7CisKKyAgICAgICAgQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZWxldmFudEFuZGVyID0gaSA9PSBjaGFpbi5zaXplKCkg
LSAxID8gcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSA6IHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi50aHJlYWRBbmRlckZ1bmN0aW9uKCk7CisgICAgICAgIGF1dG8gY2Fs
bEV4cHJlc3Npb24gPSBnZXR0ZXJDYWxsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgcmVsZXZh
bnRBbmRlciwgcHJldmlvdXNMZWZ0VmFsdWUsIGluZGV4VmFyaWFibGUgPyAmKmluZGV4VmFyaWFi
bGUgOiBudWxscHRyKTsKIAogICAgICAgICBpZiAoIWNhbGxFeHByZXNzaW9uKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTI4OCwxNSArNDMxLDE3IEBAIHN0YXRpYyBPcHRp
b25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Ut
PnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCktPmNsb25lKCkpOwogICAgICAgICB2
YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6
OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0aGlzIHJpZ2h0PwogCi0gICAgICAgIGF1dG8g
YXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJp
YWJsZVJlZmVyZW5jZSksIFdURk1vdmUoKmNhbGxFeHByZXNzaW9uKSk7CisgICAgICAgIGF1dG8g
YXNzaWdubWVudEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBX
VEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSwgV1RGTW92ZSgqY2FsbEV4cHJlc3Npb24pKTsKICAg
ICAgICAgYXNzaWdubWVudEV4cHJlc3Npb24tPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50
eXBlKCktPmNsb25lKCkpOwogICAgICAgICBhc3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFu
bm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgIGV4cHJlc3Npb25zLmFwcGVu
ZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7Ci0gICAgICAgIAorCiAgICAgICAgIHBy
ZXZpb3VzID0gJnZhcmlhYmxlRGVjbGFyYXRpb247CiAgICAgfQotICAgIGF1dG8gbGFzdEdldHRl
ckNhbGxFeHByZXNzaW9uID0gZ2V0dGVyQ2FsbChjaGFpblswXSwgcHJldmlvdXNMZWZ0VmFsdWUs
IHBvaW50ZXJUb1ByZXZpb3VzTGVmdFZhbHVlKTsKKyAgICBhcHBlbmRJbmRleEFzc2lnbm1lbnQo
Y2hhaW5bMF0sIGluZGV4VmFyaWFibGVzWzBdKTsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIHJlbGV2YW50QW5kZXIgPSBjaGFpbi5zaXplKCkgPT0gMSA/IHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5hbmRlckZ1bmN0aW9uKCkgOiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24udGhyZWFk
QW5kZXJGdW5jdGlvbigpOworICAgIGF1dG8gbGFzdEdldHRlckNhbGxFeHByZXNzaW9uID0gZ2V0
dGVyQ2FsbChjaGFpblswXSwgcmVsZXZhbnRBbmRlciwgcHJldmlvdXNMZWZ0VmFsdWUsIGluZGV4
VmFyaWFibGVzWzBdID8gJiooaW5kZXhWYXJpYWJsZXNbMF0pIDogbnVsbHB0cik7CiAKICAgICAv
LyBTdGVwIDM6CiAgICAgYXV0byBtb2RpZmljYXRpb25SZXN1bHQgPSBtb2RpZmljYXRpb24oV1RG
TW92ZShsYXN0R2V0dGVyQ2FsbEV4cHJlc3Npb24pKTsKQEAgLTMwOSwyNyArNDU0LDE3IEBAIHN0
YXRpYyBPcHRpb25hbDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICBVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiByaWdodFZhbHVlID0gV1RGTW92ZShtb2RpZmljYXRpb25SZXN1bHQtPnJl
c3VsdCk7CiAgICAgYXV0byBleHByZXNzaW9uVHlwZSA9IHJpZ2h0VmFsdWUtPnJlc29sdmVkVHlw
ZSgpLmNsb25lKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpbi5zaXplKCkgLSAx
OyArK2kpIHsKLSAgICAgICAgQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uID0gY2hh
aW5baV07CisgICAgICAgIEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24gPSBjaGFpbltpXTsKICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uID0gaW50ZXJtZWRpYXRlVmFyaWFibGVzW2ldOworICAg
ICAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPj4mIGluZGV4
VmFyaWFibGUgPSBpbmRleFZhcmlhYmxlc1tpXTsKIAotICAgICAgICBhdXRvIGFzc2lnbm1lbnRF
eHByZXNzaW9uID0gc2V0dGVyQ2FsbChkb3RFeHByZXNzaW9uLCBXVEZNb3ZlKHJpZ2h0VmFsdWUp
LCBbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiB7CisgICAgICAgIGF1dG8gYXNz
aWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwg
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnRocmVhZEFuZGVyRnVuY3Rpb24oKSwgV1RGTW92ZShy
aWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gewogICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwog
ICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCktPmNsb25lKCkpOwogICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgx
NjkgSXMgdGhpcyByaWdodD8KICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsK
LSAgICAgICAgfSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gewotICAgICAg
ICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7Ci0gICAgICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwot
ICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUodmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCktPmNsb25lKCkpOwotICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9
KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgx
NjkgSXMgdGhpcyByaWdodD8KLQotICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Np
b24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIFdURk1vdmUodmFyaWFibGVSZWZlcmVuY2UpKTsK
LSAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAg
ICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQsIHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpLT5jbG9uZSgpKSk7
Ci0gICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBtYWtlUG9pbnRlckV4cHJlc3Np
b247Ci0gICAgICAgIH0pOworICAgICAgICB9LCBpbmRleFZhcmlhYmxlID8gJippbmRleFZhcmlh
YmxlIDogbnVsbHB0cik7CiAKICAgICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0zNDQsMjQgKzQ3OSwxOSBAQCBzdGF0
aWMgT3B0aW9uYWw8TW9kaWZ5UmVzdWx0PiBtb2RpZnkoQVNUCiAKICAgICAvLyBTdGVwIDU6CiAg
ICAgewotICAgICAgICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gc2V0dGVyQ2FsbChjaGFp
bltjaGFpbi5zaXplKCkgLSAxXSwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4geworICAgICAgICBBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uID0gY2hhaW5bY2hhaW4uc2l6ZSgpIC0gMV07
CisgICAgICAgIGF1dG8gYXNzaWdubWVudEV4cHJlc3Npb24gPSBzZXR0ZXJDYWxsKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiwgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24o
KSwgV1RGTW92ZShyaWdodFZhbHVlKSwgWyZdKCkgLT4gVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4gewogICAgICAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVyZW5jZSA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcChwb2lu
dGVyVmFyaWFibGUpKTsKICAgICAgICAgICAgIEFTU0VSVChwb2ludGVyVmFyaWFibGUtPnR5cGUo
KSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZShwb2ludGVyVmFyaWFi
bGUtPnR5cGUoKS0+Y2xvbmUoKSk7CiAgICAgICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
IH0pOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
ODE2OSBJcyB0aGlzIHJpZ2h0PwogCi0gICAgICAgICAgICBhdXRvIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KExleGVyOjpU
b2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkp
OworICAgICAgICAgICAgYXV0byBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVm
PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLm9yaWdpbigpKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkpOwogICAgICAg
ICAgICAgQVNTRVJUKHBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKTsKICAgICAgICAgICAgIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqcG9p
bnRlclZhcmlhYmxlLT50eXBlKCkpLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgICAgICAg
ICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVl
IHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKnBvaW50ZXJWYXJpYWJsZS0+dHlwZSgpKS5h
ZGRyZXNzU3BhY2UoKSB9KTsKICAgICAgICAgICAgIHJldHVybiBkZXJlZmVyZW5jZUV4cHJlc3Np
b247Ci0gICAgICAgIH0sIFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHsKLSAg
ICAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U+KEFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAocG9pbnRlclZhcmlh
YmxlKSk7Ci0gICAgICAgICAgICBBU1NFUlQocG9pbnRlclZhcmlhYmxlLT50eXBlKCkpOwotICAg
ICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocG9pbnRlclZhcmlhYmxlLT50eXBl
KCktPmNsb25lKCkpOwotICAgICAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMg
dGhpcyByaWdodD8KLSAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZVJlZmVyZW5jZTsKLSAgICAg
ICAgfSk7CisgICAgICAgIH0sIGluZGV4VmFyaWFibGVzW2luZGV4VmFyaWFibGVzLnNpemUoKSAt
IDFdID8gJiooaW5kZXhWYXJpYWJsZXNbaW5kZXhWYXJpYWJsZXMuc2l6ZSgpIC0gMV0pIDogbnVs
bHB0cik7CiAKICAgICAgICAgaWYgKCFhc3NpZ25tZW50RXhwcmVzc2lvbikKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0zNzMsNiArNTAzLDEwIEBAIHN0YXRpYyBPcHRpb25h
bDxNb2RpZnlSZXN1bHQ+IG1vZGlmeShBU1QKICAgICB2YXJpYWJsZURlY2xhcmF0aW9ucy5hcHBl
bmQoV1RGTW92ZShwb2ludGVyVmFyaWFibGUpKTsKICAgICBmb3IgKGF1dG8mIGludGVybWVkaWF0
ZVZhcmlhYmxlIDogaW50ZXJtZWRpYXRlVmFyaWFibGVzKQogICAgICAgICB2YXJpYWJsZURlY2xh
cmF0aW9ucy5hcHBlbmQoV1RGTW92ZShpbnRlcm1lZGlhdGVWYXJpYWJsZSkpOworICAgIGZvciAo
YXV0byYgaW5kZXhWYXJpYWJsZSA6IGluZGV4VmFyaWFibGVzKSB7CisgICAgICAgIGlmIChpbmRl
eFZhcmlhYmxlKQorICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1v
dmUoKmluZGV4VmFyaWFibGUpKTsKKyAgICB9CiAKICAgICByZXR1cm4ge3sgaW5uZXJMZWZ0RXhw
cmVzc2lvbiwgV1RGTW92ZShleHByZXNzaW9ucyksIFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bnMpIH19OwogfQpAQCAtMzg1LDE2ICs1MTksMTMgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2
aXNpdChBU1Q6OkFzc2lnbgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVCghYXNz
aWdubWVudEV4cHJlc3Npb24ubGVmdCgpLnR5cGVBbm5vdGF0aW9uKCkuaXNSaWdodFZhbHVlKCkp
OwotICAgIGlmICghaXM8QVNUOjpEb3RFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVzc2lvbi5s
ZWZ0KCkpKSB7Ci0gICAgICAgIHNldEVycm9yKCk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYzIE1ha2UgdGhpcyB3b3JrIHdpdGggaW5kZXgg
ZXhwcmVzc2lvbnMuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKGlzPEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpKTsK
IAogICAgIGF1dG8gdHlwZSA9IGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkucmVzb2x2ZWRU
eXBlKCkuY2xvbmUoKTsKIAogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVz
c2lvbi5yaWdodCgpKTsKIAotICAgIGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9kaWZ5KGRvd25jYXN0
PEFTVDo6RG90RXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKSwgWyZdKE9w
dGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKSAtPiBPcHRpb25hbDxNb2RpZmlj
YXRpb25SZXN1bHQ+IHsKKyAgICBhdXRvIG1vZGlmeVJlc3VsdCA9IG1vZGlmeShkb3duY2FzdDxB
U1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgp
KSwgWyZdKE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmKSAtPiBPcHRpb25h
bDxNb2RpZmljYXRpb25SZXN1bHQ+IHsKICAgICAgICAgcmV0dXJuIHt7IFZlY3RvcjxVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPj4oKSwgYXNzaWdubWVudEV4cHJlc3Npb24udGFrZVJpZ2h0KCkg
fX07CiAgICAgfSk7CiAKQEAgLTQyNCw2ICs1NTUsOCBAQCB2b2lkIFByb3BlcnR5UmVzb2x2ZXI6
OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgICAgIC8vIG5ld1ZhbHVlID0gLi4uOwogICAgICAgICAv
LyAqcCA9IG5ld1ZhbHVlOwogCisgICAgICAgIHNpbXBsaWZ5TGVmdFZhbHVlKHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOworCiAgICAgICAgIGF1dG8gYmFzZVR5cGUgPSBy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpLmNsb25l
KCk7CiAgICAgICAgIGF1dG8gcG9pbnRlclR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgp
Lm9yaWdpbigpKSwgKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkudHlwZUFu
bm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCksIGJhc2VUeXBlLT5jbG9uZSgpKTsKIApAQCAt
NTIwLDExICs2NTMsMTEgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJlYWRN
bwogICAgIH0KIAogICAgIEFTU0VSVCghcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKS50eXBlQW5ub3RhdGlvbigpLmlzUmlnaHRWYWx1ZSgpKTsKLSAgICBpZiAoIWlzPEFTVDo6
RG90RXhwcmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSkpIHsK
LSAgICAgICAgc2V0RXJyb3IoKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTgxNjMgTWFrZSB0aGlzIHdvcmsgd2l0aCBpbmRleCBleHByZXNzaW9u
cy4KKyAgICBpZiAoIWlzPEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKSkgeworICAgICAgICBzZXRFcnJvcigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9kaWZ5KGRvd25j
YXN0PEFTVDo6RG90RXhwcmVzc2lvbj4ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sZWZ0VmFs
dWUoKSksIFsmXShPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4mJiBsYXN0R2V0
dGVyQ2FsbEV4cHJlc3Npb24pIC0+IE9wdGlvbmFsPE1vZGlmaWNhdGlvblJlc3VsdD4geworICAg
IGF1dG8gbW9kaWZ5UmVzdWx0ID0gbW9kaWZ5KGRvd25jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uPihyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpKSwgWyZdKE9w
dGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiYmIGxhc3RHZXR0ZXJDYWxsRXhwcmVz
c2lvbikgLT4gT3B0aW9uYWw8TW9kaWZpY2F0aW9uUmVzdWx0PiB7CiAgICAgICAgIFZlY3RvcjxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CiAgICAgICAgIGlmICghbGFz
dEdldHRlckNhbGxFeHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
QEAgLTU1NCw3ICs2ODcsMTEgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdChBU1Q6OlJl
YWRNbwogICAgICAgICAgICAgZXhwcmVzc2lvbnMuYXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4
cHJlc3Npb24pKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKGV4cHJl
c3Npb25zKSwgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVyZW5jZSgp
IH19OworICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlID0gcmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5uZXdWYXJpYWJsZVJlZmVyZW5jZSgpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS0+c2V0VHlwZShyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVk
VHlwZSgpLmNsb25lKCkpOworICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS0+c2V0VHlwZUFubm90
YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOyAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2OSBJcyB0
aGlzIHJpZ2h0PworCisgICAgICAgIHJldHVybiB7eyBXVEZNb3ZlKGV4cHJlc3Npb25zKSwgIFdU
Rk1vdmUodmFyaWFibGVSZWZlcmVuY2UpIH19OwogICAgIH0pOwogCiAgICAgaWYgKCFtb2RpZnlS
ZXN1bHQpIHsKQEAgLTU4MSwxMjggKzcxOCwxMDcgQEAgdm9pZCBQcm9wZXJ0eVJlc29sdmVyOjp2
aXNpdChBU1Q6OlJlYWRNbwogICAgIG1fdmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1v
dmUobmV3VmFyaWFibGVEZWNsYXJhdGlvbikpOwogfQogCi1ib29sIFByb3BlcnR5UmVzb2x2ZXI6
OnNpbXBsaWZ5UmlnaHRWYWx1ZShBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCitz
dGF0aWMgT3B0aW9uYWw8QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQ+IGFuZGVyQ2FsbEFyZ3VtZW50
KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24p
CiB7Ci0gICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7Ci0K
LSAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG90RXhwcmVzc2lvbi5iYXNlKCkpOwotCi0gICAgaWYg
KGF1dG8qIGFuZGVyRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSkgewot
ICAgICAgICBhdXRvJiBiYXNlID0gZG90RXhwcmVzc2lvbi5iYXNlKCk7Ci0gICAgICAgIGlmIChh
dXRvIGxlZnRBZGRyZXNzU3BhY2UgPSBiYXNlLnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NT
cGFjZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4p
LCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOwotICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKG9yaWdpbiksICpsZWZ0QWRkcmVzc1NwYWNlLCBiYXNlLnJlc29sdmVkVHlwZSgpLmNsb25l
KCkpKTsKLSAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOwotCi0gICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+IGFyZ3VtZW50czsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
V1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgIGF1dG8gY2FsbEV4
cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tl
bihvcmlnaW4pLCBTdHJpbmcoYW5kZXJGdW5jdGlvbi0+bmFtZSgpKSwgV1RGTW92ZShhcmd1bWVu
dHMpKTsKLSAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlKGFuZGVyRnVuY3Rpb24t
PnR5cGUoKS5jbG9uZSgpKTsKLSAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7Ci0gICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi0+
c2V0RnVuY3Rpb24oKmFuZGVyRnVuY3Rpb24pOwotCi0gICAgICAgICAgICBhdXRvKiBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24gPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihkb3RFeHByZXNzaW9uLCBXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoY2FsbEV4cHJlc3Np
b24pKTsKLSAgICAgICAgICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0VHlwZShkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCku
Y2xvbmUoKSk7Ci0gICAgICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24tPnNldFR5cGVBbm5v
dGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJG
dW5jdGlvbi0+dHlwZSgpKS5hZGRyZXNzU3BhY2UoKSB9KTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBhbiBhbmRlciwgYnV0IG5vIGxl
ZnQgdmFsdWUgdG8gY2FsbCBpdCBvbi4gTGV0J3Mgc2F2ZSB0aGUgdmFsdWUgaW50byBhIHRlbXBv
cmFyeSB2YXJpYWJsZSB0byBjcmVhdGUgYSBsZWZ0IHZhbHVlLgotICAgICAgICAvLyBUaGlzIGlz
IGVmZmVjdGl2ZWx5IGlubGluaW5nIHRoZSBmdW5jdGlvbnMgdGhlIHNwZWMgc2F5cyBhcmUgZ2Vu
ZXJhdGVkLgotICAgICAgICBpZiAoIWRvdEV4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6
VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKLQotICAgICAgICBh
dXRvIHZhcmlhYmxlUmVmZXJlbmNlMSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMS0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgp
LmNsb25lKCkpOwotICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTEtPnNldFR5cGVBbm5vdGF0aW9u
KEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKLQotICAgICAg
ICBhdXRvIGFzc2lnbm1lbnRFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1l
bnRFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgV1RGTW92ZSh2YXJpYWJsZVJlZmVy
ZW5jZTEpLCBkb3RFeHByZXNzaW9uLnRha2VCYXNlKCkpOwotICAgICAgICBhc3NpZ25tZW50RXhw
cmVzc2lvbi0+c2V0VHlwZShiYXNlLnJlc29sdmVkVHlwZSgpLmNsb25lKCkpOwotICAgICAgICBh
c3NpZ25tZW50RXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkp
OworICAgIHJldHVybiBhbmRlckNhbGxBcmd1bWVudChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
YmFzZVJlZmVyZW5jZSgpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigp
LCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpKTsKK30KIAot
ICAgICAgICBhdXRvIHZhcmlhYmxlUmVmZXJlbmNlMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJp
YWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7Ci0gICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlMi0+c2V0VHlwZShiYXNlLnJlc29s
dmVkVHlwZSgpLmNsb25lKCkpOwotICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZTItPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsK
K3ZvaWQgUHJvcGVydHlSZXNvbHZlcjo6c2ltcGxpZnlSaWdodFZhbHVlKEFTVDo6UHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAgTGV4ZXI6
OlRva2VuIG9yaWdpbiA9IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKTsKIAotICAg
ICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBXVEZNb3ZlKHZhcmlhYmxl
UmVmZXJlbmNlMikpOwotICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGUobWFr
ZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCwgYmFzZS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKSk7Ci0gICAg
ICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
YmFzZSgpKTsKIAorICAgIGlmIChhdXRvIGFyZ3VtZW50ID0gYW5kZXJDYWxsQXJndW1lbnQocHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKSkgeworICAgICAgICBhdXRvKiBhbmRlckZ1bmN0aW9uID0g
YXJndW1lbnQtPndoaWNoQW5kZXIgPT0gV2hpY2hBbmRlcjo6VGhyZWFkQW5kZXIgPyBwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24udGhyZWFkQW5kZXJGdW5jdGlvbigpIDogcHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJUKGFuZGVyRnVuY3Rpb24p
OworICAgICAgICBhdXRvIG9yaWdpbiA9IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4o
KTsKICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBhcmd1bWVudHM7
Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtlUG9pbnRlckV4cHJlc3Npb24p
KTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKGFyZ3VtZW50LT5leHByZXNzaW9u
KSk7CisgICAgICAgIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uKSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZG93bmNhc3Q8QVNUOjpJ
bmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikudGFrZUluZGV4KCkpOwog
ICAgICAgICBhdXRvIGNhbGxFeHByZXNzaW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgU3RyaW5nKGFuZGVyRnVuY3Rpb24tPm5hbWUo
KSksIFdURk1vdmUoYXJndW1lbnRzKSk7CiAgICAgICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBl
KGFuZGVyRnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKICAgICAgICAgY2FsbEV4cHJlc3Npb24t
PnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICAgICAgY2FsbEV4cHJl
c3Npb24tPnNldEZ1bmN0aW9uKCphbmRlckZ1bmN0aW9uKTsKIAotICAgICAgICBhdXRvIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Np
b24+KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOworICAgICAgICBh
dXRvKiBkZXJlZmVyZW5jZUV4cHJlc3Npb24gPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIFdURk1vdmUob3JpZ2lu
KSwgV1RGTW92ZShjYWxsRXhwcmVzc2lvbikpOwogICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlw
ZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwotICAgICAgICBkZXJlZmVyZW5jZUV4cHJlc3Np
b24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6
OlRocmVhZCB9KTsKKyAgICAgICAgZGVyZWZlcmVuY2VFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3Rh
dGlvbihBU1Q6OkxlZnRWYWx1ZSB7IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVu
Y3Rpb24tPnR5cGUoKSkuYWRkcmVzc1NwYWNlKCkgfSk7CiAKLSAgICAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBleHByZXNzaW9uczsKLSAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUoYXNzaWdubWVudEV4cHJlc3Npb24pKTsKLSAgICAgICAgZXhwcmVzc2lv
bnMuYXBwZW5kKFdURk1vdmUoZGVyZWZlcmVuY2VFeHByZXNzaW9uKSk7Ci0gICAgICAgIGF1dG8q
IGNvbW1hRXhwcmVzc2lvbiA9IEFTVDo6cmVwbGFjZVdpdGg8QVNUOjpDb21tYUV4cHJlc3Npb24+
KGRvdEV4cHJlc3Npb24sIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9ucykpOwot
ICAgICAgICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlw
ZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwotICAgICAg
ICBjb21tYUV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNU
OjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsKKyAgICAgICAgaWYgKGF1dG8mIHZhcmlhYmxlRGVj
bGFyYXRpb24gPSBhcmd1bWVudC0+dmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICAgICAgICAgIG1f
dmFyaWFibGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKIAotICAgICAgICBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpKTsKLSAg
ICBhdXRvJiBnZXR0ZXJGdW5jdGlvbiA9ICpkb3RFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uKCk7
CisgICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5nZXR0ZXJGdW5jdGlvbigpKTsK
KyAgICBhdXRvJiBnZXR0ZXJGdW5jdGlvbiA9ICpwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0
dGVyRnVuY3Rpb24oKTsKICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGFy
Z3VtZW50czsKLSAgICBhcmd1bWVudHMuYXBwZW5kKGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7
Ci0gICAgYXV0byogY2FsbEV4cHJlc3Npb24gPSBBU1Q6OnJlcGxhY2VXaXRoPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KGRvdEV4cHJlc3Npb24sIFdURk1vdmUob3JpZ2luKSwgU3RyaW5nKGdldHRlckZ1
bmN0aW9uLm5hbWUoKSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgYXJndW1lbnRzLmFwcGVu
ZChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24udGFrZUJhc2UoKSk7CisgICAgaWYgKGlzPEFTVDo6
SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pKQorICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKGRvd25jYXN0PEFTVDo6SW5kZXhFeHByZXNzaW9uPihwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24pLnRha2VJbmRleCgpKTsKKyAgICBhdXRvKiBjYWxsRXhwcmVzc2lvbiA9IEFT
VDo6cmVwbGFjZVdpdGg8QVNUOjpDYWxsRXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLCBXVEZNb3ZlKG9yaWdpbiksIFN0cmluZyhnZXR0ZXJGdW5jdGlvbi5uYW1lKCkpLCBXVEZN
b3ZlKGFyZ3VtZW50cykpOwogICAgIGNhbGxFeHByZXNzaW9uLT5zZXRGdW5jdGlvbihnZXR0ZXJG
dW5jdGlvbik7CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5cGUoZ2V0dGVyRnVuY3Rpb24udHlw
ZSgpLmNsb25lKCkpOwogICAgIGNhbGxFeHByZXNzaW9uLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OlJpZ2h0VmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKIGNsYXNzIExlZnRWYWx1ZVNp
bXBsaWZpZXIgOiBwdWJsaWMgVmlzaXRvciB7Ci1wdWJsaWM6Citwcml2YXRlOgogICAgIHZvaWQg
dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVy
ZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKIAotcHJpdmF0ZToKKyAgICB2b2lkIGZpbmlzaFZp
c2l0aW5nKEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7CiB9OwogCi12b2lkIExlZnRW
YWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikK
K3ZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKIHsKLSAgICBWaXNpdG9y
Ojp2aXNpdChkb3RFeHByZXNzaW9uKTsKLSAgICBBU1NFUlQoZG90RXhwcmVzc2lvbi5iYXNlKCku
dHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpOwotICAgIEFTU0VSVChkb3RFeHBy
ZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSk7CisgICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5iYXNlKCkudHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpOworICAgIEFT
U0VSVChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbigpKTsKKworICAgIFZp
c2l0b3I6OnZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOworCisgICAgTGV4
ZXI6OlRva2VuIG9yaWdpbiA9IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAg
ICBhdXRvKiBhbmRlckZ1bmN0aW9uID0gcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVu
Y3Rpb24oKTsKIAotICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdp
bigpOwotICAgIGF1dG8qIGFuZGVyRnVuY3Rpb24gPSBkb3RFeHByZXNzaW9uLmFuZGVyRnVuY3Rp
b24oKTsKLSAgICBhdXRvJiBiYXNlID0gZG90RXhwcmVzc2lvbi5iYXNlKCk7Ci0gICAgYXV0byBs
ZWZ0QWRkcmVzc1NwYWNlID0gKmRvdEV4cHJlc3Npb24uYmFzZSgpLnR5cGVBbm5vdGF0aW9uKCku
bGVmdEFkZHJlc3NTcGFjZSgpOwotICAgIGF1dG8gbWFrZVBvaW50ZXJFeHByZXNzaW9uID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKG9yaWdp
biksIGRvdEV4cHJlc3Npb24udGFrZUJhc2UoKSk7Ci0gICAgbWFrZVBvaW50ZXJFeHByZXNzaW9u
LT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9y
aWdpbiksIGxlZnRBZGRyZXNzU3BhY2UsIGJhc2UucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSkpOwot
ICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZh
bHVlKCkpOworICAgIGF1dG8gYXJndW1lbnQgPSBhbmRlckNhbGxBcmd1bWVudChwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24pOworICAgIEFTU0VSVChhcmd1bWVudCk7CisgICAgQVNTRVJUKCFhcmd1
bWVudC0+dmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgQVNTRVJUKGFyZ3VtZW50LT53aGljaEFu
ZGVyID09IFdoaWNoQW5kZXI6OkFuZGVyKTsKIAogICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPj4gYXJndW1lbnRzOwotICAgIGFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShtYWtl
UG9pbnRlckV4cHJlc3Npb24pKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoYXJndW1l
bnQtPmV4cHJlc3Npb24pKTsKKyAgICBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbikpCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZG93bmNhc3Q8
QVNUOjpJbmRleEV4cHJlc3Npb24+KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikudGFrZUluZGV4
KCkpOwogICAgIGF1dG8gY2FsbEV4cHJlc3Npb24gPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbihvcmlnaW4pLCBTdHJpbmcoYW5kZXJGdW5jdGlvbi0+bmFt
ZSgpKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0VHlwZShh
bmRlckZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7CiAgICAgY2FsbEV4cHJlc3Npb24tPnNldFR5
cGVBbm5vdGF0aW9uKEFTVDo6UmlnaHRWYWx1ZSgpKTsKICAgICBjYWxsRXhwcmVzc2lvbi0+c2V0
RnVuY3Rpb24oKmFuZGVyRnVuY3Rpb24pOwogCi0gICAgYXV0byogZGVyZWZlcmVuY2VFeHByZXNz
aW9uID0gQVNUOjpyZXBsYWNlV2l0aDxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oZG90RXhw
cmVzc2lvbiwgV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGNhbGxFeHByZXNzaW9uKSk7CisgICAg
YXV0byogZGVyZWZlcmVuY2VFeHByZXNzaW9uID0gQVNUOjpyZXBsYWNlV2l0aDxBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbj4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoY2FsbEV4cHJlc3Npb24pKTsKICAgICBkZXJlZmVyZW5jZUV4cHJlc3Npb24t
PnNldFR5cGUoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgp
KS5lbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgIGRlcmVmZXJlbmNlRXhwcmVzc2lvbi0+c2V0
VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0VmFsdWUgeyBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
PihhbmRlckZ1bmN0aW9uLT50eXBlKCkpLmFkZHJlc3NTcGFjZSgpIH0pOwogfQogCit2b2lkIExl
ZnRWYWx1ZVNpbXBsaWZpZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lv
bikKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChkb3RFeHByZXNzaW9uKTsKKyAgICBmaW5pc2hWaXNp
dGluZyhkb3RFeHByZXNzaW9uKTsKK30KKwordm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNp
dChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQoreworICAgIFByb3BlcnR5
UmVzb2x2ZXIoKS5WaXNpdG9yOjp2aXNpdChpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9u
KCkpOworICAgIGZpbmlzaFZpc2l0aW5nKGluZGV4RXhwcmVzc2lvbik7Cit9CisKIHZvaWQgTGVm
dFZhbHVlU2ltcGxpZmllcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbikKIHsKICAgICAvLyBEZXJlZmVyZW5jZSBleHByZXNzaW9ucyBhcmUg
dGhlIG9ubHkgZXhwcmVzc2lvbnMgd2hlcmUgdGhlIGNoaWxkcmVuIG1pZ2h0IGJlIG1vcmUtcmln
aHQgdGhhbiB3ZSBhcmUuCiAgICAgLy8gRm9yIGV4YW1wbGUsIGEgZGVyZWZlcmVuY2UgZXhwcmVz
c2lvbiBtYXkgYmUgYSBsZWZ0IHZhbHVlIGJ1dCBpdHMgY2hpbGQgbWF5IGJlIGEgY2FsbCBleHBy
ZXNzaW9uIHdoaWNoIGlzIGEgcmlnaHQgdmFsdWUuCiAgICAgLy8gTGVmdFZhbHVlU2ltcGxpZmll
ciBkb2Vzbid0IGhhbmRsZSByaWdodCB2YWx1ZXMsIHNvIHdlIGluc3RlYWQgbmVlZCB0byB1c2Ug
UHJvcGVydHlSZXNvbHZlci4KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5ODE3MCBXaGF0IGFib3V0IGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRz
PwogICAgIFByb3BlcnR5UmVzb2x2ZXIoKS5WaXNpdG9yOjp2aXNpdChkZXJlZmVyZW5jZUV4cHJl
c3Npb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFNlbWFudGljTWF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTZW1hbnRpY01hdGNoZXIuY3BwCShyZXZpc2lvbiAyNDYz
MjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFNlbWFudGlj
TWF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE5ICs1NSwxNyBAQCBzdGF0aWMgQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24qIGZpbmRFbnRyCiAgICAgcmV0dXJuICYqaXRlcmF0b3I7CiB9
OwogCi1zdGF0aWMgYm9vbCBtYXRjaE1vZGUoQmluZGluZ1R5cGUgYmluZGluZ1R5cGUsIEFTVDo6
UmVzb3VyY2VTZW1hbnRpYzo6TW9kZSBtb2RlKQorc3RhdGljIGJvb2wgbWF0Y2hNb2RlKEJpbmRp
bmc6OkJpbmRpbmdEZXRhaWxzIGJpbmRpbmdUeXBlLCBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1v
ZGUgbW9kZSkKIHsKLSAgICBzd2l0Y2ggKGJpbmRpbmdUeXBlKSB7Ci0gICAgY2FzZSBCaW5kaW5n
VHlwZTo6VW5pZm9ybUJ1ZmZlcjoKKyAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlmb3JtQnVmZmVyQmluZGluZykgLT4gYm9vbCB7CiAgICAgICAgIHJldHVybiBt
b2RlID09IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6QnVmZmVyOwotICAgIGNhc2UgQmlu
ZGluZ1R5cGU6OlNhbXBsZXI6CisgICAgfSwgWyZdKFNhbXBsZXJCaW5kaW5nKSAtPiBib29sIHsK
ICAgICAgICAgcmV0dXJuIG1vZGUgPT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpTYW1w
bGVyOwotICAgIGNhc2UgQmluZGluZ1R5cGU6OlRleHR1cmU6CisgICAgfSwgWyZdKFRleHR1cmVC
aW5kaW5nKSAtPiBib29sIHsKICAgICAgICAgcmV0dXJuIG1vZGUgPT0gQVNUOjpSZXNvdXJjZVNl
bWFudGljOjpNb2RlOjpUZXh0dXJlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChiaW5k
aW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1ZmZlcik7CisgICAgfSwgWyZdKFN0b3Jh
Z2VCdWZmZXJCaW5kaW5nKSAtPiBib29sIHsKICAgICAgICAgcmV0dXJuIG1vZGUgPT0gQVNUOjpS
ZXNvdXJjZVNlbWFudGljOjpNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OwotICAgIH0KKyAgICB9
KSwgYmluZGluZ1R5cGUpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8SGFzaE1hcDxCaW5kaW5nKiwg
c2l6ZV90Pj4gbWF0Y2hSZXNvdXJjZXMoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgZW50cnlQb2lu
dEl0ZW1zLCBMYXlvdXQmIGxheW91dCwgU2hhZGVyU3RhZ2Ugc2hhZGVyU3RhZ2UpCkBAIC04Nyw5
ICs4NSw5IEBAIHN0YXRpYyBPcHRpb25hbDxIYXNoTWFwPEJpbmRpbmcqLCBzaXplX3QKICAgICAg
ICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpSZXNvdXJjZVNlbWFu
dGljPihzZW1hbnRpYykpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGF1dG8mIHJlc291cmNlU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OlJlc291cmNlU2Vt
YW50aWM+KHNlbWFudGljKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoTW9kZShiaW5kaW5n
LmJpbmRpbmdUeXBlLCByZXNvdXJjZVNlbWFudGljLm1vZGUoKSkpCisgICAgICAgICAgICAgICAg
aWYgKCFtYXRjaE1vZGUoYmluZGluZy5iaW5kaW5nLCByZXNvdXJjZVNlbWFudGljLm1vZGUoKSkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChiaW5k
aW5nLm5hbWUgIT0gcmVzb3VyY2VTZW1hbnRpYy5pbmRleCgpKQorICAgICAgICAgICAgICAgIGlm
IChiaW5kaW5nLmV4dGVybmFsTmFtZSAhPSByZXNvdXJjZVNlbWFudGljLmluZGV4KCkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChzcGFjZSAhPSBy
ZXNvdXJjZVNlbWFudGljLnNwYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExp
YnJhcnkudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0zNzUsMTQgKzM3NSw2MiBAQCBuYXRpdmUgdHlwZWRlZiBUZXh0dXJl
RGVwdGgyREFycmF5PGZsb2F0CiBuYXRpdmUgdHlwZWRlZiBSV1RleHR1cmVEZXB0aDJEQXJyYXk8
ZmxvYXQ+OwogbmF0aXZlIHR5cGVkZWYgVGV4dHVyZURlcHRoQ3ViZTxmbG9hdD47CiAKLW5hdGl2
ZSBmbG9hdCBvcGVyYXRvci54KGZsb2F0NCk7Ci1uYXRpdmUgZmxvYXQgb3BlcmF0b3IueShmbG9h
dDQpOwotbmF0aXZlIGZsb2F0IG9wZXJhdG9yLnooZmxvYXQ0KTsKLW5hdGl2ZSBmbG9hdCBvcGVy
YXRvci53KGZsb2F0NCk7Ci1uYXRpdmUgZmxvYXQ0IG9wZXJhdG9yLng9KGZsb2F0NCwgZmxvYXQp
OwotbmF0aXZlIGZsb2F0NCBvcGVyYXRvci55PShmbG9hdDQsIGZsb2F0KTsKLW5hdGl2ZSBmbG9h
dDQgb3BlcmF0b3Iuej0oZmxvYXQ0LCBmbG9hdCk7Ci1uYXRpdmUgZmxvYXQ0IG9wZXJhdG9yLnc9
KGZsb2F0NCwgZmxvYXQpOworbmF0aXZlIG9wZXJhdG9yIHVjaGFyKHVzaG9ydCk7CituYXRpdmUg
b3BlcmF0b3IgdWNoYXIodWludCk7CituYXRpdmUgb3BlcmF0b3IgdWNoYXIoY2hhcik7CituYXRp
dmUgb3BlcmF0b3IgdWNoYXIoc2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIHVjaGFyKGludCk7Citu
YXRpdmUgb3BlcmF0b3IgdWNoYXIoaGFsZik7CituYXRpdmUgb3BlcmF0b3IgdWNoYXIoZmxvYXQp
OworbmF0aXZlIG9wZXJhdG9yIHVzaG9ydCh1Y2hhcik7CituYXRpdmUgb3BlcmF0b3IgdXNob3J0
KHVpbnQpOworbmF0aXZlIG9wZXJhdG9yIHVzaG9ydChjaGFyKTsKK25hdGl2ZSBvcGVyYXRvciB1
c2hvcnQoc2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIHVzaG9ydChpbnQpOworbmF0aXZlIG9wZXJh
dG9yIHVzaG9ydChoYWxmKTsKK25hdGl2ZSBvcGVyYXRvciB1c2hvcnQoZmxvYXQpOworbmF0aXZl
IG9wZXJhdG9yIHVpbnQodWNoYXIpOworbmF0aXZlIG9wZXJhdG9yIHVpbnQodXNob3J0KTsKK25h
dGl2ZSBvcGVyYXRvciB1aW50KGNoYXIpOworbmF0aXZlIG9wZXJhdG9yIHVpbnQoc2hvcnQpOwor
bmF0aXZlIG9wZXJhdG9yIHVpbnQoaW50KTsKK25hdGl2ZSBvcGVyYXRvciB1aW50KGhhbGYpOwor
bmF0aXZlIG9wZXJhdG9yIHVpbnQoZmxvYXQpOworbmF0aXZlIG9wZXJhdG9yIGNoYXIodWNoYXIp
OworbmF0aXZlIG9wZXJhdG9yIGNoYXIodXNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciBjaGFyKHVp
bnQpOworbmF0aXZlIG9wZXJhdG9yIGNoYXIoc2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIGNoYXIo
aW50KTsKK25hdGl2ZSBvcGVyYXRvciBjaGFyKGhhbGYpOworbmF0aXZlIG9wZXJhdG9yIGNoYXIo
ZmxvYXQpOworbmF0aXZlIG9wZXJhdG9yIHNob3J0KHVjaGFyKTsKK25hdGl2ZSBvcGVyYXRvciBz
aG9ydCh1c2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIHNob3J0KHVpbnQpOworbmF0aXZlIG9wZXJh
dG9yIHNob3J0KGNoYXIpOworbmF0aXZlIG9wZXJhdG9yIHNob3J0KGludCk7CituYXRpdmUgb3Bl
cmF0b3Igc2hvcnQoaGFsZik7CituYXRpdmUgb3BlcmF0b3Igc2hvcnQoZmxvYXQpOworbmF0aXZl
IG9wZXJhdG9yIGludCh1Y2hhcik7CituYXRpdmUgb3BlcmF0b3IgaW50KHVzaG9ydCk7CituYXRp
dmUgb3BlcmF0b3IgaW50KHVpbnQpOworbmF0aXZlIG9wZXJhdG9yIGludChjaGFyKTsKK25hdGl2
ZSBvcGVyYXRvciBpbnQoc2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIGludChoYWxmKTsKK25hdGl2
ZSBvcGVyYXRvciBpbnQoZmxvYXQpOworbmF0aXZlIG9wZXJhdG9yIGhhbGYodWNoYXIpOworbmF0
aXZlIG9wZXJhdG9yIGhhbGYodXNob3J0KTsKK25hdGl2ZSBvcGVyYXRvciBoYWxmKHVpbnQpOwor
bmF0aXZlIG9wZXJhdG9yIGhhbGYoY2hhcik7CituYXRpdmUgb3BlcmF0b3IgaGFsZihzaG9ydCk7
CituYXRpdmUgb3BlcmF0b3IgaGFsZihpbnQpOworbmF0aXZlIG9wZXJhdG9yIGhhbGYoZmxvYXQp
OworbmF0aXZlIG9wZXJhdG9yIGZsb2F0KHVjaGFyKTsKK25hdGl2ZSBvcGVyYXRvciBmbG9hdCh1
c2hvcnQpOworbmF0aXZlIG9wZXJhdG9yIGZsb2F0KHVpbnQpOworbmF0aXZlIG9wZXJhdG9yIGZs
b2F0KGNoYXIpOworbmF0aXZlIG9wZXJhdG9yIGZsb2F0KHNob3J0KTsKK25hdGl2ZSBvcGVyYXRv
ciBmbG9hdChpbnQpOworbmF0aXZlIG9wZXJhdG9yIGZsb2F0KGhhbGYpOwogCiBuYXRpdmUgZmxv
YXQgb3BlcmF0b3IrKGZsb2F0LCBmbG9hdCk7CiBuYXRpdmUgZmxvYXQgb3BlcmF0b3ItKGZsb2F0
LCBmbG9hdCk7CkBAIC0zOTEsNiArNDM5LDE3MSBAQCBuYXRpdmUgdWludCBvcGVyYXRvcisodWlu
dCwgdWludCk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcjwoaW50LCBpbnQpOwogbmF0aXZlIGJvb2wg
b3BlcmF0b3I8KHVpbnQsIHVpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I8KGZsb2F0LCBmbG9h
dCk7CituYXRpdmUgZmxvYXQgb3BlcmF0b3IqKGZsb2F0LCBmbG9hdCk7CituYXRpdmUgYm9vbCBv
cGVyYXRvcj09KGZsb2F0LCBmbG9hdCk7CisKKy8qIG5hdGl2ZSBib29sIG9wZXJhdG9yLngoYm9v
bDIpOworbmF0aXZlIGJvb2wgb3BlcmF0b3IueShib29sMik7CituYXRpdmUgYm9vbCBvcGVyYXRv
ci54KGJvb2wzKTsKK25hdGl2ZSBib29sIG9wZXJhdG9yLnkoYm9vbDMpOworbmF0aXZlIGJvb2wg
b3BlcmF0b3Iueihib29sMyk7CituYXRpdmUgYm9vbCBvcGVyYXRvci54KGJvb2w0KTsKK25hdGl2
ZSBib29sIG9wZXJhdG9yLnkoYm9vbDQpOworbmF0aXZlIGJvb2wgb3BlcmF0b3Iueihib29sNCk7
CituYXRpdmUgYm9vbCBvcGVyYXRvci53KGJvb2w0KTsKK25hdGl2ZSBib29sMiBvcGVyYXRvci54
PShib29sMiwgYm9vbCk7CituYXRpdmUgYm9vbDIgb3BlcmF0b3IueT0oYm9vbDIsIGJvb2wpOwor
bmF0aXZlIGJvb2wzIG9wZXJhdG9yLng9KGJvb2wzLCBib29sKTsKK25hdGl2ZSBib29sMyBvcGVy
YXRvci55PShib29sMywgYm9vbCk7CituYXRpdmUgYm9vbDMgb3BlcmF0b3Iuej0oYm9vbDMsIGJv
b2wpOworbmF0aXZlIGJvb2w0IG9wZXJhdG9yLng9KGJvb2w0LCBib29sKTsKK25hdGl2ZSBib29s
NCBvcGVyYXRvci55PShib29sNCwgYm9vbCk7CituYXRpdmUgYm9vbDQgb3BlcmF0b3Iuej0oYm9v
bDQsIGJvb2wpOworbmF0aXZlIGJvb2w0IG9wZXJhdG9yLnc9KGJvb2w0LCBib29sKTsKK25hdGl2
ZSB1Y2hhciBvcGVyYXRvci54KHVjaGFyMik7CituYXRpdmUgdWNoYXIgb3BlcmF0b3IueSh1Y2hh
cjIpOworbmF0aXZlIHVjaGFyIG9wZXJhdG9yLngodWNoYXIzKTsKK25hdGl2ZSB1Y2hhciBvcGVy
YXRvci55KHVjaGFyMyk7CituYXRpdmUgdWNoYXIgb3BlcmF0b3Iueih1Y2hhcjMpOworbmF0aXZl
IHVjaGFyIG9wZXJhdG9yLngodWNoYXI0KTsKK25hdGl2ZSB1Y2hhciBvcGVyYXRvci55KHVjaGFy
NCk7CituYXRpdmUgdWNoYXIgb3BlcmF0b3Iueih1Y2hhcjQpOworbmF0aXZlIHVjaGFyIG9wZXJh
dG9yLncodWNoYXI0KTsKK25hdGl2ZSB1Y2hhcjIgb3BlcmF0b3IueD0odWNoYXIyLCB1Y2hhcik7
CituYXRpdmUgdWNoYXIyIG9wZXJhdG9yLnk9KHVjaGFyMiwgdWNoYXIpOworbmF0aXZlIHVjaGFy
MyBvcGVyYXRvci54PSh1Y2hhcjMsIHVjaGFyKTsKK25hdGl2ZSB1Y2hhcjMgb3BlcmF0b3IueT0o
dWNoYXIzLCB1Y2hhcik7CituYXRpdmUgdWNoYXIzIG9wZXJhdG9yLno9KHVjaGFyMywgdWNoYXIp
OworbmF0aXZlIHVjaGFyNCBvcGVyYXRvci54PSh1Y2hhcjQsIHVjaGFyKTsKK25hdGl2ZSB1Y2hh
cjQgb3BlcmF0b3IueT0odWNoYXI0LCB1Y2hhcik7CituYXRpdmUgdWNoYXI0IG9wZXJhdG9yLno9
KHVjaGFyNCwgdWNoYXIpOworbmF0aXZlIHVjaGFyNCBvcGVyYXRvci53PSh1Y2hhcjQsIHVjaGFy
KTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3IueCh1c2hvcnQyKTsKK25hdGl2ZSB1c2hvcnQgb3Bl
cmF0b3IueSh1c2hvcnQyKTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3IueCh1c2hvcnQzKTsKK25h
dGl2ZSB1c2hvcnQgb3BlcmF0b3IueSh1c2hvcnQzKTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3Iu
eih1c2hvcnQzKTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3IueCh1c2hvcnQ0KTsKK25hdGl2ZSB1
c2hvcnQgb3BlcmF0b3IueSh1c2hvcnQ0KTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3Iueih1c2hv
cnQ0KTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3Iudyh1c2hvcnQ0KTsKK25hdGl2ZSB1c2hvcnQy
IG9wZXJhdG9yLng9KHVzaG9ydDIsIHVzaG9ydCk7CituYXRpdmUgdXNob3J0MiBvcGVyYXRvci55
PSh1c2hvcnQyLCB1c2hvcnQpOworbmF0aXZlIHVzaG9ydDMgb3BlcmF0b3IueD0odXNob3J0Mywg
dXNob3J0KTsKK25hdGl2ZSB1c2hvcnQzIG9wZXJhdG9yLnk9KHVzaG9ydDMsIHVzaG9ydCk7Citu
YXRpdmUgdXNob3J0MyBvcGVyYXRvci56PSh1c2hvcnQzLCB1c2hvcnQpOworbmF0aXZlIHVzaG9y
dDQgb3BlcmF0b3IueD0odXNob3J0NCwgdXNob3J0KTsKK25hdGl2ZSB1c2hvcnQ0IG9wZXJhdG9y
Lnk9KHVzaG9ydDQsIHVzaG9ydCk7CituYXRpdmUgdXNob3J0NCBvcGVyYXRvci56PSh1c2hvcnQ0
LCB1c2hvcnQpOworbmF0aXZlIHVzaG9ydDQgb3BlcmF0b3Iudz0odXNob3J0NCwgdXNob3J0KTsK
K25hdGl2ZSB1aW50IG9wZXJhdG9yLngodWludDIpOworbmF0aXZlIHVpbnQgb3BlcmF0b3IueSh1
aW50Mik7CituYXRpdmUgdWludCBvcGVyYXRvci54KHVpbnQzKTsKK25hdGl2ZSB1aW50IG9wZXJh
dG9yLnkodWludDMpOworbmF0aXZlIHVpbnQgb3BlcmF0b3Iueih1aW50Myk7CituYXRpdmUgdWlu
dCBvcGVyYXRvci54KHVpbnQ0KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLnkodWludDQpOworbmF0
aXZlIHVpbnQgb3BlcmF0b3Iueih1aW50NCk7CituYXRpdmUgdWludCBvcGVyYXRvci53KHVpbnQ0
KTsKK25hdGl2ZSB1aW50MiBvcGVyYXRvci54PSh1aW50MiwgdWludCk7CituYXRpdmUgdWludDIg
b3BlcmF0b3IueT0odWludDIsIHVpbnQpOworbmF0aXZlIHVpbnQzIG9wZXJhdG9yLng9KHVpbnQz
LCB1aW50KTsKK25hdGl2ZSB1aW50MyBvcGVyYXRvci55PSh1aW50MywgdWludCk7CituYXRpdmUg
dWludDMgb3BlcmF0b3Iuej0odWludDMsIHVpbnQpOworbmF0aXZlIHVpbnQ0IG9wZXJhdG9yLng9
KHVpbnQ0LCB1aW50KTsKK25hdGl2ZSB1aW50NCBvcGVyYXRvci55PSh1aW50NCwgdWludCk7Citu
YXRpdmUgdWludDQgb3BlcmF0b3Iuej0odWludDQsIHVpbnQpOworbmF0aXZlIHVpbnQ0IG9wZXJh
dG9yLnc9KHVpbnQ0LCB1aW50KTsKK25hdGl2ZSBjaGFyIG9wZXJhdG9yLngoY2hhcjIpOworbmF0
aXZlIGNoYXIgb3BlcmF0b3IueShjaGFyMik7CituYXRpdmUgY2hhciBvcGVyYXRvci54KGNoYXIz
KTsKK25hdGl2ZSBjaGFyIG9wZXJhdG9yLnkoY2hhcjMpOworbmF0aXZlIGNoYXIgb3BlcmF0b3Iu
eihjaGFyMyk7CituYXRpdmUgY2hhciBvcGVyYXRvci54KGNoYXI0KTsKK25hdGl2ZSBjaGFyIG9w
ZXJhdG9yLnkoY2hhcjQpOworbmF0aXZlIGNoYXIgb3BlcmF0b3IueihjaGFyNCk7CituYXRpdmUg
Y2hhciBvcGVyYXRvci53KGNoYXI0KTsKK25hdGl2ZSBjaGFyMiBvcGVyYXRvci54PShjaGFyMiwg
Y2hhcik7CituYXRpdmUgY2hhcjIgb3BlcmF0b3IueT0oY2hhcjIsIGNoYXIpOworbmF0aXZlIGNo
YXIzIG9wZXJhdG9yLng9KGNoYXIzLCBjaGFyKTsKK25hdGl2ZSBjaGFyMyBvcGVyYXRvci55PShj
aGFyMywgY2hhcik7CituYXRpdmUgY2hhcjMgb3BlcmF0b3Iuej0oY2hhcjMsIGNoYXIpOworbmF0
aXZlIGNoYXI0IG9wZXJhdG9yLng9KGNoYXI0LCBjaGFyKTsKK25hdGl2ZSBjaGFyNCBvcGVyYXRv
ci55PShjaGFyNCwgY2hhcik7CituYXRpdmUgY2hhcjQgb3BlcmF0b3Iuej0oY2hhcjQsIGNoYXIp
OworbmF0aXZlIGNoYXI0IG9wZXJhdG9yLnc9KGNoYXI0LCBjaGFyKTsKK25hdGl2ZSBzaG9ydCBv
cGVyYXRvci54KHNob3J0Mik7CituYXRpdmUgc2hvcnQgb3BlcmF0b3IueShzaG9ydDIpOworbmF0
aXZlIHNob3J0IG9wZXJhdG9yLngoc2hvcnQzKTsKK25hdGl2ZSBzaG9ydCBvcGVyYXRvci55KHNo
b3J0Myk7CituYXRpdmUgc2hvcnQgb3BlcmF0b3IueihzaG9ydDMpOworbmF0aXZlIHNob3J0IG9w
ZXJhdG9yLngoc2hvcnQ0KTsKK25hdGl2ZSBzaG9ydCBvcGVyYXRvci55KHNob3J0NCk7CituYXRp
dmUgc2hvcnQgb3BlcmF0b3IueihzaG9ydDQpOworbmF0aXZlIHNob3J0IG9wZXJhdG9yLncoc2hv
cnQ0KTsKK25hdGl2ZSBzaG9ydDIgb3BlcmF0b3IueD0oc2hvcnQyLCBzaG9ydCk7CituYXRpdmUg
c2hvcnQyIG9wZXJhdG9yLnk9KHNob3J0Miwgc2hvcnQpOworbmF0aXZlIHNob3J0MyBvcGVyYXRv
ci54PShzaG9ydDMsIHNob3J0KTsKK25hdGl2ZSBzaG9ydDMgb3BlcmF0b3IueT0oc2hvcnQzLCBz
aG9ydCk7CituYXRpdmUgc2hvcnQzIG9wZXJhdG9yLno9KHNob3J0Mywgc2hvcnQpOworbmF0aXZl
IHNob3J0NCBvcGVyYXRvci54PShzaG9ydDQsIHNob3J0KTsKK25hdGl2ZSBzaG9ydDQgb3BlcmF0
b3IueT0oc2hvcnQ0LCBzaG9ydCk7CituYXRpdmUgc2hvcnQ0IG9wZXJhdG9yLno9KHNob3J0NCwg
c2hvcnQpOworbmF0aXZlIHNob3J0NCBvcGVyYXRvci53PShzaG9ydDQsIHNob3J0KTsKK25hdGl2
ZSBpbnQgb3BlcmF0b3IueChpbnQyKTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueShpbnQyKTsKK25h
dGl2ZSBpbnQgb3BlcmF0b3IueChpbnQzKTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueShpbnQzKTsK
K25hdGl2ZSBpbnQgb3BlcmF0b3IueihpbnQzKTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueChpbnQ0
KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueShpbnQ0KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3Iueihp
bnQ0KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IudyhpbnQ0KTsKK25hdGl2ZSBpbnQyIG9wZXJhdG9y
Lng9KGludDIsIGludCk7CituYXRpdmUgaW50MiBvcGVyYXRvci55PShpbnQyLCBpbnQpOworbmF0
aXZlIGludDMgb3BlcmF0b3IueD0oaW50MywgaW50KTsKK25hdGl2ZSBpbnQzIG9wZXJhdG9yLnk9
KGludDMsIGludCk7CituYXRpdmUgaW50MyBvcGVyYXRvci56PShpbnQzLCBpbnQpOworbmF0aXZl
IGludDQgb3BlcmF0b3IueD0oaW50NCwgaW50KTsKK25hdGl2ZSBpbnQ0IG9wZXJhdG9yLnk9KGlu
dDQsIGludCk7CituYXRpdmUgaW50NCBvcGVyYXRvci56PShpbnQ0LCBpbnQpOworbmF0aXZlIGlu
dDQgb3BlcmF0b3Iudz0oaW50NCwgaW50KTsKK25hdGl2ZSBoYWxmIG9wZXJhdG9yLngoaGFsZjIp
OworbmF0aXZlIGhhbGYgb3BlcmF0b3IueShoYWxmMik7CituYXRpdmUgaGFsZiBvcGVyYXRvci54
KGhhbGYzKTsKK25hdGl2ZSBoYWxmIG9wZXJhdG9yLnkoaGFsZjMpOworbmF0aXZlIGhhbGYgb3Bl
cmF0b3IueihoYWxmMyk7CituYXRpdmUgaGFsZiBvcGVyYXRvci54KGhhbGY0KTsKK25hdGl2ZSBo
YWxmIG9wZXJhdG9yLnkoaGFsZjQpOworbmF0aXZlIGhhbGYgb3BlcmF0b3IueihoYWxmNCk7Citu
YXRpdmUgaGFsZiBvcGVyYXRvci53KGhhbGY0KTsKK25hdGl2ZSBoYWxmMiBvcGVyYXRvci54PSho
YWxmMiwgaGFsZik7CituYXRpdmUgaGFsZjIgb3BlcmF0b3IueT0oaGFsZjIsIGhhbGYpOworbmF0
aXZlIGhhbGYzIG9wZXJhdG9yLng9KGhhbGYzLCBoYWxmKTsKK25hdGl2ZSBoYWxmMyBvcGVyYXRv
ci55PShoYWxmMywgaGFsZik7CituYXRpdmUgaGFsZjMgb3BlcmF0b3Iuej0oaGFsZjMsIGhhbGYp
OworbmF0aXZlIGhhbGY0IG9wZXJhdG9yLng9KGhhbGY0LCBoYWxmKTsKK25hdGl2ZSBoYWxmNCBv
cGVyYXRvci55PShoYWxmNCwgaGFsZik7CituYXRpdmUgaGFsZjQgb3BlcmF0b3Iuej0oaGFsZjQs
IGhhbGYpOworbmF0aXZlIGhhbGY0IG9wZXJhdG9yLnc9KGhhbGY0LCBoYWxmKTsKK25hdGl2ZSBm
bG9hdCBvcGVyYXRvci54KGZsb2F0Mik7CituYXRpdmUgZmxvYXQgb3BlcmF0b3IueShmbG9hdDIp
OyovCituYXRpdmUgZmxvYXQgb3BlcmF0b3IueChmbG9hdDMpOworbmF0aXZlIGZsb2F0IG9wZXJh
dG9yLnkoZmxvYXQzKTsKK25hdGl2ZSBmbG9hdCBvcGVyYXRvci56KGZsb2F0Myk7CituYXRpdmUg
ZmxvYXQgb3BlcmF0b3IueChmbG9hdDQpOworbmF0aXZlIGZsb2F0IG9wZXJhdG9yLnkoZmxvYXQ0
KTsKK25hdGl2ZSBmbG9hdCBvcGVyYXRvci56KGZsb2F0NCk7CituYXRpdmUgZmxvYXQgb3BlcmF0
b3IudyhmbG9hdDQpOy8qCituYXRpdmUgZmxvYXQyIG9wZXJhdG9yLng9KGZsb2F0MiwgZmxvYXQp
OworbmF0aXZlIGZsb2F0MiBvcGVyYXRvci55PShmbG9hdDIsIGZsb2F0KTsqLworbmF0aXZlIGZs
b2F0MyBvcGVyYXRvci54PShmbG9hdDMsIGZsb2F0KTsKK25hdGl2ZSBmbG9hdDMgb3BlcmF0b3Iu
eT0oZmxvYXQzLCBmbG9hdCk7CituYXRpdmUgZmxvYXQzIG9wZXJhdG9yLno9KGZsb2F0MywgZmxv
YXQpOworbmF0aXZlIGZsb2F0NCBvcGVyYXRvci54PShmbG9hdDQsIGZsb2F0KTsKK25hdGl2ZSBm
bG9hdDQgb3BlcmF0b3IueT0oZmxvYXQ0LCBmbG9hdCk7CituYXRpdmUgZmxvYXQ0IG9wZXJhdG9y
Lno9KGZsb2F0NCwgZmxvYXQpOworbmF0aXZlIGZsb2F0NCBvcGVyYXRvci53PShmbG9hdDQsIGZs
b2F0KTsKIAogbmF0aXZlIGZsb2F0IGRkeChmbG9hdCk7CiBuYXRpdmUgZmxvYXQgZGR5KGZsb2F0
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNw
cAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMjggKzQ0LDYgQEAgYm9vbCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dy
YQogICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVE
ZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CiAgICAgICAgIGZv
ciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVy
ZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0
dGVyOiBvcGVyYXRvci5maWVsZAotICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4oQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgICAgICAg
ICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQu
b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgc3RydWN0dXJl
RWxlbWVudC50eXBlKCkuY2xvbmUoKSwgbWFrZVN0cmluZygib3BlcmF0b3IuIiwgc3RydWN0dXJl
RWxlbWVudC5uYW1lKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3Bl
cmF0b3IpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KLSAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxl
RGVjbGFyYXRpb24xID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPihBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9u
KSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Ci0gICAgICAgICAgICAg
ICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uMiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFT
VDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpOwotICAgICAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7Ci0gICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwotICAgICAg
ICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3Jp
Z2luKCkpLCBzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgbWFrZVN0cmluZygib3BlcmF0b3IuIiwgc3Ry
dWN0dXJlRWxlbWVudC5uYW1lKCksICc9JyksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVs
bG9wdCwgaXNPcGVyYXRvcikpOwotICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5hcHBlbmQo
V1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgLy8gVGhlIGFuZGVy
OiBvcGVyYXRvciYuZmllbGQKICAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNU
OjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gewogICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgc3RydWN0dXJlRGVmaW5pdGlvbikpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQWRkcmVzc1NwYWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQWRkcmVzc1NwYWNlLmgJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFkZHJlc3NTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIDogdWludDhfdCB7
CiAgICAgVGhyZWFkCiB9OwogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmcgdG9TdHJpbmco
QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKK0FMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3RyaW5n
KEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCiB7CiAgICAgc3dpdGNoIChhZGRyZXNzU3BhY2Up
IHsKICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnRyeVBvaW50VHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5
UG9pbnRUeXBlLmgJKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEVudHJ5UG9pbnRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgZW51bSBjbGFzcyBFbnRyeVBvaW50VHlwZSA6IHVpbnQ4X3QgewogICAg
IENvbXB1dGUsCiB9OwogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmcgdG9TdHJpbmcoRW50
cnlQb2ludFR5cGUgdHlwZSkKK0FMV0FZU19JTkxJTkUgU3RyaW5nIHRvU3RyaW5nKEVudHJ5UG9p
bnRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBFbnRyeVBvaW50
VHlwZTo6VmVydGV4OgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgJKHJldmlzaW9u
IDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEluZGV4RXhwcmVzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNSArNTksMTYgQEAgcHVi
bGljOgogCiAgICAgU3RyaW5nIHNldHRlckZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCiAg
ICAgewotICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIl9zdHI7CisgICAgICAgIHJldHVybiAi
b3BlcmF0b3JbXT0iX3N0cjsKICAgICB9CiAKICAgICBTdHJpbmcgYW5kZXJGdW5jdGlvbk5hbWUo
KSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJuICJvcGVyYXRvcltdPSJfc3Ry
OworICAgICAgICByZXR1cm4gIm9wZXJhdG9yJltdIl9zdHI7CiAgICAgfQogCiAgICAgRXhwcmVz
c2lvbiYgaW5kZXhFeHByZXNzaW9uKCkgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFVuaXF1ZVJl
ZjxFeHByZXNzaW9uPiB0YWtlSW5kZXgoKSB7IHJldHVybiBXVEZNb3ZlKG1faW5kZXgpOyB9CiAK
IHByaXZhdGU6CiAgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1faW5kZXg7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAkocmV2aXNpb24gMjQ2MzI2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDcgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0K
KyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mIGJhc2VSZWZlcmVuY2UoKSB7IHJldHVybiBtX2Jh
c2U7IH0KICAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gdGFrZUJhc2UoKSB7IHJldHVybiBXVEZN
b3ZlKG1fYmFzZSk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgJ
KHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBA
QCBwdWJsaWM6CiAgICAgUmVmZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBkZWxl
dGU7CiAgICAgUmVmZXJlbmNlVHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKIAotICAg
IGJvb2wgaXNSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2Fk
ZHJlc3NTcGFjZTsgfQogICAgIGNvbnN0IFVubmFtZWRUeXBlJiBlbGVtZW50VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZWxlbWVudFR5cGU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2Vt
YW50aWMuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksOCArNDksNiBAQCBib29sIFJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUo
CiAgICAgICAgICAgICBhdXRvJiByZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8UmVmZXJlbmNlVHlw
ZT4odW5uYW1lZFR5cGUpOwogICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVR5cGUuYWRkcmVz
c1NwYWNlKCkgPT0gQWRkcmVzc1NwYWNlOjpDb25zdGFudCB8fCByZWZlcmVuY2VUeXBlLmFkZHJl
c3NTcGFjZSgpID09IEFkZHJlc3NTcGFjZTo6RGV2aWNlOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBpZiAoaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CiAgICAgICAgICAg
ICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5
cGUpOwogICAgICAgICAgICAgaWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSkpCkBAIC03MSw3ICs2OSw3IEBAIGJvb2wgUmVzb3VyY2VTZW1h
bnRpYzo6aXNBY2NlcHRhYmxlVHlwZSgKICAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKICAgICAgICAg
aWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gQWRk
cmVzc1NwYWNlOjpDb25zdGFudDsKLSAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBNb2RlOjpTYW1wbGVyOgog
ICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5zYW1wbGVyVHlw
ZSgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZv
bGRpbmcuY3BwCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oIgogI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCiAjaW5jbHVkZSAi
V0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUu
aCIKICNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKICNpbmNsdWRlICJXSExTTFN0
YWdlSW5PdXRTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5o
IgpAQCAtMTA4LDcgKzEwOSwxNiBAQCBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRT
Y2FmZm9sCiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbV9sYXlvdXRbaV0uYmluZGlu
Z3Muc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgIE5hbWVkQmluZGluZyBuYW1lZEJpbmRpbmc7
CiAgICAgICAgICAgICBuYW1lZEJpbmRpbmcuZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5l
cmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOwotICAgICAgICAgICAgbmFtZWRCaW5kaW5n
LmluZGV4ID0gbV9sYXlvdXRbaV0uYmluZGluZ3Nbal0ubmFtZTsgLy8gR1BVQmluZEdyb3VwTGF5
b3V0Ojp0cnlDcmVhdGUoKSBtYWtlcyBzdXJlIHRoZXNlIGRvbid0IGNvbGxpZGUuCisgICAgICAg
ICAgICBuYW1lZEJpbmRpbmcuaW5kZXggPSBtX2xheW91dFtpXS5iaW5kaW5nc1tqXS5pbnRlcm5h
bE5hbWU7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaWZv
cm1CdWZmZXJCaW5kaW5nJiB1bmlmb3JtQnVmZmVyQmluZGluZykgeworICAgICAgICAgICAgICAg
IExlbmd0aEluZm9ybWF0aW9uIGxlbmd0aEluZm9ybWF0aW9uIHsgbV90eXBlTmFtZXIuZ2VuZXJh
dGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKSwgbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KSwgdW5pZm9ybUJ1ZmZlckJpbmRpbmcubGVuZ3RoTmFtZSB9OworICAgICAgICAgICAgICAgIG5h
bWVkQmluZGluZy5sZW5ndGhJbmZvcm1hdGlvbiA9IGxlbmd0aEluZm9ybWF0aW9uOworICAgICAg
ICAgICAgfSwgWyZdKFNhbXBsZXJCaW5kaW5nJikgeworICAgICAgICAgICAgfSwgWyZdKFRleHR1
cmVCaW5kaW5nJikgeworICAgICAgICAgICAgfSwgWyZdKFN0b3JhZ2VCdWZmZXJCaW5kaW5nJiBz
dG9yYWdlQnVmZmVyQmluZGluZykgeworICAgICAgICAgICAgICAgIExlbmd0aEluZm9ybWF0aW9u
IGxlbmd0aEluZm9ybWF0aW9uIHsgbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxl
bWVudE5hbWUoKSwgbV9nZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKSwgc3RvcmFnZUJ1ZmZlckJp
bmRpbmcubGVuZ3RoTmFtZSB9OworICAgICAgICAgICAgICAgIG5hbWVkQmluZGluZy5sZW5ndGhJ
bmZvcm1hdGlvbiA9IGxlbmd0aEluZm9ybWF0aW9uOworICAgICAgICAgICAgfSksIG1fbGF5b3V0
W2ldLmJpbmRpbmdzW2pdLmJpbmRpbmcpOwogICAgICAgICAgICAgbmFtZWRCaW5kR3JvdXAubmFt
ZWRCaW5kaW5ncy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShuYW1lZEJpbmRpbmcpKTsKICAgICAg
ICAgfQogICAgICAgICBtX25hbWVkQmluZEdyb3Vwcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShu
YW1lZEJpbmRHcm91cCkpOwpAQCAtMTM3LDEwICsxNDcsMTYgQEAgU3RyaW5nIEVudHJ5UG9pbnRT
Y2FmZm9sZGluZzo6cmVzb3VyY2VIZQogICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fcmVz
b3VyY2VNYXAuZmluZCgmbV9sYXlvdXRbaV0uYmluZGluZ3Nbal0pOwogICAgICAgICAgICAgaWYg
KGl0ZXJhdG9yID09IG1fcmVzb3VyY2VNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1ZV0u
dW5uYW1lZFR5cGUpOworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSAqbV9lbnRyeVBv
aW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1ZV0udW5uYW1lZFR5cGU7CisgICAgICAgICAg
ICBBU1NFUlQoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICAg
ICAgYXV0byYgcmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZT4odW5u
YW1lZFR5cGUpOworICAgICAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKKyAgICAg
ICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlID0gdG9TdHJpbmcocmVmZXJlbmNlVHlwZS5hZGRyZXNz
U3BhY2UoKSk7CiAgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1lZEJpbmRHcm91
cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKICAgICAgICAgICAgIGF1dG8gaW5k
ZXggPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdzW2pdLmluZGV4OwotICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgIiBbW2lkKCIsIGluZGV4LCAiKV1dO1xuIikpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIGFkZHJlc3NT
cGFjZSwgIiAiLCBtYW5nbGVkVHlwZU5hbWUsICIqICIsIGVsZW1lbnROYW1lLCAiIFtbaWQoIiwg
aW5kZXgsICIpXV07XG4iKSk7CisgICAgICAgICAgICBpZiAoYXV0byBsZW5ndGhJbmZvcm1hdGlv
biA9IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVkQmluZGluZ3Nbal0ubGVuZ3RoSW5mb3JtYXRp
b24pCisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
IHVpbnQyICIsIGxlbmd0aEluZm9ybWF0aW9uLT5lbGVtZW50TmFtZSwgIiBbW2lkKCIsIGxlbmd0
aEluZm9ybWF0aW9uLT5pbmRleCwgIildXTtcbiIpKTsKICAgICAgICAgfQogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgifTtcblxuIik7CiAgICAgfQpAQCAtMTYyLDYgKzE3OCw0MSBAQCBP
cHRpb25hbDxTdHJpbmc+IEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6CiAgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorc3RhdGljIFN0cmluZyBpbnRlcm5hbFR5cGVGb3JT
ZW1hbnRpYyhjb25zdCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKQorewor
ICAgIHN3aXRjaCAoYnVpbHRJblNlbWFudGljLnZhcmlhYmxlKCkpIHsKKyAgICBjYXNlIEFTVDo6
QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbnN0YW5jZUlEOgorICAgICAgICByZXR1cm4g
InVpbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZW
ZXJ0ZXhJRDoKKyAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0
SW5TZW1hbnRpYzo6VmFyaWFibGU6OlBTaXplOgorICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7
CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWUG9zaXRpb246Cisg
ICAgICAgIHJldHVybiAiZmxvYXQ0Il9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRp
Yzo6VmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJldHVybiAiYm9vbCJfc3RyOwor
ICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlNhbXBsZUluZGV4Ogor
ICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGlj
OjpWYXJpYWJsZTo6U1ZJbm5lckNvdmVyYWdlOgorICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsK
KyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJp
YWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgIGNhc2UgQVNU
OjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICByZXR1cm4g
InVpbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZE
aXNwYXRjaFRocmVhZElEOgorICAgICAgICByZXR1cm4gInVpbnQzIl9zdHI7CisgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBJRDoKKyAgICAgICAgcmV0dXJu
ICJ1aW50MyJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpT
Vkdyb3VwSW5kZXg6CisgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVChidWlsdEluU2VtYW50aWMudmFyaWFibGUoKSA9PSBBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBUaHJlYWRJRCk7CisgICAgICAgIHJldHVybiAidWlu
dDMiX3N0cjsKKyAgICB9Cit9CisKIE9wdGlvbmFsPFN0cmluZz4gRW50cnlQb2ludFNjYWZmb2xk
aW5nOjpidWlsdEluc1NpZ25hdHVyZSgpCiB7CiAgICAgaWYgKCFtX25hbWVkQnVpbHRJbnMuc2l6
ZSgpKQpAQCAtMTc0LDkgKzIyNSwxMSBAQCBPcHRpb25hbDxTdHJpbmc+IEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6CiAgICAgICAgIGF1dG8mIG5hbWVkQnVpbHRJbiA9IG1fbmFtZWRCdWlsdEluc1tp
XTsKICAgICAgICAgYXV0byYgaXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZEJ1
aWx0SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc107CiAgICAgICAgIGF1dG8mIGJ1aWx0SW5TZW1h
bnRpYyA9IFdURjo6Z2V0PEFTVDo6QnVpbHRJblNlbWFudGljPigqaXRlbS5zZW1hbnRpYyk7Ci0g
ICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCppdGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBpbnRlcm5hbFR5cGUgPSBpbnRl
cm5hbFR5cGVGb3JTZW1hbnRpYyhidWlsdEluU2VtYW50aWMpOworICAgICAgICBpZiAoaW50ZXJu
YWxUeXBlLmlzTnVsbCgpKQorICAgICAgICAgICAgaW50ZXJuYWxUeXBlID0gbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCppdGVtLnVubmFtZWRUeXBlKTsKICAgICAgICAgYXV0byB2YXJp
YWJsZU5hbWUgPSBuYW1lZEJ1aWx0SW4udmFyaWFibGVOYW1lOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICcgJywgYXR0cmlidXRlRm9yU2VtYW50aWMoYnVpbHRJblNlbWFudGljKSkpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGludGVybmFsVHlwZSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICcgJywgYXR0cmlidXRlRm9yU2VtYW50aWMoYnVpbHRJblNlbWFudGljKSkpOwogICAg
IH0KICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQpAQCAtMjU3LDE2ICsz
MTAsMzcgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzbwogICAgICAg
ICAgICAgYXV0byBpdGVyYXRvciA9IG1fcmVzb3VyY2VNYXAuZmluZCgmbV9sYXlvdXRbaV0uYmlu
ZGluZ3Nbal0pOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fcmVzb3VyY2VNYXAuZW5k
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvJiBwYXRoID0g
bV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1ZV0ucGF0aDsKLSAgICAgICAg
ICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX25hbWVkQmluZEdyb3Vwc1tpXS5uYW1lZEJpbmRpbmdz
W2pdLmVsZW1lbnROYW1lOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtYW5nbGVkSW5wdXRQYXRoKHBhdGgpLCAiID0gIiwgdmFyaWFibGVOYW1lLCAnLicsIGVs
ZW1lbnROYW1lLCAiO1xuIikpOworICAgICAgICAgICAgaWYgKG1fbmFtZWRCaW5kR3JvdXBzW2ld
Lm5hbWVkQmluZGluZ3Nbal0ubGVuZ3RoSW5mb3JtYXRpb24pIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBwYXRoID0gbV9lbnRyeVBvaW50SXRlbXMuaW5wdXRzW2l0ZXJhdG9yLT52YWx1ZV0ucGF0
aDsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1lZEJpbmRHcm91cHNb
aV0ubmFtZWRCaW5kaW5nc1tqXS5lbGVtZW50TmFtZTsKKyAgICAgICAgICAgICAgICBhdXRvIGxl
bmd0aEVsZW1lbnROYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5s
ZW5ndGhJbmZvcm1hdGlvbi0+ZWxlbWVudE5hbWU7CisgICAgICAgICAgICAgICAgYXV0byBsZW5n
dGhUZW1wb3JhcnlOYW1lID0gbV9uYW1lZEJpbmRHcm91cHNbaV0ubmFtZWRCaW5kaW5nc1tqXS5s
ZW5ndGhJbmZvcm1hdGlvbi0+dGVtcG9yYXJ5TmFtZTsKKworICAgICAgICAgICAgICAgIGF1dG8m
IHVubmFtZWRUeXBlID0gKm1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tpdGVyYXRvci0+dmFsdWVd
LnVubmFtZWRUeXBlOworICAgICAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNlVHlwZSA9
IGRvd25jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAg
ICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzaXplX3QgIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwg
IiA9ICIsIHZhcmlhYmxlTmFtZSwgJy4nLCBsZW5ndGhFbGVtZW50TmFtZSwgIi54O1xuIikpOwor
ICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVuZ3RoVGVt
cG9yYXJ5TmFtZSwgIiA9ICIsIGxlbmd0aFRlbXBvcmFyeU5hbWUsICIgPDwgMzI7XG4iKSk7Cisg
ICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZW5ndGhUZW1w
b3JhcnlOYW1lLCAiID0gIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiB8ICIsIHZhcmlhYmxlTmFt
ZSwgJy4nLCBsZW5ndGhFbGVtZW50TmFtZSwgIi55O1xuIikpOworICAgICAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA9ICIs
IGxlbmd0aFRlbXBvcmFyeU5hbWUsICIgLyBzaXplb2YoIiwgbWFuZ2xlZFR5cGVOYW1lLCAiKTtc
biIpKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJp
ZiAoIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA+IDB4RkZGRkZGRkYpICIsIGxlbmd0aFRlbXBv
cmFyeU5hbWUsICIgPSAweEZGRkZGRkZGO1xuIikpOworICAgICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElucHV0UGF0aChwYXRoKSwgIiA9IHsgIiwg
dmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
IiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIikgfTtcbiIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tp
dGVyYXRvci0+dmFsdWVdLnBhdGg7CisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9
IG1fbmFtZWRCaW5kR3JvdXBzW2ldLm5hbWVkQmluZGluZ3Nbal0uZWxlbWVudE5hbWU7CisgICAg
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkSW5wdXRQ
YXRoKHBhdGgpLCAiID0gIiwgdmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAiO1xuIikp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBuYW1l
ZEJ1aWx0SW4gOiBtX25hbWVkQnVpbHRJbnMpIHsKLSAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50
cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZEJ1aWx0SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc10u
cGF0aDsKKyAgICAgICAgYXV0byYgaXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1l
ZEJ1aWx0SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc107CisgICAgICAgIGF1dG8mIHBhdGggPSBp
dGVtLnBhdGg7CiAgICAgICAgIGF1dG8mIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVpbHRJbi52YXJp
YWJsZU5hbWU7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xl
ZElucHV0UGF0aChwYXRoKSwgIiA9ICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICAgICAg
YXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKml0
ZW0udW5uYW1lZFR5cGUpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICcoJywgdmFy
aWFibGVOYW1lLCAiKTtcbiIpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKIH0KQEAgLTI4OSw4ICszNjMsMTMgQEAgVmVydGV4RW50cnlQb2ludFNjYWZmb2xk
aW5nOjpWZXJ0ZXhFbnRyeQogCiAgICAgbV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOwogICAg
ICAgICBOYW1lZE91dHB1dCBuYW1lZE91dHB1dDsKICAgICAgICAgbmFtZWRPdXRwdXQuZWxlbWVu
dE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOwor
ICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4o
Km91dHB1dEl0ZW0uc2VtYW50aWMpKQorICAgICAgICAgICAgbmFtZWRPdXRwdXQuaW50ZXJuYWxU
eXBlTmFtZSA9IGludGVybmFsVHlwZUZvclNlbWFudGljKFdURjo6Z2V0PEFTVDo6QnVpbHRJblNl
bWFudGljPigqb3V0cHV0SXRlbS5zZW1hbnRpYykpOworICAgICAgICBpZiAobmFtZWRPdXRwdXQu
aW50ZXJuYWxUeXBlTmFtZS5pc051bGwoKSkKKyAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVy
bmFsVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0u
dW5uYW1lZFR5cGUpOwogICAgICAgICBtX25hbWVkT3V0cHV0cy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShuYW1lZE91dHB1dCkpOwogICAgIH0KIH0KQEAgLTMxMSwxMCArMzkwLDEwIEBAIFN0cmlu
ZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHAKICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9yZXR1cm5TdHJ1Y3ROYW1lLCAiIHtcbiIpKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byYgb3V0cHV0SXRlbSA9IG1fZW50cnlQb2ludEl0ZW1z
Lm91dHB1dHNbaV07Ci0gICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpvdXRwdXRJdGVtLnVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0
byYgaW50ZXJuYWxUeXBlTmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmludGVybmFsVHlwZU5hbWU7
CiAgICAgICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX25hbWVkT3V0cHV0c1tpXS5lbGVtZW50TmFt
ZTsKICAgICAgICAgYXV0byBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVGb3JTZW1hbnRpYygqb3V0cHV0
SXRlbS5zZW1hbnRpYyk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
IiAgICAiLCBtYW5nbGVkVHlwZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICcgJywgYXR0cmlidXRl
LCAiO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAg
IiwgaW50ZXJuYWxUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgJyAnLCBhdHRyaWJ1dGUsICI7
XG4iKSk7CiAgICAgfQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuXG4iKTsKIApAQCAt
MzYzLDggKzQ0Miw5IEBAIFN0cmluZyBWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2sK
ICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRw
dXRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91
dHB1dHNbaV0uZWxlbWVudE5hbWU7CisgICAgICAgIGF1dG8mIGludGVybmFsVHlwZU5hbWUgPSBt
X25hbWVkT3V0cHV0c1tpXS5pbnRlcm5hbFR5cGVOYW1lOwogICAgICAgICBhdXRvJiBwYXRoID0g
bV9lbnRyeVBvaW50SXRlbXMub3V0cHV0c1tpXS5wYXRoOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG91dHB1dFZhcmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwg
IiA9ICIsIGlucHV0VmFyaWFibGVOYW1lLCBtYW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIjtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhvdXRwdXRWYXJpYWJs
ZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICIgPSAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnKCcsIGlu
cHV0VmFyaWFibGVOYW1lLCBtYW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIik7XG4iKSk7CiAgICAg
fQogICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CkBAIC0zODksOCArNDY5
LDEzIEBAIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpGcmFnbWVudEUKIAogICAgIG1f
bmFtZWRPdXRwdXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbnRyeVBvaW50SXRlbXMub3V0
cHV0cy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRl
bXMub3V0cHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBvdXRwdXRJdGVtID0gbV9l
bnRyeVBvaW50SXRlbXMub3V0cHV0c1tpXTsKICAgICAgICAgTmFtZWRPdXRwdXQgbmFtZWRPdXRw
dXQ7CiAgICAgICAgIG5hbWVkT3V0cHV0LmVsZW1lbnROYW1lID0gbV90eXBlTmFtZXIuZ2VuZXJh
dGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2VtYW50aWM+KCpvdXRwdXRJdGVtLnNlbWFudGljKSkKKyAg
ICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUgPSBpbnRlcm5hbFR5cGVGb3JT
ZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1dEl0ZW0uc2VtYW50
aWMpKTsKKyAgICAgICAgaWYgKG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUuaXNOdWxsKCkp
CisgICAgICAgICAgICBuYW1lZE91dHB1dC5pbnRlcm5hbFR5cGVOYW1lID0gbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpvdXRwdXRJdGVtLnVubmFtZWRUeXBlKTsKICAgICAgICAgbV9u
YW1lZE91dHB1dHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZWRPdXRwdXQpKTsKICAgICB9
CiB9CkBAIC00MTEsMTAgKzQ5NiwxMCBAQCBTdHJpbmcgRnJhZ21lbnRFbnRyeVBvaW50U2NhZmZv
bGRpbmc6OmhlCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0ICIs
IG1fcmV0dXJuU3RydWN0TmFtZSwgIiB7XG4iKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8m
IG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOwotICAgICAgICBhdXRv
IG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqb3V0cHV0
SXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8mIGludGVybmFsVHlwZU5hbWUgPSBtX25h
bWVkT3V0cHV0c1tpXS5pbnRlcm5hbFR5cGVOYW1lOwogICAgICAgICBhdXRvIGVsZW1lbnROYW1l
ID0gbV9uYW1lZE91dHB1dHNbaV0uZWxlbWVudE5hbWU7CiAgICAgICAgIGF1dG8gYXR0cmlidXRl
ID0gYXR0cmlidXRlRm9yU2VtYW50aWMoKm91dHB1dEl0ZW0uc2VtYW50aWMpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAn
ICcsIGVsZW1lbnROYW1lLCAnICcsIGF0dHJpYnV0ZSwgIjtcbiIpKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIGludGVybmFsVHlwZU5hbWUsICcgJywg
ZWxlbWVudE5hbWUsICcgJywgYXR0cmlidXRlLCAiO1xuIikpOwogICAgIH0KICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgifTtcblxuIik7CiAKQEAgLTQ2Myw4ICs1NDgsOSBAQCBTdHJpbmcgRnJh
Z21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhCiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgewogICAgICAg
ICBhdXRvJiBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1lOworICAg
ICAgICBhdXRvJiBpbnRlcm5hbFR5cGVOYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uaW50ZXJuYWxU
eXBlTmFtZTsKICAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2ludEl0ZW1zLm91dHB1dHNb
aV0ucGF0aDsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhvdXRwdXRW
YXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICIgPSAiLCBpbnB1dFZhcmlhYmxlTmFtZSwg
bWFuZ2xlZE91dHB1dFBhdGgocGF0aCksICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAi
ID0gIiwgaW50ZXJuYWxUeXBlTmFtZSwgJygnLCBpbnB1dFZhcmlhYmxlTmFtZSwgbWFuZ2xlZE91
dHB1dFBhdGgocGF0aCksICIpO1xuIikpOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOwogfQpAQCAtNDgzLDcgKzU2OSw3IEBAIFN0cmluZyBDb21wdXRlRW50cnlQ
b2ludFNjYWZmb2xkaW5nOjpzaWcKIHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAKLSAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjb21wdXRlIHZvaWQgIiwg
ZnVuY3Rpb25OYW1lLCAnKCcpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCJrZXJuZWwgdm9pZCAiLCBmdW5jdGlvbk5hbWUsICcoJykpOwogICAgIGJvb2wgZW1wdHkgPSB0
cnVlOwogICAgIGlmIChhdXRvIHJlc291cmNlU2lnbmF0dXJlID0gdGhpcy0+cmVzb3VyY2VTaWdu
YXR1cmUoKSkgewogICAgICAgICBlbXB0eSA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9s
ZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3NywxNSBAQCBwcm90ZWN0ZWQ6CiAgICAg
TGF5b3V0JiBtX2xheW91dDsKICAgICBzdGQ6OmZ1bmN0aW9uPFN0cmluZygpPiBtX2dlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZTsKIAorICAgIHN0cnVjdCBMZW5ndGhJbmZvcm1hdGlvbiB7CisgICAg
ICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgU3RyaW5nIHRlbXBvcmFyeU5hbWU7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4OworICAgIH07CiAgICAgc3RydWN0IE5hbWVkQmluZGluZyB7
CiAgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKICAgICAgICAgdW5zaWduZWQgaW5kZXg7Cisg
ICAgICAgIE9wdGlvbmFsPExlbmd0aEluZm9ybWF0aW9uPiBsZW5ndGhJbmZvcm1hdGlvbjsKICAg
ICB9OwogICAgIHN0cnVjdCBOYW1lZEJpbmRHcm91cCB7CiAgICAgICAgIFN0cmluZyBzdHJ1Y3RO
YW1lOwpAQCAtMTIzLDYgKzEyOSw3IEBAIHByaXZhdGU6CiAKICAgICBzdHJ1Y3QgTmFtZWRPdXRw
dXQgewogICAgICAgICBTdHJpbmcgZWxlbWVudE5hbWU7CisgICAgICAgIFN0cmluZyBpbnRlcm5h
bFR5cGVOYW1lOwogICAgIH07CiAgICAgVmVjdG9yPE5hbWVkT3V0cHV0PiBtX25hbWVkT3V0cHV0
czsKIH07CkBAIC0xNTEsNiArMTU4LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0cnVjdCBOYW1lZE91
dHB1dCB7CiAgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsKKyAgICAgICAgU3RyaW5nIGludGVy
bmFsVHlwZU5hbWU7CiAgICAgfTsKICAgICBWZWN0b3I8TmFtZWRPdXRwdXQ+IG1fbmFtZWRPdXRw
dXRzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lv
biAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQAog
I2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAorI2luY2x1ZGUgIldITFNMQVNURHVtcGVyLmgiCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKQEAgLTg4LDggKzkwLDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX2Z1bmN0aW9uTWFwcGluZyhmdW5jdGlvbk1hcHBpbmcpCiAgICAgICAgICwgbV9s
YXlvdXQobGF5b3V0KQogICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKAorICAgICAgICAgICAgInRlbXBsYXRlIDx0eXBlbmFtZSBUPlxuIgorICAgICAgICAg
ICAgImlubGluZSB2b2lkIiwgbWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSwgIihUJiB2YWx1ZSlcbiIK
KyAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAiICAgIHRocmVhZCBjaGFyKiBwdHIgPSBz
dGF0aWNfY2FzdDx0aHJlYWQgY2hhcio+KHN0YXRpY19jYXN0PHRocmVhZCB2b2lkKj4oJnZhbHVl
KSk7XG4iCisgICAgICAgICAgICAiICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKFQp
OyArK2kpXG4iCisgICAgICAgICAgICAiICAgICAgICBwdHJbaV0gPSAwO1xuIgorICAgICAgICAg
ICAgIn1cbiIpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIG1l
bXNldFplcm9GdW5jdGlvbk5hbWUgPSAibWVtc2V0WmVybyI7CisKICAgICB2aXJ0dWFsIH5GdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIoKSA9IGRlZmF1bHQ7CiAKICAgICBTdHJpbmcgdG9TdHJpbmco
KSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQpAQCAtMTUzLDEyICsxNjUs
NDIgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygidmFyaWFibGUiLCBt
X3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAgc3RydWN0IFN0YWNrSXRlbSB7CisgICAg
ICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgU3RyaW5nIGxlZnRWYWx1ZTsKKyAgICB9OworCisg
ICAgdm9pZCBhcHBlbmRSaWdodFZhbHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgU3Ry
aW5nIHZhbHVlKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb24pOworICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1vdmUodmFsdWUpLCBTdHJpbmcoKSB9KTsKKyAgICB9
CisKKyAgICB2b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24s
IFN0cmluZyB2YWx1ZSwgU3RyaW5nIGxlZnRWYWx1ZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpOwor
ICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1vdmUodmFsdWUpLCBXVEZNb3ZlKGxlZnRWYWx1
ZSkgfSk7CisgICAgfQorCisgICAgU3RyaW5nIHRha2VMYXN0VmFsdWUoKQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQobV9zdGFjay5sYXN0KCkudmFsdWUpOworICAgICAgICByZXR1cm4g
bV9zdGFjay50YWtlTGFzdCgpLnZhbHVlOworICAgIH0KKworICAgIFN0cmluZyB0YWtlTGFzdExl
ZnRWYWx1ZSgpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3N0YWNrLmxhc3QoKS5s
ZWZ0VmFsdWUpOworICAgICAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpLmxlZnRWYWx1ZTsK
KyAgICB9CisKICAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiAgICAgVHlwZU5hbWVyJiBt
X3R5cGVOYW1lcjsKICAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmlu
Zz4mIG1fZnVuY3Rpb25NYXBwaW5nOwogICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uKiwgU3RyaW5nPiBtX3ZhcmlhYmxlTWFwcGluZzsKICAgICBTdHJpbmdCdWlsZGVyIG1fc3Ry
aW5nQnVpbGRlcjsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX3N0YWNrOworCisgICAgVmVjdG9yPFN0
YWNrSXRlbT4gbV9zdGFjazsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xk
aW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZzsKICAgICBMYXlvdXQmIG1fbGF5b3V0OwogICAg
IHVuc2lnbmVkIG1fdmFyaWFibGVDb3VudCB7IDAgfTsKQEAgLTE2OSw3ICsyMTEsNyBAQCB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiB7CiAgICAgYXV0byBpdGVyYXRv
ciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwog
ICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2ZUZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV9pbnRyaW5zaWNzLCBtX3R5cGVOYW1lcikpOwor
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQod3JpdGVOYXRpdmVGdW5jdGlvbihuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLCBpdGVyYXRvci0+dmFsdWUsIG1faW50cmluc2ljcywgbV90eXBlTmFt
ZXIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUpKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRp
b24pCkBAIC0yNDYsNyArMjg4LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKIHsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZl
Y3RmdWxFeHByZXNzaW9uKCkpOwotICAgIG1fc3RhY2sudGFrZUxhc3QoKTsgLy8gVGhlIHN0YXRl
bWVudCBpcyBhbHJlYWR5IGVmZmVjdGZ1bCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGlu
ZyB3aXRoIHRoZSByZXN1bHQuCisgICAgdGFrZUxhc3RWYWx1ZSgpOyAvLyBUaGUgc3RhdGVtZW50
IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdp
dGggdGhlIHJlc3VsdC4KIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6RmFsbHRocm91Z2gmKQpAQCAtMjY0LDcgKzMwNiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjplbWl0TG9vcCgKIAogICAgIGlmIChsb29wQ29uZGl0aW9uTG9jYXRpb24g
PT0gTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpCZWZvcmVCb2R5ICYmIGNvbmRpdGlvbkV4cHJlc3Np
b24pIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpjb25kaXRpb25FeHByZXNzaW9uKTsK
LSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3Rh
Y2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCB0YWtlTGFzdFZhbHVlKCksICIpIGJyZWFrO1xuIikp
OwogICAgIH0KIAogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOwpAQCAtMjc2
LDEyICszMTgsMTIgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKAog
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmluY3JlbWVudCk7CiAgICAgICAgIC8vIEV4cHJl
c3Npb24gcmVzdWx0cyBnZXQgcHVzaGVkIHRvIG1fc3RhY2suIFdlIGRvbid0IHVzZSB0aGUgcmVz
dWx0CiAgICAgICAgIC8vIG9mIGluY3JlbWVudCwgc28gd2UgZGlzcGVuc2Ugb2YgdGhhdCBub3cu
Ci0gICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgdGFrZUxhc3RWYWx1ZSgpOwog
ICAgIH0KIAogICAgIGlmIChsb29wQ29uZGl0aW9uTG9jYXRpb24gPT0gTG9vcENvbmRpdGlvbkxv
Y2F0aW9uOjpBZnRlckJvZHkgJiYgY29uZGl0aW9uRXhwcmVzc2lvbikgewogICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKmNvbmRpdGlvbkV4cHJlc3Npb24pOwotICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBi
cmVhaztcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJp
ZiAoISIsIHRha2VMYXN0VmFsdWUoKSwgIikgYnJlYWs7XG4iKSk7CiAgICAgfQogCiAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgifSBcbiIpOwpAQCAtMzA1LDcgKzM0Nyw3IEBAIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHN0YXRlbWVudCk7CiAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBl
eHByZXNzaW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAg
ICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5n
IHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAgdGFrZUxhc3RWYWx1ZSgpOyAvLyBXZSBkb24ndCBu
ZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KICAgICB9KSwgZm9yTG9vcC5pbml0
aWFsaXphdGlvbigpKTsKIAogICAgIGVtaXRMb29wKExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QmVm
b3JlQm9keSwgZm9yTG9vcC5jb25kaXRpb24oKSwgZm9yTG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9v
cC5ib2R5KCkpOwpAQCAtMzE1LDcgKzM1Nyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZT
dGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJpZiAoIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSB7XG4iKSk7CisgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSB7
XG4iKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CiAgICAg
aWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgifSBlbHNlIHtcbiIpOwpAQCAtMzMwLDEwICszNzIsMTAgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJl
dHVyblN0YXRlbWVudC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fZW50cnlQb2ludFNjYWZmb2xk
aW5nKSB7CiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOwotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9p
bnRTY2FmZm9sZGluZy0+cGFjayhtX3N0YWNrLnRha2VMYXN0KCksIHZhcmlhYmxlTmFtZSkpOwor
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGlu
Zy0+cGFjayh0YWtlTGFzdFZhbHVlKCksIHZhcmlhYmxlTmFtZSkpOwogICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgdmFyaWFibGVOYW1lLCAi
O1xuIikpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIHRh
a2VMYXN0VmFsdWUoKSwgIjtcbiIpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgicmV0dXJuO1xuIik7CiB9CkBAIC0zNDIsNyArMzg0LDcgQEAgdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogewogICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CiAKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSB7IikpOworICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3dpdGNoICgiLCB0YWtlTGFzdFZh
bHVlKCksICIpIHsiKSk7CiAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVt
ZW50LnN3aXRjaENhc2VzKCkpCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNl
KTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKQEAgLTM3NSw3ICs0MTcsNyBA
QCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJp
YWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRU
eXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShpbnRlZ2VyTGl0ZXJhbC5y
ZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5n
bGVkVHlwZU5hbWUsICI+KCIsIGludGVnZXJMaXRlcmFsLnZhbHVlKCksICIpO1xuIikpOwotICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShpbnRl
Z2VyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCkKQEAgLTM4Myw3ICs0MjUsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgdW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVu
ZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUodW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpCkBAIC0zOTEsNyArNDMzLDcg
QEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVk
VHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmxvYXRMaXRlcmFsLnJl
c29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFu
Z2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmds
ZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCksICIpO1xuIikpOwotICAgIG1f
c3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShmbG9hdExp
dGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKQEAgLTQwOCw3ICs0NTAsNyBA
QCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgZWxzZQogICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJudWxscHRyIik7CiAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiO1xuIik7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAg
ICBhcHBlbmRSaWdodFZhbHVlKG51bGxMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9v
bGVhbkxpdGVyYWwpCkBAIC00MTYsNyArNDU4LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFi
bGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBib29sZWFu
TGl0ZXJhbC52YWx1ZSgpID8gInRydWUiIDogImZhbHNlIiwgIik7XG4iKSk7Ci0gICAgbV9zdGFj
ay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGJvb2xlYW5MaXRl
cmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbCkKQEAgLTQyNiw3ICs0NjgsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFy
aWFibGVOYW1lLCAiID0gIiwgbWFuZ2xlZFR5cGVOYW1lLCAnLicsIG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVt
ZXJhdGlvbk1lbWJlcigpKSwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5h
bWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCB2YXJp
YWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
OjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQpAQCAtNDM0LDM3ICs0NzYsMzkgQEAgdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJl
c3Npb24pOwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpE
b3RFeHByZXNzaW9uJikKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUg
bG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7
CisgICAgYXBwZW5kUmlnaHRWYWx1ZShkb3RFeHByZXNzaW9uLCAiZHVtbXkiKTsKIH0KIAogdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6R2xvYmFsVmFyaWFibGVSZWZl
cmVuY2UmIGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlKQogewotICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgYXV0byB2YWx1ZU5hbWUgPSBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVO
ZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5iYXNl
KCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidGhyZWFkICIsIG1h
bmdsZWRUeXBlTmFtZSwgIiYgIiwgdmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFz
dCgpLCAiLT4iLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoZ2xv
YmFsVmFyaWFibGVSZWZlcmVuY2Uuc3RydWN0RmllbGQoKSksICI7XG4iKSk7Ci0gICAgbV9zdGFj
ay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoInRocmVhZCAiLCBtYW5nbGVkVHlwZU5hbWUsICIqICIsIHBvaW50ZXJOYW1lLCAiID0g
JiIsIHRha2VMYXN0VmFsdWUoKSwgIi0+IiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1
Y3R1cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xu
IikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5h
bWUsICcgJywgdmFsdWVOYW1lLCAiID0gIiwgIioiLCBwb2ludGVyTmFtZSwgIjtcbiIpKTsKKyAg
ICBhcHBlbmRMZWZ0VmFsdWUoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2UsIHZhbHVlTmFtZSwgcG9p
bnRlck5hbWUpOwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
OjpJbmRleEV4cHJlc3Npb24mKQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCiB7CiAgICAgLy8gVGhpcyBz
aG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9zdGFjay5hcHBlbmQo
ImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShpbmRleEV4cHJlc3Npb24sICJkdW1teSIp
OwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24mKQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24p
CiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2Ug
dGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24sICJkdW1teSIpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0
aW9uKQpAQCAtNDc2LDcgKzUyMCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdChBU1QKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODE2MCBJbXBsZW1lbnQgcXVhbGlmaWVycy4KICAgICBpZiAodmFyaWFibGVEZWNs
YXJhdGlvbi5pbml0aWFsaXplcigpKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFy
aWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFi
bGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2su
dGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIHRha2VMYXN0VmFsdWUoKSwgIjtc
biIpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50
eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKIH0KQEAgLTQ4NCwxMSArNTI4LDEy
IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3Np
Z25tZW50RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4
cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRvIGxlZnROYW1lID0gbV9zdGFjay50YWtlTGFzdCgp
OworICAgIGF1dG8gcG9pbnRlck5hbWUgPSB0YWtlTGFzdExlZnRWYWx1ZSgpOwogICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKLSAgICBhdXRvIHJp
Z2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcobGVmdE5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7Ci0gICAgbV9z
dGFjay5hcHBlbmQocmlnaHROYW1lKTsKKyAgICBhdXRvIHJpZ2h0TmFtZSA9IHRha2VMYXN0VmFs
dWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBwb2lu
dGVyTmFtZSwgIikgKiIsIHBvaW50ZXJOYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOwor
ICAgIC8vbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIqIiwgcG9pbnRlck5hbWUs
ICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShhc3NpZ25t
ZW50RXhwcmVzc2lvbiwgcmlnaHROYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpAQCAtNDk2
LDcgKzU0MSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAg
ICBWZWN0b3I8U3RyaW5nPiBhcmd1bWVudE5hbWVzOwogICAgIGZvciAoYXV0byYgYXJndW1lbnQg
OiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoYXJndW1lbnQpOwotICAgICAgICBhcmd1bWVudE5hbWVzLmFwcGVuZChtX3N0YWNrLnRha2VM
YXN0KCkpOworICAgICAgICBhcmd1bWVudE5hbWVzLmFwcGVuZCh0YWtlTGFzdFZhbHVlKCkpOwog
ICAgIH0KICAgICBBU1NFUlQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7CiAgICAgYXV0byBp
dGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24o
KSk7CkBAIC01MDksNyArNTU0LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVAogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0p
OwogICAgIH0KICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7Ci0gICAgbV9zdGFj
ay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGNhbGxFeHByZXNz
aW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKQEAgLTUxNywyNiAr
NTYyLDMwIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBT
dHJpbmcgcmVzdWx0OwogICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lv
bi5saXN0KCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwotICAg
ICAgICByZXN1bHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHJlc3VsdCA9IHRha2VM
YXN0VmFsdWUoKTsKICAgICB9Ci0gICAgbV9zdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICBhcHBl
bmRSaWdodFZhbHVlKGNvbW1hRXhwcmVzc2lvbiwgcmVzdWx0KTsKIH0KIAogdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJl
ZmVyZW5jZUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNl
RXhwcmVzc2lvbi5wb2ludGVyKCkpOwotICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0
KCk7CisgICAgYXV0byByaWdodCA9IHRha2VMYXN0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhBU1Q6OnRvU3RyaW5nKCpkZXJlZmVyZW5jZUV4cHJlc3Npb24udHlw
ZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpLCAnICcsIG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAiJiAi
LCB2YXJpYWJsZU5hbWUsICIgPSAqIiwgcmlnaHQsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKKyAgICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigp
LnJlc29sdmVkVHlwZSgpKSwgJyAnLCBwb2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0LCAiO1xuIikp
OworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAn
LCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJpZiAoIiwgcG9pbnRlck5hbWUsICIpICIsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCBy
aWdodCwgIjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImVs
c2UgIiwgbWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSwgJygnLCB2YXJpYWJsZU5hbWUsICIpO1xuIikp
OworICAgIGFwcGVuZExlZnRWYWx1ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24sIHZhcmlhYmxlTmFt
ZSwgcG9pbnRlck5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCiB7CiAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7Ci0gICAgYXV0byBsZWZ0
ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gbGVmdCA9IHRha2VMYXN0VmFsdWUoKTsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAg
YXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIHJpZ2h0ID0gdGFrZUxh
c3RWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZShsb2dpY2FsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcg
JywgdmFyaWFibGVOYW1lLCAiID0gIiwgbGVmdCkpOwogICAgIHN3aXRjaCAobG9naWNhbEV4cHJl
c3Npb24udHlwZSgpKSB7CkBAIC01NDksMjIgKzU5OCwyMiBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcocmlnaHQsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5h
cHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGxvZ2ljYWxFeHByZXNz
aW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiB7
CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7
Ci0gICAgYXV0byBvcGVyYW5kID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gb3BlcmFu
ZCA9IHRha2VMYXN0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobG9naWNhbE5vdEV4cHJlc3Npb24ucmVzb2x2
ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICEiLCBvcGVyYW5kLCAiO1xuIikpOwot
ICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShs
b2dpY2FsTm90RXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYg
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7Ci0gICAgYXV0byBsVmFs
dWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBsVmFsdWUgPSB0YWtlTGFzdFZhbHVl
KCk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsK
ICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBpZiAo
aXM8QVNUOjpQb2ludGVyVHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZl
ZFR5cGUoKSkpCkBAIC01NzQsMTYgKzYyMywxNiBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAmKCIsIGxWYWx1ZSwg
IlswXSksICIsIGFycmF5VHlwZS5udW1FbGVtZW50cygpLCAiIH07XG4iKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5h
bWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAmIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7Ci0g
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYg
bWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9p
bnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwotICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50
YWtlTGFzdCgpOworICAgIGF1dG8gcG9pbnRlciA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CiAgICAg
YXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVO
YW1lLCAiID0gJiIsIGxWYWx1ZSwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJs
ZU5hbWUpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgp
KSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBwb2ludGVyLCAiO1xuIikpOworICAgIGFwcGVu
ZFJpZ2h0VmFsdWUobWFrZVBvaW50ZXJFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uJikKQEAgLTU5NSwyNyArNjQ0LDMxIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOwotICAgIGF1dG8gY2hl
Y2sgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBjaGVjayA9IHRha2VMYXN0VmFsdWUo
KTsKIAogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7
CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSh0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFy
aWFibGVOYW1lLCAiO1xuIikpOwogCiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJpZiAoIiwgY2hlY2ssICIpIHtcbiIpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVy
bmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwg
IjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVO
YW1lLCAiID0gIiwgdGFrZUxhc3RWYWx1ZSgpLCAiO1xuIikpOwogICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn0gZWxzZSB7XG4iKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4
cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIp
KTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAi
ID0gIiwgdGFrZUxhc3RWYWx1ZSgpLCAiO1xuIikpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5k
UmlnaHRWYWx1ZSh0ZXJuYXJ5RXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZh
cmlhYmxlUmVmZXJlbmNlKQogewogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJs
ZSgpKTsKKyAgICAvLyBGSVhNRTogQXJlICB3ZSBhbHdheXMgdGhyZWFkIGFkZHIgc3BhY2UgaGVy
ZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2NiAKKyAgICAv
LyBPT1BTCiAgICAgYXV0byBpdGVyYXRvciA9IG1fdmFyaWFibGVNYXBwaW5nLmZpbmQodmFyaWFi
bGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdmFyaWFi
bGVNYXBwaW5nLmVuZCgpKTsKLSAgICBtX3N0YWNrLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOwor
ICAgIGF1dG8gcG9pbnRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInRocmVhZCAiLCBtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUodmFyaWFibGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLCAiKiAi
LCBwb2ludGVyTmFtZSwgIiA9ICYiLCBpdGVyYXRvci0+dmFsdWUsICI7XG4iKSk7CisgICAgYXBw
ZW5kTGVmdFZhbHVlKHZhcmlhYmxlUmVmZXJlbmNlLCBpdGVyYXRvci0+dmFsdWUsIHBvaW50ZXJO
YW1lKTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHBy
ZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2
aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDIx
ICs2Myw2IEBAIHN0YXRpYyBTdHJpbmcgbWFwRnVuY3Rpb25OYW1lKFN0cmluZyYgZnUKICAgICBy
ZXR1cm4gZnVuY3Rpb25OYW1lOwogfQogCi1zdGF0aWMgU3RyaW5nIGNvbnZlcnRBZGRyZXNzU3Bh
Y2UoQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQotewotICAgIHN3aXRjaCAoYWRkcmVz
c1NwYWNlKSB7Ci0gICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6Ci0gICAgICAg
IHJldHVybiAiY29uc3RhbnQiX3N0cjsKLSAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpEZXZp
Y2U6Ci0gICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7Ci0gICAgY2FzZSBBU1Q6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkZ3JvdXA6Ci0gICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQpOwotICAgICAgICByZXR1cm4gInRocmVhZCJfc3RyOwotICAgIH0KLX0KLQog
c3RhdGljIFN0cmluZyBhdG9taWNOYW1lKFN0cmluZyBpbnB1dCkKIHsKICAgICBpZiAoaW5wdXQg
PT0gIkFkZCIpCkBAIC05Niw3ICs4MSw3IEBAIHN0YXRpYyBTdHJpbmcgYXRvbWljTmFtZShTdHJp
bmcgaW5wdXQpCiAgICAgICAgIHJldHVybiAiZmV0Y2hfeG9yIl9zdHI7CiB9CiAKLVN0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiwgU3RyaW5nJiBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNp
Y3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQorU3RyaW5nIHdyaXRlTmF0aXZl
RnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9uTmFtZSwgSW50cmluc2ljcyYgaW50cmlu
c2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIGNvbnN0IGNoYXIqIG1lbXNldFplcm9GdW5jdGlv
bk5hbWUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzQ2FzdCgpKSB7CkBAIC0xMDQsOCArODksNyBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlmICghbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRw
dXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWV0YWxSZXR1cm5OYW1lLCAiIHg7XG4iKSk7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHRocmVhZCBjaGFyKiBwdHIgPSBzdGF0
aWNfY2FzdDx0aHJlYWQgY2hhcio+KHN0YXRpY19jYXN0PHRocmVhZCB2b2lkKj4oJngpKTtcbiIp
OwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKCIsIG1ldGFsUmV0dXJuTmFtZSwgIik7ICsraSkgcHRy
W2ldID0gMDtcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICAiLCBtZW1zZXRaZXJvRnVuY3Rpb25OYW1lLCAiKHgpO1xuIikpOwogICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4geDtcbiIpOwogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKQEAgLTI0Niw5ICsyMzAsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24udHlwZSgpKTsKLSAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJltdLiJfc3RyLmxlbmd0aCgpKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcg
Jywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwg
bWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gJih2LnBvaW50ZXJbbl0pO1xuIikpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIGlmIChuIDwgdi5sZW5ndGgpIHJldHVybiAm
KHYucG9pbnRlcltuXSk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBy
ZXR1cm4gbnVsbHB0cjtcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7
CiAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQpAQCAtMzc2
LDcgKzM2MCw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlw
ZSgpKTsKICAgICAgICAgICAgIGF1dG8gZm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3Vy
dGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAgICAgICAgICBhdXRvIGZvdXJ0
aEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZm91cnRoQXJn
dW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgY29udmVy
dEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3Vt
ZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBjb21wYXJlLCAiLCB0
aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZm91cnRoQXJn
dW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7
XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lk
ICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0cmluZyhmaXJzdEFyZ3VtZW50QWRkcmVz
c1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRB
cmd1bWVudCwgIiBjb21wYXJlLCAiLCB0aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIHRvU3Ry
aW5nKGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50
ZWUsICIqIG91dCkge1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgJmNvbXBhcmUs
IGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOwogICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiAgICAqb3V0ID0gY29tcGFyZTtcbiIpOwogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwpAQCAtMzk0LDcgKzM3OCw3IEBAIFN0cmluZyB3cml0
ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50
QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CiAgICAg
ICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICBhdXRvIG5h
bWUgPSBhdG9taWNOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmlu
ZygiSW50ZXJsb2NrZWQiX3N0ci5sZW5ndGgoKSkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBjb252ZXJ0
QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZpcnN0QXJndW1l
bnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIG9wZXJhbmQsICIsIGNv
bnZlcnRBZGRyZXNzU3BhY2UodGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgdGhpcmRB
cmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0cmlu
ZyhmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwg
Iiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBvcGVyYW5kLCAiLCB0b1N0cmluZyh0aGly
ZEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGlyZEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0
KSB7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAq
b3V0ID0gYXRvbWljX2ZldGNoXyIsIG5hbWUsICJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVu
Y3Rpb25Xcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgJKHJldmlzaW9uIDI0NjMy
NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0
aXZlRnVuY3Rpb25Xcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1l
c3BhY2UgTWV0YWwgewogCiBjbGFzcyBUeXBlTmFtZXI7CiAKLVN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIFN0cmluZyYgb3V0cHV0RnVu
Y3Rpb25OYW1lLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJik7CitTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcmIG91dHB1dEZ1
bmN0aW9uTmFtZSwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIGNvbnN0IGNoYXIqIG1lbXNldFpl
cm9GdW5jdGlvbk5hbWUpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJl
dmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBA
IHZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW8KICAgICAgICAgQVNTRVJU
KGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCks
ICJ7IFxuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAg
IiwgdG9TdHJpbmcoYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBhcnJh
eVJlZmVyZW5jZVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIqIHBvaW50ZXI7XG4iKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdWludCBsZW5ndGg7XG4iKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB1aW50MzJfdCBsZW5ndGg7XG4iKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBBU1NFUlQoaXM8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjM5NCw2ICs2Mzk0LDEwIEBACiAJCTFD
ODQwQjk5MjFFQzQwMDgwMEQwNTAwRCAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODQwQjlBMjFFQzQwMDkwMEQwNTAwRCAvKiBXSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5
UG9pbnRJdGVtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzg0MEI5QjIxRUM0
MDA5MDBEMDUwMEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDODZDQTRCMjJBQTE5
RkYwMDFCRjk2MSAvKiBXSExTTENvbXB1dGVEaW1lbnNpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzg2Q0E0QzIyQUExOUZGMDAxQkY5NjEgLyogV0hMU0xDb21wdXRlRGltZW5zaW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTENvbXB1dGVEaW1lbnNpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDODZDQTRFMjJBQTIzQzkwMDFCRjk2MSAvKiBHUFVQaXBlbGluZU1l
dGFsQ29udmVydExheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVQaXBlbGluZU1ldGFs
Q29udmVydExheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDODZDQTRG
MjJBQTIzQzkwMDFCRjk2MSAvKiBHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzkwNERGOTBCQTlEMkM4MDA4MUU5RDAgLyogVmVyc2lvbi54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzlBRTVDQTIxRUQ5REY1MDA2OUQ1RjIgLyog
V0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSGlnaFpv
bWJpZUZpbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOUFFNUNCMjFF
RDlERjUwMDY5RDVGMiAvKiBXSExTTEhpZ2hab21iaWVGaW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xIaWdoWm9tYmllRmluZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTQ0OCw2ICsyNTQ1Miw4IEBACiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLywKIAkJCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUw
MEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKIAkJCQkxQzg0MEI5NzIxRUM0MDA3MDBEMDUwMEQg
LyogV0hMU0xDaGVja2VyLmggKi8sCisJCQkJMUM4NkNBNEIyMkFBMTlGRjAwMUJGOTYxIC8qIFdI
TFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwICovLAorCQkJCTFDODZDQTRDMjJBQTE5RkYwMDFCRjk2
MSAvKiBXSExTTENvbXB1dGVEaW1lbnNpb25zLmggKi8sCiAJCQkJMUNBMEMyRTQyMUVFRDEyQTAw
QTExODYwIC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwICovLAogCQkJCTFDQTBDMkU1
MjFFRUQxMkEwMEExMTg2MCAvKiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmggKi8sCiAJCQkJ
MUM4NDBCOTkyMUVDNDAwODAwRDA1MDBEIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNw
cCAqLywKQEAgLTI1OTg3LDYgKzI1OTkzLDggQEAKIAkJCQlEMDg5MDM0MDIyNDFDRTQ2MDBGM0Y0
NDAgLyogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyTWV0YWwubW0gKi8sCiAJCQkJRDA4OTAzM0IyMjQx
NzlCNTAwRjNGNDQwIC8qIEdQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tICovLAogCQkJCUQwODdD
RTNDMjFBQ0E5NDIwMEJERTE3NCAvKiBHUFVEZXZpY2VNZXRhbC5tbSAqLywKKwkJCQkxQzg2Q0E0
RTIyQUEyM0M5MDAxQkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuY3BwICov
LAorCQkJCTFDODZDQTRGMjJBQTIzQzkwMDFCRjk2MSAvKiBHUFVQaXBlbGluZU1ldGFsQ29udmVy
dExheW91dC5oICovLAogCQkJCUQwODdDRTNCMjFBQ0E5NDIwMEJERTE3NCAvKiBHUFVQcm9ncmFt
bWFibGVQYXNzRW5jb2Rlck1ldGFsLm1tICovLAogCQkJCUQwODdDRTM5MjFBQ0E5NDIwMEJERTE3
NCAvKiBHUFVRdWV1ZU1ldGFsLm1tICovLAogCQkJCUQwODdDRTNBMjFBQ0E5NDIwMEJERTE3NCAv
KiBHUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJpbmRHcm91cExheW91dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCaW5kR3JvdXBMYXlvdXQu
aAkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVUJpbmRHcm91cExheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKICNp
ZiBVU0UoTUVUQUwpCiBPQkpDX1BST1RPQ09MKE1UTEFyZ3VtZW50RW5jb2Rlcik7CkBAIC00Nyw3
ICs0OCwzNyBAQCBjbGFzcyBHUFVCaW5kR3JvdXBMYXlvdXQgOiBwdWJsaWMgUmVmQ291CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZlB0cjxHUFVCaW5kR3JvdXBMYXlvdXQ+IHRyeUNyZWF0ZShjb25z
dCBHUFVEZXZpY2UmLCBjb25zdCBHUFVCaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yJik7CiAKLSAg
ICB1c2luZyBCaW5kaW5nc01hcFR5cGUgPSBIYXNoTWFwPHVpbnQ2NF90LCBHUFVCaW5kR3JvdXBM
YXlvdXRCaW5kaW5nLCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj47CisgICAgc3RydWN0IFVuaWZvcm1CdWZmZXIgewor
ICAgICAgICB1bnNpZ25lZCBpbnRlcm5hbExlbmd0aE5hbWU7CisgICAgfTsKKworICAgIHN0cnVj
dCBEeW5hbWljVW5pZm9ybUJ1ZmZlciB7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsTGVuZ3Ro
TmFtZTsKKyAgICB9OworCisgICAgc3RydWN0IFNhbXBsZXIgeworICAgIH07CisKKyAgICBzdHJ1
Y3QgU2FtcGxlZFRleHR1cmUgeworICAgIH07CisKKyAgICBzdHJ1Y3QgU3RvcmFnZUJ1ZmZlciB7
CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsTGVuZ3RoTmFtZTsKKyAgICB9OworCisgICAgc3Ry
dWN0IER5bmFtaWNTdG9yYWdlQnVmZmVyIHsKKyAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxMZW5n
dGhOYW1lOworICAgIH07CisKKyAgICB1c2luZyBJbnRlcm5hbEJpbmRpbmdEZXRhaWxzID0gVmFy
aWFudDxVbmlmb3JtQnVmZmVyLCBEeW5hbWljVW5pZm9ybUJ1ZmZlciwgU2FtcGxlciwgU2FtcGxl
ZFRleHR1cmUsIFN0b3JhZ2VCdWZmZXIsIER5bmFtaWNTdG9yYWdlQnVmZmVyPjsKKworICAgIHN0
cnVjdCBCaW5kaW5nIHsKKyAgICAgICAgR1BVQmluZEdyb3VwTGF5b3V0QmluZGluZyBleHRlcm5h
bEJpbmRpbmc7CisgICAgICAgIHVuc2lnbmVkIGludGVybmFsTmFtZTsKKyAgICAgICAgSW50ZXJu
YWxCaW5kaW5nRGV0YWlscyBpbnRlcm5hbEJpbmRpbmdEZXRhaWxzOworICAgIH07CisKKyAgICB1
c2luZyBCaW5kaW5nc01hcFR5cGUgPSBIYXNoTWFwPHVpbnQ2NF90LCBCaW5kaW5nLCBXVEY6Oklu
dEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90Pj47CiAgICAgY29uc3QgQmluZGluZ3NNYXBUeXBlJiBiaW5kaW5nc01hcCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmluZGluZ3NNYXA7IH0KICNpZiBVU0UoTUVUQUwpCiAgICAgTVRMQXJndW1lbnRF
bmNvZGVyICp2ZXJ0ZXhFbmNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhFbmNvZGVyLmdl
dCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29t
cHV0ZVBpcGVsaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVUNvbXB1dGVQaXBlbGluZS5oCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQ29tcHV0ZVBpcGVsaW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNp
bmNsdWRlICJXSExTTFByZXBhcmUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC00OCwx
MCArNDksMTMgQEAgcHVibGljOgogCiAgICAgY29uc3QgUGxhdGZvcm1Db21wdXRlUGlwZWxpbmUq
IHBsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybUNvbXB1
dGVQaXBlbGluZS5nZXQoKTsgfQogCisgICAgV0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zIGNvbXB1
dGVEaW1lbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlRGltZW5zaW9uczsgfQorCiBw
cml2YXRlOgotICAgIEdQVUNvbXB1dGVQaXBlbGluZShQbGF0Zm9ybUNvbXB1dGVQaXBlbGluZVNt
YXJ0UHRyJiYpOworICAgIEdQVUNvbXB1dGVQaXBlbGluZShQbGF0Zm9ybUNvbXB1dGVQaXBlbGlu
ZVNtYXJ0UHRyJiYsIFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyk7CiAKICAgICBQbGF0Zm9ybUNv
bXB1dGVQaXBlbGluZVNtYXJ0UHRyIG1fcGxhdGZvcm1Db21wdXRlUGlwZWxpbmU7CisgICAgV0hM
U0w6OkNvbXB1dGVEaW1lbnNpb25zIG1fY29tcHV0ZURpbWVuc2lvbnMgeyAwLCAwLCAwIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRH
cm91cExheW91dE1ldGFsLm1tCShyZXZpc2lvbiAyNDYzMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3VwTGF5b3V0TWV0YWwubW0JKHdv
cmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDE4IEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMQXJndW1l
bnRFbmNvZGVyPiB0cnkKICAgICByZXR1cm4gZW5jb2RlcjsKIH07CiAKK3N0YXRpYyBSZXRhaW5Q
dHI8TVRMQXJndW1lbnREZXNjcmlwdG9yPiBhcmd1bWVudERlc2NyaXB0b3IoTVRMRGF0YVR5cGUg
ZGF0YVR5cGUsIE5TVUludGVnZXIgaW5kZXgpCit7CisgICAgUmV0YWluUHRyPE1UTEFyZ3VtZW50
RGVzY3JpcHRvcj4gbXRsQXJndW1lbnQ7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIG10bEFyZ3VtZW50ID0gYWRvcHROUyhbTVRMQXJndW1lbnREZXNjcmlwdG9yIG5ld10p
OworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBbbXRsQXJndW1lbnQgc2V0
RGF0YVR5cGU6ZGF0YVR5cGVdOworICAgIFttdGxBcmd1bWVudCBzZXRJbmRleDppbmRleF07Cisg
ICAgcmV0dXJuIG10bEFyZ3VtZW50OworfQorCiBSZWZQdHI8R1BVQmluZEdyb3VwTGF5b3V0PiBH
UFVCaW5kR3JvdXBMYXlvdXQ6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29u
c3QgR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBpZiAo
IWRldmljZS5wbGF0Zm9ybURldmljZSgpKSB7CkBAIC04Nyw0OCArOTksNzMgQEAgUmVmUHRyPEdQ
VUJpbmRHcm91cExheW91dD4gR1BVQmluZEdyb3VwTAogICAgIEFyZ3VtZW50QXJyYXkgdmVydGV4
QXJnc0FycmF5LCBmcmFnbWVudEFyZ3NBcnJheSwgY29tcHV0ZUFyZ3NBcnJheTsKICAgICBCaW5k
aW5nc01hcFR5cGUgYmluZGluZ3NNYXA7CiAKKyAgICB1bnNpZ25lZCBpbnRlcm5hbE5hbWUgPSAw
OworICAgIHVuc2lnbmVkIGludGVybmFsTGVuZ3RoQmFzZSA9IGRlc2NyaXB0b3IuYmluZGluZ3Mu
c2l6ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgYmluZGluZyA6IGRlc2NyaXB0b3IuYmluZGlu
Z3MpIHsKLSAgICAgICAgaWYgKCFiaW5kaW5nc01hcC5hZGQoYmluZGluZy5iaW5kaW5nLCBiaW5k
aW5nKSkgeworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gZXh0cmFJbmRleDsKKyAgICAgICAg
YXV0byBpbnRlcm5hbERldGFpbHMgPSAoWyZdKCkgLT4gR1BVQmluZEdyb3VwTGF5b3V0OjpJbnRl
cm5hbEJpbmRpbmdEZXRhaWxzIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYmluZGluZy50eXBlKSB7
CisgICAgICAgICAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgorICAgICAg
ICAgICAgICAgIGV4dHJhSW5kZXggPSBpbnRlcm5hbExlbmd0aEJhc2UrKzsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR1BVQmluZEdyb3VwTGF5b3V0OjpVbmlmb3JtQnVmZmVyIHsgKmV4dHJhSW5k
ZXggfTsKKyAgICAgICAgICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OkR5bmFtaWNVbmlmb3JtQnVm
ZmVyOgorICAgICAgICAgICAgICAgIGV4dHJhSW5kZXggPSBpbnRlcm5hbExlbmd0aEJhc2UrKzsK
KyAgICAgICAgICAgICAgICByZXR1cm4gR1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWljVW5pZm9y
bUJ1ZmZlciB7ICpleHRyYUluZGV4IH07CisgICAgICAgICAgICBjYXNlIEdQVUJpbmRpbmdUeXBl
OjpTYW1wbGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBHUFVCaW5kR3JvdXBMYXlvdXQ6OlNh
bXBsZXIgeyB9OworICAgICAgICAgICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U2FtcGxlZFRleHR1
cmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91cExheW91dDo6U2FtcGxlZFRl
eHR1cmUgeyB9OworICAgICAgICAgICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U3RvcmFnZUJ1ZmZl
cjoKKyAgICAgICAgICAgICAgICBleHRyYUluZGV4ID0gaW50ZXJuYWxMZW5ndGhCYXNlKys7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91cExheW91dDo6U3RvcmFnZUJ1ZmZlciB7
ICpleHRyYUluZGV4IH07CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVChiaW5kaW5nLnR5cGUgPT0gR1BVQmluZGluZ1R5cGU6OkR5bmFtaWNTdG9yYWdlQnVmZmVy
KTsKKyAgICAgICAgICAgICAgICBleHRyYUluZGV4ID0gaW50ZXJuYWxMZW5ndGhCYXNlKys7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdQVUJpbmRHcm91cExheW91dDo6RHluYW1pY1N0b3JhZ2VC
dWZmZXIgeyAqZXh0cmFJbmRleCB9OworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworICAg
ICAgICBCaW5kaW5nIGJpbmRpbmdEZXRhaWxzID0geyBiaW5kaW5nLCBpbnRlcm5hbE5hbWUrKywg
V1RGTW92ZShpbnRlcm5hbERldGFpbHMpIH07CisgICAgICAgIGlmICghYmluZGluZ3NNYXAuYWRk
KGJpbmRpbmcuYmluZGluZywgYmluZGluZ0RldGFpbHMpKSB7CiAgICAgICAgICAgICBMT0coV2Vi
R1BVLCAiR1BVQmluZEdyb3VwTGF5b3V0Ojp0cnlDcmVhdGUoKTogRHVwbGljYXRlIGJpbmRpbmcg
JXUgZm91bmQgaW4gR1BVQmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciEiLCBiaW5kaW5nLmJpbmRp
bmcpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBS
ZXRhaW5QdHI8TVRMQXJndW1lbnREZXNjcmlwdG9yPiBtdGxBcmd1bWVudDsKKyAgICAgICAgUmV0
YWluUHRyPE1UTEFyZ3VtZW50RGVzY3JpcHRvcj4gbXRsQXJndW1lbnQgPSBhcmd1bWVudERlc2Ny
aXB0b3IoTVRMRGF0YVR5cGVGb3JCaW5kaW5nVHlwZShiaW5kaW5nLnR5cGUpLCBiaW5kaW5nRGV0
YWlscy5pbnRlcm5hbE5hbWUpOwogCi0gICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICAgICAgbXRsQXJndW1lbnQgPSBhZG9wdE5TKFtNVExBcmd1bWVudERlc2NyaXB0b3Ig
bmV3XSk7Ci0gICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIGlmICgh
bXRsQXJndW1lbnQpIHsKICAgICAgICAgICAgIExPRyhXZWJHUFUsICJHUFVCaW5kR3JvdXBMYXlv
dXQ6OnRyeUNyZWF0ZSgpOiBVbmFibGUgdG8gY3JlYXRlIE1UTEFyZ3VtZW50RGVzY3JpcHRvciBm
b3IgYmluZGluZyAldSEiLCBiaW5kaW5nLmJpbmRpbmcpOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBbbXRsQXJndW1lbnQgc2V0RGF0YVR5cGU6TVRM
RGF0YVR5cGVGb3JCaW5kaW5nVHlwZShiaW5kaW5nLnR5cGUpXTsKLSAgICAgICAgW210bEFyZ3Vt
ZW50IHNldEluZGV4OmJpbmRpbmcuYmluZGluZ107Ci0KLSAgICAgICAgaWYgKGJpbmRpbmcudmlz
aWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KQotICAgICAgICAgICAg
YXBwZW5kQXJndW1lbnRUb0FycmF5KHZlcnRleEFyZ3NBcnJheSwgbXRsQXJndW1lbnQpOwotICAg
ICAgICBpZiAoYmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpG
cmFnbWVudCkKLSAgICAgICAgICAgIGFwcGVuZEFyZ3VtZW50VG9BcnJheShmcmFnbWVudEFyZ3NB
cnJheSwgbXRsQXJndW1lbnQpOwotICAgICAgICBpZiAoYmluZGluZy52aXNpYmlsaXR5ICYgR1BV
U2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlKQotICAgICAgICAgICAgYXBwZW5kQXJndW1l
bnRUb0FycmF5KGNvbXB1dGVBcmdzQXJyYXksIG10bEFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICBS
ZXRhaW5QdHI8TVRMQXJndW1lbnRFbmNvZGVyPiB2ZXJ0ZXgsIGZyYWdtZW50LCBjb21wdXRlOwot
Ci0gICAgaWYgKHZlcnRleEFyZ3NBcnJheSkgewotICAgICAgICBpZiAoISh2ZXJ0ZXggPSB0cnlD
cmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2aWNlLCB2ZXJ0ZXhBcmdzQXJyYXkpKSkKKyAgICAg
ICAgYXV0byBhZGRJbmRpY2VzID0gWyZdKEFyZ3VtZW50QXJyYXkmIGFycmF5KSAtPiBib29sIHsK
KyAgICAgICAgICAgIGFwcGVuZEFyZ3VtZW50VG9BcnJheShhcnJheSwgbXRsQXJndW1lbnQpOwor
ICAgICAgICAgICAgaWYgKGV4dHJhSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8
TVRMQXJndW1lbnREZXNjcmlwdG9yPiBtdGxBcmd1bWVudCA9IGFyZ3VtZW50RGVzY3JpcHRvcihN
VExEYXRhVHlwZVVJbnQyLCAqZXh0cmFJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFtdGxB
cmd1bWVudCkgeworICAgICAgICAgICAgICAgICAgICBMT0coV2ViR1BVLCAiR1BVQmluZEdyb3Vw
TGF5b3V0Ojp0cnlDcmVhdGUoKTogVW5hYmxlIHRvIGNyZWF0ZSBNVExBcmd1bWVudERlc2NyaXB0
b3IgZm9yIGJpbmRpbmcgJXUhIiwgYmluZGluZy5iaW5kaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcHBl
bmRBcmd1bWVudFRvQXJyYXkoYXJyYXksIG10bEFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworICAgICAgICBpZiAoKGJpbmRpbmcu
dmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KSAmJiAhYWRkSW5k
aWNlcyh2ZXJ0ZXhBcmdzQXJyYXkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotICAgIGlmIChmcmFnbWVudEFyZ3NBcnJheSkgewotICAgICAgICBpZiAoIShmcmFnbWVudCA9
IHRyeUNyZWF0ZU10bEFyZ3VtZW50RW5jb2RlcihkZXZpY2UsIGZyYWdtZW50QXJnc0FycmF5KSkp
CisgICAgICAgIGlmICgoYmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZs
YWdzOjpGcmFnbWVudCkgJiYgIWFkZEluZGljZXMoZnJhZ21lbnRBcmdzQXJyYXkpKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChjb21wdXRlQXJnc0FycmF5KSB7
Ci0gICAgICAgIGlmICghKGNvbXB1dGUgPSB0cnlDcmVhdGVNdGxBcmd1bWVudEVuY29kZXIoZGV2
aWNlLCBjb21wdXRlQXJnc0FycmF5KSkpCisgICAgICAgIGlmICgoYmluZGluZy52aXNpYmlsaXR5
ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlKSAmJiAhYWRkSW5kaWNlcyhjb21w
dXRlQXJnc0FycmF5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAorICAg
IFJldGFpblB0cjxNVExBcmd1bWVudEVuY29kZXI+IHZlcnRleCwgZnJhZ21lbnQsIGNvbXB1dGU7
CisKKyAgICBpZiAodmVydGV4QXJnc0FycmF5ICYmICEodmVydGV4ID0gdHJ5Q3JlYXRlTXRsQXJn
dW1lbnRFbmNvZGVyKGRldmljZSwgdmVydGV4QXJnc0FycmF5KSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmIChmcmFnbWVudEFyZ3NBcnJheSAmJiAhKGZyYWdtZW50ID0gdHJ5Q3Jl
YXRlTXRsQXJndW1lbnRFbmNvZGVyKGRldmljZSwgZnJhZ21lbnRBcmdzQXJyYXkpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGNvbXB1dGVBcmdzQXJyYXkgJiYgIShjb21wdXRl
ID0gdHJ5Q3JlYXRlTXRsQXJndW1lbnRFbmNvZGVyKGRldmljZSwgY29tcHV0ZUFyZ3NBcnJheSkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgR1BV
QmluZEdyb3VwTGF5b3V0KFdURk1vdmUoYmluZGluZ3NNYXApLCBXVEZNb3ZlKHZlcnRleCksIFdU
Rk1vdmUoZnJhZ21lbnQpLCBXVEZNb3ZlKGNvbXB1dGUpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQmluZEdyb3VwTWV0YWwubW0JKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsMTMgKzcyLDE1IEBAIHN0YXRpYyBPcHRpb25hbDxHUFVCdWZmZXJCaW5k
aW5nPiB0cnlHZXQKICAgICByZXR1cm4gR1BVQnVmZmVyQmluZGluZyB7IGJ1ZmZlckJpbmRpbmcu
YnVmZmVyLmNvcHlSZWYoKSwgYnVmZmVyQmluZGluZy5vZmZzZXQsIGJ1ZmZlckJpbmRpbmcuc2l6
ZSB9OwogfQogCi1zdGF0aWMgdm9pZCBzZXRCdWZmZXJPbkVuY29kZXIoTVRMQXJndW1lbnRFbmNv
ZGVyICphcmd1bWVudEVuY29kZXIsIGNvbnN0IEdQVUJ1ZmZlckJpbmRpbmcmIGJ1ZmZlckJpbmRp
bmcsIHVuc2lnbmVkIGluZGV4KQorc3RhdGljIHZvaWQgc2V0QnVmZmVyT25FbmNvZGVyKE1UTEFy
Z3VtZW50RW5jb2RlciAqYXJndW1lbnRFbmNvZGVyLCBjb25zdCBHUFVCdWZmZXJCaW5kaW5nJiBi
dWZmZXJCaW5kaW5nLCB1bnNpZ25lZCBuYW1lLCB1bnNpZ25lZCBsZW5ndGhOYW1lKQogewogICAg
IEFTU0VSVChhcmd1bWVudEVuY29kZXIgJiYgYnVmZmVyQmluZGluZy5idWZmZXItPnBsYXRmb3Jt
QnVmZmVyKCkpOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIC8vIEJv
dW5kcyBjaGVjayB3aGVuIGNvbnZlcnRpbmcgR1BVQnVmZmVyQmluZGluZyBlbnN1cmVzIHRoYXQg
TlNVSW50ZWdlciBjYXN0IG9mIHVpbnQ2NF90IG9mZnNldCBpcyBzYWZlLgotICAgIFthcmd1bWVu
dEVuY29kZXIgc2V0QnVmZmVyOmJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigp
IG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihidWZmZXJCaW5kaW5nLm9mZnNldCkgYXRJ
bmRleDppbmRleF07CisgICAgW2FyZ3VtZW50RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyQmluZGlu
Zy5idWZmZXItPnBsYXRmb3JtQnVmZmVyKCkgb2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+
KGJ1ZmZlckJpbmRpbmcub2Zmc2V0KSBhdEluZGV4Om5hbWVdOworICAgIHZvaWQqIGxlbmd0aFBv
aW50ZXIgPSBbYXJndW1lbnRFbmNvZGVyIGNvbnN0YW50RGF0YUF0SW5kZXg6bGVuZ3RoTmFtZV07
CisgICAgbWVtY3B5KGxlbmd0aFBvaW50ZXIsICZidWZmZXJCaW5kaW5nLnNpemUsIHNpemVvZih1
aW50NjRfdCkpOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAgICAgCkBAIC0x
NzEsMTIgKzE3MywxMiBAQCBSZWZQdHI8R1BVQmluZEdyb3VwPiBHUFVCaW5kR3JvdXA6OnRyeUNy
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBhdXRvIGxh
eW91dEJpbmRpbmcgPSBsYXlvdXRJdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIGlmIChsYXlvdXRC
aW5kaW5nLnZpc2liaWxpdHkgPT0gR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpOb25lKQorICAg
ICAgICBpZiAobGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRpbmcudmlzaWJpbGl0eSA9PSBHUFVT
aGFkZXJTdGFnZUJpdDo6RmxhZ3M6Ok5vbmUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBib29sIGlzRm9yVmVydGV4ID0gbGF5b3V0QmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hh
ZGVyU3RhZ2VCaXQ6OkZsYWdzOjpWZXJ0ZXg7Ci0gICAgICAgIGJvb2wgaXNGb3JGcmFnbWVudCA9
IGxheW91dEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJh
Z21lbnQ7Ci0gICAgICAgIGJvb2wgaXNGb3JDb21wdXRlID0gbGF5b3V0QmluZGluZy52aXNpYmls
aXR5ICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlOworICAgICAgICBib29sIGlz
Rm9yVmVydGV4ID0gbGF5b3V0QmluZGluZy5leHRlcm5hbEJpbmRpbmcudmlzaWJpbGl0eSAmIEdQ
VVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4OworICAgICAgICBib29sIGlzRm9yRnJhZ21l
bnQgPSBsYXlvdXRCaW5kaW5nLmV4dGVybmFsQmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVy
U3RhZ2VCaXQ6OkZsYWdzOjpGcmFnbWVudDsKKyAgICAgICAgYm9vbCBpc0ZvckNvbXB1dGUgPSBs
YXlvdXRCaW5kaW5nLmV4dGVybmFsQmluZGluZy52aXNpYmlsaXR5ICYgR1BVU2hhZGVyU3RhZ2VC
aXQ6OkZsYWdzOjpDb21wdXRlOwogCiAgICAgICAgIGlmIChpc0ZvclZlcnRleCAmJiAhdmVydGV4
RW5jb2RlcikgewogICAgICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBObyB2ZXJ0ZXggYXJndW1l
bnQgZW5jb2RlciBmb3VuZCBmb3IgYmluZGluZyAldSEiLCBmdW5jdGlvbk5hbWUsIGluZGV4KTsK
QEAgLTE5MSwzOSArMTkzLDM5IEBAIFJlZlB0cjxHUFVCaW5kR3JvdXA+IEdQVUJpbmRHcm91cDo6
dHJ5Q3IKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAg
c3dpdGNoIChsYXlvdXRCaW5kaW5nLnR5cGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
bW9yZSByZXNvdXJjZSB0eXBlcy4KLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGF2b2lkIHRo
aXMgdWdseSBzd2l0Y2gtb24tdHlwZSB1c2luZyB2aXJ0dWFsIGZ1bmN0aW9ucyBpZiBHUFVCaW5k
aW5nUmVzb3VyY2UgaXMgcmVmYWN0b3JlZCBhcyBhIGJhc2UgY2xhc3MgcmF0aGVyIHRoYW4gYSBW
YXJpYW50LgotICAgICAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpVbmlmb3JtQnVmZmVyOgotICAg
ICAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyOiB7CisgICAgICAgIGF1dG8g
aGFuZGxlQnVmZmVyID0gWyZdKHVuc2lnbmVkIGludGVybmFsTGVuZ3RoTmFtZSkgLT4gYm9vbCB7
CiAgICAgICAgICAgICBhdXRvIGJ1ZmZlclJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc0J1ZmZl
ckJpbmRpbmcocmVzb3VyY2VCaW5kaW5nLnJlc291cmNlLCBmdW5jdGlvbk5hbWUpOwogICAgICAg
ICAgICAgaWYgKCFidWZmZXJSZXNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAoaXNGb3JW
ZXJ0ZXgpCi0gICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKHZlcnRleEVuY29kZXIs
ICpidWZmZXJSZXNvdXJjZSwgaW5kZXgpOworICAgICAgICAgICAgICAgIHNldEJ1ZmZlck9uRW5j
b2Rlcih2ZXJ0ZXhFbmNvZGVyLCAqYnVmZmVyUmVzb3VyY2UsIGxheW91dEJpbmRpbmcuaW50ZXJu
YWxOYW1lLCBpbnRlcm5hbExlbmd0aE5hbWUpOwogICAgICAgICAgICAgaWYgKGlzRm9yRnJhZ21l
bnQpCi0gICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKGZyYWdtZW50RW5jb2Rlciwg
KmJ1ZmZlclJlc291cmNlLCBpbmRleCk7CisgICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNv
ZGVyKGZyYWdtZW50RW5jb2RlciwgKmJ1ZmZlclJlc291cmNlLCBsYXlvdXRCaW5kaW5nLmludGVy
bmFsTmFtZSwgaW50ZXJuYWxMZW5ndGhOYW1lKTsKICAgICAgICAgICAgIGlmIChpc0ZvckNvbXB1
dGUpCi0gICAgICAgICAgICAgICAgc2V0QnVmZmVyT25FbmNvZGVyKGNvbXB1dGVFbmNvZGVyLCAq
YnVmZmVyUmVzb3VyY2UsIGluZGV4KTsKKyAgICAgICAgICAgICAgICBzZXRCdWZmZXJPbkVuY29k
ZXIoY29tcHV0ZUVuY29kZXIsICpidWZmZXJSZXNvdXJjZSwgbGF5b3V0QmluZGluZy5pbnRlcm5h
bE5hbWUsIGludGVybmFsTGVuZ3RoTmFtZSk7CiAgICAgICAgICAgICBib3VuZEJ1ZmZlcnMuYXBw
ZW5kKGJ1ZmZlclJlc291cmNlLT5idWZmZXIuY29weVJlZigpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlNhbXBsZXI6IHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gc3VjY2Vz
cyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpV
bmlmb3JtQnVmZmVyJiB1bmlmb3JtQnVmZmVyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVy
biBoYW5kbGVCdWZmZXIodW5pZm9ybUJ1ZmZlci5pbnRlcm5hbExlbmd0aE5hbWUpOworICAgICAg
ICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWljVW5pZm9ybUJ1ZmZlciYgZHluYW1p
Y1VuaWZvcm1CdWZmZXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUJ1ZmZl
cihkeW5hbWljVW5pZm9ybUJ1ZmZlci5pbnRlcm5hbExlbmd0aE5hbWUpOworICAgICAgICB9LCBb
Jl0oR1BVQmluZEdyb3VwTGF5b3V0OjpTYW1wbGVyJikgLT4gYm9vbCB7CiAgICAgICAgICAgICBh
dXRvIHNhbXBsZXJTdGF0ZSA9IHRyeUdldFJlc291cmNlQXNNdGxTYW1wbGVyKHJlc291cmNlQmlu
ZGluZy5yZXNvdXJjZSwgZnVuY3Rpb25OYW1lKTsKICAgICAgICAgICAgIGlmICghc2FtcGxlclN0
YXRlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChpc0ZvclZlcnRleCkKICAgICAgICAgICAgICAg
ICBzZXRTYW1wbGVyT25FbmNvZGVyKHZlcnRleEVuY29kZXIsIHNhbXBsZXJTdGF0ZSwgaW5kZXgp
OwogICAgICAgICAgICAgaWYgKGlzRm9yRnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgc2V0U2Ft
cGxlck9uRW5jb2RlcihmcmFnbWVudEVuY29kZXIsIHNhbXBsZXJTdGF0ZSwgaW5kZXgpOwogICAg
ICAgICAgICAgaWYgKGlzRm9yQ29tcHV0ZSkKICAgICAgICAgICAgICAgICBzZXRTYW1wbGVyT25F
bmNvZGVyKGNvbXB1dGVFbmNvZGVyLCBzYW1wbGVyU3RhdGUsIGluZGV4KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlNhbXBsZWRU
ZXh0dXJlOiB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwgWyZdKEdQVUJp
bmRHcm91cExheW91dDo6U2FtcGxlZFRleHR1cmUmKSAtPiBib29sIHsKICAgICAgICAgICAgIGF1
dG8gdGV4dHVyZVJlc291cmNlID0gdHJ5R2V0UmVzb3VyY2VBc1RleHR1cmUocmVzb3VyY2VCaW5k
aW5nLnJlc291cmNlLCBmdW5jdGlvbk5hbWUpOwogICAgICAgICAgICAgaWYgKCF0ZXh0dXJlUmVz
b3VyY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKGlzRm9yVmVydGV4KQogICAgICAgICAgICAg
ICAgIHNldFRleHR1cmVPbkVuY29kZXIodmVydGV4RW5jb2RlciwgdGV4dHVyZVJlc291cmNlLT5w
bGF0Zm9ybVRleHR1cmUoKSwgaW5kZXgpOwogICAgICAgICAgICAgaWYgKGlzRm9yRnJhZ21lbnQp
CkBAIC0yMzEsMTIgKzIzMywxNCBAQCBSZWZQdHI8R1BVQmluZEdyb3VwPiBHUFVCaW5kR3JvdXA6
OnRyeUNyCiAgICAgICAgICAgICBpZiAoaXNGb3JDb21wdXRlKQogICAgICAgICAgICAgICAgIHNl
dFRleHR1cmVPbkVuY29kZXIoY29tcHV0ZUVuY29kZXIsIHRleHR1cmVSZXNvdXJjZS0+cGxhdGZv
cm1UZXh0dXJlKCksIGluZGV4KTsKICAgICAgICAgICAgIGJvdW5kVGV4dHVyZXMuYXBwZW5kKHRl
eHR1cmVSZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IFJl
c291cmNlIHR5cGUgbm90IHlldCBpbXBsZW1lbnRlZC4iLCBmdW5jdGlvbk5hbWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OlN0
b3JhZ2VCdWZmZXImIHN0b3JhZ2VCdWZmZXIpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJu
IGhhbmRsZUJ1ZmZlcihzdG9yYWdlQnVmZmVyLmludGVybmFsTGVuZ3RoTmFtZSk7CisgICAgICAg
IH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OkR5bmFtaWNTdG9yYWdlQnVmZmVyJiBkeW5hbWlj
U3RvcmFnZUJ1ZmZlcikgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlQnVmZmVy
KGR5bmFtaWNTdG9yYWdlQnVmZmVyLmludGVybmFsTGVuZ3RoTmFtZSk7CisgICAgICAgIH0pLCBs
YXlvdXRCaW5kaW5nLmludGVybmFsQmluZGluZ0RldGFpbHMpOworICAgICAgICBpZiAoIXN1Y2Nl
c3MpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQogICAgIH0KICAgICAK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVUJpbmRHcm91cChXVEZNb3ZlKHZlcnRleEFyZ3NC
dWZmZXIpLCBXVEZNb3ZlKGZyYWdtZW50QXJnc0J1ZmZlciksIFdURk1vdmUoY29tcHV0ZUFyZ3NC
dWZmZXIpLCBXVEZNb3ZlKGJvdW5kQnVmZmVycyksIFdURk1vdmUoYm91bmRUZXh0dXJlcykpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21w
dXRlUGFzc0VuY29kZXJNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBhc3NFbmNvZGVyTWV0YWwubW0JKHJl
dmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVDb21wdXRlUGFzc0VuY29kZXJNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIs
MTYgKzkyLDExIEBAIHZvaWQgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyOjpkaXNwYXRjaCh1bnMKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcGlwZWxpbmVTdGF0ZSA9IG1fcGlwZWxp
bmUtPnBsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lKCk7Ci0gICAgQVNTRVJUKHBpcGVsaW5lU3RhdGUp
OworICAgIEFTU0VSVChtX3BpcGVsaW5lLT5wbGF0Zm9ybUNvbXB1dGVQaXBlbGluZSgpKTsKIAog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIGF1dG8gdyA9IHBpcGVsaW5l
U3RhdGUudGhyZWFkRXhlY3V0aW9uV2lkdGg7Ci0gICAgYXV0byBoID0gcGlwZWxpbmVTdGF0ZS5t
YXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91cCAvIHc7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYmUgZ2xlYW5lZCBmcm9tIHRoZSBzaGFkZXIgaWYgbm90IHVzaW5nIE1TTC4gRm9yIG5v
dywgdXNlIHRoZSBkb2NzJyBleGFtcGxlIGNhbGN1bGF0aW9uLgotICAgIGF1dG8gdGhyZWFkc1Bl
clRocmVhZGdyb3VwID0gTVRMU2l6ZU1ha2UodywgaCwgMSk7CisgICAgYXV0byB0aHJlYWRzUGVy
VGhyZWFkZ3JvdXAgPSBNVExTaXplTWFrZShtX3BpcGVsaW5lLT5jb21wdXRlRGltZW5zaW9ucygp
LndpZHRoLCBtX3BpcGVsaW5lLT5jb21wdXRlRGltZW5zaW9ucygpLmhlaWdodCwgbV9waXBlbGlu
ZS0+Y29tcHV0ZURpbWVuc2lvbnMoKS5kZXB0aCk7CiAKICAgICBhdXRvIHRocmVhZGdyb3Vwc1Bl
ckdyaWQgPSBNVExTaXplTWFrZSh4LCB5LCB6KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVD
b21wdXRlUGlwZWxpbmVNZXRhbC5tbQkocmV2aXNpb24gMjQ2MzI2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2OCArMzAsMTcyIEBACiAKICNpbXBvcnQgIkdQVUNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IuaCIKICNpbXBvcnQgIkdQVURldmljZS5oIgorI2ltcG9ydCAi
R1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNp
bXBvcnQgIldITFNMUHJlcGFyZS5oIgogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KICNpbXBvcnQg
PHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAKLU9CSkNfUFJPVE9DT0woTVRMRnVuY3Rpb24p
OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBSZXRhaW5QdHI8TVRMRnVuY3Rpb24+
IHRyeUNyZWF0ZU10bENvbXB1dGVGdW5jdGlvbihjb25zdCBHUFVQaXBlbGluZVN0YWdlRGVzY3Jp
cHRvciYgc3RhZ2UpCitzdGF0aWMgYm9vbCB0cnlTZXRNZXRhbEZ1bmN0aW9ucyhjb25zdCBjaGFy
KiBjb25zdCBmdW5jdGlvbk5hbWUsIE1UTExpYnJhcnkgKmNvbXB1dGVNZXRhbExpYnJhcnksIE1U
TENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgKm10bERlc2NyaXB0b3IsIGNvbnN0IFN0cmluZyYg
Y29tcHV0ZUVudHJ5UG9pbnROYW1lKQogewotICAgIGlmICghc3RhZ2UubW9kdWxlLT5wbGF0Zm9y
bVNoYWRlck1vZHVsZSgpIHx8IHN0YWdlLmVudHJ5UG9pbnQuaXNOdWxsKCkpIHsKLSAgICAgICAg
TE9HKFdlYkdQVSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKCk6IEludmFsaWQgR1BV
U2hhZGVyTW9kdWxlISIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNpZiBMT0dfRElTQUJM
RUQKKyAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKKyNlbmRpZgorCisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgaWYgKCFjb21wdXRlTWV0YWxMaWJyYXJ5KSB7
CisgICAgICAgIExPRyhXZWJHUFUsICIlczogTVRMTGlicmFyeSBmb3IgY29tcHV0ZSBzdGFnZSBk
b2VzIG5vdCBleGlzdCEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgUmV0YWluUHRyPE1UTEZ1bmN0aW9uPiBmdW5jdGlvbjsKKyAgICBhdXRvIGZ1
bmN0aW9uID0gYWRvcHROUyhbY29tcHV0ZU1ldGFsTGlicmFyeSBuZXdGdW5jdGlvbldpdGhOYW1l
OmNvbXB1dGVFbnRyeVBvaW50TmFtZV0pOworICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAg
TE9HKFdlYkdQVSwgIiVzOiBDYW5ub3QgY3JlYXRlIGNvbXB1dGUgTVRMRnVuY3Rpb24gXCIlc1wi
ISIsIGZ1bmN0aW9uTmFtZSwgY29tcHV0ZUVudHJ5UG9pbnROYW1lLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgW210bERlc2NyaXB0b3Igc2V0Q29t
cHV0ZUZ1bmN0aW9uOmZ1bmN0aW9uLmdldCgpXTsKKyAgICByZXR1cm4gdHJ1ZTsKKworICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnM+IHRyeVNldEZ1bmN0aW9ucyhjb25z
dCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVVBpcGVsaW5lU3RhZ2VEZXNjcmlw
dG9yJiBjb21wdXRlU3RhZ2UsIGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBNVExDb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yKiBtdGxEZXNjcmlwdG9yLCBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZVBp
cGVsaW5lRGVzY3JpcHRvcj4mIHdobHNsRGVzY3JpcHRvcikKK3sKKyNpZiBMT0dfRElTQUJMRUQK
KyAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKKyNlbmRpZgorICAgIFJldGFpblB0cjxN
VExMaWJyYXJ5PiBjb21wdXRlTGlicmFyeTsKKyAgICBTdHJpbmcgY29tcHV0ZUVudHJ5UG9pbnQ7
CisKKyAgICBXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnMgeyAxLCAx
LCAxIH07CisKKyAgICBpZiAod2hsc2xEZXNjcmlwdG9yKSB7CisgICAgICAgIC8vIFdITFNMIGZ1
bmN0aW9ucyBhcmUgY29tcGlsZWQgdG8gTVNMIGZpcnN0LgorICAgICAgICBTdHJpbmcgd2hsc2xT
b3VyY2UgPSBjb21wdXRlU3RhZ2UubW9kdWxlLT53aGxzbFNvdXJjZSgpOworICAgICAgICBBU1NF
UlQoIXdobHNsU291cmNlLmlzTnVsbCgpKTsKKworICAgICAgICB3aGxzbERlc2NyaXB0b3ItPmVu
dHJ5UG9pbnROYW1lID0gY29tcHV0ZVN0YWdlLmVudHJ5UG9pbnQ7CisKKyAgICAgICAgYXV0byB3
aGxzbENvbXBpbGVSZXN1bHQgPSBXSExTTDo6cHJlcGFyZSh3aGxzbFNvdXJjZSwgKndobHNsRGVz
Y3JpcHRvcik7CisgICAgICAgIGlmICghd2hsc2xDb21waWxlUmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgY29tcHV0ZURpbWVuc2lvbnMgPSB3aGxzbENv
bXBpbGVSZXN1bHQtPmNvbXB1dGVEaW1lbnNpb25zOworCisgICAgICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOworCisgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAg
Y29tcHV0ZUxpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdMaWJy
YXJ5V2l0aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFsU291cmNlIG9wdGlvbnM6bmls
IGVycm9yOiZlcnJvcl0pOworICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisg
ICAgICAgIEFTU0VSVChjb21wdXRlTGlicmFyeSk7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzcxIE9uY2Ugd2UgemVyby1maWxs
IHZhcmlhYmxlcywgdGhlcmUgc2hvdWxkIGJlIG5vIHdhcm5pbmdzLCBzbyB3ZSBzaG91bGQgYmUg
YWJsZSB0byBBU1NFUlQoIWVycm9yKSBoZXJlLgorCisgICAgICAgIGNvbXB1dGVFbnRyeVBvaW50
ID0gd2hsc2xDb21waWxlUmVzdWx0LT5tYW5nbGVkRW50cnlQb2ludE5hbWU7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgY29tcHV0ZUxpYnJhcnkgPSBjb21wdXRlU3RhZ2UubW9kdWxlLT5wbGF0Zm9y
bVNoYWRlck1vZHVsZSgpOworICAgICAgICBjb21wdXRlRW50cnlQb2ludCA9IGNvbXB1dGVTdGFn
ZS5lbnRyeVBvaW50OworICAgIH0KKworICAgIGlmICh0cnlTZXRNZXRhbEZ1bmN0aW9ucyhmdW5j
dGlvbk5hbWUsIGNvbXB1dGVMaWJyYXJ5LmdldCgpLCBtdGxEZXNjcmlwdG9yLCBjb21wdXRlRW50
cnlQb2ludCkpCisgICAgICAgIHJldHVybiBjb21wdXRlRGltZW5zaW9uczsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitzdHJ1Y3QgQ29udmVydFJlc3VsdCB7CisgICAgUmV0YWluUHRy
PE1UTENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3I+IHBpcGVsaW5lRGVzY3JpcHRvcjsKKyAgICBX
SExTTDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnM7Cit9Oworc3RhdGljIE9w
dGlvbmFsPENvbnZlcnRSZXN1bHQ+IGNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKGNv
bnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgR1BVQ29tcHV0ZVBpcGVsaW5lRGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UpCit7CisgICAgUmV0
YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3I+IG10bERlc2NyaXB0b3I7CiAKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgZnVuY3Rpb24gPSBhZG9wdE5TKFtz
dGFnZS5tb2R1bGUtPnBsYXRmb3JtU2hhZGVyTW9kdWxlKCkgbmV3RnVuY3Rpb25XaXRoTmFtZTpz
dGFnZS5lbnRyeVBvaW50XSk7CisKKyAgICBtdGxEZXNjcmlwdG9yID0gYWRvcHROUyhbTVRMQ29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvciBuZXddKTsKKwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CiAKLSAgICBpZiAoIWZ1bmN0aW9uKQotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQ29t
cHV0ZVBpcGVsaW5lOjp0cnlDcmVhdGUoKTogQ2Fubm90IGNyZWF0ZSBjb21wdXRlIE1UTEZ1bmN0
aW9uIFwiJXNcIiEiLCBzdGFnZS5lbnRyeVBvaW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICgh
bXRsRGVzY3JpcHRvcikgeworICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEVycm9yIGNyZWF0aW5n
IE1UTERlc2NyaXB0b3IhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBjb21wdXRlU3RhZ2UgPSBkZXNjcmlwdG9y
LmNvbXB1dGVTdGFnZTsKIAotICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICBib29sIGlzV2hsc2wg
PSAhY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKS5pc051bGwoKTsKKworICAgIE9w
dGlvbmFsPFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERlc2NyaXB0b3I7
CisgICAgaWYgKGlzV2hsc2wpCisgICAgICAgIHdobHNsRGVzY3JpcHRvciA9IFdITFNMOjpDb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKCk7CisKKyAgICBpZiAoZGVzY3JpcHRvci5sYXlvdXQgJiYg
d2hsc2xEZXNjcmlwdG9yKSB7CisgICAgICAgIGlmIChhdXRvIGxheW91dCA9IGNvbnZlcnRMYXlv
dXQoKmRlc2NyaXB0b3IubGF5b3V0KSkKKyAgICAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+bGF5
b3V0ID0gV1RGTW92ZSgqbGF5b3V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBMT0co
V2ViR1BVLCAiJXM6IEVycm9yIGNvbnZlcnRpbmcgR1BVUGlwZWxpbmVMYXlvdXQhIiwgZnVuY3Rp
b25OYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoYXV0byBjb21wdXRlRGltZW5zaW9ucyA9IHRyeVNldEZ1bmN0aW9ucyhm
dW5jdGlvbk5hbWUsIGNvbXB1dGVTdGFnZSwgZGV2aWNlLCBtdGxEZXNjcmlwdG9yLmdldCgpLCB3
aGxzbERlc2NyaXB0b3IpKQorICAgICAgICByZXR1cm4ge3sgbXRsRGVzY3JpcHRvciwgKmNvbXB1
dGVEaW1lbnNpb25zIH19OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotc3RhdGlj
IFJldGFpblB0cjxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4gdHJ5Q3JlYXRlTVRMQ29tcHV0ZVBp
cGVsaW5lU3RhdGUoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0IEdQVUNvbXB1dGVQaXBl
bGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCitzdHJ1Y3QgQ3JlYXRlUmVzdWx0IHsKKyAgICBS
ZXRhaW5QdHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3RhdGU7CisgICAgV0hM
U0w6OkNvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOworfTsKK3N0YXRpYyBPcHRp
b25hbDxDcmVhdGVSZXN1bHQ+IHRyeUNyZWF0ZU1UTENvbXB1dGVQaXBlbGluZVN0YXRlKGNvbnN0
IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIGNvbnN0
IEdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgaWYgKCFk
ZXZpY2UucGxhdGZvcm1EZXZpY2UoKSkgewogICAgICAgICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0
ZVBpcGVsaW5lOjp0cnlDcmVhdGUoKTogSW52YWxpZCBHUFVEZXZpY2UhIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAg
IGF1dG8gY29tcHV0ZUZ1bmN0aW9uID0gdHJ5Q3JlYXRlTXRsQ29tcHV0ZUZ1bmN0aW9uKGRlc2Ny
aXB0b3IuY29tcHV0ZVN0YWdlKTsKLSAgICBpZiAoIWNvbXB1dGVGdW5jdGlvbikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgYXV0byBjb252ZXJ0UmVzdWx0ID0gY29udmVydENvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IoZnVuY3Rpb25OYW1lLCBkZXNjcmlwdG9yLCBkZXZpY2UpOworICAg
IGlmICghY29udmVydFJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBB
U1NFUlQoY29udmVydFJlc3VsdC0+cGlwZWxpbmVEZXNjcmlwdG9yKTsKKyAgICBhdXRvIG10bERl
c2NyaXB0b3IgPSBjb252ZXJ0UmVzdWx0LT5waXBlbGluZURlc2NyaXB0b3I7CiAKLSAgICBSZXRh
aW5QdHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3RhdGU7Ci0gICAgTlNFcnJv
ciAqZXJyb3IgPSBuaWw7CisgICAgUmV0YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBw
aXBlbGluZTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBwaXBlbGlu
ZVN0YXRlID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3Q29tcHV0ZVBpcGVs
aW5lU3RhdGVXaXRoRnVuY3Rpb246Y29tcHV0ZUZ1bmN0aW9uLmdldCgpIGVycm9yOiZlcnJvcl0p
OwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBpZiAoIXBpcGVsaW5lU3Rh
dGUpCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgcGlwZWxpbmUgPSBhZG9wdE5TKFtk
ZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdDb21wdXRlUGlwZWxpbmVTdGF0ZVdpdGhEZXNjcmlw
dG9yOm10bERlc2NyaXB0b3IuZ2V0KCkgb3B0aW9uczpNVExQaXBlbGluZU9wdGlvbk5vbmUgcmVm
bGVjdGlvbjpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAgaWYgKCFwaXBlbGluZSkgewogICAgICAg
ICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0ZVBpcGVsaW5lOjp0cnlDcmVhdGUoKTogJXMhIiwgZXJy
b3IgPyBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nIDogIlVuYWJsZSB0byBj
cmVhdGUgTVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGUhIik7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgfQorCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHJl
dHVybiBwaXBlbGluZVN0YXRlOworICAgIHJldHVybiB7eyBwaXBlbGluZSwgY29udmVydFJlc3Vs
dC0+Y29tcHV0ZURpbWVuc2lvbnMgfX07CiB9CiAKIFJlZlB0cjxHUFVDb21wdXRlUGlwZWxpbmU+
IEdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBj
b25zdCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIGF1
dG8gbXRsUGlwZWxpbmUgPSB0cnlDcmVhdGVNVExDb21wdXRlUGlwZWxpbmVTdGF0ZShkZXZpY2Us
IGRlc2NyaXB0b3IpOwotICAgIGlmICghbXRsUGlwZWxpbmUpCisgICAgY29uc3QgY2hhciogY29u
c3QgZnVuY3Rpb25OYW1lID0gIkdQVVJlbmRlclBpcGVsaW5lOjpjcmVhdGUoKSI7CisKKyAgICBh
dXRvIGNyZWF0ZVJlc3VsdCA9IHRyeUNyZWF0ZU1UTENvbXB1dGVQaXBlbGluZVN0YXRlKGZ1bmN0
aW9uTmFtZSwgZGV2aWNlLCBkZXNjcmlwdG9yKTsKKyAgICBpZiAoIWNyZWF0ZVJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVUNvbXB1
dGVQaXBlbGluZShXVEZNb3ZlKG10bFBpcGVsaW5lKSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgR1BVQ29tcHV0ZVBpcGVsaW5lKFdURk1vdmUoY3JlYXRlUmVzdWx0LT5waXBlbGluZVN0YXRl
KSwgY3JlYXRlUmVzdWx0LT5jb21wdXRlRGltZW5zaW9ucykpOwogfQogCi1HUFVDb21wdXRlUGlw
ZWxpbmU6OkdQVUNvbXB1dGVQaXBlbGluZShSZXRhaW5QdHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3Rh
dGU+JiYgcGlwZWxpbmUpCitHUFVDb21wdXRlUGlwZWxpbmU6OkdQVUNvbXB1dGVQaXBlbGluZShS
ZXRhaW5QdHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+JiYgcGlwZWxpbmUsIFdITFNMOjpDb21w
dXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9ucykKICAgICA6IG1fcGxhdGZvcm1Db21wdXRl
UGlwZWxpbmUoV1RGTW92ZShwaXBlbGluZSkpCisgICAgLCBtX2NvbXB1dGVEaW1lbnNpb25zKGNv
bXB1dGVEaW1lbnNpb25zKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvY29jb2EvR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQ
aXBlbGluZU1ldGFsQ29udmVydExheW91dC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVBpcGVsaW5lTWV0YWxDb252ZXJ0
TGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5
b3V0LmgiCisKKyNpbmNsdWRlICJHUFVQaXBlbGluZUxheW91dC5oIgorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgT3B0aW9uU2V0PFdITFNMOjpT
aGFkZXJTdGFnZT4gY29udmVydFNoYWRlclN0YWdlRmxhZ3MoR1BVU2hhZGVyU3RhZ2VGbGFncyBm
bGFncykKK3sKKyAgICBPcHRpb25TZXQ8V0hMU0w6OlNoYWRlclN0YWdlPiByZXN1bHQ7CisgICAg
aWYgKGZsYWdzICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpWZXJ0ZXgpCisgICAgICAgIHJl
c3VsdC5hZGQoV0hMU0w6OlNoYWRlclN0YWdlOjpWZXJ0ZXgpOworICAgIGlmIChmbGFncyAmIEdQ
VVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpCisgICAgICAgIHJlc3VsdC5hZGQoV0hM
U0w6OlNoYWRlclN0YWdlOjpGcmFnbWVudCk7CisgICAgaWYgKGZsYWdzICYgR1BVU2hhZGVyU3Rh
Z2VCaXQ6OkZsYWdzOjpDb21wdXRlKQorICAgICAgICByZXN1bHQuYWRkKFdITFNMOjpTaGFkZXJT
dGFnZTo6Q29tcHV0ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE9wdGlvbmFs
PFdITFNMOjpCaW5kaW5nOjpCaW5kaW5nRGV0YWlscz4gY29udmVydEJpbmRpbmdUeXBlKEdQVUJp
bmRHcm91cExheW91dDo6SW50ZXJuYWxCaW5kaW5nRGV0YWlscyBpbnRlcm5hbEJpbmRpbmdEZXRh
aWxzKQoreworICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEdQVUJp
bmRHcm91cExheW91dDo6VW5pZm9ybUJ1ZmZlciB1bmlmb3JtQnVmZmVyKSAtPiBPcHRpb25hbDxX
SExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKKyAgICAgICAgcmV0dXJuIHsgV0hMU0w6
OlVuaWZvcm1CdWZmZXJCaW5kaW5nIHsgdW5pZm9ybUJ1ZmZlci5pbnRlcm5hbExlbmd0aE5hbWUg
fSB9OworICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OkR5bmFtaWNVbmlmb3JtQnVmZmVy
KSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpTYW1w
bGVyKSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKKyAgICAg
ICAgcmV0dXJuIHsgV0hMU0w6OlNhbXBsZXJCaW5kaW5nIHsgfSB9OworICAgIH0sIFsmXShHUFVC
aW5kR3JvdXBMYXlvdXQ6OlNhbXBsZWRUZXh0dXJlKSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGlu
Zzo6QmluZGluZ0RldGFpbHM+IHsKKyAgICAgICAgcmV0dXJuIHsgV0hMU0w6OlRleHR1cmVCaW5k
aW5nIHsgfSB9OworICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OlN0b3JhZ2VCdWZmZXIg
c3RvcmFnZUJ1ZmZlcikgLT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxz
PiB7CisgICAgICAgIHJldHVybiB7IFdITFNMOjpTdG9yYWdlQnVmZmVyQmluZGluZyB7IHN0b3Jh
Z2VCdWZmZXIuaW50ZXJuYWxMZW5ndGhOYW1lIH0gfTsKKyAgICB9LCBbJl0oR1BVQmluZEdyb3Vw
TGF5b3V0OjpEeW5hbWljU3RvcmFnZUJ1ZmZlcikgLT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRpbmc6
OkJpbmRpbmdEZXRhaWxzPiB7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfSks
IGludGVybmFsQmluZGluZ0RldGFpbHMpOworfQorCitPcHRpb25hbDxXSExTTDo6TGF5b3V0PiBj
b252ZXJ0TGF5b3V0KGNvbnN0IEdQVVBpcGVsaW5lTGF5b3V0JiBsYXlvdXQpCit7CisgICAgV0hM
U0w6OkxheW91dCByZXN1bHQ7CisgICAgaWYgKGxheW91dC5iaW5kR3JvdXBMYXlvdXRzKCkuc2l6
ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5b3V0LmJpbmRH
cm91cExheW91dHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBhdXRvJiBiaW5kR3Jv
dXBMYXlvdXQgPSBsYXlvdXQuYmluZEdyb3VwTGF5b3V0cygpW2ldOworICAgICAgICBXSExTTDo6
QmluZEdyb3VwIGJpbmRHcm91cDsKKyAgICAgICAgYmluZEdyb3VwLm5hbWUgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaSk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDog
YmluZEdyb3VwTGF5b3V0LT5iaW5kaW5nc01hcCgpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRv
JiBiaW5kaW5nRGV0YWlscyA9IGtleVZhbHVlUGFpci52YWx1ZTsKKyAgICAgICAgICAgIFdITFNM
OjpCaW5kaW5nIGJpbmRpbmc7CisgICAgICAgICAgICBiaW5kaW5nLnZpc2liaWxpdHkgPSBjb252
ZXJ0U2hhZGVyU3RhZ2VGbGFncyhiaW5kaW5nRGV0YWlscy5leHRlcm5hbEJpbmRpbmcudmlzaWJp
bGl0eSk7CisgICAgICAgICAgICBpZiAoYXV0byBiaW5kaW5nVHlwZSA9IGNvbnZlcnRCaW5kaW5n
VHlwZShiaW5kaW5nRGV0YWlscy5pbnRlcm5hbEJpbmRpbmdEZXRhaWxzKSkKKyAgICAgICAgICAg
ICAgICBiaW5kaW5nLmJpbmRpbmcgPSAqYmluZGluZ1R5cGU7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGlmIChiaW5k
aW5nRGV0YWlscy5leHRlcm5hbEJpbmRpbmcuYmluZGluZyA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgYmluZGluZy5leHRlcm5hbE5hbWUgPSBiaW5kaW5nRGV0YWlscy5leHRlcm5h
bEJpbmRpbmcuYmluZGluZzsKKyAgICAgICAgICAgIGJpbmRpbmcuaW50ZXJuYWxOYW1lID0gYmlu
ZGluZ0RldGFpbHMuaW50ZXJuYWxOYW1lOworICAgICAgICAgICAgYmluZEdyb3VwLmJpbmRpbmdz
LmFwcGVuZChXVEZNb3ZlKGJpbmRpbmcpKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuYXBw
ZW5kKFdURk1vdmUoYmluZEdyb3VwKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUGlwZWxpbmVN
ZXRhbENvbnZlcnRMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiV0hMU0xQaXBlbGluZURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHUFVQaXBlbGluZUxheW91
dDsKKworT3B0aW9uYWw8V0hMU0w6OkxheW91dD4gY29udmVydExheW91dChjb25zdCBHUFVQaXBl
bGluZUxheW91dCYpOworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRl
clBpcGVsaW5lTWV0YWwubW0JKHJldmlzaW9uIDI0NjMyNikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkdQVURldmljZS5oIgogI2lt
cG9ydCAiR1BVTGltaXRzLmgiCisjaW1wb3J0ICJHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91
dC5oIgogI2ltcG9ydCAiR1BVVXRpbHMuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
IldITFNMUHJlcGFyZS5oIgpAQCAtOTgsMzQgKzk5LDYgQEAgc3RhdGljIFdITFNMOjpWZXJ0ZXhG
b3JtYXQgY29udmVydFZlcnRleAogICAgIH0KIH0KIAotc3RhdGljIE9wdGlvblNldDxXSExTTDo6
U2hhZGVyU3RhZ2U+IGNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzKEdQVVNoYWRlclN0YWdlRmxhZ3Mg
ZmxhZ3MpCi17Ci0gICAgT3B0aW9uU2V0PFdITFNMOjpTaGFkZXJTdGFnZT4gcmVzdWx0OwotICAg
IGlmIChmbGFncyAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KQotICAgICAgICBy
ZXN1bHQuYWRkKFdITFNMOjpTaGFkZXJTdGFnZTo6VmVydGV4KTsKLSAgICBpZiAoZmxhZ3MgJiBH
UFVTaGFkZXJTdGFnZUJpdDo6RmxhZ3M6OkZyYWdtZW50KQotICAgICAgICByZXN1bHQuYWRkKFdI
TFNMOjpTaGFkZXJTdGFnZTo6RnJhZ21lbnQpOwotICAgIGlmIChmbGFncyAmIEdQVVNoYWRlclN0
YWdlQml0OjpGbGFnczo6Q29tcHV0ZSkKLSAgICAgICAgcmVzdWx0LmFkZChXSExTTDo6U2hhZGVy
U3RhZ2U6OkNvbXB1dGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBPcHRpb25h
bDxXSExTTDo6QmluZGluZ1R5cGU+IGNvbnZlcnRCaW5kaW5nVHlwZShHUFVCaW5kaW5nVHlwZSB0
eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlVu
aWZvcm1CdWZmZXI6Ci0gICAgICAgIHJldHVybiBXSExTTDo6QmluZGluZ1R5cGU6OlVuaWZvcm1C
dWZmZXI7Ci0gICAgY2FzZSBHUFVCaW5kaW5nVHlwZTo6U2FtcGxlcjoKLSAgICAgICAgcmV0dXJu
IFdITFNMOjpCaW5kaW5nVHlwZTo6U2FtcGxlcjsKLSAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpT
YW1wbGVkVGV4dHVyZToKLSAgICAgICAgcmV0dXJuIFdITFNMOjpCaW5kaW5nVHlwZTo6VGV4dHVy
ZTsKLSAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyOgotICAgICAgICByZXR1
cm4gV0hMU0w6OkJpbmRpbmdUeXBlOjpTdG9yYWdlQnVmZmVyOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfQotfQotCiBzdGF0aWMgT3B0aW9uYWw8V0hM
U0w6OlRleHR1cmVGb3JtYXQ+IGNvbnZlcnRUZXh0dXJlRm9ybWF0KEdQVVRleHR1cmVGb3JtYXQg
Zm9ybWF0KQogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7CkBAIC0zNjcsMzMgKzM0MCw2IEBAIHN0
YXRpYyBib29sIHRyeVNldENvbG9yU3RhdGVzKGNvbnN0IGNoYXIKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIE9wdGlvbmFsPFdITFNMOjpMYXlvdXQ+IGNvbnZlcnRMYXlvdXQoY29uc3Qg
R1BVUGlwZWxpbmVMYXlvdXQmIGxheW91dCkKLXsKLSAgICBXSExTTDo6TGF5b3V0IHJlc3VsdDsK
LSAgICBpZiAobGF5b3V0LmJpbmRHcm91cExheW91dHMoKS5zaXplKCkgPiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXlvdXQuYmluZEdyb3VwTGF5b3V0cygpLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGJpbmRHcm91cExheW91dCA9IGxheW91dC5i
aW5kR3JvdXBMYXlvdXRzKClbaV07Ci0gICAgICAgIFdITFNMOjpCaW5kR3JvdXAgYmluZEdyb3Vw
OwotICAgICAgICBiaW5kR3JvdXAubmFtZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKTsKLSAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBiaW5kR3JvdXBMYXlvdXQtPmJp
bmRpbmdzTWFwKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdwdUJpbmRHcm91cExheW91
dEJpbmRpbmcgPSBrZXlWYWx1ZVBhaXIudmFsdWU7Ci0gICAgICAgICAgICBXSExTTDo6QmluZGlu
ZyBiaW5kaW5nOwotICAgICAgICAgICAgYmluZGluZy52aXNpYmlsaXR5ID0gY29udmVydFNoYWRl
clN0YWdlRmxhZ3MoZ3B1QmluZEdyb3VwTGF5b3V0QmluZGluZy52aXNpYmlsaXR5KTsKLSAgICAg
ICAgICAgIGlmIChhdXRvIGJpbmRpbmdUeXBlID0gY29udmVydEJpbmRpbmdUeXBlKGdwdUJpbmRH
cm91cExheW91dEJpbmRpbmcudHlwZSkpCi0gICAgICAgICAgICAgICAgYmluZGluZy5iaW5kaW5n
VHlwZSA9ICpiaW5kaW5nVHlwZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgaWYgKGdwdUJpbmRHcm91cExheW91dEJp
bmRpbmcuYmluZGluZyA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgYmluZGluZy5u
YW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdwdUJpbmRHcm91cExheW91dEJpbmRpbmcuYmlu
ZGluZyk7Ci0gICAgICAgICAgICBiaW5kR3JvdXAuYmluZGluZ3MuYXBwZW5kKFdURk1vdmUoYmlu
ZGluZykpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShiaW5kR3Jv
dXApKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGJvb2wgdHJ5U2V0
TWV0YWxGdW5jdGlvbnMoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBNVExMaWJyYXJ5
ICp2ZXJ0ZXhNZXRhbExpYnJhcnksIE1UTExpYnJhcnkgKmZyYWdtZW50TWV0YWxMaWJyYXJ5LCBN
VExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgKm10bERlc2NyaXB0b3IsIGNvbnN0IFN0cmluZyYg
dmVydGV4RW50cnlQb2ludE5hbWUsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRFbnRyeVBvaW50TmFt
ZSkKIHsKICNpZiBMT0dfRElTQUJMRUQKQEAgLTQ2NCwxMyArNDEwLDEzIEBAIHN0YXRpYyBib29s
IHRyeVNldEZ1bmN0aW9ucyhjb25zdCBjaGFyKiAKICAgICAgICAgaWYgKCF3aGxzbENvbXBpbGVS
ZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCJNZXRhbCBTb3VyY2U6ICVzIiwgd2hsc2xDb21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZS51dGY4
KCkuZGF0YSgpKTsKLQogICAgICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKIAogICAgICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIHZlcnRleExpYnJhcnkgPSBhZG9w
dE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTp3aGxzbENv
bXBpbGVSZXN1bHQtPm1ldGFsU291cmNlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOwogICAg
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgICAgICBpZiAoIXZlcnRleExpYnJh
cnkpCisgICAgICAgICAgICBOU0xvZyhAIiVAIiwgZXJyb3IpOwogCiAgICAgICAgIEFTU0VSVCh2
ZXJ0ZXhMaWJyYXJ5KTsKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVzLCB0aGVy
ZSBzaG91bGQgYmUgbm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVCgh
ZXJyb3IpIGhlcmUuCkBAIC01NDAsNiArNDg2LDExIEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMUmVu
ZGVyUGlwZWxpbmVEZXNjcmkKIAogc3RhdGljIFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGluZVN0
YXRlPiB0cnlDcmVhdGVNdGxSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnN0IGNoYXIqIGNvbnN0IGZ1
bmN0aW9uTmFtZSwgY29uc3QgR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBjb25zdCBHUFVEZXZpY2UmIGRldmljZSkKIHsKKyAgICBpZiAoIWRldmljZS5wbGF0Zm9ybURl
dmljZSgpKSB7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVDb21wdXRlUGlwZWxpbmU6OnRyeUNy
ZWF0ZSgpOiBJbnZhbGlkIEdQVURldmljZSEiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCiAgICAgYXV0byBtdGxEZXNjcmlwdG9yID0gY29udmVydFJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcihmdW5jdGlvbk5hbWUsIGRlc2NyaXB0b3IsIGRldmljZSk7CiAgICAgaWYgKCFtdGxE
ZXNjcmlwdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU0OCw3ICs0OTksNyBAQCBz
dGF0aWMgUmV0YWluUHRyPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+CiAKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU0Vycm9yICplcnJvciA9IFtOU0Vycm9yIGVycm9y
V2l0aERvbWFpbjpAImNvbS5hcHBsZS5XZWJLaXQuR1BVIiBjb2RlOjEgdXNlckluZm86bmlsXTsK
KyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKICAgICBwaXBlbGluZSA9IGFkb3B0TlMoW2Rldmlj
ZS5wbGF0Zm9ybURldmljZSgpIG5ld1JlbmRlclBpcGVsaW5lU3RhdGVXaXRoRGVzY3JpcHRvcjpt
dGxEZXNjcmlwdG9yLmdldCgpIGVycm9yOiZlcnJvcl0pOwogICAgIGlmICghcGlwZWxpbmUpCiAg
ICAgICAgIExPRyhXZWJHUFUsICIlczogJXMhIiwgZnVuY3Rpb25OYW1lLCBlcnJvci5sb2NhbGl6
ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nKTsKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1kb250LWNyYXNoLXBhcnNpbmctZW51bS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1kb250LWNyYXNoLXBhcnNpbmctZW51bS5odG1sCShyZXZpc2lvbiAyNDYz
MjYpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZG9udC1jcmFzaC1wYXJzaW5nLWVudW0u
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTAgKzc0LDEwIEBAIGFzeW5jIGZ1bmN0aW9uIHN0
YXJ0KCkgewogICAgIGNvbnN0IHZlcnRleEJ1ZmZlcjEgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHZl
cnRleEJ1ZmZlcjFEZXNjcmlwdG9yKTsKICAgICBjb25zdCB2ZXJ0ZXhCdWZmZXIxQXJyYXlCdWZm
ZXIgPSBhd2FpdCB2ZXJ0ZXhCdWZmZXIxLm1hcFdyaXRlQXN5bmMoKTsKICAgICBjb25zdCB2ZXJ0
ZXhCdWZmZXIxRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh2ZXJ0ZXhCdWZmZXIxQXJy
YXlCdWZmZXIpOwotICAgIHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzBdID0gMTsKLSAgICB2ZXJ0
ZXhCdWZmZXIxRGVzY3JpcHRvclsxXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMURlc2NyaXB0b3Jb
Ml0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzNdID0gMTsKKyAgICB2ZXJ0ZXhC
dWZmZXIxRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5
WzFdID0gMTsKKyAgICB2ZXJ0ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzJdID0gMTsKKyAgICB2ZXJ0
ZXhCdWZmZXIxRmxvYXQzMkFycmF5WzNdID0gMTsKICAgICB2ZXJ0ZXhCdWZmZXIxLnVubWFwKCk7
CiAKICAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVU5JRk9STSB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9XUklURX07CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wuaHRtbAkocmV2aXNp
b24gMjQ2MzI2KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDEwICs2OSwxMCBAQCBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKICAgICBjb25z
dCB2ZXJ0ZXhCdWZmZXIxID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIxRGVzY3Jp
cHRvcik7CiAgICAgY29uc3QgdmVydGV4QnVmZmVyMUFycmF5QnVmZmVyID0gYXdhaXQgdmVydGV4
QnVmZmVyMS5tYXBXcml0ZUFzeW5jKCk7CiAgICAgY29uc3QgdmVydGV4QnVmZmVyMUZsb2F0MzJB
cnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4QnVmZmVyMUFycmF5QnVmZmVyKTsKLSAgICB2
ZXJ0ZXhCdWZmZXIxRGVzY3JpcHRvclswXSA9IDE7Ci0gICAgdmVydGV4QnVmZmVyMURlc2NyaXB0
b3JbMV0gPSAxOwotICAgIHZlcnRleEJ1ZmZlcjFEZXNjcmlwdG9yWzJdID0gMTsKLSAgICB2ZXJ0
ZXhCdWZmZXIxRGVzY3JpcHRvclszXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJh
eVswXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0MzJBcnJheVsxXSA9IDE7CisgICAgdmVy
dGV4QnVmZmVyMUZsb2F0MzJBcnJheVsyXSA9IDE7CisgICAgdmVydGV4QnVmZmVyMUZsb2F0MzJB
cnJheVszXSA9IDE7CiAgICAgdmVydGV4QnVmZmVyMS51bm1hcCgpOwogCiAgICAgY29uc3QgcmVz
b3VyY2VCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxF
TUVOVCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEV9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372074</attachid>
            <date>2019-06-13 12:49:17 -0700</date>
            <delta_ts>2019-06-14 10:54:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>47365</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjQwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE5LTA2LTEzICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IG91
dC1vZi1ib3VuZHMgYW5kIG51bGxwdHIgYmVoYXZpb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NTE2Njg4NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhlIGJlaGF2aW9yIHdlJ3JlIGltcGxlbWVudGluZyBpczoKKyAgICAgICAgLSBPT0Igd3Jp
dGVzIGFyZSBpZ25vcmVkLgorICAgICAgICAtIE9PQiByZWFkcyByZXR1cm4gemVyby4KKyAgICAg
ICAgLSBXcml0ZXMgdG8gbnVsbCBhcmUgaWdub3JlZC4KKyAgICAgICAgLSBSZWFkcyBmcm9tIG51
bGwgcmV0dXJuIHplcm8uCisgICAgICAgIC0gJip4ID09IHgsIGluY2x1ZGluZyAmKm51bGwgPT0g
bnVsbC4KKyAgICAgICAgCisgICAgICAgIFdlIGltcGxlbWVudCB0aGlzIGxpa2Ugc286CisgICAg
ICAgIC0gVGhlIHZhbHVlIHN0YWNrIGluIEZ1bmN0aW9uV3JpdGVyIHR1cm5zIGludG8gYSBzdGFj
ayBvZiBwYWlyczogcnZhbHVlcyBhbmQgbHZhbHVlcy4KKyAgICAgICAgICBydmFsdWVzIGFyZSBy
ZXByZXNlbnRlZCB0aGUgc2FtZSBhcyBiZWZvcmUuIEx2YWx1ZXMgYXJlIGFsd2F5cyBwb2ludGVy
cy4KKyAgICAgICAgLSBBbnl0aGluZyB0aGF0IHByb2R1Y2VzIGFuIGx2YWx1ZSBtdXN0IHB1c2gg
YSBwb2ludGVyIHRvIHRoZSBzdGFjay4gTm90CisgICAgICAgICAgYWxsIHRoaW5ncyBwcm9kdWNl
IGx2YWx1ZXMsIHNvIHRoYXQgZW50cnkgaW4gdGhlIHN0YWNrIG1heSBiZSBlbXB0eS4KKyAgICAg
ICAgICBIb3dldmVyLCBhbGwgdGhpbmdzIHRoYXQgcHJvZHVjZSBsdmFsdWVzIGFsc28gcHJvZHVj
ZSBydmFsdWVzLiBTbywgIip4ID0gNDIiIHdvcmtzLAorICAgICAgICAgIGFuZCBzbyBkb2VzICJm
b28oKngpIi4gTm9kZXMgdGhhdCBwcm9kdWNlIGx2YWx1ZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBh
bHNvIHByb2R1Y2luZworICAgICAgICAgIGFuIHJ2YWx1ZSwgd2hpY2ggc2hvdWxkIGJlIHRoZSB2
YWx1ZSBhcyBpZiB0aGUgbHZhbHVlIHdhcyBkZXJlZmVyZW5jZWQgYXQgdGhhdCBwb2ludAorICAg
ICAgICAgIGluIHByb2dyYW0gZXhlY3V0aW9uLiBTbyB0aGUgIip4IiBpbiAidGhyZWFkIGludCog
eCA9IG51bGw7ICp4IiBwcm9kdWNlcyB0aGUgaW50IHplcm8KKyAgICAgICAgICBmb3IgaXRzIHJ2
YWx1ZSwgYW5kIG51bGwgZm9yIGl0cyBsdmFsdWUuCisgICAgICAgIC0gRGVyZWZlcmVuY2UganVz
dCB3b3JrcywgYXMgZGVyZWZlcmVuY2UgcHJvZHVjZXMgYm90aCBhbiBsdmFsdWUgYW5kIHJ2YWx1
ZS4gRGVyZWZlcmVuY2UKKyAgICAgICAgICBub2RlJ3MgY2hpbGQgbXVzdCBhbHNvIGJlIGFuIGx2
YWx1ZS4gU28gd2UganVzdCBmb3J3YXJkIHRoYXQgdmFsdWUgYWxvbmcgb24KKyAgICAgICAgICB0
aGUgc3RhY2suIEZvciB0aGUgcnZhbHVlLCBpZiB3ZSB0cnkgdG8gZGVyZWZlcmVuY2UgbnVsbHB0
ciwgd2UganVzdCBmaWxsIGluCisgICAgICAgICAgemVybyBieXRlcyBpbnN0ZWFkLiBPdGhlcndp
c2UsIHRoZSBydmFsdWUgaXMgdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIHRoZQorICAgICAg
ICAgIG5vbi1udWxsIHBvaW50ZXIuCisgICAgICAgIC0gQXNzaWdubWVudCBleHByZXNzaW9ucyBj
aGVjayBpZiB0aGUgaW5jb21pbmcgbHZhbHVlIGlzIG51bGwuIElmIGl0IGlzLCBpdAorICAgICAg
ICAgIHNraXBzIHRoZSBhc3NpZ25tZW50LgorICAgICAgICAtIG9wZXJhdG9yJltdIHJldHVybnMg
bnVsbHB0ciBvbiBhbiBPT0IgYWNjZXNzLiBUaGVuLCBiYXNlZCBvbiB0aGUgYWJvdmUKKyAgICAg
ICAgICBiZWhhdmlvciwgd2UgZ2V0IHRoZSBkZXNpcmVkIE9PQiByZWFkcyByZXR1cm4gemVybywg
YW5kIE9PQiB3cml0ZXMgYXJlCisgICAgICAgICAgaWdub3JlZC4KKyAgICAgICAgLSBNYWtlUG9p
bnRlckV4cHJlc3Npb24ganVzdCB0YWtlcyB0aGUgbGFzdCBsdmFsdWUgb2ZmIHRoZSBzdGFjayAo
d2hpY2ggbXVzdAorICAgICAgICAgIGJlIGEgcG9pbnRlcikgYW5kIHJldHVybnMgaXQgYXMgYW4g
cnZhbHVlLgorICAgICAgICAtIFZhcmlhYmxlUmVmZXJlbmNlIHdpbGwgcHVzaCBib3RoIHRoZSB2
YXJpYWJsZSB2YWx1ZSBhbmQgYSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgIG9u
dG8gdGhlIHN0YWNrLgorCQorICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBmZXcgYnVn
cyB3aGVyZSB3ZSB3ZXJlbid0IGdpdmluZyBjZXJ0YWluIEFTVCBub2RlcyB0aGUKKyAgICAgICAg
cHJvcGVyIGFkZHJlc3Mgc3BhY2UgdmFsdWVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIGNvZGUgdG8gZ2VuZXJhdGUgbmF0aXZlIGZ1bmN0aW9ucyBmb3Igb3BlcmF0b3JzCisg
ICAgICAgICJvcGVyYXRvcltdIiBhbmQgIm9wZXJhdG9yW109IiBhcyB3ZSBzaG91bGQgbmV2ZXIg
YmUgZ2VuZXJhdGluZyB0aGVzZQorICAgICAgICBvdXJzZWx2ZXMuIFdlIHNob3VsZCBvbmx5IGJl
IGdlbmVyYXRpbmcgdGhlICJvcGVyYXRvciZbXSIgYW5kZXIuCisKKyAgICAgICAgVGVzdHM6IHdl
YmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC1vb2ItYWNjZXNzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6YXBwZW5kUmlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6YXBwZW5kTGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlw
ZU5hbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpl
bWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlByZXNlcnZlTGlmZXRpbWVzOjphc3NpZ25WYXJpYWJsZUludG9TdHJ1Y3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvcGVydHlSZXNvbHZlcjo6dmlzaXQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwu
bW06CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6dHJ5U2V0RnVuY3Rpb25zKToKKwogMjAxOS0wNi0xMyAgQ29tbWl0IFF1ZXVl
ICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjI0NjM5NiBhbmQgcjI0NjM5Ny4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZh
cmlhYmxlTGlmZXRpbWVzLmNwcAkocmV2aXNpb24gMjQ2NDA0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBhdXRv
IHJocyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZSkpOwogICAgICAgICByaHMtPnNldFR5cGUodmFyaWFi
bGUudHlwZSgpLT5jbG9uZSgpKTsKLSAgICAgICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6
OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIHJocy0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpMZWZ0
VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogCiAgICAgICAgIGF1dG8gYXNz
aWdubWVudCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4odmFyaWFi
bGUub3JpZ2luKCksIFdURk1vdmUobGhzKSwgV1RGTW92ZShyaHMpKTsKICAgICAgICAgYXNzaWdu
bWVudC0+c2V0VHlwZSh2YXJpYWJsZS50eXBlKCktPmNsb25lKCkpOwpAQCAtMTM2LDcgKzEzNiw3
IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihmdW5jdGlvbkRlZmluaXRp
b24ub3JpZ2luKCksIFdURk1vdmUoc3RydWN0VmFyaWFibGVSZWZlcmVuY2UpKTsKICAgICAgICAg
ICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtX3BvaW50ZXJUb1N0cnVjdFR5cGUt
PmNsb25lKCkpOwotICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlQW5u
b3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7Cisg
ICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6
UmlnaHRWYWx1ZSgpKTsKIAogICAgICAgICAgICAgYXV0byBwb2ludGVyRGVjbGFyYXRpb24gPSBt
YWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oZnVuY3Rpb25EZWZpbml0aW9u
Lm9yaWdpbigpLCBBU1Q6OlF1YWxpZmllcnMoKSwKICAgICAgICAgICAgICAgICBtX3BvaW50ZXJU
b1N0cnVjdFR5cGUtPmNsb25lKCksICJ3cmFwcGVyIl9zLCBXVEY6Om51bGxvcHQsIE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PihXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVzc2lv
bikpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJv
cGVydHlSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjQ2NDA0KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29s
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3LDcgKzY4NywxMSBAQCB2b2lkIFByb3BlcnR5
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgICAgICAgICBleHByZXNzaW9ucy5hcHBl
bmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwogICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIHt7IFdURk1vdmUoZXhwcmVzc2lvbnMpLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
Lm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkgfX07CisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVu
Y2UgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7Cisg
ICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHZhcmlhYmxl
UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVz
c1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgcmV0dXJuIHt7IFdU
Rk1vdmUoZXhwcmVzc2lvbnMpLCAgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkgfX07CiAgICAg
fSk7CiAKICAgICBpZiAoIW1vZGlmeVJlc3VsdCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5
LnR4dAkocmV2aXNpb24gMjQ2NDA0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00MzksNiAr
NDM5LDkgQEAgbmF0aXZlIHVpbnQgb3BlcmF0b3IrKHVpbnQsIHVpbnQpOwogbmF0aXZlIGJvb2wg
b3BlcmF0b3I8KGludCwgaW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPCh1aW50LCB1aW50KTsK
IG5hdGl2ZSBib29sIG9wZXJhdG9yPChmbG9hdCwgZmxvYXQpOworbmF0aXZlIGJvb2wgb3BlcmF0
b3I9PShmbG9hdCwgZmxvYXQpOworbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCk7Citu
YXRpdmUgYm9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnQqLCB0aHJlYWQgaW50Kik7CiBuYXRpdmUg
ZmxvYXQgb3BlcmF0b3IqKGZsb2F0LCBmbG9hdCk7CiAKIG5hdGl2ZSBib29sIG9wZXJhdG9yLngo
Ym9vbDIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9u
IDI0NjQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCwxOCBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmcoZnVuY3Rpb25NYXBwaW5nKQogICAg
ICAgICAsIG1fbGF5b3V0KGxheW91dCkKICAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygKKyAgICAgICAgICAgICJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVD5cbiIK
KyAgICAgICAgICAgICJpbmxpbmUgdm9pZCAiLCBtZW1zZXRaZXJvRnVuY3Rpb25OYW1lLCAiKHRo
cmVhZCBUJiB2YWx1ZSlcbiIKKyAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAiICAgIHRo
cmVhZCBjaGFyKiBwdHIgPSBzdGF0aWNfY2FzdDx0aHJlYWQgY2hhcio+KHN0YXRpY19jYXN0PHRo
cmVhZCB2b2lkKj4oJnZhbHVlKSk7XG4iCisgICAgICAgICAgICAiICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZW9mKFQpOyArK2kpXG4iCisgICAgICAgICAgICAiICAgICAgICBwdHJbaV0g
PSAwO1xuIgorICAgICAgICAgICAgIn1cbiIpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IGNoYXIqIG1lbXNldFplcm9GdW5jdGlvbk5hbWUgPSAibWVtc2V0WmVybyI7CisK
ICAgICB2aXJ0dWFsIH5GdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoKSA9IGRlZmF1bHQ7CiAKICAg
ICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsg
fQpAQCAtMTUzLDEyICsxNjMsNDEgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbWFrZVN0
cmluZygidmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAgc3RydWN0
IFN0YWNrSXRlbSB7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgU3RyaW5nIGxlZnRW
YWx1ZTsKKyAgICB9OworCisgICAgdm9pZCBhcHBlbmRSaWdodFZhbHVlKEFTVDo6RXhwcmVzc2lv
biYsIFN0cmluZyB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92
ZSh2YWx1ZSksIFN0cmluZygpIH0pOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kTGVmdFZhbHVl
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgbGVmdFZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChleHByZXNzaW9uLCBleHByZXNzaW9u
LnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKTsKKyAgICAgICAgbV9zdGFjay5h
cHBlbmQoeyBXVEZNb3ZlKHZhbHVlKSwgV1RGTW92ZShsZWZ0VmFsdWUpIH0pOworICAgIH0KKwor
ICAgIFN0cmluZyB0YWtlTGFzdFZhbHVlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YWNr
Lmxhc3QoKS52YWx1ZSk7CisgICAgICAgIHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCkudmFsdWU7
CisgICAgfQorCisgICAgU3RyaW5nIHRha2VMYXN0TGVmdFZhbHVlKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3N0YWNrLmxhc3QoKS5sZWZ0VmFsdWUpOworICAgICAgICByZXR1cm4gbV9zdGFj
ay50YWtlTGFzdCgpLmxlZnRWYWx1ZTsKKyAgICB9CisKICAgICBJbnRyaW5zaWNzJiBtX2ludHJp
bnNpY3M7CiAgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKICAgICBIYXNoTWFwPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOwogICAgIEhhc2hN
YXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgU3RyaW5nPiBtX3ZhcmlhYmxlTWFwcGluZzsK
ICAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKLSAgICBWZWN0b3I8U3RyaW5nPiBt
X3N0YWNrOworCisgICAgVmVjdG9yPFN0YWNrSXRlbT4gbV9zdGFjazsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZzsKICAg
ICBMYXlvdXQmIG1fbGF5b3V0OwogICAgIHVuc2lnbmVkIG1fdmFyaWFibGVDb3VudCB7IDAgfTsK
QEAgLTE2OSw3ICsyMDgsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9u
TWFwcGluZy5lbmQoKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2ZUZ1
bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV9pbnRy
aW5zaWNzLCBtX3R5cGVOYW1lcikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQod3JpdGVO
YXRpdmVGdW5jdGlvbihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBpdGVyYXRvci0+dmFsdWUs
IG1faW50cmluc2ljcywgbV90eXBlTmFtZXIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUpKTsKIH0K
IAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCkBAIC0yNDYsNyArMjg1LDcgQEAgdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVs
RXhwcmVzc2lvblN0YXRlbWVudCkKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZWZmZWN0ZnVs
RXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwotICAgIG1fc3RhY2su
dGFrZUxhc3QoKTsgLy8gVGhlIHN0YXRlbWVudCBpcyBhbHJlYWR5IGVmZmVjdGZ1bCwgc28gd2Ug
ZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQuCisgICAgdGFrZUxhc3RW
YWx1ZSgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3ZSBkb24n
dCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KIH0KIAogdm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQpAQCAtMjY0LDcgKzMw
Myw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjplbWl0TG9vcCgKIAogICAgIGlm
IChsb29wQ29uZGl0aW9uTG9jYXRpb24gPT0gTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpCZWZvcmVC
b2R5ICYmIGNvbmRpdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCpjb25kaXRpb25FeHByZXNzaW9uKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCB0YWtlTGFz
dFZhbHVlKCksICIpIGJyZWFrO1xuIikpOwogICAgIH0KIAogICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoImRvIHtcbiIpOwpAQCAtMjc2LDEyICszMTUsMTIgQEAgdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OmVtaXRMb29wKAogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmluY3Jl
bWVudCk7CiAgICAgICAgIC8vIEV4cHJlc3Npb24gcmVzdWx0cyBnZXQgcHVzaGVkIHRvIG1fc3Rh
Y2suIFdlIGRvbid0IHVzZSB0aGUgcmVzdWx0CiAgICAgICAgIC8vIG9mIGluY3JlbWVudCwgc28g
d2UgZGlzcGVuc2Ugb2YgdGhhdCBub3cuCi0gICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAg
ICAgICAgdGFrZUxhc3RWYWx1ZSgpOwogICAgIH0KIAogICAgIGlmIChsb29wQ29uZGl0aW9uTG9j
YXRpb24gPT0gTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpBZnRlckJvZHkgJiYgY29uZGl0aW9uRXhw
cmVzc2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmNvbmRpdGlvbkV4cHJlc3Np
b24pOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwg
bV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIHRha2VMYXN0VmFsdWUoKSwgIikgYnJlYWs7
XG4iKSk7CiAgICAgfQogCiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBcbiIpOwpAQCAt
MzA1LDcgKzM0NCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QK
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7CiAgICAgfSwgWyZdKFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBXZSBk
b24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAgdGFrZUxh
c3RWYWx1ZSgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3Vs
dC4KICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKIAogICAgIGVtaXRMb29wKExv
b3BDb25kaXRpb25Mb2NhdGlvbjo6QmVmb3JlQm9keSwgZm9yTG9vcC5jb25kaXRpb24oKSwgZm9y
TG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9vcC5ib2R5KCkpOwpAQCAtMzE1LDcgKzM1NCw3IEBAIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKIHsKICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0gICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgbV9zdGFjay50YWtlTGFzdCgp
LCAiKSB7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAo
IiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSB7XG4iKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlm
U3RhdGVtZW50LmJvZHkoKSk7CiAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOwpAQCAtMzMwLDEwICsz
NjksMTAgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKICAgICAgICAg
aWYgKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nKSB7CiAgICAgICAgICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayhtX3N0YWNrLnRha2VM
YXN0KCksIHZhcmlhYmxlTmFtZSkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayh0YWtlTGFzdFZhbHVlKCksIHZhcmlhYmxl
TmFtZSkpOwogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJy
ZXR1cm4gIiwgdmFyaWFibGVOYW1lLCAiO1xuIikpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3RhY2su
dGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygicmV0dXJuICIsIHRha2VMYXN0VmFsdWUoKSwgIjtcbiIpKTsKICAgICB9IGVs
c2UKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgicmV0dXJuO1xuIik7CiB9CkBAIC0z
NDIsNyArMzgxLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAog
ewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CiAKLSAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgbV9zdGFjay50
YWtlTGFzdCgpLCAiKSB7IikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
Zygic3dpdGNoICgiLCB0YWtlTGFzdFZhbHVlKCksICIpIHsiKSk7CiAgICAgZm9yIChhdXRvJiBz
d2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCiAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9
XG4iKTsKQEAgLTM3NSw3ICs0MTQsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZShpbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGludGVnZXJMaXRlcmFs
LnZhbHVlKCksICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cisg
ICAgYXBwZW5kUmlnaHRWYWx1ZShpbnRlZ2VyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAog
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkKQEAgLTM4Myw3ICs0MjIsNyBAQCB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFt
ZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh1bnNpZ25lZEludGVnZXJMaXRlcmFs
LnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1h
bmdsZWRUeXBlTmFtZSwgIj4oIiwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpLCAiKTtc
biIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0
VmFsdWUodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExp
dGVyYWwpCkBAIC0zOTEsNyArNDMwLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVAogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwg
IiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFsLnZh
bHVlKCksICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAg
YXBwZW5kUmlnaHRWYWx1ZShmbG9hdExpdGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0
ZXJhbCkKQEAgLTQwOCw3ICs0NDcsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUCiAgICAgZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJudWxs
cHRyIik7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7Ci0gICAgbV9zdGFjay5h
cHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKG51bGxMaXRlcmFsLCB2
YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpCkBAIC00MTYsNyArNDU1LDcgQEAg
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoYm9vbGVhbkxpdGVyYWwucmVz
b2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5n
bGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xl
ZFR5cGVOYW1lLCAiPigiLCBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8gInRydWUiIDogImZhbHNl
IiwgIik7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBl
bmRSaWdodFZhbHVlKGJvb2xlYW5MaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkKQEAgLTQyNiw3ICs0NjUsNyBAQCB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9
IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwu
cmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
YW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbWFuZ2xlZFR5cGVOYW1l
LCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoKmVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSwgIjtcbiIpKTsKLSAgICBt
X3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQpAQCAtNDM0
LDM3ICs0NzMsMzkgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAog
ICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikKK3ZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiB7
CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2UgdGhp
cyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
bV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShkb3RFeHByZXNz
aW9uLCAiZHVtbXkiKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6R2xvYmFsVmFyaWFibGVSZWZlcmVuY2UmIGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlKQog
ewotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Cisg
ICAgYXV0byB2YWx1ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBhdXRv
IHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5n
bGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZ2xvYmFsVmFyaWFi
bGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChnbG9i
YWxWYXJpYWJsZVJlZmVyZW5jZS5iYXNlKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygidGhyZWFkICIsIG1hbmdsZWRUeXBlTmFtZSwgIiYgIiwgdmFyaWFibGVOYW1l
LCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiLT4iLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclN0cnVjdHVyZUVsZW1lbnQoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2Uuc3RydWN0RmllbGQo
KSksICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInRocmVhZCAiLCBtYW5nbGVkVHlwZU5hbWUs
ICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIsIHRha2VMYXN0VmFsdWUoKSwgIi0+IiwgbV90eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVmZXJl
bmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFsdWVOYW1lLCAiID0gIiwgIioiLCBw
b2ludGVyTmFtZSwgIjtcbiIpKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUoZ2xvYmFsVmFyaWFibGVS
ZWZlcmVuY2UsIHZhbHVlTmFtZSwgcG9pbnRlck5hbWUpOwogfQogCi12b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQordm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJl
c3Npb24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJl
cGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShp
bmRleEV4cHJlc3Npb24sICJkdW1teSIpOwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKQordm9pZCBGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBw
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJl
ZCBhbHJlYWR5LgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAg
YXBwZW5kUmlnaHRWYWx1ZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sICJkdW1teSIpOwogfQog
CiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNDc2LDcgKzUxNyw3IEBAIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MCBJbXBsZW1lbnQgcXVhbGlmaWVy
cy4KICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7CiAgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsK
LSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlh
YmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
ICIsIHRha2VMYXN0VmFsdWUoKSwgIjtcbiIpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIp
KTsKIH0KQEAgLTQ4NCwxMSArNTI1LDExIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRvIGxlZnRO
YW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gcG9pbnRlck5hbWUgPSB0YWtlTGFz
dExlZnRWYWx1ZSgpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lv
bi5yaWdodCgpKTsKLSAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKLSAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVmdE5hbWUsICIgPSAiLCByaWdo
dE5hbWUsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQocmlnaHROYW1lKTsKKyAgICBhdXRv
IHJpZ2h0TmFtZSA9IHRha2VMYXN0VmFsdWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoImlmICgiLCBwb2ludGVyTmFtZSwgIikgKiIsIHBvaW50ZXJOYW1lLCAiID0g
IiwgcmlnaHROYW1lLCAiO1xuIikpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoYXNzaWdubWVudEV4
cHJlc3Npb24sIHJpZ2h0TmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKQEAgLTQ5Niw3ICs1
MzcsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgVmVj
dG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2Fs
bEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFy
Z3VtZW50KTsKLSAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQobV9zdGFjay50YWtlTGFzdCgp
KTsKKyAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQodGFrZUxhc3RWYWx1ZSgpKTsKICAgICB9
CiAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwogICAgIGF1dG8gaXRlcmF0
b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwpA
QCAtNTA5LDcgKzU1MCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1QKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsKICAg
ICB9CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwotICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShjYWxsRXhwcmVzc2lvbiwg
dmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCkBAIC01MTcsMjYgKzU1OCwz
MCBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgU3RyaW5n
IHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Npb24ubGlz
dCgpKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAgICAg
cmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICByZXN1bHQgPSB0YWtlTGFzdFZh
bHVlKCk7CiAgICAgfQotICAgIG1fc3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgYXBwZW5kUmln
aHRWYWx1ZShjb21tYUV4cHJlc3Npb24sIHJlc3VsdCk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJl
c3Npb24ucG9pbnRlcigpKTsKLSAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOwor
ICAgIGF1dG8gcmlnaHQgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoQVNUOjp0b1N0cmluZygqZGVyZWZlcmVuY2VFeHByZXNzaW9uLnR5cGVBbm5v
dGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKSwgJyAnLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgIiYgIiwgdmFy
aWFibGVOYW1lLCAiID0gKiIsIHJpZ2h0LCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZh
cmlhYmxlTmFtZSk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKS5yZXNv
bHZlZFR5cGUoKSksICcgJywgcG9pbnRlck5hbWUsICIgPSAiLCByaWdodCwgIjtcbiIpKTsKKyAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFy
aWFibGVOYW1lLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiaWYgKCIsIHBvaW50ZXJOYW1lLCAiKSAiLCB2YXJpYWJsZU5hbWUsICIgPSAqIiwgcmlnaHQs
ICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJlbHNlICIs
IG1lbXNldFplcm9GdW5jdGlvbk5hbWUsICcoJywgdmFyaWFibGVOYW1lLCAiKTtcbiIpKTsKKyAg
ICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUsIHBv
aW50ZXJOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgIGF1dG8gbGVmdCA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGxlZnQgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAgIGF1dG8g
cmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byByaWdodCA9IHRha2VMYXN0VmFs
dWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9ICIsIGxlZnQpKTsKICAgICBzd2l0Y2ggKGxvZ2ljYWxFeHByZXNzaW9u
LnR5cGUoKSkgewpAQCAtNTQ5LDIyICs1OTQsMjQgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKHJpZ2h0LCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5k
KHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShsb2dpY2FsRXhwcmVzc2lvbiwg
dmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQogewogICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOwotICAg
IGF1dG8gb3BlcmFuZCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIG9wZXJhbmQgPSB0
YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUoKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvZ2ljYWxOb3RFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAhIiwgb3BlcmFuZCwgIjtcbiIpKTsKLSAgICBt
X3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUobG9naWNh
bE5vdEV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwotICAgIGF1dG8gbFZhbHVlID0g
bV9zdGFjay50YWtlTGFzdCgpOworICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1hZGUg
dG8gd29yay4gSXQgcHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIHRoZSBsYXN0IGxlZnRWYWx1ZSB0
b28uCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODgz
OAorICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5h
bWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpKQpAQCAtNTc0LDE2ICs2
MjEsMTYgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9IHsgJigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJheVR5cGUubnVt
RWxlbWVudHMoKSwgIiB9O1xuIikpOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwg
IiA9IHsgJiIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikK
IHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRWYWx1
ZSgpKTsKLSAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIHBv
aW50ZXIgPSB0YWtlTGFzdExlZnRWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtlUG9pbnRlckV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICYiLCBsVmFsdWUsICI7
XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG1h
a2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gIiwgcG9pbnRlciwgIjtcbiIpKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKG1ha2VQb2ludGVy
RXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25X
cml0ZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpCkBAIC01OTUsMTkg
KzY0MiwxOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYg
dGVybmFyeUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHBy
ZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICBhdXRvIGNoZWNrID0gbV9zdGFjay50YWtlTGFzdCgp
OworICAgIGF1dG8gY2hlY2sgPSB0YWtlTGFzdFZhbHVlKCk7CiAKICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGVybmFyeUV4
cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKIAog
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIGNoZWNrLCAiKSB7
XG4iKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHBy
ZXNzaW9uKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJs
ZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIHRha2VMYXN0VmFs
dWUoKSwgIjtcbiIpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7
CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9u
KCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUs
ICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIHRha2VMYXN0VmFsdWUoKSwg
IjtcbiIpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICBtX3N0YWNr
LmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUodGVybmFyeUV4cHJl
c3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKQEAgLTYx
NSw3ICs2NjIsOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAg
ICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIGF1dG8gaXRlcmF0
b3IgPSBtX3ZhcmlhYmxlTWFwcGluZy5maW5kKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkp
OwogICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3ZhcmlhYmxlTWFwcGluZy5lbmQoKSk7Ci0gICAg
bV9zdGFjay5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICBhdXRvIHBvaW50ZXJOYW1lID0g
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJ0aHJlYWQgIiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHZhcmlh
YmxlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSwgIiogIiwgcG9pbnRlck5hbWUsICIgPSAmIiwg
aXRlcmF0b3ItPnZhbHVlLCAiO1xuIikpOworICAgIGFwcGVuZExlZnRWYWx1ZSh2YXJpYWJsZVJl
ZmVyZW5jZSwgaXRlcmF0b3ItPnZhbHVlLCBwb2ludGVyTmFtZSk7CiB9CiAKIFN0cmluZyBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0YW50RXhwcmVzc2lvblN0cmluZyhBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjQwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25X
cml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBTdHJpbmcg
YXRvbWljTmFtZShTdHJpbmcgaW5wdXQpCiAgICAgICAgIHJldHVybiAiZmV0Y2hfeG9yIl9zdHI7
CiB9CiAKLVN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgU3RyaW5nJiBvdXRwdXRGdW5jdGlv
bk5hbWUsIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQorU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9uTmFtZSwgSW50
cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIGNvbnN0IGNoYXIqIG1l
bXNldFplcm9GdW5jdGlvbk5hbWUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzQ2FzdCgpKSB7CkBAIC04OSw4
ICs4OSw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAg
ICAgaWYgKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpIHsK
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5O
YW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIpKTsKICAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtZXRhbFJldHVybk5hbWUsICIg
eDtcbiIpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkIGNo
YXIqIHB0ciA9IHN0YXRpY19jYXN0PHRocmVhZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dGhyZWFkIHZv
aWQqPigmeCkpO1xuIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoIiwgbWV0YWxSZXR1cm5OYW1l
LCAiKTsgKytpKSBwdHJbaV0gPSAwO1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiICAgICIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUsICIoeCk7XG4i
KSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHJldHVybiB4O1xuIik7
CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CiAgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwpAQCAtMjE1LDM4ICsyMTQsMTQgQEAgU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAotICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKLSAgICAgICAgQVNTRVJUKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwot
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlv
bk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJO
YW1lLCAiIGkpIHtcbiIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiICAgIHJldHVybiBtW2ldO1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQot
CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZb
XSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAyKTsKICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwotICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3ImW10uIl9zdHIubGVuZ3RoKCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRh
bFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiICAgIHJldHVybiAmKHYucG9pbnRlcltuXSk7XG4iKSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gIm9wZXJhdG9yW109IikgewotICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOwotICAg
ICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5h
bWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1l
LCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIikpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgbVtpXSA9IHY7XG4iKSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbTtcbiIpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBpZiAobiA8IHYubGVuZ3RoKSByZXR1cm4g
Jih2LnBvaW50ZXJbbl0pO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAg
cmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIp
OwogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVu
Y3Rpb25Xcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgJKHJldmlzaW9uIDI0NjQw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0
aXZlRnVuY3Rpb25Xcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1l
c3BhY2UgTWV0YWwgewogCiBjbGFzcyBUeXBlTmFtZXI7CiAKLVN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIFN0cmluZyYgb3V0cHV0RnVu
Y3Rpb25OYW1lLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJik7CitTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcmIG91dHB1dEZ1
bmN0aW9uTmFtZSwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIGNvbnN0IGNoYXIqIG1lbXNldFpl
cm9GdW5jdGlvbk5hbWUpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJl
dmlzaW9uIDI0NjQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBA
IHZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW8KICAgICAgICAgQVNTRVJU
KGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCks
ICJ7IFxuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAg
IiwgdG9TdHJpbmcoYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBhcnJh
eVJlZmVyZW5jZVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIqIHBvaW50ZXI7XG4iKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdWludCBsZW5ndGg7XG4iKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB1aW50MzJfdCBsZW5ndGg7XG4iKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBBU1NFUlQoaXM8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlw
ZWxpbmVNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0JKHJldmlzaW9uIDI0NjQw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21w
dXRlUGlwZWxpbmVNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtOTIsOCArOTIsOSBAQCBzdGF0
aWMgT3B0aW9uYWw8V0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zCiAgICAgICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKICAgICAgICAgY29tcHV0ZUxpYnJhcnkgPSBhZG9wdE5TKFtkZXZp
Y2UucGxhdGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1
bHQtPm1ldGFsU291cmNlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOwogICAgICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCiAgICAgICAgIEFTU0VSVChjb21wdXRlTGlicmFyeSk7
CisgICAgICAgIGlmICghY29tcHV0ZUxpYnJhcnkpCisgICAgICAgICAgICBOU0xvZyhAIiVAIiwg
ZXJyb3IpOwogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NTc3MSBPbmNlIHdlIHplcm8tZmlsbCB2YXJpYWJsZXMsIHRoZXJlIHNob3Vs
ZCBiZSBubyB3YXJuaW5ncywgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKCFlcnJvcikg
aGVyZS4KIAogICAgICAgICBjb21wdXRlRW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3VsdC0+
bWFuZ2xlZEVudHJ5UG9pbnROYW1lOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVs
aW5lTWV0YWwubW0JKHJldmlzaW9uIDI0NjQwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00MTcsNiArNDE3LDggQEAgc3RhdGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0
IGNoYXIqIAogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCiAgICAgICAgIEFT
U0VSVCh2ZXJ0ZXhMaWJyYXJ5KTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhMaWJyYXJ5KQorICAgICAg
ICAgICAgTlNMb2coQCIlQCIsIGVycm9yKTsKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFy
aWFibGVzLCB0aGVyZSBzaG91bGQgYmUgbm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxl
IHRvIEFTU0VSVCghZXJyb3IpIGhlcmUuCiAKICAgICAgICAgZnJhZ21lbnRMaWJyYXJ5ID0gdmVy
dGV4TGlicmFyeTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjQwNCkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA2LTEzICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50
IG91dC1vZi1ib3VuZHMgYW5kIG51bGxwdHIgYmVoYXZpb3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODYwMAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTE2Njg4NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHdlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MuaHRtbDogQWRkZWQuCisKIDIwMTktMDYt
MTMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICAiZGlzcGxh
eTogY29udGVudHMiIENvbnRlbnQgY2xpY2sgZG9lcyBub3QgdHJpZ2dlcgpJbmRleDogTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJl
ZmVyZW5jZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTIHJlc3Vs
dHNGbG9hdDMyQXJyYXlbMF0gaXMgMgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzFdIGlzIDQK
K1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJy
YXlbM10gaXMgOAorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzRdIGlzIDUKK1BBU1MgcmVzdWx0
c0Zsb2F0MzJBcnJheVs1XSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gaXMgNwor
UEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzddIGlzIDgKKwpJbmRleDogTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS5odG1sCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordHlwZWRlZiBGb28g
PSB0aHJlYWQgaW50KjsKK0ZvbyBnZXROdWxsUHRyKCkKK3sKKyAgICByZXR1cm4gbnVsbDsKK30K
Kworc3RydWN0IFhZWiB7CisgICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHo7
Cit9CisKK1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIo
ZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBT
Vl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgRm9vIHB0ciA9IG51bGw7CisgICAgKnB0ciA9IDQy
OworICAgICpnZXROdWxsUHRyKCkgPSA0MjsKKyAgICBpZiAoKnB0ciA9PSAwKSB7CisgICAgICAg
IGlmIChwdHIgPT0gZ2V0TnVsbFB0cigpKSB7CisgICAgICAgICAgICBpZiAoKmdldE51bGxQdHIo
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyZWFkIFhZWiogeHl6UHRyID0gbnVsbDsKKyAg
ICAgICAgICAgICAgICBYWVogeHl6OworICAgICAgICAgICAgICAgIHh5ei54ID0gMTsKKyAgICAg
ICAgICAgICAgICB4eXoueSA9IDE7CisgICAgICAgICAgICAgICAgeHl6LnogPSAxOworICAgICAg
ICAgICAgICAgIGlmICh4eXoueiA9PSAxLjAgJiYgeHl6LnkgPT0gMS4wICYmIHh5ei56ID09IDEu
MCkgeworICAgICAgICAgICAgICAgICAgICAqeHl6UHRyID0geHl6OworICAgICAgICAgICAgICAg
ICAgICB4eXogPSAqeHl6UHRyOworICAgICAgICAgICAgICAgICAgICBpZiAoeHl6LnogPT0gMC4w
ICYmIHh5ei55ID09IDAuMCAmJiB4eXoueiA9PSAwLjApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgmKmdldE51bGxQdHIoKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCYqKCYqZ2V0TnVsbFB0cigpKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRo
cmVhZElELngpXSAqIDIuMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CitgOworbGV0IHJlc3VsdHNG
bG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVy
ID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNvbnN0IGRldmlj
ZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dI
TFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9k
dWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3
LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6
IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5j
cmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29u
c3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlw
ZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVD
b21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBi
dWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAq
IDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFO
U0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVy
RGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIu
bWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9h
dDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9
IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFdID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVszXSA9IDQ7CisgICAgYnVmZmVyRmxv
YXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNV0gPSA2OworICAgIGJ1
ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsK
KyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9y
ID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVC
dWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVm
ZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3Jl
YXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJp
bmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5k
R3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBi
aW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29t
bWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBj
b21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVy
LCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4KTsKKyAgICBjb25zdCBjb21w
dXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAg
Y29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5k
UGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2go
KTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAg
IGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFz
eW5jKCk7CisgICAgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0
c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVswXSIsICIy
Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMV0iLCAiNCIpOworICAgIHNo
b3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzJdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVz
dWx0c0Zsb2F0MzJBcnJheVszXSIsICI4Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMy
QXJyYXlbNF0iLCAiNSIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzVdIiwg
IjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs2XSIsICI3Iik7CisgICAg
c2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbN10iLCAiOCIpOworICAgIHJlc3VsdHNCdWZm
ZXIudW5tYXAoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndh
aXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24o
KSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNz
LWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
b29iLWFjY2Vzcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTIHJl
c3VsdHNGbG9hdDMyQXJyYXlbMF0gaXMgMgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzFdIGlz
IDQKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMy
QXJyYXlbM10gaXMgOAorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzRdIGlzIDUKK1BBU1MgcmVz
dWx0c0Zsb2F0MzJBcnJheVs1XSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gaXMg
NworUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzddIGlzIDgKKwpJbmRleDogTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygyLCAxLCAxKV0KK2NvbXB1
dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUw
KSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGJ1ZmZlclsx
MzM3XSA9IDAuMDsKKyAgICBidWZmZXJbNDI0MjQyNDJdID0gMC4wOworICAgIGlmIChidWZmZXJb
MTAwMDAwXSA9PSAwLjApCisgICAgICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZl
clt1aW50KHRocmVhZElELngpXSAqIDIuMDsKK30KK2A7CitsZXQgcmVzdWx0c0Zsb2F0MzJBcnJh
eTsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBu
YXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQg
YWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZp
Y2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9
KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5
UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJz
dG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNy
ZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91
cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVs
aW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91
dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBl
bGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6
IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307
CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9y
KTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFz
eW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShi
dWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBi
dWZmZXJGbG9hdDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7
CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlb
NF0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQz
MkFycmF5WzZdID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZl
ci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5N
QVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIo
cmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHti
dWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRp
bmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJp
bmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBb
YmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNv
ZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5j
b2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFz
c0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVy
LmRpc3BhdGNoKDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7Cisg
ICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRl
dmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVz
dWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAg
ICByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZm
ZXIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzBdIiwgIjIiKTsKKyAgICBz
aG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVsxXSIsICI0Iik7CisgICAgc2hvdWxkQmUoInJl
c3VsdHNGbG9hdDMyQXJyYXlbMl0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQz
MkFycmF5WzNdIiwgIjgiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs0XSIs
ICI1Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNV0iLCAiNiIpOworICAg
IHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzZdIiwgIjciKTsKKyAgICBzaG91bGRCZSgi
cmVzdWx0c0Zsb2F0MzJBcnJheVs3XSIsICI4Iik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgp
OworfQoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9u
ZSgpOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICBz
dGFydCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="387841"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372127</attachid>
            <date>2019-06-14 10:54:13 -0700</date>
            <delta_ts>2019-06-14 10:57:13 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>47460</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjQzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE5LTA2LTE0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IG91
dC1vZi1ib3VuZHMgYW5kIG51bGxwdHIgYmVoYXZpb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NTE2Njg4NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAg
ICAgVGhlIGJlaGF2aW9yIHdlJ3JlIGltcGxlbWVudGluZyBpczoKKyAgICAgICAgLSBPT0Igd3Jp
dGVzIGFyZSBpZ25vcmVkLgorICAgICAgICAtIE9PQiByZWFkcyByZXR1cm4gemVyby4KKyAgICAg
ICAgLSBXcml0ZXMgdG8gbnVsbCBhcmUgaWdub3JlZC4KKyAgICAgICAgLSBSZWFkcyBmcm9tIG51
bGwgcmV0dXJuIHplcm8uCisgICAgICAgIC0gJip4ID09IHgsIGluY2x1ZGluZyAmKm51bGwgPT0g
bnVsbC4KKyAgICAgICAgCisgICAgICAgIFdlIGltcGxlbWVudCB0aGlzIGxpa2Ugc286CisgICAg
ICAgIC0gVGhlIHZhbHVlIHN0YWNrIGluIEZ1bmN0aW9uV3JpdGVyIHR1cm5zIGludG8gYSBzdGFj
ayBvZiBwYWlyczogcnZhbHVlcyBhbmQgbHZhbHVlcy4KKyAgICAgICAgICBydmFsdWVzIGFyZSBy
ZXByZXNlbnRlZCB0aGUgc2FtZSBhcyBiZWZvcmUuIEx2YWx1ZXMgYXJlIGFsd2F5cyBwb2ludGVy
cy4KKyAgICAgICAgLSBBbnl0aGluZyB0aGF0IHByb2R1Y2VzIGFuIGx2YWx1ZSBtdXN0IHB1c2gg
YSBwb2ludGVyIHRvIHRoZSBzdGFjay4gTm90CisgICAgICAgICAgYWxsIHRoaW5ncyBwcm9kdWNl
IGx2YWx1ZXMsIHNvIHRoYXQgZW50cnkgaW4gdGhlIHN0YWNrIG1heSBiZSBlbXB0eS4KKyAgICAg
ICAgICBIb3dldmVyLCBhbGwgdGhpbmdzIHRoYXQgcHJvZHVjZSBsdmFsdWVzIGFsc28gcHJvZHVj
ZSBydmFsdWVzLiBTbywgIip4ID0gNDIiIHdvcmtzLAorICAgICAgICAgIGFuZCBzbyBkb2VzICJm
b28oKngpIi4gTm9kZXMgdGhhdCBwcm9kdWNlIGx2YWx1ZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBh
bHNvIHByb2R1Y2luZworICAgICAgICAgIGFuIHJ2YWx1ZSwgd2hpY2ggc2hvdWxkIGJlIHRoZSB2
YWx1ZSBhcyBpZiB0aGUgbHZhbHVlIHdhcyBkZXJlZmVyZW5jZWQgYXQgdGhhdCBwb2ludAorICAg
ICAgICAgIGluIHByb2dyYW0gZXhlY3V0aW9uLiBTbyB0aGUgIip4IiBpbiAidGhyZWFkIGludCog
eCA9IG51bGw7ICp4IiBwcm9kdWNlcyB0aGUgaW50IHplcm8KKyAgICAgICAgICBmb3IgaXRzIHJ2
YWx1ZSwgYW5kIG51bGwgZm9yIGl0cyBsdmFsdWUuCisgICAgICAgIC0gRGVyZWZlcmVuY2UganVz
dCB3b3JrcywgYXMgZGVyZWZlcmVuY2UgcHJvZHVjZXMgYm90aCBhbiBsdmFsdWUgYW5kIHJ2YWx1
ZS4gRGVyZWZlcmVuY2UKKyAgICAgICAgICBub2RlJ3MgY2hpbGQgbXVzdCBhbHNvIGJlIGFuIGx2
YWx1ZS4gU28gd2UganVzdCBmb3J3YXJkIHRoYXQgdmFsdWUgYWxvbmcgb24KKyAgICAgICAgICB0
aGUgc3RhY2suIEZvciB0aGUgcnZhbHVlLCBpZiB3ZSB0cnkgdG8gZGVyZWZlcmVuY2UgbnVsbHB0
ciwgd2UganVzdCBmaWxsIGluCisgICAgICAgICAgemVybyBieXRlcyBpbnN0ZWFkLiBPdGhlcndp
c2UsIHRoZSBydmFsdWUgaXMgdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIHRoZQorICAgICAg
ICAgIG5vbi1udWxsIHBvaW50ZXIuCisgICAgICAgIC0gQXNzaWdubWVudCBleHByZXNzaW9ucyBj
aGVjayBpZiB0aGUgaW5jb21pbmcgbHZhbHVlIGlzIG51bGwuIElmIGl0IGlzLCBpdAorICAgICAg
ICAgIHNraXBzIHRoZSBhc3NpZ25tZW50LgorICAgICAgICAtIG9wZXJhdG9yJltdIHJldHVybnMg
bnVsbHB0ciBvbiBhbiBPT0IgYWNjZXNzLiBUaGVuLCBiYXNlZCBvbiB0aGUgYWJvdmUKKyAgICAg
ICAgICBiZWhhdmlvciwgd2UgZ2V0IHRoZSBkZXNpcmVkIE9PQiByZWFkcyByZXR1cm4gemVybywg
YW5kIE9PQiB3cml0ZXMgYXJlCisgICAgICAgICAgaWdub3JlZC4KKyAgICAgICAgLSBNYWtlUG9p
bnRlckV4cHJlc3Npb24ganVzdCB0YWtlcyB0aGUgbGFzdCBsdmFsdWUgb2ZmIHRoZSBzdGFjayAo
d2hpY2ggbXVzdAorICAgICAgICAgIGJlIGEgcG9pbnRlcikgYW5kIHJldHVybnMgaXQgYXMgYW4g
cnZhbHVlLgorICAgICAgICAtIFZhcmlhYmxlUmVmZXJlbmNlIHdpbGwgcHVzaCBib3RoIHRoZSB2
YXJpYWJsZSB2YWx1ZSBhbmQgYSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgIG9u
dG8gdGhlIHN0YWNrLgorCQorICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSBmZXcgYnVn
cyB3aGVyZSB3ZSB3ZXJlbid0IGdpdmluZyBjZXJ0YWluIEFTVCBub2RlcyB0aGUKKyAgICAgICAg
cHJvcGVyIGFkZHJlc3Mgc3BhY2UgdmFsdWVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIGNvZGUgdG8gZ2VuZXJhdGUgbmF0aXZlIGZ1bmN0aW9ucyBmb3Igb3BlcmF0b3JzCisg
ICAgICAgICJvcGVyYXRvcltdIiBhbmQgIm9wZXJhdG9yW109IiBhcyB3ZSBzaG91bGQgbmV2ZXIg
YmUgZ2VuZXJhdGluZyB0aGVzZQorICAgICAgICBvdXJzZWx2ZXMuIFdlIHNob3VsZCBvbmx5IGJl
IGdlbmVyYXRpbmcgdGhlICJvcGVyYXRvciZbXSIgYW5kZXIuCisKKyAgICAgICAgVGVzdHM6IHdl
YmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC1vb2ItYWNjZXNzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6YXBwZW5kUmlnaHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6YXBwZW5kTGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlw
ZU5hbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpl
bWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlByZXNlcnZlTGlmZXRpbWVzOjphc3NpZ25WYXJpYWJsZUludG9TdHJ1Y3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJvcGVydHlSZXNvbHZlcjo6dmlzaXQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwu
bW06CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6dHJ5U2V0RnVuY3Rpb25zKToKKwogMjAxOS0wNi0xNCAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBDUkFTSChudWxscHRyKSBpbiBXZWJDb3Jl
Ojpqc0F1ZGlvQ29udGV4dEN1cnJlbnRUaW1lKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2
ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkocmV2aXNpb24gMjQ2NDM3KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBh
dXRvIHJocyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZTo6d3JhcCh2YXJpYWJsZSkpOwogICAgICAgICByaHMtPnNldFR5cGUodmFy
aWFibGUudHlwZSgpLT5jbG9uZSgpKTsKLSAgICAgICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlvbihB
U1Q6OlJpZ2h0VmFsdWUoKSk7CisgICAgICAgIHJocy0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpM
ZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogCiAgICAgICAgIGF1dG8g
YXNzaWdubWVudCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4odmFy
aWFibGUub3JpZ2luKCksIFdURk1vdmUobGhzKSwgV1RGTW92ZShyaHMpKTsKICAgICAgICAgYXNz
aWdubWVudC0+c2V0VHlwZSh2YXJpYWJsZS50eXBlKCktPmNsb25lKCkpOwpAQCAtMTM2LDcgKzEz
Niw3IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAgYXV0byBtYWtlUG9pbnRlckV4cHJlc3Npb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihmdW5jdGlvbkRlZmlu
aXRpb24ub3JpZ2luKCksIFdURk1vdmUoc3RydWN0VmFyaWFibGVSZWZlcmVuY2UpKTsKICAgICAg
ICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZShtX3BvaW50ZXJUb1N0cnVjdFR5
cGUtPmNsb25lKCkpOwotICAgICAgICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBl
QW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CisgICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKIAogICAgICAgICAgICAgYXV0byBwb2ludGVyRGVjbGFyYXRpb24g
PSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbj4oZnVuY3Rpb25EZWZpbml0
aW9uLm9yaWdpbigpLCBBU1Q6OlF1YWxpZmllcnMoKSwKICAgICAgICAgICAgICAgICBtX3BvaW50
ZXJUb1N0cnVjdFR5cGUtPmNsb25lKCksICJ3cmFwcGVyIl9zLCBXVEY6Om51bGxvcHQsIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PihXVEZNb3ZlKG1ha2VQb2ludGVyRXhwcmVz
c2lvbikpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJvcGVydHlSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjQ2NDM3
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJl
c29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg1LDcgKzY4NSwxMSBAQCB2b2lkIFByb3Bl
cnR5UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UmVhZE1vCiAgICAgICAgICAgICBleHByZXNzaW9ucy5h
cHBlbmQoV1RGTW92ZShhc3NpZ25tZW50RXhwcmVzc2lvbikpOwogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIHt7IFdURk1vdmUoZXhwcmVzc2lvbnMpLCByZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkgfX07CisgICAgICAgIGF1dG8gdmFyaWFibGVSZWZl
cmVuY2UgPSByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCk7
CisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLT5zZXRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHZhcmlh
YmxlUmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQgfSk7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk4MTY5IElzIHRoaXMgcmlnaHQ/CisKKyAgICAgICAgcmV0dXJuIHt7
IFdURk1vdmUoZXhwcmVzc2lvbnMpLCAgV1RGTW92ZSh2YXJpYWJsZVJlZmVyZW5jZSkgfX07CiAg
ICAgfSk7CiAKICAgICBpZiAoIW1vZGlmeVJlc3VsdCkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJy
YXJ5LnR4dAkocmV2aXNpb24gMjQ2NDM3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00Mzks
NiArNDM5LDkgQEAgbmF0aXZlIHVpbnQgb3BlcmF0b3IrKHVpbnQsIHVpbnQpOwogbmF0aXZlIGJv
b2wgb3BlcmF0b3I8KGludCwgaW50KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPCh1aW50LCB1aW50
KTsKIG5hdGl2ZSBib29sIG9wZXJhdG9yPChmbG9hdCwgZmxvYXQpOworbmF0aXZlIGJvb2wgb3Bl
cmF0b3I9PShmbG9hdCwgZmxvYXQpOworbmF0aXZlIGJvb2wgb3BlcmF0b3I9PShpbnQsIGludCk7
CituYXRpdmUgYm9vbCBvcGVyYXRvcj09KHRocmVhZCBpbnQqLCB0aHJlYWQgaW50Kik7CiBuYXRp
dmUgZmxvYXQgb3BlcmF0b3IqKGZsb2F0LCBmbG9hdCk7CiAKIG5hdGl2ZSBib29sIG9wZXJhdG9y
LngoYm9vbDIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlz
aW9uIDI0NjQzNykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCwxOCBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmcoZnVuY3Rpb25NYXBwaW5nKQog
ICAgICAgICAsIG1fbGF5b3V0KGxheW91dCkKICAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygKKyAgICAgICAgICAgICJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVD5c
biIKKyAgICAgICAgICAgICJpbmxpbmUgdm9pZCAiLCBtZW1zZXRaZXJvRnVuY3Rpb25OYW1lLCAi
KHRocmVhZCBUJiB2YWx1ZSlcbiIKKyAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAiICAg
IHRocmVhZCBjaGFyKiBwdHIgPSBzdGF0aWNfY2FzdDx0aHJlYWQgY2hhcio+KHN0YXRpY19jYXN0
PHRocmVhZCB2b2lkKj4oJnZhbHVlKSk7XG4iCisgICAgICAgICAgICAiICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZW9mKFQpOyArK2kpXG4iCisgICAgICAgICAgICAiICAgICAgICBwdHJb
aV0gPSAwO1xuIgorICAgICAgICAgICAgIn1cbiIpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgY29u
c3RleHByIGNvbnN0IGNoYXIqIG1lbXNldFplcm9GdW5jdGlvbk5hbWUgPSAibWVtc2V0WmVybyI7
CisKICAgICB2aXJ0dWFsIH5GdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoKSA9IGRlZmF1bHQ7CiAK
ICAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsgfQpAQCAtMTUzLDEyICsxNjMsNDEgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbWFr
ZVN0cmluZygidmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAgc3Ry
dWN0IFN0YWNrSXRlbSB7CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgU3RyaW5nIGxl
ZnRWYWx1ZTsKKyAgICB9OworCisgICAgdm9pZCBhcHBlbmRSaWdodFZhbHVlKEFTVDo6RXhwcmVz
c2lvbiYsIFN0cmluZyB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RG
TW92ZSh2YWx1ZSksIFN0cmluZygpIH0pOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kTGVmdFZh
bHVlKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgU3RyaW5nIHZhbHVlLCBTdHJpbmcgbGVm
dFZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChleHByZXNzaW9uLCBleHByZXNz
aW9uLnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKTsKKyAgICAgICAgbV9zdGFj
ay5hcHBlbmQoeyBXVEZNb3ZlKHZhbHVlKSwgV1RGTW92ZShsZWZ0VmFsdWUpIH0pOworICAgIH0K
KworICAgIFN0cmluZyB0YWtlTGFzdFZhbHVlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0
YWNrLmxhc3QoKS52YWx1ZSk7CisgICAgICAgIHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCkudmFs
dWU7CisgICAgfQorCisgICAgU3RyaW5nIHRha2VMYXN0TGVmdFZhbHVlKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS5sZWZ0VmFsdWUpOworICAgICAgICByZXR1cm4gbV9z
dGFjay50YWtlTGFzdCgpLmxlZnRWYWx1ZTsKKyAgICB9CisKICAgICBJbnRyaW5zaWNzJiBtX2lu
dHJpbnNpY3M7CiAgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKICAgICBIYXNoTWFwPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOwogICAgIEhh
c2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgU3RyaW5nPiBtX3ZhcmlhYmxlTWFwcGlu
ZzsKICAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKLSAgICBWZWN0b3I8U3RyaW5n
PiBtX3N0YWNrOworCisgICAgVmVjdG9yPFN0YWNrSXRlbT4gbV9zdGFjazsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZzsK
ICAgICBMYXlvdXQmIG1fbGF5b3V0OwogICAgIHVuc2lnbmVkIG1fdmFyaWFibGVDb3VudCB7IDAg
fTsKQEAgLTE2OSw3ICsyMDgsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUCiB7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0
aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2
ZUZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV9p
bnRyaW5zaWNzLCBtX3R5cGVOYW1lcikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQod3Jp
dGVOYXRpdmVGdW5jdGlvbihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBpdGVyYXRvci0+dmFs
dWUsIG1faW50cmluc2ljcywgbV90eXBlTmFtZXIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUpKTsK
IH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCkBAIC0yNDYsNyArMjg1LDcgQEAgdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwotICAgIG1fc3Rh
Y2sudGFrZUxhc3QoKTsgLy8gVGhlIHN0YXRlbWVudCBpcyBhbHJlYWR5IGVmZmVjdGZ1bCwgc28g
d2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQuCisgICAgdGFrZUxh
c3RWYWx1ZSgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3ZSBk
b24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KIH0KIAogdm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQpAQCAtMjY0LDcg
KzMwMyw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjplbWl0TG9vcCgKIAogICAg
IGlmIChsb29wQ29uZGl0aW9uTG9jYXRpb24gPT0gTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpCZWZv
cmVCb2R5ICYmIGNvbmRpdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCpjb25kaXRpb25FeHByZXNzaW9uKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCB0YWtl
TGFzdFZhbHVlKCksICIpIGJyZWFrO1xuIikpOwogICAgIH0KIAogICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoImRvIHtcbiIpOwpAQCAtMjc2LDEyICszMTUsMTIgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKAogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlu
Y3JlbWVudCk7CiAgICAgICAgIC8vIEV4cHJlc3Npb24gcmVzdWx0cyBnZXQgcHVzaGVkIHRvIG1f
c3RhY2suIFdlIGRvbid0IHVzZSB0aGUgcmVzdWx0CiAgICAgICAgIC8vIG9mIGluY3JlbWVudCwg
c28gd2UgZGlzcGVuc2Ugb2YgdGhhdCBub3cuCi0gICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsK
KyAgICAgICAgdGFrZUxhc3RWYWx1ZSgpOwogICAgIH0KIAogICAgIGlmIChsb29wQ29uZGl0aW9u
TG9jYXRpb24gPT0gTG9vcENvbmRpdGlvbkxvY2F0aW9uOjpBZnRlckJvZHkgJiYgY29uZGl0aW9u
RXhwcmVzc2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmNvbmRpdGlvbkV4cHJl
c3Npb24pOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgh
IiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIHRha2VMYXN0VmFsdWUoKSwgIikgYnJl
YWs7XG4iKSk7CiAgICAgfQogCiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBcbiIpOwpA
QCAtMzA1LDcgKzM0NCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChB
U1QKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7CiAgICAgfSwgWyZdKFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CiAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBX
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAgdGFr
ZUxhc3RWYWx1ZSgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJl
c3VsdC4KICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKIAogICAgIGVtaXRMb29w
KExvb3BDb25kaXRpb25Mb2NhdGlvbjo6QmVmb3JlQm9keSwgZm9yTG9vcC5jb25kaXRpb24oKSwg
Zm9yTG9vcC5pbmNyZW1lbnQoKSwgZm9yTG9vcC5ib2R5KCkpOwpAQCAtMzE1LDcgKzM1NCw3IEBA
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKIHsK
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0gICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgbV9zdGFjay50YWtlTGFz
dCgpLCAiKSB7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJp
ZiAoIiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSB7XG4iKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGlmU3RhdGVtZW50LmJvZHkoKSk7CiAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsK
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOwpAQCAtMzMwLDEw
ICszNjksMTAgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKICAgICAg
ICAgaWYgKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nKSB7CiAgICAgICAgICAgICBhdXRvIHZhcmlh
YmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayhtX3N0YWNrLnRh
a2VMYXN0KCksIHZhcmlhYmxlTmFtZSkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayh0YWtlTGFzdFZhbHVlKCksIHZhcmlh
YmxlTmFtZSkpOwogICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCJyZXR1cm4gIiwgdmFyaWFibGVOYW1lLCAiO1xuIikpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3Rh
Y2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygicmV0dXJuICIsIHRha2VMYXN0VmFsdWUoKSwgIjtcbiIpKTsKICAgICB9
IGVsc2UKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgicmV0dXJuO1xuIik7CiB9CkBA
IC0zNDIsNyArMzgxLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VAogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CiAK
LSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgbV9zdGFj
ay50YWtlTGFzdCgpLCAiKSB7IikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygic3dpdGNoICgiLCB0YWtlTGFzdFZhbHVlKCksICIpIHsiKSk7CiAgICAgZm9yIChhdXRv
JiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCiAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKQEAgLTM3NSw3ICs0MTQsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShpbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGludGVnZXJMaXRl
cmFsLnZhbHVlKCksICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
CisgICAgYXBwZW5kUmlnaHRWYWx1ZShpbnRlZ2VyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0K
IAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkKQEAgLTM4Myw3ICs0MjIsNyBAQCB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJs
ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh1bnNpZ25lZEludGVnZXJMaXRl
cmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIs
IG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpLCAi
KTtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJp
Z2h0VmFsdWUodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9h
dExpdGVyYWwpCkBAIC0zOTEsNyArNDMwLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFs
LnZhbHVlKCksICIpO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cisg
ICAgYXBwZW5kUmlnaHRWYWx1ZShmbG9hdExpdGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxs
TGl0ZXJhbCkKQEAgLTQwNyw3ICs0NDYsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUCiAgICAgZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJu
dWxscHRyIik7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7Ci0gICAgbV9zdGFj
ay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKG51bGxMaXRlcmFs
LCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpCkBAIC00MTUsNyArNDU0LDcg
QEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVk
VHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoYm9vbGVhbkxpdGVyYWwu
cmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
YW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFu
Z2xlZFR5cGVOYW1lLCAiPigiLCBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8gInRydWUiIDogImZh
bHNlIiwgIik7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBh
cHBlbmRSaWdodFZhbHVlKGJvb2xlYW5MaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkKQEAgLTQyNSw3ICs0NjQsNyBAQCB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFt
ZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbWFuZ2xlZFR5cGVO
YW1lLCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoKmVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSwgIjtcbiIpKTsKLSAg
ICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoZW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQpAQCAt
NDMzLDM3ICs0NzIsMzkgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VAogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogfQogCi12b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikKK3ZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24p
CiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2Ug
dGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShkb3RFeHBy
ZXNzaW9uLCAiZHVtbXkiKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6R2xvYmFsVmFyaWFibGVSZWZlcmVuY2UmIGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNl
KQogewotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7
CisgICAgYXV0byB2YWx1ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBh
dXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBt
YW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZ2xvYmFsVmFy
aWFibGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChn
bG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5iYXNlKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygidGhyZWFkICIsIG1hbmdsZWRUeXBlTmFtZSwgIiYgIiwgdmFyaWFibGVO
YW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiLT4iLCBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2Uuc3RydWN0Rmll
bGQoKSksICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInRocmVhZCAiLCBtYW5nbGVkVHlwZU5h
bWUsICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIsIHRha2VMYXN0VmFsdWUoKSwgIi0+IiwgbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVm
ZXJlbmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFsdWVOYW1lLCAiID0gIiwgIioi
LCBwb2ludGVyTmFtZSwgIjtcbiIpKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUoZ2xvYmFsVmFyaWFi
bGVSZWZlcmVuY2UsIHZhbHVlTmFtZSwgcG9pbnRlck5hbWUpOwogfQogCi12b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKQordm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4
cHJlc3Npb24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgogICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzg4
IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLgogICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7CisgICAgYXBwZW5kUmlnaHRWYWx1
ZShpbmRleEV4cHJlc3Npb24sICJkdW1teSIpOwogfQogCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKQordm9pZCBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
JiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93
ZXJlZCBhbHJlYWR5LgogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk1Nzg4IFJlcGxhY2UgdGhpcyB3aXRoIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
LgogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgbV9zdGFjay5hcHBlbmQoImR1bW15Iik7Cisg
ICAgYXBwZW5kUmlnaHRWYWx1ZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sICJkdW1teSIpOwog
fQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtNDc1LDcgKzUxNiw3IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODE2MCBJbXBsZW1lbnQgcXVhbGlm
aWVycy4KICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7CiAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigp
KTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwg
IiA9ICIsIHRha2VMYXN0VmFsdWUoKSwgIjtcbiIpKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtc
biIpKTsKIH0KQEAgLTQ4MywxMSArNTI0LDExIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKIHsKICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRvIGxl
ZnROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gcG9pbnRlck5hbWUgPSB0YWtl
TGFzdExlZnRWYWx1ZSgpOwogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVz
c2lvbi5yaWdodCgpKTsKLSAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
LSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVmdE5hbWUsICIgPSAiLCBy
aWdodE5hbWUsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQocmlnaHROYW1lKTsKKyAgICBh
dXRvIHJpZ2h0TmFtZSA9IHRha2VMYXN0VmFsdWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoImlmICgiLCBwb2ludGVyTmFtZSwgIikgKiIsIHBvaW50ZXJOYW1lLCAi
ID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUoYXNzaWdubWVu
dEV4cHJlc3Npb24sIHJpZ2h0TmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKQEAgLTQ5NSw3
ICs1MzYsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAg
VmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDog
Y2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGFyZ3VtZW50KTsKLSAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQobV9zdGFjay50YWtlTGFz
dCgpKTsKKyAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQodGFrZUxhc3RWYWx1ZSgpKTsKICAg
ICB9CiAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwogICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkp
OwpAQCAtNTA4LDcgKzU0OSw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1QKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsK
ICAgICB9CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwotICAgIG1fc3RhY2su
YXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShjYWxsRXhwcmVzc2lv
biwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCkBAIC01MTYsMjYgKzU1
NywzMCBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgU3Ry
aW5nIHJlc3VsdDsKICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Npb24u
bGlzdCgpKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKLSAgICAg
ICAgcmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICByZXN1bHQgPSB0YWtlTGFz
dFZhbHVlKCk7CiAgICAgfQotICAgIG1fc3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgYXBwZW5k
UmlnaHRWYWx1ZShjb21tYUV4cHJlc3Npb24sIHJlc3VsdCk7CiB9CiAKIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZl
cmVuY2VFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4
cHJlc3Npb24ucG9pbnRlcigpKTsKLSAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgp
OworICAgIGF1dG8gcmlnaHQgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoQVNUOjp0b1N0cmluZygqZGVyZWZlcmVuY2VFeHByZXNzaW9uLnR5cGVB
bm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKSwgJyAnLCBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgIiYgIiwg
dmFyaWFibGVOYW1lLCAiID0gKiIsIHJpZ2h0LCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5k
KHZhcmlhYmxlTmFtZSk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKS5y
ZXNvbHZlZFR5cGUoKSksICcgJywgcG9pbnRlck5hbWUsICIgPSAiLCByaWdodCwgIjtcbiIpKTsK
KyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywg
dmFyaWFibGVOYW1lLCAiO1xuIikpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiaWYgKCIsIHBvaW50ZXJOYW1lLCAiKSAiLCB2YXJpYWJsZU5hbWUsICIgPSAqIiwgcmln
aHQsICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJlbHNl
ICIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUsICcoJywgdmFyaWFibGVOYW1lLCAiKTtcbiIpKTsK
KyAgICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUs
IHBvaW50ZXJOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQogewogICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgIGF1dG8gbGVmdCA9
IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIGxlZnQgPSB0YWtlTGFzdFZhbHVlKCk7CiAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAgIGF1
dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byByaWdodCA9IHRha2VMYXN0
VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUobG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9ICIsIGxlZnQpKTsKICAgICBzd2l0Y2ggKGxvZ2ljYWxFeHByZXNz
aW9uLnR5cGUoKSkgewpAQCAtNTQ4LDIyICs1OTMsMjQgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHJpZ2h0LCAiO1xuIikpOwotICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShsb2dpY2FsRXhwcmVzc2lv
biwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQogewog
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOwot
ICAgIGF1dG8gb3BlcmFuZCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIG9wZXJhbmQg
PSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvZ2ljYWxOb3RFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAhIiwgb3BlcmFuZCwgIjtcbiIpKTsKLSAg
ICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUobG9n
aWNhbE5vdEV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwotICAgIGF1dG8gbFZhbHVl
ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1h
ZGUgdG8gd29yay4gSXQgcHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIHRoZSBsYXN0IGxlZnRWYWx1
ZSB0b28uCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
ODgzOAorICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CiAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpKQpAQCAtNTczLDE2
ICs2MjAsMTYgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAn
ICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgJigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJheVR5cGUu
bnVtRWxlbWVudHMoKSwgIiB9O1xuIikpOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9IHsgJiIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZh
cmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lv
bikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRW
YWx1ZSgpKTsKLSAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRv
IHBvaW50ZXIgPSB0YWtlTGFzdExlZnRWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0g
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtlUG9pbnRlckV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICYiLCBsVmFsdWUs
ICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1l
LCAiID0gIiwgcG9pbnRlciwgIjtcbiIpKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKG1ha2VQb2lu
dGVyRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpCkBAIC01OTQs
MTkgKzY0MSwxOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lv
biYgdGVybmFyeUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlF
eHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICBhdXRvIGNoZWNrID0gbV9zdGFjay50YWtlTGFz
dCgpOworICAgIGF1dG8gY2hlY2sgPSB0YWtlTGFzdFZhbHVlKCk7CiAKICAgICBhdXRvIHZhcmlh
YmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGVybmFy
eUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsK
IAogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIGNoZWNrLCAi
KSB7XG4iKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlF
eHByZXNzaW9uKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJp
YWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIHRha2VMYXN0
VmFsdWUoKSwgIjtcbiIpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xu
Iik7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNz
aW9uKCkpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5h
bWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIHRha2VMYXN0VmFsdWUo
KSwgIjtcbiIpKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUodGVybmFyeUV4
cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKQEAg
LTYxNCw3ICs2NjEsOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3ZhcmlhYmxlTWFwcGluZy5maW5kKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxl
KCkpOwogICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3ZhcmlhYmxlTWFwcGluZy5lbmQoKSk7Ci0g
ICAgbV9zdGFjay5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICBhdXRvIHBvaW50ZXJOYW1l
ID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJ0aHJlYWQgIiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHZh
cmlhYmxlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSwgIiogIiwgcG9pbnRlck5hbWUsICIgPSAm
IiwgaXRlcmF0b3ItPnZhbHVlLCAiO1xuIikpOworICAgIGFwcGVuZExlZnRWYWx1ZSh2YXJpYWJs
ZVJlZmVyZW5jZSwgaXRlcmF0b3ItPnZhbHVlLCBwb2ludGVyTmFtZSk7CiB9CiAKIFN0cmluZyBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0YW50RXhwcmVzc2lvblN0cmluZyhBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjQzNykKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rp
b25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBTdHJp
bmcgYXRvbWljTmFtZShTdHJpbmcgaW5wdXQpCiAgICAgICAgIHJldHVybiAiZmV0Y2hfeG9yIl9z
dHI7CiB9CiAKLVN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgU3RyaW5nJiBvdXRwdXRGdW5j
dGlvbk5hbWUsIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQor
U3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9uTmFtZSwg
SW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIsIGNvbnN0IGNoYXIq
IG1lbXNldFplcm9GdW5jdGlvbk5hbWUpCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzQ2FzdCgpKSB7CkBAIC04
OSw4ICs4OSw3IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgaWYgKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkp
IHsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1
cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIpKTsKICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtZXRhbFJldHVybk5hbWUs
ICIgeDtcbiIpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFk
IGNoYXIqIHB0ciA9IHN0YXRpY19jYXN0PHRocmVhZCBjaGFyKj4oc3RhdGljX2Nhc3Q8dGhyZWFk
IHZvaWQqPigmeCkpO1xuIik7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCIgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoIiwgbWV0YWxSZXR1cm5O
YW1lLCAiKTsgKytpKSBwdHJbaV0gPSAwO1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUsICIoeCk7
XG4iKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHJldHVybiB4O1xu
Iik7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CiAgICAgICAgICAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwpAQCAtMjE0LDM4ICsyMTMsMTQgQEAg
U3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAotICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKLSAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkp
OwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5j
dGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRl
cjJOYW1lLCAiIGkpIHtcbiIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgIHJldHVybiBtW2ldO1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifVxuIik7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAg
fQotCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRv
ciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSA9PSAyKTsKICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi50eXBlKCkpOwotICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3ImW10uIl9zdHIubGVuZ3RoKCkpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAn
LCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBt
ZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAmKHYucG9pbnRlcltuXSk7XG4iKSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW109IikgewotICAgICAgICBBU1NFUlQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwotICAgICAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOwot
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlv
bk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJO
YW1lLCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIikpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgbVtpXSA9IHY7XG4iKSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbTtcbiIpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBpZiAobiA8IHYubGVuZ3RoKSByZXR1
cm4gJih2LnBvaW50ZXJbbl0pO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
ICAgcmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
biIpOwogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgJKHJldmlzaW9uIDI0
NjQzNykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TmF0aXZlRnVuY3Rpb25Xcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBu
YW1lc3BhY2UgTWV0YWwgewogCiBjbGFzcyBUeXBlTmFtZXI7CiAKLVN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIFN0cmluZyYgb3V0cHV0
RnVuY3Rpb25OYW1lLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJik7CitTdHJpbmcgd3JpdGVOYXRp
dmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcmIG91dHB1
dEZ1bmN0aW9uTmFtZSwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYsIGNvbnN0IGNoYXIqIG1lbXNl
dFplcm9GdW5jdGlvbk5hbWUpOwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJ
KHJldmlzaW9uIDI0NjQzNykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDcgKzM5Myw3
IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW8KICAgICAgICAgQVNT
RVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1l
KCksICJ7IFxuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIg
ICAgIiwgdG9TdHJpbmcoYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBh
cnJheVJlZmVyZW5jZVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIqIHBvaW50ZXI7XG4i
KSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdWludCBsZW5ndGg7XG4iKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB1aW50MzJfdCBsZW5ndGg7XG4iKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBcnJheVR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFs
Lm1tCShyZXZpc2lvbiAyNDY0MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAg
LTkyLDcgKzkyLDEwIEBAIHN0YXRpYyBPcHRpb25hbDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMK
ICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgICAgICBjb21wdXRlTGli
cmFyeSA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlXaXRoU291
cmNlOndobHNsQ29tcGlsZVJlc3VsdC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVy
cm9yXSk7CiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIGlmICghY29tcHV0ZUxpYnJhcnkpCisgICAgICAgICAgICBOU0xvZyhAIiVA
IiwgZXJyb3IpOworI2VuZGlmCiAgICAgICAgIEFTU0VSVChjb21wdXRlTGlicmFyeSk7CiAgICAg
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
NzcxIE9uY2Ugd2UgemVyby1maWxsIHZhcmlhYmxlcywgdGhlcmUgc2hvdWxkIGJlIG5vIHdhcm5p
bmdzLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQoIWVycm9yKSBoZXJlLgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlw
ZWxpbmVNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQkocmV2aXNpb24gMjQ2NDM3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRl
clBpcGVsaW5lTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxNiw2ICs0MTYsMTAgQEAgc3Rh
dGljIGJvb2wgdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IGNoYXIqIAogICAgICAgICB2ZXJ0ZXhMaWJy
YXJ5ID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdpdGhTb3Vy
Y2U6d2hsc2xDb21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZSBvcHRpb25zOm5pbCBlcnJvcjomZXJy
b3JdKTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAorI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgaWYgKCF2ZXJ0ZXhMaWJyYXJ5KQorICAgICAgICAgICAgTlNMb2coQCIlQCIs
IGVycm9yKTsKKyNlbmRpZgogICAgICAgICBBU1NFUlQodmVydGV4TGlicmFyeSk7CiAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Nzcx
IE9uY2Ugd2UgemVyby1maWxsIHZhcmlhYmxlcywgdGhlcmUgc2hvdWxkIGJlIG5vIHdhcm5pbmdz
LCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQoIWVycm9yKSBoZXJlLgogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDY0MzcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wNi0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIEltcGxlbWVudCBvdXQtb2YtYm91bmRzIGFuZCBu
dWxscHRyIGJlaGF2aW9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTg2MDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUxNjY4ODUzPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IFJvYmluIE1vcmlzc2V0LgorCisgICAgICAgICogd2ViZ3B1L3dobHNs
LW51bGwtZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wtbnVsbC1kZXJlZmVyZW5jZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wtb29iLWFjY2Vzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC1vb2ItYWNjZXNzLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA2LTE0ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBDbG9uaW5nIGEgTWVkaWFTdHJlYW1UcmFjayBk
b2VzIG5vdCBjbG9uZSB0aGUgbG9nZ2VyCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
bnVsbC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVswXSBp
cyAyCitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gaXMgNAorUEFTUyByZXN1bHRzRmxvYXQz
MkFycmF5WzJdIGlzIDYKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSBpcyA4CitQQVNTIHJl
c3VsdHNGbG9hdDMyQXJyYXlbNF0gaXMgNQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzVdIGlz
IDYKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSBpcyA3CitQQVNTIHJlc3VsdHNGbG9hdDMy
QXJyYXlbN10gaXMgOAorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJl
ZmVyZW5jZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxs
LWRlcmVmZXJlbmNlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3do
bHNsLW51bGwtZGVyZWZlcmVuY2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+
Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCit0eXBlZGVmIEZvbyA9IHRocmVhZCBpbnQqOworRm9v
IGdldE51bGxQdHIoKQoreworICAgIHJldHVybiBudWxsOworfQorCitzdHJ1Y3QgWFlaIHsKKyAg
ICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgejsKK30KKworW251bXRocmVhZHMo
MiwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgZmxvYXRbXSBidWZm
ZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQp
IHsKKyAgICBGb28gcHRyID0gbnVsbDsKKyAgICAqcHRyID0gNDI7CisgICAgKmdldE51bGxQdHIo
KSA9IDQyOworICAgIGlmICgqcHRyID09IDApIHsKKyAgICAgICAgaWYgKHB0ciA9PSBnZXROdWxs
UHRyKCkpIHsKKyAgICAgICAgICAgIGlmICgqZ2V0TnVsbFB0cigpID09IDApIHsKKyAgICAgICAg
ICAgICAgICB0aHJlYWQgWFlaKiB4eXpQdHIgPSBudWxsOworICAgICAgICAgICAgICAgIFhZWiB4
eXo7CisgICAgICAgICAgICAgICAgeHl6LnggPSAxOworICAgICAgICAgICAgICAgIHh5ei55ID0g
MTsKKyAgICAgICAgICAgICAgICB4eXoueiA9IDE7CisgICAgICAgICAgICAgICAgaWYgKHh5ei56
ID09IDEuMCAmJiB4eXoueSA9PSAxLjAgJiYgeHl6LnogPT0gMS4wKSB7CisgICAgICAgICAgICAg
ICAgICAgICp4eXpQdHIgPSB4eXo7CisgICAgICAgICAgICAgICAgICAgIHh5eiA9ICp4eXpQdHI7
CisgICAgICAgICAgICAgICAgICAgIGlmICh4eXoueiA9PSAwLjAgJiYgeHl6LnkgPT0gMC4wICYm
IHh5ei56ID09IDAuMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCYqZ2V0TnVsbFB0
cigpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJiooJipnZXRO
dWxsUHRyKCkpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyW3VpbnQodGhyZWFkSUQueCldID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCldICogMi4wOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KK2A7CitsZXQgcmVzdWx0c0Zsb2F0MzJBcnJheTsKK2FzeW5j
IGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3Iu
Z3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5y
ZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJj
b21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1
ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJh
eUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9h
dDMyQXJyYXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1Owor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZd
ID0gNzsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgp
OworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0Ug
fCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07
CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1
ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJl
c3VsdHNCdWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7Ymlu
ZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERl
c2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3Vw
QmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAo
YmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmlj
ZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlC
dWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNv
bW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIu
c2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0
QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNo
KDIsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3Qg
Y29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRR
dWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5
QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRz
RmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAg
IHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzBdIiwgIjIiKTsKKyAgICBzaG91bGRCZSgi
cmVzdWx0c0Zsb2F0MzJBcnJheVsxXSIsICI0Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9h
dDMyQXJyYXlbMl0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzNd
IiwgIjgiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs0XSIsICI1Iik7Cisg
ICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNV0iLCAiNiIpOworICAgIHNob3VsZEJl
KCJyZXN1bHRzRmxvYXQzMkFycmF5WzZdIiwgIjciKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zs
b2F0MzJBcnJheVs3XSIsICI4Iik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQoraWYg
KHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOword2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICBzdGFydCgpLnRo
ZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MtZXhwZWN0ZWQudHh0CShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsw
XSBpcyAyCitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbMV0gaXMgNAorUEFTUyByZXN1bHRzRmxv
YXQzMkFycmF5WzJdIGlzIDYKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVszXSBpcyA4CitQQVNT
IHJlc3VsdHNGbG9hdDMyQXJyYXlbNF0gaXMgNQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzVd
IGlzIDYKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVs2XSBpcyA3CitQQVNTIHJlc3VsdHNGbG9h
dDMyQXJyYXlbN10gaXMgOAorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFj
Y2Vzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNj
ZXNzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1h
Y2Nlc3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNv
dXJjZSA9IGAKK1tudW10aHJlYWRzKDIsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFk
ZXIoZGV2aWNlIGZsb2F0W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQg
OiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgYnVmZmVyWzEzMzddID0gMC4wOworICAgIGJ1
ZmZlcls0MjQyNDI0Ml0gPSAwLjA7CisgICAgaWYgKGJ1ZmZlclsxMDAwMDBdID09IDAuMCkKKyAg
ICAgICAgYnVmZmVyW3VpbnQodGhyZWFkSUQueCldID0gYnVmZmVyW3VpbnQodGhyZWFkSUQueCld
ICogMi4wOworfQorYDsKK2xldCByZXN1bHRzRmxvYXQzMkFycmF5OworYXN5bmMgZnVuY3Rpb24g
c3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVz
dEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZp
Y2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1
bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1
dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFk
ZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6
IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsK
KyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0
KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVM
YXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Ig
PSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21w
dXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGlu
ZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQ
X1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIg
PSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZl
ckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBi
dWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsx
XSA9IDI7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKKyAgICBidWZmZXJGbG9hdDMy
QXJyYXlbM10gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7CisgICAgYnVmZmVy
RmxvYXQzMkFycmF5WzVdID0gNjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0gPSA3OworICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7CisgICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICBj
b25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNf
UEVSX0VMRU1FTlQgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZl
clVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25z
dCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZl
ciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCBy
ZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9
IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07
CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNv
bW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVm
ZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9F
TEVNRU5UICogOCk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29k
ZXIuYmVnaW5Db21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShjb21wdXRlUGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAo
MCwgYmluZEdyb3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goMiwgMSwgMSk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBh
d2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgIHJlc3VsdHNGbG9hdDMyQXJy
YXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAgc2hvdWxkQmUo
InJlc3VsdHNGbG9hdDMyQXJyYXlbMF0iLCAiMiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxv
YXQzMkFycmF5WzFdIiwgIjQiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVsy
XSIsICI2Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbM10iLCAiOCIpOwor
ICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzRdIiwgIjUiKTsKKyAgICBzaG91bGRC
ZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs1XSIsICI2Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNG
bG9hdDMyQXJyYXlbNl0iLCAiNyIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5
WzddIiwgIjgiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9CitpZiAod2luZG93LnRl
c3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0KCkudGhlbihmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
IH0pOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372128</attachid>
            <date>2019-06-14 10:57:13 -0700</date>
            <delta_ts>2019-06-14 10:57:13 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>47459</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjQzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE5LTA2LTE0ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IG91
dC1vZi1ib3VuZHMgYW5kIG51bGxwdHIgYmVoYXZpb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NTE2Njg4NTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAg
ICAgVGhlIGJlaGF2aW9yIHdlJ3JlIGltcGxlbWVudGluZyBpczoKKyAgICAgICAgLSBPT0Igd3Jp
dGVzIGFyZSBpZ25vcmVkLgorICAgICAgICAtIE9PQiByZWFkcyByZXR1cm4gemVyby4KKyAgICAg
ICAgLSBXcml0ZXMgdG8gbnVsbCBhcmUgaWdub3JlZC4KKyAgICAgICAgLSBSZWFkcyBmcm9tIG51
bGwgcmV0dXJuIHplcm8uCisgICAgICAgIC0gJip4ID09IHgsIGluY2x1ZGluZyAmKm51bGwgPT0g
bnVsbC4KKyAgICAgICAgCisgICAgICAgIFdlIGltcGxlbWVudCB0aGlzIGxpa2Ugc286CisgICAg
ICAgIC0gVGhlIHZhbHVlIHN0YWNrIGluIEZ1bmN0aW9uV3JpdGVyIHR1cm5zIGludG8gYSBzdGFj
ayBvZiBwYWlyczogcnZhbHVlcyBhbmQgbHZhbHVlcy4KKyAgICAgICAgICBydmFsdWVzIGFyZSBy
ZXByZXNlbnRlZCB0aGUgc2FtZSBhcyBiZWZvcmUuIEx2YWx1ZXMgYXJlIGFsd2F5cyBwb2ludGVy
cy4KKyAgICAgICAgLSBBbnl0aGluZyB0aGF0IHByb2R1Y2VzIGFuIGx2YWx1ZSBtdXN0IHB1c2gg
YSBwb2ludGVyIHRvIHRoZSBzdGFjay4gTm90CisgICAgICAgICAgYWxsIHRoaW5ncyBwcm9kdWNl
IGx2YWx1ZXMsIHNvIHRoYXQgZW50cnkgaW4gdGhlIHN0YWNrIG1heSBiZSBlbXB0eS4KKyAgICAg
ICAgICBIb3dldmVyLCBhbGwgdGhpbmdzIHRoYXQgcHJvZHVjZSBsdmFsdWVzIGFsc28gcHJvZHVj
ZSBydmFsdWVzLiBTbywgIip4ID0gNDIiIHdvcmtzLAorICAgICAgICAgIGFuZCBzbyBkb2VzICJm
b28oKngpIi4gTm9kZXMgdGhhdCBwcm9kdWNlIGx2YWx1ZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBh
bHNvIHByb2R1Y2luZworICAgICAgICAgIGFuIHJ2YWx1ZSwgd2hpY2ggc2hvdWxkIGJlIHRoZSB2
YWx1ZSBhcyBpZiB0aGUgbHZhbHVlIHdhcyBkZXJlZmVyZW5jZWQgYXQgdGhhdCBwb2ludAorICAg
ICAgICAgIGluIHByb2dyYW0gZXhlY3V0aW9uLiBTbyB0aGUgIip4IiBpbiAidGhyZWFkIGludCog
eCA9IG51bGw7ICp4IiBwcm9kdWNlcyB0aGUgaW50IHplcm8KKyAgICAgICAgICBmb3IgaXRzIHJ2
YWx1ZSwgYW5kIG51bGwgZm9yIGl0cyBsdmFsdWUuCisgICAgICAgIC0gRGVyZWZlcmVuY2UganVz
dCB3b3JrcywgYXMgZGVyZWZlcmVuY2UgcHJvZHVjZXMgYm90aCBhbiBsdmFsdWUgYW5kIHJ2YWx1
ZS4gRGVyZWZlcmVuY2UKKyAgICAgICAgICBub2RlJ3MgY2hpbGQgbXVzdCBhbHNvIGJlIGFuIGx2
YWx1ZS4gU28gd2UganVzdCBmb3J3YXJkIHRoYXQgdmFsdWUgYWxvbmcgb24KKyAgICAgICAgICB0
aGUgc3RhY2suIEZvciB0aGUgcnZhbHVlLCBpZiB3ZSB0cnkgdG8gZGVyZWZlcmVuY2UgbnVsbHB0
ciwgd2UganVzdCBmaWxsIGluCisgICAgICAgICAgemVybyBieXRlcyBpbnN0ZWFkLiBPdGhlcndp
c2UsIHRoZSBydmFsdWUgaXMgdGhlIHJlc3VsdCBvZiBkZXJlZmVyZW5jaW5nIHRoZQorICAgICAg
ICAgIG5vbi1udWxsIHBvaW50ZXIuCisgICAgICAgIC0gQXNzaWdubWVudCBleHByZXNzaW9ucyBj
aGVjayBpZiB0aGUgaW5jb21pbmcgbHZhbHVlIGlzIG51bGwuIElmIGl0IGlzLCBpdAorICAgICAg
ICAgIHNraXBzIHRoZSBhc3NpZ25tZW50LgorICAgICAgICAtIG9wZXJhdG9yJltdIHJldHVybnMg
bnVsbHB0ciBvbiBhbiBPT0IgYWNjZXNzLiBUaGVuLCBiYXNlZCBvbiB0aGUgYWJvdmUKKyAgICAg
ICAgICBiZWhhdmlvciwgd2UgZ2V0IHRoZSBkZXNpcmVkIE9PQiByZWFkcyByZXR1cm4gemVybywg
YW5kIE9PQiB3cml0ZXMgYXJlCisgICAgICAgICAgaWdub3JlZC4KKyAgICAgICAgLSBNYWtlUG9p
bnRlckV4cHJlc3Npb24ganVzdCB0YWtlcyB0aGUgbGFzdCBsdmFsdWUgb2ZmIHRoZSBzdGFjayAo
d2hpY2ggbXVzdAorICAgICAgICAgIGJlIGEgcG9pbnRlcikgYW5kIHJldHVybnMgaXQgYXMgYW4g
cnZhbHVlLgorICAgICAgICAtIFZhcmlhYmxlUmVmZXJlbmNlIHdpbGwgcHVzaCBib3RoIHRoZSB2
YXJpYWJsZSB2YWx1ZSBhbmQgYSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZQorICAgICAgICAgIG9u
dG8gdGhlIHN0YWNrLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBhIGZldyBidWdz
IHdoZXJlIHdlIHdlcmVuJ3QgZ2l2aW5nIGNlcnRhaW4gQVNUIG5vZGVzIHRoZQorICAgICAgICBw
cm9wZXIgYWRkcmVzcyBzcGFjZSB2YWx1ZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJl
bW92ZXMgY29kZSB0byBnZW5lcmF0ZSBuYXRpdmUgZnVuY3Rpb25zIGZvciBvcGVyYXRvcnMKKyAg
ICAgICAgIm9wZXJhdG9yW10iIGFuZCAib3BlcmF0b3JbXT0iIGFzIHdlIHNob3VsZCBuZXZlciBi
ZSBnZW5lcmF0aW5nIHRoZXNlCisgICAgICAgIG91cnNlbHZlcy4gV2Ugc2hvdWxkIG9ubHkgYmUg
Z2VuZXJhdGluZyB0aGUgIm9wZXJhdG9yJltdIiBhbmRlci4KKworICAgICAgICBUZXN0czogd2Vi
Z3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UuaHRtbAorICAgICAgICAgICAgICAgd2ViZ3B1L3do
bHNsLW9vYi1hY2Nlc3MuaHRtbAorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
OjphcHBlbmRSaWdodFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjphcHBlbmRMZWZ0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnRha2VMYXN0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnRha2VMYXN0TGVmdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6ZW1pdExvb3ApOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5hdGl2ZUZ1bmN0aW9uKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9u
V3JpdGVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBl
TmFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVt
aXRVbm5hbWVkVHlwZURlZmluaXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6UHJlc2VydmVMaWZldGltZXM6OmFzc2lnblZhcmlhYmxlSW50b1N0cnVjdCk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9wZXJ0eVJlc29sdmVyOjp2aXNpdCk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0OgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnRyeVNldEZ1bmN0aW9ucyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAg
IChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorCiAyMDE5LTA2LTE0ICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIENSQVNIKG51bGxwdHIpIGluIFdlYkNvcmU6
OmpzQXVkaW9Db250ZXh0Q3VycmVudFRpbWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZl
VmFyaWFibGVMaWZldGltZXMuY3BwCShyZXZpc2lvbiAyNDY0MzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgICAgIGF1
dG8gcmhzID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlhYmxlKSk7CiAgICAgICAgIHJocy0+c2V0VHlwZSh2YXJp
YWJsZS50eXBlKCktPmNsb25lKCkpOwotICAgICAgICByaHMtPnNldFR5cGVBbm5vdGF0aW9uKEFT
VDo6UmlnaHRWYWx1ZSgpKTsKKyAgICAgICAgcmhzLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6Okxl
ZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7CiAKICAgICAgICAgYXV0byBh
c3NpZ25tZW50ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPih2YXJp
YWJsZS5vcmlnaW4oKSwgV1RGTW92ZShsaHMpLCBXVEZNb3ZlKHJocykpOwogICAgICAgICBhc3Np
Z25tZW50LT5zZXRUeXBlKHZhcmlhYmxlLnR5cGUoKS0+Y2xvbmUoKSk7CkBAIC0xMzYsNyArMTM2
LDcgQEAgcHVibGljOgogCiAgICAgICAgICAgICBhdXRvIG1ha2VQb2ludGVyRXhwcmVzc2lvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGZ1bmN0aW9uRGVmaW5p
dGlvbi5vcmlnaW4oKSwgV1RGTW92ZShzdHJ1Y3RWYXJpYWJsZVJlZmVyZW5jZSkpOwogICAgICAg
ICAgICAgbWFrZVBvaW50ZXJFeHByZXNzaW9uLT5zZXRUeXBlKG1fcG9pbnRlclRvU3RydWN0VHlw
ZS0+Y2xvbmUoKSk7Ci0gICAgICAgICAgICBtYWtlUG9pbnRlckV4cHJlc3Npb24tPnNldFR5cGVB
bm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9KTsK
KyAgICAgICAgICAgIG1ha2VQb2ludGVyRXhwcmVzc2lvbi0+c2V0VHlwZUFubm90YXRpb24oQVNU
OjpSaWdodFZhbHVlKCkpOwogCiAgICAgICAgICAgICBhdXRvIHBvaW50ZXJEZWNsYXJhdGlvbiA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihmdW5jdGlvbkRlZmluaXRp
b24ub3JpZ2luKCksIEFTVDo6UXVhbGlmaWVycygpLAogICAgICAgICAgICAgICAgIG1fcG9pbnRl
clRvU3RydWN0VHlwZS0+Y2xvbmUoKSwgIndyYXBwZXIiX3MsIFdURjo6bnVsbG9wdCwgT3B0aW9u
YWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+KFdURk1vdmUobWFrZVBvaW50ZXJFeHByZXNz
aW9uKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cm9wZXJ0eVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyNDY0Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVz
b2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNyArNjg1LDExIEBAIHZvaWQgUHJvcGVy
dHlSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZWFkTW8KICAgICAgICAgICAgIGV4cHJlc3Npb25zLmFw
cGVuZChXVEZNb3ZlKGFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4ge3sgV1RGTW92ZShleHByZXNzaW9ucyksIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKSB9fTsKKyAgICAgICAgYXV0byB2YXJpYWJsZVJlZmVy
ZW5jZSA9IHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFyaWFibGVSZWZlcmVuY2UoKTsK
KyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2UtPnNldFR5cGUocmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2UtPnNldFR5cGVBbm5vdGF0aW9uKEFTVDo6TGVmdFZhbHVlIHsgQVNUOjpBZGRy
ZXNzU3BhY2U6OlRocmVhZCB9KTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTgxNjkgSXMgdGhpcyByaWdodD8KKworICAgICAgICByZXR1cm4ge3sg
V1RGTW92ZShleHByZXNzaW9ucyksICBXVEZNb3ZlKHZhcmlhYmxlUmVmZXJlbmNlKSB9fTsKICAg
ICB9KTsKIAogICAgIGlmICghbW9kaWZ5UmVzdWx0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJh
cnkudHh0CShyZXZpc2lvbiAyNDY0MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2
ICs0MzksOSBAQCBuYXRpdmUgdWludCBvcGVyYXRvcisodWludCwgdWludCk7CiBuYXRpdmUgYm9v
bCBvcGVyYXRvcjwoaW50LCBpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I8KHVpbnQsIHVpbnQp
OwogbmF0aXZlIGJvb2wgb3BlcmF0b3I8KGZsb2F0LCBmbG9hdCk7CituYXRpdmUgYm9vbCBvcGVy
YXRvcj09KGZsb2F0LCBmbG9hdCk7CituYXRpdmUgYm9vbCBvcGVyYXRvcj09KGludCwgaW50KTsK
K25hdGl2ZSBib29sIG9wZXJhdG9yPT0odGhyZWFkIGludCosIHRocmVhZCBpbnQqKTsKIG5hdGl2
ZSBmbG9hdCBvcGVyYXRvciooZmxvYXQsIGZsb2F0KTsKIAogbmF0aXZlIGJvb2wgb3BlcmF0b3Iu
eChib29sMik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNp
b24gMjQ2NDM3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDggKzg4LDE4IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2Z1bmN0aW9uTWFwcGluZyhmdW5jdGlvbk1hcHBpbmcpCiAg
ICAgICAgICwgbV9sYXlvdXQobGF5b3V0KQogICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKAorICAgICAgICAgICAgInRlbXBsYXRlIDx0eXBlbmFtZSBUPlxu
IgorICAgICAgICAgICAgImlubGluZSB2b2lkICIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUsICIo
dGhyZWFkIFQmIHZhbHVlKVxuIgorICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICIgICAg
dGhyZWFkIGNoYXIqIHB0ciA9IHN0YXRpY19jYXN0PHRocmVhZCBjaGFyKj4oc3RhdGljX2Nhc3Q8
dGhyZWFkIHZvaWQqPigmdmFsdWUpKTtcbiIKKyAgICAgICAgICAgICIgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplb2YoVCk7ICsraSlcbiIKKyAgICAgICAgICAgICIgICAgICAgIHB0cltp
XSA9IDA7XG4iCisgICAgICAgICAgICAifVxuIikpOwogICAgIH0KIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgY29uc3QgY2hhciogbWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSA9ICJtZW1zZXRaZXJvIjsK
KwogICAgIHZpcnR1YWwgfkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcigpID0gZGVmYXVsdDsKIAog
ICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OyB9CkBAIC0xNTMsMTIgKzE2Myw0MSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBtYWtl
U3RyaW5nKCJ2YXJpYWJsZSIsIG1fdmFyaWFibGVDb3VudCsrKTsKICAgICB9CiAKKyAgICBzdHJ1
Y3QgU3RhY2tJdGVtIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBTdHJpbmcgbGVm
dFZhbHVlOworICAgIH07CisKKyAgICB2b2lkIGFwcGVuZFJpZ2h0VmFsdWUoQVNUOjpFeHByZXNz
aW9uJiwgU3RyaW5nIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZN
b3ZlKHZhbHVlKSwgU3RyaW5nKCkgfSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRMZWZ0VmFs
dWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBTdHJpbmcgdmFsdWUsIFN0cmluZyBsZWZ0
VmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGV4cHJlc3Npb24sIGV4cHJlc3Np
b24udHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpOworICAgICAgICBtX3N0YWNr
LmFwcGVuZCh7IFdURk1vdmUodmFsdWUpLCBXVEZNb3ZlKGxlZnRWYWx1ZSkgfSk7CisgICAgfQor
CisgICAgU3RyaW5nIHRha2VMYXN0VmFsdWUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3Rh
Y2subGFzdCgpLnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKS52YWx1
ZTsKKyAgICB9CisKKyAgICBTdHJpbmcgdGFrZUxhc3RMZWZ0VmFsdWUoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhY2subGFzdCgpLmxlZnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBtX3N0
YWNrLnRha2VMYXN0KCkubGVmdFZhbHVlOworICAgIH0KKwogICAgIEludHJpbnNpY3MmIG1faW50
cmluc2ljczsKICAgICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOwogICAgIEhhc2hNYXA8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBpbmc7CiAgICAgSGFz
aE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBwaW5n
OwogICAgIFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOwotICAgIFZlY3RvcjxTdHJpbmc+
IG1fc3RhY2s7CisKKyAgICBWZWN0b3I8U3RhY2tJdGVtPiBtX3N0YWNrOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxFbnRyeVBvaW50U2NhZmZvbGRpbmc+IG1fZW50cnlQb2ludFNjYWZmb2xkaW5nOwog
ICAgIExheW91dCYgbV9sYXlvdXQ7CiAgICAgdW5zaWduZWQgbV92YXJpYWJsZUNvdW50IHsgMCB9
OwpAQCAtMTY5LDcgKzIwOCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1QKIHsKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rp
b25NYXBwaW5nLmVuZCgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZl
RnVuY3Rpb24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBtX2lu
dHJpbnNpY3MsIG1fdHlwZU5hbWVyKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0
ZU5hdGl2ZUZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1
ZSwgbV9pbnRyaW5zaWNzLCBtX3R5cGVOYW1lciwgbWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSkpOwog
fQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKQEAgLTI0Niw3ICsyODUsNyBAQCB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50KQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7Ci0gICAgbV9zdGFj
ay50YWtlTGFzdCgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICB0YWtlTGFz
dFZhbHVlKCk7IC8vIFRoZSBzdGF0ZW1lbnQgaXMgYWxyZWFkeSBlZmZlY3RmdWwsIHNvIHdlIGRv
bid0IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgogfQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCkBAIC0yNjQsNyAr
MzAzLDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmVtaXRMb29wKAogCiAgICAg
aWYgKGxvb3BDb25kaXRpb25Mb2NhdGlvbiA9PSBMb29wQ29uZGl0aW9uTG9jYXRpb246OkJlZm9y
ZUJvZHkgJiYgY29uZGl0aW9uRXhwcmVzc2lvbikgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKmNvbmRpdGlvbkV4cHJlc3Npb24pOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIHRha2VM
YXN0VmFsdWUoKSwgIikgYnJlYWs7XG4iKSk7CiAgICAgfQogCiAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgiZG8ge1xuIik7CkBAIC0yNzYsMTIgKzMxNSwxMiBAQCB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6ZW1pdExvb3AoCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaW5j
cmVtZW50KTsKICAgICAgICAgLy8gRXhwcmVzc2lvbiByZXN1bHRzIGdldCBwdXNoZWQgdG8gbV9z
dGFjay4gV2UgZG9uJ3QgdXNlIHRoZSByZXN1bHQKICAgICAgICAgLy8gb2YgaW5jcmVtZW50LCBz
byB3ZSBkaXNwZW5zZSBvZiB0aGF0IG5vdy4KLSAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOwor
ICAgICAgICB0YWtlTGFzdFZhbHVlKCk7CiAgICAgfQogCiAgICAgaWYgKGxvb3BDb25kaXRpb25M
b2NhdGlvbiA9PSBMb29wQ29uZGl0aW9uTG9jYXRpb246OkFmdGVyQm9keSAmJiBjb25kaXRpb25F
eHByZXNzaW9uKSB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqY29uZGl0aW9uRXhwcmVz
c2lvbik7Ci0gICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEi
LCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgdGFrZUxhc3RWYWx1ZSgpLCAiKSBicmVh
aztcbiIpKTsKICAgICB9CiAKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IFxuIik7CkBA
IC0zMDUsNyArMzQ0LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VAogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGVtZW50KTsKICAgICB9LCBbJl0oVW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGV4cHJlc3Npb24pOwotICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFdl
IGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgorICAgICAgICB0YWtl
TGFzdFZhbHVlKCk7IC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVz
dWx0LgogICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOwogCiAgICAgZW1pdExvb3Ao
TG9vcENvbmRpdGlvbkxvY2F0aW9uOjpCZWZvcmVCb2R5LCBmb3JMb29wLmNvbmRpdGlvbigpLCBm
b3JMb29wLmluY3JlbWVudCgpLCBmb3JMb29wLmJvZHkoKSk7CkBAIC0zMTUsNyArMzU0LDcgQEAg
dm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQogewog
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKLSAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBtX3N0YWNrLnRha2VMYXN0
KCksICIpIHtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlm
ICgiLCB0YWtlTGFzdFZhbHVlKCksICIpIHtcbiIpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
aWZTdGF0ZW1lbnQuYm9keSgpKTsKICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgewog
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7CkBAIC0zMzAsMTAg
KzM2OSwxMCBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOwogICAgICAg
ICBpZiAobV9lbnRyeVBvaW50U2NhZmZvbGRpbmcpIHsKICAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5wYWNrKG1fc3RhY2sudGFr
ZUxhc3QoKSwgdmFyaWFibGVOYW1lKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5wYWNrKHRha2VMYXN0VmFsdWUoKSwgdmFyaWFi
bGVOYW1lKSk7CiAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
InJldHVybiAiLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFj
ay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgdGFrZUxhc3RWYWx1ZSgpLCAiO1xuIikpOwogICAgIH0g
ZWxzZQogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJyZXR1cm47XG4iKTsKIH0KQEAg
LTM0Miw3ICszODEsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
CiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKIAot
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3dpdGNoICgiLCBtX3N0YWNr
LnRha2VMYXN0KCksICIpIHsiKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJzd2l0Y2ggKCIsIHRha2VMYXN0VmFsdWUoKSwgIikgeyIpKTsKICAgICBmb3IgKGF1dG8m
IHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
In1cbiIpOwpAQCAtMzc1LDcgKzQxNCw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1QKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKGludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgaW50ZWdlckxpdGVy
YWwudmFsdWUoKSwgIik7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsK
KyAgICBhcHBlbmRSaWdodFZhbHVlKGludGVnZXJMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQog
CiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQpAQCAtMzgzLDcgKzQyMiw3IEBAIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVO
YW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHVuc2lnbmVkSW50ZWdlckxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8Iiwg
bWFuZ2xlZFR5cGVOYW1lLCAiPigiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCksICIp
O1xuIikpOwotICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmln
aHRWYWx1ZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lk
IEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0
TGl0ZXJhbCkKQEAgLTM5MSw3ICs0MzAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShmbG9hdExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwogICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1l
LCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBmbG9hdExpdGVyYWwu
dmFsdWUoKSwgIik7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAg
ICBhcHBlbmRSaWdodFZhbHVlKGZsb2F0TGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9p
ZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxM
aXRlcmFsKQpAQCAtNDA3LDcgKzQ0Niw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1QKICAgICBlbHNlCiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIm51
bGxwdHIiKTsKICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCI7XG4iKTsKLSAgICBtX3N0YWNr
LmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUobnVsbExpdGVyYWws
IHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkKQEAgLTQxNSw3ICs0NTQsNyBA
QCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgYXV0byB2YXJp
YWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRU
eXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShib29sZWFuTGl0ZXJhbC5y
ZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5n
bGVkVHlwZU5hbWUsICI+KCIsIGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPyAidHJ1ZSIgOiAiZmFs
c2UiLCAiKTtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIGFw
cGVuZFJpZ2h0VmFsdWUoYm9vbGVhbkxpdGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKQpAQCAtNDI1LDcgKzQ2NCw3IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1l
ID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bC5yZXNvbHZlZFR5cGUoKSk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5h
bWUsICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOwotICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwsIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCkBAIC00
MzMsMzcgKzQ3MiwzOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
CiAgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7CiB9CiAKLXZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKQordm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikK
IHsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCiAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3ODggUmVwbGFjZSB0
aGlzIHdpdGggQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICBtX3N0YWNrLmFwcGVuZCgiZHVtbXkiKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGRvdEV4cHJl
c3Npb24sICJkdW1teSIpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpHbG9iYWxWYXJpYWJsZVJlZmVyZW5jZSYgZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2Up
CiB7Ci0gICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsK
KyAgICBhdXRvIHZhbHVlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1
dG8gcG9pbnRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1h
bmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShnbG9iYWxWYXJp
YWJsZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGds
b2JhbFZhcmlhYmxlUmVmZXJlbmNlLmJhc2UoKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJ0aHJlYWQgIiwgbWFuZ2xlZFR5cGVOYW1lLCAiJiAiLCB2YXJpYWJsZU5h
bWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICItPiIsIG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yU3RydWN0dXJlRWxlbWVudChnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5zdHJ1Y3RGaWVs
ZCgpKSwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidGhyZWFkICIsIG1hbmdsZWRUeXBlTmFt
ZSwgIiogIiwgcG9pbnRlck5hbWUsICIgPSAmIiwgdGFrZUxhc3RWYWx1ZSgpLCAiLT4iLCBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoZ2xvYmFsVmFyaWFibGVSZWZl
cmVuY2Uuc3RydWN0RmllbGQoKSksICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YWx1ZU5hbWUsICIgPSAiLCAiKiIs
IHBvaW50ZXJOYW1lLCAiO1xuIikpOworICAgIGFwcGVuZExlZnRWYWx1ZShnbG9iYWxWYXJpYWJs
ZVJlZmVyZW5jZSwgdmFsdWVOYW1lLCBwb2ludGVyTmFtZSk7CiB9CiAKLXZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpCit2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhw
cmVzc2lvbikKIHsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCiAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3ODgg
UmVwbGFjZSB0aGlzIHdpdGggQVNTRVJUX05PVF9SRUFDSEVEKCkuCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICBtX3N0YWNrLmFwcGVuZCgiZHVtbXkiKTsKKyAgICBhcHBlbmRSaWdodFZhbHVl
KGluZGV4RXhwcmVzc2lvbiwgImR1bW15Iik7CiB9CiAKLXZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpCit2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24m
IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKIHsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dl
cmVkIGFscmVhZHkuCiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTU3ODggUmVwbGFjZSB0aGlzIHdpdGggQVNTRVJUX05PVF9SRUFDSEVEKCku
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBtX3N0YWNrLmFwcGVuZCgiZHVtbXkiKTsKKyAg
ICBhcHBlbmRSaWdodFZhbHVlKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgImR1bW15Iik7CiB9
CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCkBAIC00NzUsNyArNTE2LDcgQEAgdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTYwIEltcGxlbWVudCBxdWFsaWZp
ZXJzLgogICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpIHsKICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkp
OwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFy
aWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gIiwgdGFrZUxhc3RWYWx1ZSgpLCAiO1xuIikpOwogICAgIH0gZWxzZQogICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiO1xu
IikpOwogfQpAQCAtNDgzLDExICs1MjQsMTEgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6
QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQogewogICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgIGF1dG8gbGVm
dE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgYXV0byBwb2ludGVyTmFtZSA9IHRha2VM
YXN0TGVmdFZhbHVlKCk7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNz
aW9uLnJpZ2h0KCkpOwotICAgIGF1dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOwot
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZWZ0TmFtZSwgIiA9ICIsIHJp
Z2h0TmFtZSwgIjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZChyaWdodE5hbWUpOworICAgIGF1
dG8gcmlnaHROYW1lID0gdGFrZUxhc3RWYWx1ZSgpOworICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiaWYgKCIsIHBvaW50ZXJOYW1lLCAiKSAqIiwgcG9pbnRlck5hbWUsICIg
PSAiLCByaWdodE5hbWUsICI7XG4iKSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShhc3NpZ25tZW50
RXhwcmVzc2lvbiwgcmlnaHROYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQpAQCAtNDk1LDcg
KzUzNiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBW
ZWN0b3I8U3RyaW5nPiBhcmd1bWVudE5hbWVzOwogICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBj
YWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkgewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
YXJndW1lbnQpOwotICAgICAgICBhcmd1bWVudE5hbWVzLmFwcGVuZChtX3N0YWNrLnRha2VMYXN0
KCkpOworICAgICAgICBhcmd1bWVudE5hbWVzLmFwcGVuZCh0YWtlTGFzdFZhbHVlKCkpOwogICAg
IH0KICAgICBBU1NFUlQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7CiAgICAgYXV0byBpdGVy
YXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7
CkBAIC01MDgsNyArNTQ5LDcgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0
KEFTVAogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOwog
ICAgIH0KICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7Ci0gICAgbV9zdGFjay5h
cHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGNhbGxFeHByZXNzaW9u
LCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKQEAgLTUxNiwyNiArNTU3
LDMwIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBTdHJp
bmcgcmVzdWx0OwogICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5s
aXN0KCkpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwotICAgICAg
ICByZXN1bHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHJlc3VsdCA9IHRha2VMYXN0
VmFsdWUoKTsKICAgICB9Ci0gICAgbV9zdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICBhcHBlbmRS
aWdodFZhbHVlKGNvbW1hRXhwcmVzc2lvbiwgcmVzdWx0KTsKIH0KIAogdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVy
ZW5jZUV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhw
cmVzc2lvbi5wb2ludGVyKCkpOwotICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7
CisgICAgYXV0byByaWdodCA9IHRha2VMYXN0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhBU1Q6OnRvU3RyaW5nKCpkZXJlZmVyZW5jZUV4cHJlc3Npb24udHlwZUFu
bm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpLCAnICcsIG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAiJiAiLCB2
YXJpYWJsZU5hbWUsICIgPSAqIiwgcmlnaHQsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQo
dmFyaWFibGVOYW1lKTsKKyAgICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpLnJl
c29sdmVkVHlwZSgpKSwgJyAnLCBwb2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0LCAiO1xuIikpOwor
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2
YXJpYWJsZU5hbWUsICI7XG4iKSk7CisgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJpZiAoIiwgcG9pbnRlck5hbWUsICIpICIsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdo
dCwgIjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImVsc2Ug
IiwgbWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSwgJygnLCB2YXJpYWJsZU5hbWUsICIpO1xuIikpOwor
ICAgIGFwcGVuZExlZnRWYWx1ZShkZXJlZmVyZW5jZUV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSwg
cG9pbnRlck5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQo
QVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCiB7CiAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7Ci0gICAgYXV0byBsZWZ0ID0g
bV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gbGVmdCA9IHRha2VMYXN0VmFsdWUoKTsKICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgYXV0
byByaWdodCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICBhdXRvIHJpZ2h0ID0gdGFrZUxhc3RW
YWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShsb2dpY2FsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywg
dmFyaWFibGVOYW1lLCAiID0gIiwgbGVmdCkpOwogICAgIHN3aXRjaCAobG9naWNhbEV4cHJlc3Np
b24udHlwZSgpKSB7CkBAIC01NDgsMjIgKzU5MywyNCBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcocmlnaHQsICI7XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKGxvZ2ljYWxFeHByZXNzaW9u
LCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCiB7CiAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Ci0g
ICAgYXV0byBvcGVyYW5kID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8gb3BlcmFuZCA9
IHRha2VMYXN0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobG9naWNhbE5vdEV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICEiLCBvcGVyYW5kLCAiO1xuIikpOwotICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZShsb2dp
Y2FsTm90RXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7Ci0gICAgYXV0byBsVmFsdWUg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgbWFk
ZSB0byB3b3JrLiBJdCBwcm9iYWJseSBzaG91bGQgYmUgdXNpbmcgdGhlIGxhc3QgbGVmdFZhbHVl
IHRvby4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4
ODM4CisgICAgYXV0byBsVmFsdWUgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJs
ZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpCkBAIC01NzMsMTYg
KzYyMCwxNiBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcg
JywgdmFyaWFibGVOYW1lLCAiID0geyAmKCIsIGxWYWx1ZSwgIlswXSksICIsIGFycmF5VHlwZS5u
dW1FbGVtZW50cygpLCAiIH07XG4iKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1l
LCAiID0geyAmIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7Ci0gICAgbV9zdGFjay5hcHBlbmQodmFy
aWFibGVOYW1lKTsKKyAgICBhcHBlbmRSaWdodFZhbHVlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24sIHZhcmlhYmxlTmFtZSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9u
KQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZh
bHVlKCkpOwotICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgIGF1dG8g
cG9pbnRlciA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG1ha2VQb2ludGVyRXhwcmVz
c2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gJiIsIGxWYWx1ZSwg
IjtcbiIpKTsKLSAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
bWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICIgPSAiLCBwb2ludGVyLCAiO1xuIikpOworICAgIGFwcGVuZFJpZ2h0VmFsdWUobWFrZVBvaW50
ZXJFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikKQEAgLTU5NCwx
OSArNjQxLDE5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9u
JiB0ZXJuYXJ5RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4
cHJlc3Npb24ucHJlZGljYXRlKCkpOwotICAgIGF1dG8gY2hlY2sgPSBtX3N0YWNrLnRha2VMYXN0
KCk7CisgICAgYXV0byBjaGVjayA9IHRha2VMYXN0VmFsdWUoKTsKIAogICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXJuYXJ5
RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiO1xuIikpOwog
CiAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgY2hlY2ssICIp
IHtcbiIpKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4
cHJlc3Npb24oKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlh
YmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgdGFrZUxhc3RW
YWx1ZSgpLCAiO1xuIikpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn0gZWxzZSB7XG4i
KTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Np
b24oKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFt
ZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgdGFrZUxhc3RWYWx1ZSgp
LCAiO1xuIikpOwogICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwotICAgIG1fc3Rh
Y2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZSh0ZXJuYXJ5RXhw
cmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQpAQCAt
NjE0LDcgKzY2MSw5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QK
ICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CiAgICAgYXV0byBpdGVy
YXRvciA9IG1fdmFyaWFibGVNYXBwaW5nLmZpbmQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUo
KSk7CiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdmFyaWFibGVNYXBwaW5nLmVuZCgpKTsKLSAg
ICBtX3N0YWNrLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOworICAgIGF1dG8gcG9pbnRlck5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoInRocmVhZCAiLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodmFy
aWFibGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLCAiKiAiLCBwb2ludGVyTmFtZSwgIiA9ICYi
LCBpdGVyYXRvci0+dmFsdWUsICI7XG4iKSk7CisgICAgYXBwZW5kTGVmdFZhbHVlKHZhcmlhYmxl
UmVmZXJlbmNlLCBpdGVyYXRvci0+dmFsdWUsIHBvaW50ZXJOYW1lKTsKIH0KIAogU3RyaW5nIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ2NDM3KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIFN0cmlu
ZyBhdG9taWNOYW1lKFN0cmluZyBpbnB1dCkKICAgICAgICAgcmV0dXJuICJmZXRjaF94b3IiX3N0
cjsKIH0KIAotU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBTdHJpbmcmIG91dHB1dEZ1bmN0
aW9uTmFtZSwgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCitT
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIFN0cmluZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBJ
bnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgY29uc3QgY2hhciog
bWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNDYXN0KCkpIHsKQEAgLTg5
LDggKzg5LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAg
ICAgICBpZiAoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSkg
ewogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xuIikpOwogICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1ldGFsUmV0dXJuTmFtZSwg
IiB4O1xuIikpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWQg
Y2hhciogcHRyID0gc3RhdGljX2Nhc3Q8dGhyZWFkIGNoYXIqPihzdGF0aWNfY2FzdDx0aHJlYWQg
dm9pZCo+KCZ4KSk7XG4iKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZigiLCBtZXRhbFJldHVybk5h
bWUsICIpOyArK2kpIHB0cltpXSA9IDA7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWVtc2V0WmVyb0Z1bmN0aW9uTmFtZSwgIih4KTtc
biIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgcmV0dXJuIHg7XG4i
KTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKICAgICAgICAgICAg
IHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CkBAIC0yMTQsMzggKzIxMywxNCBAQCBT
dHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIHJldHVybiBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCi0gICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdIikgewotICAgICAgICBBU1NFUlQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0
aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVy
Mk5hbWUsICIgaSkge1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIgICAgcmV0dXJuIG1baV07XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKLSAgICB9
Ci0KICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
JltdIikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDIpOwogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciZbXS4iX3N0ci5sZW5ndGgoKSk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1l
dGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICYodi5wb2ludGVyW25dKTtcbiIpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOwotICAgIH0KLQotICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7Ci0gICAgICAgIEFTU0VSVChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7Ci0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7Ci0g
ICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9u
TmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5h
bWUsICIgaSwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiB2KSB7XG4iKSk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBtW2ldID0gdjtcbiIpKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBtO1xuIikpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIGlmIChuIDwgdi5sZW5ndGgpIHJldHVy
biAmKHYucG9pbnRlcltuXSk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICByZXR1cm4gbnVsbHB0cjtcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxu
Iik7CiAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVG
dW5jdGlvbldyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaAkocmV2aXNpb24gMjQ2
NDM3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIG5h
bWVzcGFjZSBNZXRhbCB7CiAKIGNsYXNzIFR5cGVOYW1lcjsKIAotU3RyaW5nIHdyaXRlTmF0aXZl
RnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiwgU3RyaW5nJiBvdXRwdXRG
dW5jdGlvbk5hbWUsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImKTsKK1N0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIFN0cmluZyYgb3V0cHV0
RnVuY3Rpb25OYW1lLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJiwgY29uc3QgY2hhciogbWVtc2V0
WmVyb0Z1bmN0aW9uTmFtZSk7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAko
cmV2aXNpb24gMjQ2NDM3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNyArMzkzLDcg
QEAgdm9pZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpbwogICAgICAgICBBU1NF
UlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBhcnJheVJlZmVyZW5jZVR5cGUubWFuZ2xlZE5hbWUo
KSwgInsgXG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAg
ICAiLCB0b1N0cmluZyhhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpLCAiICIsIGFy
cmF5UmVmZXJlbmNlVHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5hbWUoKSwgIiogcG9pbnRlcjtcbiIp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB1aW50IGxlbmd0aDtcbiIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHVpbnQzMl90IGxlbmd0aDtcbiIpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFycmF5VHlwZU5hbWVOb2RlPihiYXNlVHlw
ZU5hbWVOb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwu
bW0JKHJldmlzaW9uIDI0NjQzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAt
OTIsNyArOTIsMTAgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGltZW5zaW9ucwog
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIGNvbXB1dGVMaWJy
YXJ5ID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdpdGhTb3Vy
Y2U6d2hsc2xDb21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZSBvcHRpb25zOm5pbCBlcnJvcjomZXJy
b3JdKTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQorI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgaWYgKCFjb21wdXRlTGlicmFyeSkKKyAgICAgICAgICAgIE5TTG9nKEAiJUAi
LCBlcnJvcik7CisjZW5kaWYKICAgICAgICAgQVNTRVJUKGNvbXB1dGVMaWJyYXJ5KTsKICAgICAg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3
NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVzLCB0aGVyZSBzaG91bGQgYmUgbm8gd2Fybmlu
Z3MsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVCghZXJyb3IpIGhlcmUuCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBl
bGluZU1ldGFsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCShyZXZpc2lvbiAyNDY0Mzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVy
UGlwZWxpbmVNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDE2LDYgKzQxNiwxMCBAQCBzdGF0
aWMgYm9vbCB0cnlTZXRGdW5jdGlvbnMoY29uc3QgY2hhciogCiAgICAgICAgIHZlcnRleExpYnJh
cnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJj
ZTp3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFsU291cmNlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJv
cl0pOwogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCisjaWZuZGVmIE5ERUJV
RworICAgICAgICBpZiAoIXZlcnRleExpYnJhcnkpCisgICAgICAgICAgICBOU0xvZyhAIiVAIiwg
ZXJyb3IpOworI2VuZGlmCiAgICAgICAgIEFTU0VSVCh2ZXJ0ZXhMaWJyYXJ5KTsKICAgICAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3NzEg
T25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVzLCB0aGVyZSBzaG91bGQgYmUgbm8gd2FybmluZ3Ms
IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVCghZXJyb3IpIGhlcmUuCiAKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI0NjQzNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA2LTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IG91dC1vZi1ib3VuZHMgYW5kIG51
bGxwdHIgYmVoYXZpb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODYwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTE2Njg4NTM+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgUm9iaW4gTW9yaXNzZXQuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wt
bnVsbC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93
aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxz
bC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNs
LW9vYi1hY2Nlc3MuaHRtbDogQWRkZWQuCisKIDIwMTktMDYtMTQgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIENsb25pbmcgYSBNZWRpYVN0cmVhbVRyYWNrIGRv
ZXMgbm90IGNsb25lIHRoZSBsb2dnZXIKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1u
dWxsLWRlcmVmZXJlbmNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwtZGVyZWZlcmVuY2UtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzBdIGlz
IDIKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSBpcyA0CitQQVNTIHJlc3VsdHNGbG9hdDMy
QXJyYXlbMl0gaXMgNgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzNdIGlzIDgKK1BBU1MgcmVz
dWx0c0Zsb2F0MzJBcnJheVs0XSBpcyA1CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gaXMg
NgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzZdIGlzIDcKK1BBU1MgcmVzdWx0c0Zsb2F0MzJB
cnJheVs3XSBpcyA4CisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVm
ZXJlbmNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW51bGwt
ZGVyZWZlcmVuY2UuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtbnVsbC1kZXJlZmVyZW5jZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4K
K2NvbnN0IHNoYWRlclNvdXJjZSA9IGAKK3R5cGVkZWYgRm9vID0gdGhyZWFkIGludCo7CitGb28g
Z2V0TnVsbFB0cigpCit7CisgICAgcmV0dXJuIG51bGw7Cit9CisKK3N0cnVjdCBYWVogeworICAg
IGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6OworfQorCitbbnVtdGhyZWFkcygy
LCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1ZmZl
ciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkg
eworICAgIEZvbyBwdHIgPSBudWxsOworICAgICpwdHIgPSA0MjsKKyAgICAqZ2V0TnVsbFB0cigp
ID0gNDI7CisgICAgaWYgKCpwdHIgPT0gMCkgeworICAgICAgICBpZiAocHRyID09IGdldE51bGxQ
dHIoKSkgeworICAgICAgICAgICAgaWYgKCpnZXROdWxsUHRyKCkgPT0gMCkgeworICAgICAgICAg
ICAgICAgIHRocmVhZCBYWVoqIHh5elB0ciA9IG51bGw7CisgICAgICAgICAgICAgICAgWFlaIHh5
ejsKKyAgICAgICAgICAgICAgICB4eXoueCA9IDE7CisgICAgICAgICAgICAgICAgeHl6LnkgPSAx
OworICAgICAgICAgICAgICAgIHh5ei56ID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoeHl6Lnog
PT0gMS4wICYmIHh5ei55ID09IDEuMCAmJiB4eXoueiA9PSAxLjApIHsKKyAgICAgICAgICAgICAg
ICAgICAgKnh5elB0ciA9IHh5ejsKKyAgICAgICAgICAgICAgICAgICAgeHl6ID0gKnh5elB0cjsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHh5ei56ID09IDAuMCAmJiB4eXoueSA9PSAwLjAgJiYg
eHl6LnogPT0gMC4wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJipnZXROdWxsUHRy
KCkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgmKigmKmdldE51
bGxQdHIoKSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gKiAyLjA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorYDsKK2xldCByZXN1bHRzRmxvYXQzMkFycmF5OworYXN5bmMg
ZnVuY3Rpb24gc3RhcnQoKSB7CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5n
cHUucmVxdWVzdEFkYXB0ZXIoKTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJl
cXVlc3REZXZpY2UoKTsKKworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVT
aGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNv
bnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNv
bXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7
YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVm
ZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdy
b3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5l
TGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07
CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQo
cGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBj
b25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtz
aXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4LCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25z
dCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5
QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAxOworICAgIGJ1ZmZlckZsb2F0
MzJBcnJheVsxXSA9IDI7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzJdID0gMzsKKyAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbM10gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs0XSA9IDU7Cisg
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzVdID0gNjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNl0g
PSA3OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7CisgICAgYnVmZmVyLnVubWFwKCk7
CisKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8
IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsK
KyAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVm
ZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVz
dWx0c0J1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5k
aW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVz
Y3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBC
aW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChi
aW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNl
LmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1
ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgRmxvYXQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogOCk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29t
bWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5z
ZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRC
aW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2go
MiwgMSwgMSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBj
b21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1
ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlC
dWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgIHJlc3VsdHNG
bG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAg
c2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMF0iLCAiMiIpOworICAgIHNob3VsZEJlKCJy
ZXN1bHRzRmxvYXQzMkFycmF5WzFdIiwgIjQiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0
MzJBcnJheVsyXSIsICI2Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbM10i
LCAiOCIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzRdIiwgIjUiKTsKKyAg
ICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs1XSIsICI2Iik7CisgICAgc2hvdWxkQmUo
InJlc3VsdHNGbG9hdDMyQXJyYXlbNl0iLCAiNyIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxv
YXQzMkFycmF5WzddIiwgIjgiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9CitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgIHN0YXJ0KCkudGhl
bihmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAg
ICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworICAgIH0pOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNjZXNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy1leHBlY3RlZC50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nlc3MtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzBd
IGlzIDIKK1BBU1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsxXSBpcyA0CitQQVNTIHJlc3VsdHNGbG9h
dDMyQXJyYXlbMl0gaXMgNgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzNdIGlzIDgKK1BBU1Mg
cmVzdWx0c0Zsb2F0MzJBcnJheVs0XSBpcyA1CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0g
aXMgNgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzZdIGlzIDcKK1BBU1MgcmVzdWx0c0Zsb2F0
MzJBcnJheVs3XSBpcyA4CisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1vb2ItYWNj
ZXNzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1hY2Nl
c3MuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFj
Y2Vzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291
cmNlID0gYAorW251bXRocmVhZHMoMiwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRl
cihkZXZpY2UgZmxvYXRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCksIGZsb2F0MyB0aHJlYWRJRCA6
IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBidWZmZXJbMTMzN10gPSAwLjA7CisgICAgYnVm
ZmVyWzQyNDI0MjQyXSA9IDAuMDsKKyAgICBpZiAoYnVmZmVyWzEwMDAwMF0gPT0gMC4wKQorICAg
ICAgICBidWZmZXJbdWludCh0aHJlYWRJRC54KV0gPSBidWZmZXJbdWludCh0aHJlYWRJRC54KV0g
KiAyLjA7Cit9CitgOworbGV0IHJlc3VsdHNGbG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlvbiBz
dGFydCgpIHsKKyAgICBjb25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0
QWRhcHRlcigpOworICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmlj
ZSgpOworCisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVs
ZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0
ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRl
ciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczog
W3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19Owor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQo
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25z
dCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxh
eW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9
IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1
dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVy
QXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1
ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDE7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzFd
ID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMl0gPSAzOworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVszXSA9IDQ7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gNTsKKyAgICBidWZmZXJG
bG9hdDMyQXJyYXlbNV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDc7CisgICAg
YnVmZmVyRmxvYXQzMkFycmF5WzddID0gODsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNv
bnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVy
VXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0
IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVy
LCBzaXplOiA0fTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJl
c291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0g
e2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsK
KyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERl
c2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29t
bWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZm
ZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQgKiA4KTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5l
KGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgw
LCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsK
KyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3
YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgcmVzdWx0c0Zsb2F0MzJBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgi
cmVzdWx0c0Zsb2F0MzJBcnJheVswXSIsICIyIik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9h
dDMyQXJyYXlbMV0iLCAiNCIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzJd
IiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVszXSIsICI4Iik7Cisg
ICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNF0iLCAiNSIpOworICAgIHNob3VsZEJl
KCJyZXN1bHRzRmxvYXQzMkFycmF5WzVdIiwgIjYiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zs
b2F0MzJBcnJheVs2XSIsICI3Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlb
N10iLCAiOCIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK2lmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
fSk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>