<?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>157458</bug_id>
          
          <creation_ts>2016-05-07 23:17:16 -0700</creation_ts>
          <short_desc>[Bindings] Add convert&lt;&gt;() template specializations for integer types</short_desc>
          <delta_ts>2016-05-08 11:28:29 -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>Bindings</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1191020</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-07 23:17:16 -0700</bug_when>
    <thetext>Add convert&lt;&gt;() template specializations for integer types and use them in the JS bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191032</commentid>
    <comment_count>1</comment_count>
      <attachid>278357</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-07 23:57:39 -0700</bug_when>
    <thetext>Created attachment 278357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191035</commentid>
    <comment_count>2</comment_count>
      <attachid>278357</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 00:12:37 -0700</bug_when>
    <thetext>Comment on attachment 278357
Patch

This looks good to me. I am concerned that our new JSDOMConvert.h things are just duplication of JSDOMBinding.h things. Eventually we don’t want so many different ways of doing the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191040</commentid>
    <comment_count>3</comment_count>
      <attachid>278359</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-08 00:22:36 -0700</bug_when>
    <thetext>Created attachment 278359
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191046</commentid>
    <comment_count>4</comment_count>
      <attachid>278359</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 07:53:23 -0700</bug_when>
    <thetext>Comment on attachment 278359
Patch

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

&gt; Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp:158
&gt; -static std::unique_ptr&lt;CryptoAlgorithmParameters&gt; createAesKeyGenParams(ExecState* exec, JSValue value)
&gt; +static std::unique_ptr&lt;CryptoAlgorithmParameters&gt; createAesKeyGenParams(ExecState* state, JSValue value)

Generally I have been trying to change the type from ExecState* to ExecState&amp; at the same time I change the name from exec to state.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4239
&gt; -    &quot;long long&quot; =&gt; &quot;long long&quot;,
&gt; +    &quot;long long&quot; =&gt; &quot;int64_t&quot;,

I’m not completely sure I understand this change. Seems like if we did this we’d also want to use int32_t and uint32_t.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4245
&gt; -    &quot;unsigned long long&quot; =&gt; &quot;unsigned long long&quot;,
&gt; +    &quot;unsigned long long&quot; =&gt; &quot;uint64_t&quot;,

Same comment here.

It seems that on Unix builds we are building on platforms that use 64-bit for long, so uint64_t is the same thing as &quot;unsigned long&quot; rather than &quot;unsigned long long&quot;. (As an aside, that means that we need to be careful to never use the type &quot;long&quot; or &quot;unsigned long&quot;, assuming they are 32 bits.)

This breaks the binding for IDBFactory, which is using Optional&lt;unsigned long long&gt; in the C++ header, not Optional&lt;uint64_t&gt;. Both are 64-bit types, but they are distinct types.

I think we will probably need to either go all in on the native C types or all in on the sized ones. Because IDL syntax looks like native C types, I think that’s the direction I personally would slightly prefer. So we would use &quot;unsigned char&quot; and &quot;signed char&quot; and &quot;short&quot; rather than using &quot;uint8_t&quot; and &quot;int8_t&quot; and &quot;int16_t&quot;. On the other hand, those type names are all longer and then don’t go well with the names of the integer conversion functions with numbers in their names. There are other arguments in both directions two.

Or we could continue to use a mix like this, but then we would have to move to only use int64_t and uint64_t rather than &quot;long long&quot; and &quot;unsigned long long&quot; in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191047</commentid>
    <comment_count>5</comment_count>
      <attachid>278359</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 07:54:00 -0700</bug_when>
    <thetext>Comment on attachment 278359
Patch

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

&gt;&gt; Source/WebCore/bindings/js/JSCryptoAlgorithmDictionary.cpp:158
&gt;&gt; -static std::unique_ptr&lt;CryptoAlgorithmParameters&gt; createAesKeyGenParams(ExecState* exec, JSValue value)
&gt;&gt; +static std::unique_ptr&lt;CryptoAlgorithmParameters&gt; createAesKeyGenParams(ExecState* state, JSValue value)
&gt; 
&gt; Generally I have been trying to change the type from ExecState* to ExecState&amp; at the same time I change the name from exec to state.

Generally I have been trying to change the type from ExecState* to ExecState&amp; at the same time I change the name from exec to state.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4239
&gt;&gt; -    &quot;long long&quot; =&gt; &quot;long long&quot;,
&gt;&gt; +    &quot;long long&quot; =&gt; &quot;int64_t&quot;,
&gt; 
&gt; I’m not completely sure I understand this change. Seems like if we did this we’d also want to use int32_t and uint32_t.

I’m not completely sure I understand this change. Seems like if we did this we’d also want to use int32_t and uint32_t.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4245
&gt;&gt; -    &quot;unsigned long long&quot; =&gt; &quot;unsigned long long&quot;,
&gt;&gt; +    &quot;unsigned long long&quot; =&gt; &quot;uint64_t&quot;,
&gt; 
&gt; Same comment here.
&gt; 
&gt; It seems that on Unix builds we are building on platforms that use 64-bit for long, so uint64_t is the same thing as &quot;unsigned long&quot; rather than &quot;unsigned long long&quot;. (As an aside, that means that we need to be careful to never use the type &quot;long&quot; or &quot;unsigned long&quot;, assuming they are 32 bits.)
&gt; 
&gt; This breaks the binding for IDBFactory, which is using Optional&lt;unsigned long long&gt; in the C++ header, not Optional&lt;uint64_t&gt;. Both are 64-bit types, but they are distinct types.
&gt; 
&gt; I think we will probably need to either go all in on the native C types or all in on the sized ones. Because IDL syntax looks like native C types, I think that’s the direction I personally would slightly prefer. So we would use &quot;unsigned char&quot; and &quot;signed char&quot; and &quot;short&quot; rather than using &quot;uint8_t&quot; and &quot;int8_t&quot; and &quot;int16_t&quot;. On the other hand, those type names are all longer and then don’t go well with the names of the integer conversion functions with numbers in their names. There are other arguments in both directions two.
&gt; 
&gt; Or we could continue to use a mix like this, but then we would have to move to only use int64_t and uint64_t rather than &quot;long long&quot; and &quot;unsigned long long&quot; in the code.

Same comment here.

It seems that on Unix builds we are building on platforms that use 64-bit for long, so uint64_t is the same thing as &quot;unsigned long&quot; rather than &quot;unsigned long long&quot;. (As an aside, that means that we need to be careful to never use the type &quot;long&quot; or &quot;unsigned long&quot;, assuming they are 32 bits.)

This breaks the binding for IDBFactory, which is using Optional&lt;unsigned long long&gt; in the C++ header, not Optional&lt;uint64_t&gt;. Both are 64-bit types, but they are distinct types.

I think we will probably need to either go all in on the native C types or all in on the sized ones. Because IDL syntax looks like native C types, I think that’s the direction I personally would slightly prefer. So we would use &quot;unsigned char&quot; and &quot;signed char&quot; and &quot;short&quot; rather than using &quot;uint8_t&quot; and &quot;int8_t&quot; and &quot;int16_t&quot;. On the other hand, those type names are all longer and then don’t go well with the names of the integer conversion functions with numbers in their names. There are other arguments in both directions two.

Or we could continue to use a mix like this, but then we would have to move to only use int64_t and uint64_t rather than &quot;long long&quot; and &quot;unsigned long long&quot; in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191059</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-08 09:54:50 -0700</bug_when>
    <thetext>Ok, I did not realize they were distinct types. I&apos;ll use the native C types more consistently then (including in the convert&lt;&gt;() specializations).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191060</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-08 10:20:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Ok, I did not realize they were distinct types. I&apos;ll use the native C types
&gt; more consistently then (including in the convert&lt;&gt;() specializations).

The thing that makes this tricky is that they are not exactly distinct types. The native C types are all real and distinct. The intxxx_t type are typedefs that map to one of the native C types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191062</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-08 10:44:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Ok, I did not realize they were distinct types. I&apos;ll use the native C types
&gt; more consistently then (including in the convert&lt;&gt;() specializations).

Actually, given the difference between platform of the native C types, I think I prefer to use the sized types in the bindings. The sized types are also shorted.

I think that the fact that we need to map unsigned long to unsigned, and long to int is a bit confusing otherwise. Web IDL clearly defines those types to be 32bit, so mapping to uint32_t / int32_t is a bit nicer IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191063</commentid>
    <comment_count>9</comment_count>
      <attachid>278364</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-08 10:50:17 -0700</bug_when>
    <thetext>Created attachment 278364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191072</commentid>
    <comment_count>10</comment_count>
      <attachid>278364</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-08 11:28:22 -0700</bug_when>
    <thetext>Comment on attachment 278364
Patch

Clearing flags on attachment: 278364

Committed r200556: &lt;http://trac.webkit.org/changeset/200556&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191073</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-08 11:28:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278357</attachid>
            <date>2016-05-07 23:57:39 -0700</date>
            <delta_ts>2016-05-08 00:19:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157458-20160507235824.patch</filename>
            <type>text/plain</type>
            <size>75662</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUyMjY5ZTJlYWVlZjIx
YmMyMDI5MGNjNmJjNzc1M2IwZTI0MWRhYy4uNWFlYWI1MTljNjgzMTdkOTBiMWUyODM4MWZlYmM2
OGFmZGEyMzA2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc2IEBACiAyMDE2LTA1LTA3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW0JpbmRpbmdzXSBBZGQgY29u
dmVydDw+KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY29udmVydDw+
KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzIGFuZCB1c2UgdGhl
bQorICAgICAgICBpbiB0aGUgSlMgYmluZGluZ3MuIEFsc28sIHRyZWF0IG5vbi0zMmJpdCB0eXBl
cyB0aGUgc2FtZSB3YXkgYXMgdGhlCisgICAgICAgIDMyYml0IG9uZXMsIGFsbG93aW5nIHRoZSBj
b21waWxlciB0byBvcHRpbWl6ZSBvdXQgYnJhbmNoaW5nIGJhc2VkIG9uCisgICAgICAgIHRoZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
QWVzS2V5R2VuUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJzYUtleUdlblBhcmFt
cyk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU21hbGxlckludCk6
CisgICAgICAgIChXZWJDb3JlOjp0b1NtYWxsZXJVSW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SW50OEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VJbnQ4RW5mb3JjZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50OENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
VUludDhDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDgpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9VSW50OCk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDE2RW5mb3JjZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvVUludDE2RW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSW50MTZDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1VJbnQxNkNsYW1wKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSW50MTYpOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50MTYpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9JbnQzMkVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0
b0ludDMyQ2xhbXApOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50MzJDbGFtcCk6CisgICAgICAg
IChXZWJDb3JlOjp0b1VJbnQzMkVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0lu
dDY0RW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVUludDY0RW5mb3JjZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50NjRDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjp0
b1VJbnQ2NENsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50NjQpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9VSW50NjQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6CisgICAgICAgIEFkZCBjb252
ZXJ0PD4gc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9k
ZUZpbHRlcjo6YWNjZXB0Tm9kZSk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3IucG06CisgICAgICAgIC0gQWRkIHV0aWxpdHkgZnVuY3Rpb24gdG8gZGlzdGluZ3Vp
c2ggaW50ZWdlciB0eXBlcy4KKyAgICAgICAgLSBIYXZlIElzTnVtZXJpY1R5cGUoKSB1c2luZyB0
aGUgaW50ZWdlclR5cGUgLyBmbG9hdGluZ1BvaW50VHlwZQorICAgICAgICAgIGhhc2hlcyB0byBh
dm9pZCBkdXBsaWNhdGlvbi4KKyAgICAgICAgLSBTdG9wIGludCAvIHVuc2lnbmVkIGludCBmcm9t
IGludGVnZXIgdHlwZXMgYXMgdGhvc2UgYXJlIG5vdAorICAgICAgICAgIGluIFdlYiBJREwgYW5k
IHRoZXkgYXJlIG5vdCB1c2VkLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgIChHZXRJbnRlZ2VyQ29udmVyc2lvblR5cGUpOgorICAgICAg
ICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgVXNlIGNvbnZlcnQ8PigpIGZvciBjb252ZXJ0
aW5nIEpTVmFsdWUgdG8gaW50ZWdlciB0eXBlcy4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvSURMUGFyc2VyLnBtOgorICAgICAgICBTdG9wIGFsbG93aW5nIGludCAvIHVuc2lnbmVkIGlu
dCB0eXBlcyBhcyB0aG9zZSBhcmUgbm90IGluIFdlYiBJREwuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHA6CisgICAgICAgIFJlYmFzZWxpbmUg
YmluZGluZ3MgdGVzdHMuCisKKzIwMTYtMDUtMDcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKwogICAgICAgICBSZWR1Y2Ugc3BlY2lhbCBoYW5kbGluZyBvZiBYUGF0aE5TUmVzb2x2
ZXIgdHlwZSBpbiB0aGUgYmluZGluZ3MKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NzQ1NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAppbmRleCA5N2Y4MTVm
ZjU0OTY0MjU1MzUxMTFmYzI2ZDFiZmIwZWFkNzRmMTI3Li43MWRhNWNiOWFkYzlmZTdiN2I5ZjBl
NzIyMWVlYjVhZDdkNGJlMGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNDcnlwdG9PcGVyYXRp
b25EYXRhLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0LmgiCiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkBAIC0xNTQsMjAgKzE1NSwyMCBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFlc0NiY1BhcmFtcyhFeGVjU3RhdGUqCiAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKIH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXNLZXlHZW5QYXJhbXMoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiBjcmVhdGVBZXNLZXlHZW5QYXJhbXMoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKHN0YXRlKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PENyeXB0b0FsZ29yaXRobUFlc0tleUdlblBhcmFtcz4oKTsKIAotICAgIEpTVmFsdWUgbGVuZ3Ro
VmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0g
Z2V0UHJvcGVydHkoc3RhdGUsIHZhbHVlLmdldE9iamVjdCgpLCAibGVuZ3RoIik7CisgICAgaWYg
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXN1bHQtPmxlbmd0aCA9IHRvVUludDE2KGV4ZWMsIGxlbmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2Up
OworICAgIHJlc3VsdC0+bGVuZ3RoID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBsZW5ndGhW
YWx1ZSwgRW5mb3JjZVJhbmdlKTsKIAogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CkBA
IC0yMTIsMzIgKzIxMywzMiBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+IGNyZWF0ZUhtYWNLZXlQYXJhbXMoRXhlY1N0YXRlKgogICAgIHJldHVybiBX
VEZNb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycz4gY3JlYXRlUnNhS2V5R2VuUGFyYW1zKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4gY3JlYXRlUnNhS2V5R2VuUGFyYW1zKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAotICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoZXhlYywg
dmFsdWUuZ2V0T2JqZWN0KCkpOworICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoc3RhdGUs
IHZhbHVlLmdldE9iamVjdCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8
Q3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zPigpOwogCi0gICAgSlNWYWx1ZSBtb2R1bHVz
TGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSwgIm1vZHVs
dXNMZW5ndGgiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSBt
b2R1bHVzTGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eShzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCks
ICJtb2R1bHVzTGVuZ3RoIik7CisgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogV2h5IG5vIEVuZm9yY2VSYW5nZT8g
RmlsZWQgYXMgPGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9
MjM3Nzk+LgotICAgIHJlc3VsdC0+bW9kdWx1c0xlbmd0aCA9IHRvVUludDMyKGV4ZWMsIG1vZHVs
dXNMZW5ndGhWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIHJlc3VsdC0+bW9kdWx1c0xlbmd0aCA9IGNvbnZlcnQ8dWludDMyX3Q+KCpz
dGF0ZSwgbW9kdWx1c0xlbmd0aFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEpTVmFs
dWUgcHVibGljRXhwb25lbnRWYWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVj
dCgpLCAicHVibGljRXhwb25lbnQiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVlID0gZ2V0UHJvcGVydHkoc3RhdGUsIHZhbHVl
LmdldE9iamVjdCgpLCAicHVibGljRXhwb25lbnQiKTsKKyAgICBpZiAoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxVaW50OEFycmF5
PiBwdWJsaWNFeHBvbmVudEFycmF5ID0gdG9VaW50OEFycmF5KHB1YmxpY0V4cG9uZW50VmFsdWUp
OwogICAgIGlmICghcHVibGljRXhwb25lbnRBcnJheSkgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCAiRXhwZWN0ZWQgYSBVaW50OEFycmF5IGluIHB1YmxpY0V4cG9uZW50Iik7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCAiRXhwZWN0ZWQgYSBVaW50OEFycmF5IGluIHB1Ymxp
Y0V4cG9uZW50Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXN1bHQt
PnB1YmxpY0V4cG9uZW50LmFwcGVuZChwdWJsaWNFeHBvbmVudEFycmF5LT5kYXRhKCksIHB1Ymxp
Y0V4cG9uZW50QXJyYXktPmJ5dGVMZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAppbmRleCAyNzQyMGJjZTVjMmZkZWQ5ZTQ4Zjg1YjkwNzkyMDEw
NjcwMDViNDdjLi5iMmU2YWJlMTYyOWYyMGNiYjA3ZmI1YWIwY2UyNzJkYTA0ZjZjNmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKQEAgLTM2NiwxNSAr
MzY2LDE1IEBAIHN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRv
dWJsZSBtaW4sIGRvdWJsZSBtYXgpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0
cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSBy
YW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3Ry
aW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsKIH0KIAotc3RhdGljIGRv
dWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgeCwgZG91YmxlIG1pbmlt
dW0sIGRvdWJsZSBtYXhpbXVtKQorc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKIHsKICAg
ICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpKSB7Ci0gICAgICAgIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIHJhbmdlRXJyb3JT
dHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpKTsKKyAgICAgICAgc3RhdGUudm0oKS50aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUsIHJhbmdlRXJyb3JTdHJpbmco
eCwgbWluaW11bSwgbWF4aW11bSkpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHgg
PSB0cnVuYyh4KTsKICAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAgICAg
ICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
cmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSkpOworICAgICAgICBzdGF0ZS52
bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgcmFuZ2VF
cnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSkpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAgICAgcmV0dXJuIHg7CkBAIC00MTEsNyArNDExLDcgQEAgc3RydWN0IEludFR5cGVMaW1p
dHM8dWludDE2X3Q+IHsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGlu
ZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorc3RhdGljIGlubGluZSBUIHRv
U21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKIHsKICAgICB0eXBlZGVmIEludFR5cGVM
aW1pdHM8VD4gTGltaXRzVHJhaXQ7CiAgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBh
bHJlYWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KQEAgLTQy
Myw3ICs0MjMsNyBAQCBzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25DbwogICAgICAgICBjYXNlIE5vcm1h
bENvbnZlcnNpb246CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2FzZSBD
bGFtcDoKICAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGlt
aXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOwpAQCAtNDMyLDE1ICs0
MzIsMTUgQEAgc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ28KICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJl
ck9mVmFsdWVzIDogZCk7CiAgICAgfQogCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcihl
eGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgewogICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2UoZXhlYywgeCwg
TGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgICAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0
c1RyYWl0OjptYXhWYWx1ZSk7CiAgICAgY2FzZSBDbGFtcDoKICAgICAgICAgcmV0dXJuIHN0ZDo6
aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKICAgICB9CkBAIC00NTUsNyArNDU1LDcgQEAg
c3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ28KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0
aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorc3RhdGljIGlu
bGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCiB7CiAgICAgdHlwZWRl
ZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwogICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUg
dmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCBy
YW5nZS4KQEAgLTQ2NywyMiArNDY3LDIyIEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25DCiAgICAg
ICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihkKTsKICAgICAgICAgY2FzZSBFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjKTsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2FzZSBDbGFtcDoKICAgICAgICAgICAgIHJldHVy
biBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CiAgICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShleGVjLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgICAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwog
ICAgIGNhc2UgQ2xhbXA6CiAgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1w
VG88VD4oeCk7CiAgICAgfQpAQCAtNDk0LDk0ICs0OTQsMTQ0IEBAIHN0YXRpYyBpbmxpbmUgVCB0
b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25DCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51
bWJlck9mVmFsdWVzKSk7CiB9CiAKK2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8
aW50OF90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50
OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5n
ZSk7Cit9CisKK2ludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1
ZSwgQ2xhbXApOworfQorCit1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8aW50OF90Pihz
dGF0ZSwgdmFsdWUsIENsYW1wKTsKK30KKwogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1ieXRlCi1pbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCitpbnQ4X3QgdG9J
bnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHRvU21h
bGxlckludDxpbnQ4X3Q+KGV4ZWMsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKIH0K
IAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAotdWludDhfdCB0b1VJ
bnQ4KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit1aW50OF90IHRvVUludDgoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90Pihz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworfQorCitpbnQxNl90IHRvSW50MTZFbmZv
cmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
dG9TbWFsbGVyVUludDx1aW50OF90PihleGVjLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAg
cmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7
Cit9CisKK3VpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRl
LCB2YWx1ZSwgRW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgQ2xhbXApOworfQorCit1aW50MTZfdCB0b1VJbnQxNkNsYW1w
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxl
clVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgQ2xhbXApOwogfQogCiAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKK2ludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oZXhlYywgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKIH0KIAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy11bnNpZ25lZC1zaG9ydAotdWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
bikKK3VpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KGV4ZWMsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKIH0KIAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQoraW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAg
cmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKIAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5n
ZShleGVjLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5n
ZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOwogfQogCi1pbnQzMl90IHRvSW50MzJD
bGFtcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitpbnQzMl90IHRvSW50MzJDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CiAKLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+
KHgpOwogfQogCi11aW50MzJfdCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZh
bHVlLmFzVUludDMyKCk7CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiAw
OworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKICAgICByZXR1cm4gc3Rk
Ojppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKIH0KIAogLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCi11aW50MzJfdCB0b1VJbnQzMkVu
Zm9yY2VSYW5nZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit1aW50MzJfdCB0b1VJ
bnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS5pc1VJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsK
IAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShleGVjLCB4LCAwLCBrTWF4VUludDMy
KTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKIH0K
IAotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3Qg
dG9JbnQ2NChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoraW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0
YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CiAKLSAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heElu
dGVnZXIpOworfQogCi0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBOb3Jt
YWxDb252ZXJzaW9uOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVuZm9yY2VSYW5nZToKLSAg
ICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShleGVjLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4
SW50ZWdlcik7Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkg
PyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3Vi
bGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50ZWdlcikpOwotICAgIH0KK2ludDY0X3Qg
dG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNu
YW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1h
eDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50ZWdlcikpOworfQorCit1aW50
NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0
ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4o
c3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50ZWdlcikpOworfQorCisvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9uZworaW50NjRfdCB0b0ludDY0KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwogCiAgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNv
bnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KICAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bjsKQEAgLTU5MCwyMyArNjQwLDkgQEAgaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGMKIH0KIAogLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKLXVpbnQ2
NF90IHRvVUludDY0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit1aW50NjRfdCB0b1VJbnQ2NChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigp
KQotICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICBjYXNlIE5vcm1hbENvbnZlcnNpb246Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW5mb3Jj
ZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKGV4ZWMsIHgsIDAsIGtKU01heElu
dGVnZXIpOwotICAgIGNhc2UgQ2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8g
MCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJs
ZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLSAgICB9CisgICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwogCiAgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7
IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KICAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKaW5kZXggMzM5
YjZhNTZjYmNlY2E0YjA0ZGRjYTUzNmRlNmQ4Zjk5MjBjMjZmZi4uNTIwODUxODg1MTg2ZTcxMzc2
MjQ2NDJjODdiNjVhYjY2Yzg3MzBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgKQEAgLTIxMSwyMyArMjExLDMwIEBAIGludDMyX3QgZmluaXRlSW50MzJWYWx1
ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwgYm9vbCYgb2theSk7CiAKIGVudW0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsQ29udmVyc2lvbiwgRW5mb3JjZVJh
bmdlLCBDbGFtcCB9OwogCi1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFu
Z2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDMy
X3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwot
Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkNsYW1wKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50
OChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLQotV0VCQ09S
RV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotV0VCQ09SRV9FWFBPUlQgdWludDE2X3Qg
dG9VSW50MTYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbik7Ci0KLWludDMyX3QgdG9JbnQzMihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXVpbnQzMl90IHRvVUlu
dDMyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24pOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci1XRUJD
T1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK1dFQkNPUkVfRVhQT1JUIGludDhf
dCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5n
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZf
dCB0b1VJbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNl
UmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50
NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OENsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3Qg
dG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIGludDE2X3QgdG9JbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50
MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBp
bnQ2NF90IHRvSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDgoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRv
VUludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGlu
dDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VY
UE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAK
IC8vIFJldHVybnMgYSBEYXRlIGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIHZhbHVlLCBvciBO
YU4gaWYgdGhlIGRhdGUgaXMgbm90IGEgbnVtYmVyLgogSlNDOjpKU1ZhbHVlIGpzRGF0ZU9yTmFO
KEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlKTsKQEAgLTQ4MywzOCArNDkwLDYgQEAgaW5saW5lIGlu
dDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBib29sJgogICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKIH0KIAotLyoK
LSAgICBDb252ZXJ0IGEgdmFsdWUgdG8gYW4gaW50ZWdlciBhcyBwZXIgPGh0dHA6Ly93d3cudzMu
b3JnL1RSL1dlYklETC8+LgotICAgIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBj
YW5ub3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9yLAotICAgIGlmIEVuZm9yY2VSYW5nZSBp
cyBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUKLSAgICBk
ZXN0aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCi0qLwotaW5saW5lIGludDMyX3QgdG9JbnQzMihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShleGVjLCB2
YWx1ZSk7Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChleGVj
LCB2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZS50b0ludDMyKGV4ZWMpOwotfQotCi1p
bmxpbmUgdWludDMyX3QgdG9VSW50MzIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17
Ci0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBOb3JtYWxDb252ZXJzaW9u
OgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJu
IHRvVUludDMyRW5mb3JjZVJhbmdlKGV4ZWMsIHZhbHVlKTsKLSAgICBjYXNlIENsYW1wOgotICAg
ICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChleGVjLCB2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVy
biB2YWx1ZS50b1VJbnQzMihleGVjKTsKLX0KLQogLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3Nl
ZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2Vi
SURMIHNwZWMuCiBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCmluZGV4IGI4Y2UzNDVjMzUyNzIy
OWY2ZWI4ZDQ4ZWM5ZmExMWY5ODZiYzEzY2UuLjcxMjdlNjk4ODM4Yzc1ODRhODY4MjYyODk2MWJk
Y2M1MTA5ODliOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5o
CkBAIC0zNCw2ICszNCw3IEBAIGVudW0gY2xhc3MgU2hvdWxkQWxsb3dOb25GaW5pdGUgeyBObywg
WWVzIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIFNob3VsZEFsbG93Tm9uRmluaXRlKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9u
YWw8VD4gY29udmVydE9wdGlvbmFsKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IFQgY29udmVydE9wdGlvbmFsKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBVJiYgZGVmYXVsdFZhbHVlKTsKQEAgLTYyLDQgKzYzLDEx
NCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihu
dW1iZXIpOwogfQogCit0ZW1wbGF0ZTw+IGlubGluZSBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Cisg
ICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVuZm9y
Y2VSYW5nZToKKyAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OworICAgIGNhc2UgQ2xhbXA6CisgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgIH0KKyAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBs
YXRlPD4gaW5saW5lIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBOb3JtYWxDb252
ZXJzaW9uOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAg
cmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXNlIENsYW1w
OgorICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAg
IHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGlu
dDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJuIHRvSW50MTZF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXNlIENsYW1wOgorICAgICAgICByZXR1
cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiB0b0ludDE2
KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHVpbnQxNl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOworICAgIGNhc2UgQ2xhbXA6CisgICAgICAgIHJldHVybiB0b1VJbnQxNkNs
YW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFs
dWUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
IGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbmZvcmNl
UmFuZ2U6CisgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworfQorCit0ZW1w
bGF0ZTw+IGlubGluZSB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIE5vcm1hbENv
bnZlcnNpb246CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW5mb3JjZVJhbmdlOgorICAgICAg
ICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXNlIENs
YW1wOgorICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgIH0K
KyAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKK30KKwordGVtcGxhdGU8PiBpbmxp
bmUgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAg
ICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwor
CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBOb3JtYWxDb252ZXJzaW9u
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJu
IHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXNlIENsYW1wOgorICAg
ICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHJldHVy
biB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHVpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIGlmICh2YWx1
ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiB0b1VJbnQ2
NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgIGNhc2UgQ2xhbXA6CisgICAgICAgIHJl
dHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiB0b1VJ
bnQ2NChzdGF0ZSwgdmFsdWUpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNw
cAppbmRleCBkZWFiYzU0MWRiMDZmMTA5ZTRkMGJmYzZjNzE5NDA5YjUxODliOWZkLi5hNTQ1YmYx
MTkxNmJmODcxN2Y3NWM1YzNjNzYyZjc0M2VkZjI0YzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5n
c0N1c3RvbS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJ
TkcpCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQu
aCIKICNpbmNsdWRlICJNb2NrQ29udGVudEZpbHRlclNldHRpbmdzLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CkBAIC01Nyw3ICs1OCw3IEBAIEpTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNl
dHRpbmdzOjpkZWNpc2lvblBvaW50KEV4ZWNTdGF0ZSYpIGNvbnN0CiAKIHZvaWQgSlNNb2NrQ29u
dGVudEZpbHRlclNldHRpbmdzOjpzZXREZWNpc2lvblBvaW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IHRvVUludDgoJnN0YXRl
LCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9OworICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgeyBjb252
ZXJ0PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9OwogICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05MCw3ICs5MSw3IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSB0b0pTVmFsdWUoRGVjaXNpb24gZGVjaXNpb24pCiAKIHN0YXRp
YyBpbmxpbmUgRGVjaXNpb24gdG9EZWNpc2lvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgeyB0b1VJbnQ4KCZzdGF0ZSwgdmFsdWUs
IEVuZm9yY2VSYW5nZSkgfTsKKyAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29udmVydDx1aW50
OF90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBEZWNpc2lvbjo6QWxsb3c7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCmluZGV4IGJmNTM5
NjM3NmY4ZjI1ZGQ2YWU4MjViOWEwMDIxOGY4NmJjZGE1ZWUuLjAxYjUzNjNmMTUwY2VlYWY1NDQ1
NmNjMWFjOGUyMjA4NjY4MjJiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkpT
Tm9kZUZpbHRlci5oIgogCiAjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVy
LmgiCiAKQEAgLTQzLDIzICs0NCwyMyBAQCB1aW50MTZfdCBKU05vZGVGaWx0ZXI6OmFjY2VwdE5v
ZGUoTm9kZSogbm9kZSkKIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPnZtKCkpOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOworICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsK
LSAgICBhcmdzLmFwcGVuZCh0b0pTKGV4ZWMsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIG5vZGUp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgYXJncy5hcHBlbmQodG9KUyhz
dGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgbm9kZSkpOworICAgIGlmIChzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwog
CiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKLSAgICBKU1ZhbHVl
IHZhbHVlID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2Fs
bGJhY2tUeXBlOjpGdW5jdGlvbk9yT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJhY2NlcHROb2RlIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
bV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBl
OjpGdW5jdGlvbk9yT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiYWNjZXB0
Tm9kZSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7
CiAgICAgICAgIC8vIFJldGhyb3cgZXhjZXB0aW9uLgotICAgICAgICBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICAgICAgc3RhdGUtPnZtKCku
dGhyb3dFeGNlcHRpb24oc3RhdGUsIHJldHVybmVkRXhjZXB0aW9uKTsKIAogICAgICAgICByZXR1
cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKICAgICB9CiAKLSAgICB1aW50MTZfdCByZXN1
bHQgPSB0b1VJbnQxNihleGVjLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIHVpbnQxNl90IHJlc3VsdCA9IGNvbnZlcnQ8dWludDE2
X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwog
CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvci5wbQppbmRleCAwZDVhOWZhMjkyZWJiYzBlZDM4ZDQ2ZmNiYWI4M2Nj
MzE4Y2FkYTc3Li4xMjkyYzE3YWNlNmY2NmM2ZWYzNTY1YTFhMzQ5NGIwYWYyMGUxODc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCkBA
IC00NCwxOCArNDQsMTIgQEAgbXkgJGNvZGVHZW5lcmF0b3IgPSAwOwogCiBteSAkdmVyYm9zZSA9
IDA7CiAKLW15ICVudW1lcmljVHlwZUhhc2ggPSAoCitteSAlaW50ZWdlclR5cGVIYXNoID0gKAog
ICAgICJieXRlIiA9PiAxLAotICAgICJkb3VibGUiID0+IDEsCi0gICAgImZsb2F0IiA9PiAxLAot
ICAgICJpbnQiID0+IDEsCiAgICAgImxvbmcgbG9uZyIgPT4gMSwKICAgICAibG9uZyIgPT4gMSwK
ICAgICAib2N0ZXQiID0+IDEsCiAgICAgInNob3J0IiA9PiAxLAotICAgICJ1bnJlc3RyaWN0ZWQg
ZG91YmxlIiA9PiAxLAotICAgICJ1bnJlc3RyaWN0ZWQgZmxvYXQiID0+IDEsCi0gICAgInVuc2ln
bmVkIGludCIgPT4gMSwKICAgICAidW5zaWduZWQgbG9uZyBsb25nIiA9PiAxLAogICAgICJ1bnNp
Z25lZCBsb25nIiA9PiAxLAogICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gMSwKQEAgLTM1NywyNyAr
MzUxLDM1IEBAIHN1YiBJc0NvbnN0cnVjdG9yVGVtcGxhdGUKIAogc3ViIElzTnVtZXJpY1R5cGUK
IHsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBt
eSAoJG9iamVjdCwgJHR5cGUpID0gQF87CisKKyAgICByZXR1cm4gMSBpZiAkaW50ZWdlclR5cGVI
YXNoeyR0eXBlfTsKKyAgICByZXR1cm4gMSBpZiAkZmxvYXRpbmdQb2ludFR5cGVIYXNoeyR0eXBl
fTsKKyAgICByZXR1cm4gMDsKK30KIAotICAgIHJldHVybiAxIGlmICRudW1lcmljVHlwZUhhc2h7
JHR5cGV9Oworc3ViIElzSW50ZWdlclR5cGUKK3sKKyAgICBteSAoJG9iamVjdCwgJHR5cGUpID0g
QF87CisKKyAgICByZXR1cm4gMSBpZiAkaW50ZWdlclR5cGVIYXNoeyR0eXBlfTsKICAgICByZXR1
cm4gMDsKIH0KIAogc3ViIElzRmxvYXRpbmdQb2ludFR5cGUKIHsKICAgICBteSAoJG9iamVjdCwg
JHR5cGUpID0gQF87CisKICAgICByZXR1cm4gMSBpZiAkZmxvYXRpbmdQb2ludFR5cGVIYXNoeyR0
eXBlfTsKICAgICByZXR1cm4gMDsKIH0KIAogc3ViIElzUHJpbWl0aXZlVHlwZQogewotICAgIG15
ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG15ICgkb2JqZWN0
LCAkdHlwZSkgPSBAXzsKIAogICAgIHJldHVybiAxIGlmICRwcmltaXRpdmVUeXBlSGFzaHskdHlw
ZX07Ci0gICAgcmV0dXJuIDEgaWYgJG51bWVyaWNUeXBlSGFzaHskdHlwZX07CisgICAgcmV0dXJu
IDEgaWYgJG9iamVjdC0+SXNOdW1lcmljVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
QEAgLTQxNywxMCArNDE5LDEwIEBAIHN1YiBJc0RpY3Rpb25hcnlUeXBlCiAKIHN1YiBJc05vblBv
aW50ZXJUeXBlCiB7Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICR0eXBlID0gc2hp
ZnQ7CisgICAgbXkgKCRvYmplY3QsICR0eXBlKSA9IEBfOwogCi0gICAgcmV0dXJuIDEgaWYgJG5v
blBvaW50ZXJUeXBlSGFzaHskdHlwZX0gb3IgJHByaW1pdGl2ZVR5cGVIYXNoeyR0eXBlfSBvciAk
bnVtZXJpY1R5cGVIYXNoeyR0eXBlfTsKKyAgICByZXR1cm4gMSBpZiAkbm9uUG9pbnRlclR5cGVI
YXNoeyR0eXBlfTsKKyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5
cGUpOwogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDRhOTRjOGI0MTQ4NWE1NzRiYWMzODZl
MjJiZDEwNzJiYmY3YTg5N2IuLjVjNDIxMTcwMmI2NDJiMTIzNDg3OWI2MWIzMjAwY2QyZTc5MzZl
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCkBAIC00MjM2LDEzICs0MjM2LDEzIEBAIG15ICVuYXRpdmVUeXBlID0gKAogICAg
ICJieXRlIiA9PiAiaW50OF90IiwKICAgICAiZG91YmxlIiA9PiAiZG91YmxlIiwKICAgICAiZmxv
YXQiID0+ICJmbG9hdCIsCi0gICAgImxvbmcgbG9uZyIgPT4gImxvbmcgbG9uZyIsCisgICAgImxv
bmcgbG9uZyIgPT4gImludDY0X3QiLAogICAgICJsb25nIiA9PiAiaW50IiwKICAgICAib2N0ZXQi
ID0+ICJ1aW50OF90IiwKICAgICAic2hvcnQiID0+ICJpbnQxNl90IiwKICAgICAidW5yZXN0cmlj
dGVkIGRvdWJsZSIgPT4gImRvdWJsZSIsCiAgICAgInVucmVzdHJpY3RlZCBmbG9hdCIgPT4gImZs
b2F0IiwKLSAgICAidW5zaWduZWQgbG9uZyBsb25nIiA9PiAidW5zaWduZWQgbG9uZyBsb25nIiwK
KyAgICAidW5zaWduZWQgbG9uZyBsb25nIiA9PiAidWludDY0X3QiLAogICAgICJ1bnNpZ25lZCBs
b25nIiA9PiAidW5zaWduZWQiLAogICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gInVpbnQxNl90IiwK
ICk7CkBAIC00MzQ0LDE2ICs0MzQ0LDE0IEBAIHN1YiBJc05hdGl2ZVR5cGUKICAgICByZXR1cm4g
ZXhpc3RzICRuYXRpdmVUeXBleyR0eXBlfTsKIH0KIAotbXkgJWludGVnZXJDb252ZXJzaW9uRnVu
Y3Rpb24gPSAoCi0gICAgImJ5dGUiID0+ICJ0b0ludDgiLAotICAgICJsb25nIGxvbmciID0+ICJ0
b0ludDY0IiwKLSAgICAibG9uZyIgPT4gInRvSW50MzIiLAotICAgICJvY3RldCIgPT4gInRvVUlu
dDgiLAotICAgICJzaG9ydCIgPT4gInRvSW50MTYiLAotICAgICJ1bnNpZ25lZCBsb25nIGxvbmci
ID0+ICJ0b1VJbnQ2NCIsCi0gICAgInVuc2lnbmVkIGxvbmciID0+ICJ0b1VJbnQzMiIsCi0gICAg
InVuc2lnbmVkIHNob3J0IiA9PiAidG9VSW50MTYiLAotKTsKK3N1YiBHZXRJbnRlZ2VyQ29udmVy
c2lvblR5cGUKK3sKKyAgICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CisKKyAgICByZXR1cm4gIkVu
Zm9yY2VSYW5nZSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkVuZm9yY2VS
YW5nZSJ9OworICAgIHJldHVybiAiQ2xhbXAiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDbGFtcCJ9OworICAgIHJldHVybiAiTm9ybWFsQ29udmVyc2lvbiI7Cit9CiAKICMg
UmV0dXJucyAoY29udmVydFN0cmluZywgbWF5VGhyb3dFeGNlcHRpb24pLgogc3ViIEpTVmFsdWVU
b05hdGl2ZQpAQCAtNDM2MiwxMiArNDM2MCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKICAg
ICBteSAkdHlwZSA9ICRzaWduYXR1cmUtPnR5cGU7CiAKLSAgICBteSAkZnVuY3Rpb24gPSAkaW50
ZWdlckNvbnZlcnNpb25GdW5jdGlvbnskdHlwZX07Ci0gICAgaWYgKCRmdW5jdGlvbikgewotICAg
ICAgICBteSAkY29udmVyc2lvblR5cGUgPSAiTm9ybWFsQ29udmVyc2lvbiI7Ci0gICAgICAgICRj
b252ZXJzaW9uVHlwZSA9ICJFbmZvcmNlUmFuZ2UiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJFbmZvcmNlUmFuZ2UifTsKLSAgICAgICAgJGNvbnZlcnNpb25UeXBlID0gIkNs
YW1wIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2xhbXAifTsKLSAgICAg
ICAgcmV0dXJuICgiJGZ1bmN0aW9uKHN0YXRlLCAkdmFsdWUsICRjb252ZXJzaW9uVHlwZSkiLCAx
KTsKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzSW50ZWdlclR5cGUoJHR5cGUpKSB7CisgICAg
ICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0aXZlVHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7Cisg
ICAgICAgIG15ICRjb252ZXJzaW9uVHlwZSA9IEdldEludGVnZXJDb252ZXJzaW9uVHlwZSgkc2ln
bmF0dXJlKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQ29udmVydC5oIik7Cisg
ICAgICAgIHJldHVybiAoImNvbnZlcnQ8JG5hdGl2ZVR5cGU+KCpzdGF0ZSwgJHZhbHVlLCAkY29u
dmVyc2lvblR5cGUpIiwgMSk7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJET01TdHJpbmci
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNl
ci5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCmluZGV4
IDU1NzBmZmMwMmZiYmVlYTEzMzc5OWQwODYyYjU2MzZmMmIwYjFkNmIuLjI1NDdkOGIwY2ViZDIz
MGYzYjQ2ZGZiZTJjMzIyNzdkNTJjNmZmNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvSURMUGFyc2VyLnBtCkBAIC0zNDIsMjcgKzM0MiwyNyBAQCBzdWIgaWRlbnRpZmll
clJlbW92ZU51bGxhYmxlUHJlZml4CiBteSAkbmV4dEF0dHJpYnV0ZV8xID0gJ14oYXR0cmlidXRl
fGluaGVyaXR8cmVhZG9ubHkpJCc7CiBteSAkbmV4dFByaW1pdGl2ZVR5cGVfMSA9ICdeKGludHxs
b25nfHNob3J0fHVuc2lnbmVkKSQnOwogbXkgJG5leHRQcmltaXRpdmVUeXBlXzIgPSAnXihkb3Vi
bGV8ZmxvYXR8dW5yZXN0cmljdGVkKSQnOwotbXkgJG5leHRBcmd1bWVudExpc3RfMSA9ICdeKFwo
fDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8XFt8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8
ZmxvYXR8aW58aW50fGxvbmd8b2JqZWN0fG9jdGV0fG9wdGlvbmFsfHNlcXVlbmNlfHNob3J0fHVu
cmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKLW15ICRuZXh0Tm9uQW55VHlwZV8xID0gJ14oYm9vbGVh
bnxieXRlfGRvdWJsZXxmbG9hdHxpbnR8bG9uZ3xvY3RldHxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5z
aWduZWQpJCc7Ci1teSAkbmV4dEludGVyZmFjZU1lbWJlcl8xID0gJ14oXCh8Ojp8Qnl0ZVN0cmlu
Z3xET01TdHJpbmd8RGF0ZXxhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjcmVhdG9yfGRlbGV0
ZXJ8ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGludHxsZWdhY3ljYWxsZXJ8bG9uZ3xvYmpl
Y3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGlj
fHN0cmluZ2lmaWVyfHVucmVzdHJpY3RlZHx1bnNpZ25lZHx2b2lkKSQnOworbXkgJG5leHRBcmd1
bWVudExpc3RfMSA9ICdeKFwofDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8XFt8YW55fGJv
b2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8aW58bG9uZ3xvYmplY3R8b2N0ZXR8b3B0aW9uYWx8c2Vx
dWVuY2V8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHROb25BbnlUeXBl
XzEgPSAnXihib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2N0ZXR8c2hvcnR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRJbnRlcmZhY2VNZW1iZXJfMSA9ICdeKFwofDo6
fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5dGV8Y3Jl
YXRvcnxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxsZWdhY3ljYWxsZXJ8bG9u
Z3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8
c3RhdGljfHN0cmluZ2lmaWVyfHVucmVzdHJpY3RlZHx1bnNpZ25lZHx2b2lkKSQnOwogbXkgJG5l
eHRBdHRyaWJ1dGVPck9wZXJhdGlvbl8xID0gJ14oc3RhdGljfHN0cmluZ2lmaWVyKSQnOwotbXkg
JG5leHRBdHRyaWJ1dGVPck9wZXJhdGlvbl8yID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJp
bmd8RGF0ZXxhbnl8Ym9vbGVhbnxieXRlfGNyZWF0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0
dGVyfGludHxsZWdhY3ljYWxsZXJ8bG9uZ3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8c2V0dGVyfHNo
b3J0fHVucmVzdHJpY3RlZHx1bnNpZ25lZHx2b2lkKSQnOworbXkgJG5leHRBdHRyaWJ1dGVPck9w
ZXJhdGlvbl8yID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8Ym9vbGVh
bnxieXRlfGNyZWF0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGxlZ2FjeWNhbGxlcnxs
b25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzZXR0ZXJ8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2ln
bmVkfHZvaWQpJCc7CiBteSAkbmV4dFVucmVzdHJpY3RlZEZsb2F0VHlwZV8xID0gJ14oZG91Ymxl
fGZsb2F0KSQnOwogbXkgJG5leHRFeHRlbmRlZEF0dHJpYnV0ZVJlc3QzXzEgPSAnXihcLHw6Onxc
XSkkJzsKLW15ICRuZXh0RXhjZXB0aW9uRmllbGRfMSA9ICdeKFwofDo6fEJ5dGVTdHJpbmd8RE9N
U3RyaW5nfERhdGV8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8aW50fGxvbmd8b2JqZWN0
fG9jdGV0fHNlcXVlbmNlfHNob3J0fHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKLW15ICRuZXh0
VHlwZV8xID0gJ14oOjp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8Ym9vbGVhbnxieXRl
fGRvdWJsZXxmbG9hdHxpbnR8bG9uZ3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8c2hvcnR8dW5yZXN0
cmljdGVkfHVuc2lnbmVkKSQnOworbXkgJG5leHRFeGNlcHRpb25GaWVsZF8xID0gJ14oXCh8Ojp8
Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxs
b25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7
CitteSAkbmV4dFR5cGVfMSA9ICdeKDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8YW55fGJv
b2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8c2hvcnR8
dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRTcGVjaWFsc18xID0gJ14oY3JlYXRv
cnxkZWxldGVyfGdldHRlcnxsZWdhY3ljYWxsZXJ8c2V0dGVyKSQnOwogbXkgJG5leHREZWZpbml0
aW9uc18xID0gJ14oOjp8Y2FsbGJhY2t8ZGljdGlvbmFyeXxlbnVtfGV4Y2VwdGlvbnxpbnRlcmZh
Y2V8cGFydGlhbHx0eXBlZGVmKSQnOwotbXkgJG5leHRFeGNlcHRpb25NZW1iZXJzXzEgPSAnXihc
KHw6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfFxbfGFueXxib29sZWFufGJ5dGV8Y29uc3R8
ZG91YmxlfGZsb2F0fGludHxsb25nfG9iamVjdHxvY3RldHxvcHRpb25hbHxzZXF1ZW5jZXxzaG9y
dHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dEV4Y2VwdGlvbk1lbWJlcnNfMSA9
ICdeKFwofDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8XFt8YW55fGJvb2xlYW58Ynl0ZXxj
b25zdHxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8b2N0ZXR8b3B0aW9uYWx8c2VxdWVuY2V8c2hv
cnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRBdHRyaWJ1dGVSZXN0XzEgPSAn
XihhdHRyaWJ1dGV8cmVhZG9ubHkpJCc7Ci1teSAkbmV4dEludGVyZmFjZU1lbWJlcnNfMSA9ICde
KFwofDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8YW55fGF0dHJpYnV0ZXxib29sZWFufGJ5
dGV8Y29uc3R8Y3JlYXRvcnxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW5oZXJpdHxpbnR8
bGVnYWN5Y2FsbGVyfGxvbmd8b2JqZWN0fG9jdGV0fHJlYWRvbmx5fHNlcXVlbmNlfHNlcmlhbGl6
ZXJ8c2V0dGVyfHNob3J0fHN0YXRpY3xzdHJpbmdpZmllcnx1bnJlc3RyaWN0ZWR8dW5zaWduZWR8
dm9pZCkkJzsKLW15ICRuZXh0U2luZ2xlVHlwZV8xID0gJ14oOjp8Qnl0ZVN0cmluZ3xET01TdHJp
bmd8RGF0ZXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGludHxsb25nfG9iamVjdHxvY3RldHxz
ZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dEludGVyZmFj
ZU1lbWJlcnNfMSA9ICdeKFwofDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8YW55fGF0dHJp
YnV0ZXxib29sZWFufGJ5dGV8Y29uc3R8Y3JlYXRvcnxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0
ZXJ8aW5oZXJpdHxsZWdhY3ljYWxsZXJ8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVu
Y2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHVucmVzdHJpY3Rl
ZHx1bnNpZ25lZHx2b2lkKSQnOworbXkgJG5leHRTaW5nbGVUeXBlXzEgPSAnXig6OnxCeXRlU3Ry
aW5nfERPTVN0cmluZ3xEYXRlfGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8
b2N0ZXR8c2VxdWVuY2V8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwogbXkgJG5leHRB
cmd1bWVudE5hbWVfMSA9ICdeKGF0dHJpYnV0ZXxjYWxsYmFja3xjb25zdHxjcmVhdG9yfGRlbGV0
ZXJ8ZGljdGlvbmFyeXxlbnVtfGV4Y2VwdGlvbnxnZXR0ZXJ8aW1wbGVtZW50c3xpbmhlcml0fGlu
dGVyZmFjZXxsZWdhY3ljYWxsZXJ8cGFydGlhbHxzZXJpYWxpemVyfHNldHRlcnxzdGF0aWN8c3Ry
aW5naWZpZXJ8dHlwZWRlZnx1bnJlc3RyaWN0ZWQpJCc7CiBteSAkbmV4dENvbnN0VmFsdWVfMSA9
ICdeKGZhbHNlfHRydWUpJCc7CiBteSAkbmV4dENvbnN0VmFsdWVfMiA9ICdeKC18SW5maW5pdHl8
TmFOKSQnOwogbXkgJG5leHREZWZpbml0aW9uXzEgPSAnXihjYWxsYmFja3xpbnRlcmZhY2UpJCc7
Ci1teSAkbmV4dEF0dHJpYnV0ZU9yT3BlcmF0aW9uUmVzdF8xID0gJ14oXCh8Ojp8Qnl0ZVN0cmlu
Z3xET01TdHJpbmd8RGF0ZXxhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxpbnR8bG9uZ3xv
YmplY3R8b2N0ZXR8c2VxdWVuY2V8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7
Ci1teSAkbmV4dFVuc2lnbmVkSW50ZWdlclR5cGVfMSA9ICdeKGludHxsb25nfHNob3J0KSQnOwor
bXkgJG5leHRBdHRyaWJ1dGVPck9wZXJhdGlvblJlc3RfMSA9ICdeKFwofDo6fEJ5dGVTdHJpbmd8
RE9NU3RyaW5nfERhdGV8YW55fGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvYmplY3R8
b2N0ZXR8c2VxdWVuY2V8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7CitteSAk
bmV4dFVuc2lnbmVkSW50ZWdlclR5cGVfMSA9ICdeKGxvbmd8c2hvcnQpJCc7CiBteSAkbmV4dERl
ZmF1bHRWYWx1ZV8xID0gJ14oLXxJbmZpbml0eXxOYU58ZmFsc2V8bnVsbHx0cnVlKSQnOwogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCmluZGV4IDc2NDZkNTc5YTJhNzU2YTljODNiZDRiZGQ3
M2RkYzEwNTVkZmZjMTcuLjNkOWJhMTc0NzlmNTlmNzc4ODgwNzFkZDkzMjQ5NjVlYWQ0ODQ5OTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAi
SlNOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgInd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oIgpAQCAtMjA1LDcgKzIwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW0oRXhlY1N0YXRlKiBzCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaW5k
ZXggPSB0b1VJbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDx1bnNpZ25lZD4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwuaXRlbShXVEZNb3ZlKGluZGV4KSkpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9i
YWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggOGE0NmU2YjdlZGE3MTYxNDdjNjQxYTA1MTM4ZmU4
NDI2ODY3ODU0Ni4uYWMyNmNjM2RmNGFjODNhZjRkZjhmYTgxYTljOTNlYTc2MTA0OGY2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEds
b2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CkBAIC0yOTQsNyArMjk1LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU8K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0
byB0ZXN0UGFyYW0gPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0
ZXN0UGFyYW0pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggZjAyNjBjNWRjMzY4N2ZlOGViODkzZTNlMzRkMDM0
OTlkODZmNDE3ZC4uYTA4MTMwNTkzOWM3NmI1NjNkMjk4M2I3YTI5M2VlNDM1YjBhZWU4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTI2NzEsNyArMjY3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWCiAg
ICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImJ5
dGVBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50OChzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJ5dGVBdHRyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTI2ODgsNyArMjY4OCw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIm9jdGV0QXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b1VJbnQ4KHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWlu
dDhfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0yNzA1LDcgKzI3MDUsNyBA
QCBib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKUwogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzaG9ydEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9J
bnQxNihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAt
MjcyMiw3ICsyNzIyLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KICAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY2xhbXBlZFNob3J0QXR0
ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDE2KHN0YXRlLCB2YWx1ZSwgQ2xhbXApOworICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0Q2xhbXBlZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CkBAIC0yNzM5LDcgKzI3MzksNyBAQCBib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNo
b3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgICAg
ICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJlbmZvcmNl
UmFuZ2VTaG9ydEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQxNihzdGF0ZSwgdmFsdWUsIEVu
Zm9yY2VSYW5nZSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0
YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0RW5mb3JjZVJh
bmdlU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTI3NTYsNyArMjc1Niw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHRvVUludDE2KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVbnNpZ25lZFNob3J0QXR0cihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CkBAIC0yNzczLDcgKzI3NzMsNyBAQCBib29sIHNldEpTVGVzdE9iakxvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJsb25nQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50Pigqc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TG9uZ0F0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMjc5MCw3ICsyNzkwLDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAibG9uZ0xvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50NjQoc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0TG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTI4MDcsNyAr
MjgwNyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlCiAgICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHRvVUludDY0KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25n
QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0yOTY0LDcgKzI5NjQsNyBAQCBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PGludD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMjk4
MSw3ICsyOTgxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFs
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgICAgICByZXR1cm4gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVbnNpZ25lZElu
dGVncmFsQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b1VJbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVuc2lnbmVkPigq
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5z
aWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2ln
bmVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzA0OSw3ICsz
MDQ5LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxB
dHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zMTQwLDcgKzMxNDAsNyBAQCBib29sIHNldEpTVGVzdE9i
akF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMy
KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwpAQCAtMzE1Nyw3ICszMTU3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICAgICAg
cmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CkBAIC0zMTc1LDcgKzMxNzUsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKQEAgLTMx
OTQsNyArMzE5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25X
aXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlIGVjOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldp
dGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwpA
QCAtMzMwOSw3ICszMzA5LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKICAgICAgICAgcmV0
dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRXaXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zMzI2
LDcgKzMzMjYsNyBAQCBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxX
aXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZQogICAgICAgICByZXR1cm4gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0
ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlLCBhY3RpdmVET01X
aW5kb3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKQEAgLTM0OTIsNyArMzQ5Miw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuCiAgICAgICAg
IHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlv
bmFsQXR0cjEiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludD4oKnN0YXRlLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFs
QXR0cjEoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzUxMSw3ICszNTExLDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW4KICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0lu
dDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBA
IC0zNTMwLDcgKzM1MzAsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgogICAgICAgICByZXR1
cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0
dHIzIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIz
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTM2MzgsNyArMzYzOCw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PGludD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zNjcyLDcgKzM2NzIsNyBA
QCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpZCIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0SWQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzcwMiw3ICszNzAyLDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Cisg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRy
aWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzczNiw3ICszNzM2LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0
b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0TnVsbGFibGVTdHJpbmdWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CkBAIC0zODQ2LDcgKzM4NDYsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbgogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHRlc3RQ
YXJhbSA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJh
bSkpOwpAQCAtMzg5NSw3ICszODk1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyhFeGVjU3QKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBsb25n
QXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRl
KTsKQEAgLTM5MzAsNyArMzkzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gYnl0ZUFy
ZyA9IHRvSW50OChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRl
KTsKQEAgLTM5NjUsNyArMzk2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzKEV4ZWNTCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gb2N0ZXRB
cmcgPSB0b1VJbnQ4KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OworICAgIGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhz
dGF0ZSk7CkBAIC00MDAwLDcgKzQwMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzKEV4ZWNTdAogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGxv
bmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3Rh
dGUpOwpAQCAtNDAzNSw3ICs0MDM1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBsb25n
QXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRl
KTsKQEAgLTQxMjQsNyArNDEyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRoCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gaW5kZXgg
PSB0b1VJbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIGluZGV4ID0gY29udmVydDx1bnNpZ25lZD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoc3RhdGUsIGltcGwubnVsbGFi
bGVTdHJpbmdTcGVjaWFsTWV0aG9kKFdURk1vdmUoaW5kZXgpKSk7CkBAIC00MTU4LDcgKzQxNTgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UoRQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbG9uZ0FyZyA9
IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5tZXRob2RS
ZXR1cm5pbmdTZXF1ZW5jZShXVEZNb3ZlKGxvbmdBcmcpKSk7CkBAIC00NTI0LDcgKzQ1MjQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXJnKEV4ZQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnIik7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG9wdCA9IHN0
YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQz
MihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9u
YWw8aW50PigpIDogY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZyhXVEZNb3ZlKG9wdCkpOwpAQCAtNDUzOSw3
ICs0NTM5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZEQKICAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbEFyZ0Fu
ZERlZmF1bHRWYWx1ZSIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/
IDY2NiA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7CisgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSA/IDY2NiA6IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShv
cHQpKTsKQEAgLTQ1NTYsMTAgKzQ1NTYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBu
b25PcHQgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0
aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogY29udmVydDxpbnQ+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnKFdURk1vdmUobm9uT3B0KSwgV1RGTW92ZShvcHQpKTsKQEAgLTQ1NzYsMTMg
KzQ1NzYsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0EKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBub25PcHQgPSB0b0ludDMyKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbm9u
T3B0ID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIG9wdDEg
PSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IHRv
SW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgYXV0byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBP
cHRpb25hbDxpbnQ+KCkgOiBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG9wdDIgPSBzdGF0ZS0+YXJndW1lbnQo
MikuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IGNvbnZlcnQ8aW50Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRUd29PcHRpb25hbEFyZ3MoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdDEpLCBXVEZN
b3ZlKG9wdDIpKTsKQEAgLTQ3NzcsNyArNDc3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9u
CiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJt
ZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGxvbmcgbG9uZz4oKSA6IHRvSW50NjQoc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBu
dW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDY0
X3Q+KCkgOiBjb252ZXJ0PGludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CkBA
IC00NzkyLDcgKzQ3OTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbgogICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmdJc1plcm8iKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gbnVtYmVyID0gdG9JbnQ2NChzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8aW50
NjRfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
TG9uZ0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKQEAgLTQ4MDcsNyArNDgwNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxVbnNpZ25lCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dW5z
aWduZWQgbG9uZyBsb25nPigpIDogdG9VSW50NjQoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDx1
aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhXVEZNb3ZlKG51bWJlcikpOwpAQCAtNDgyMiw3
ICs0ODIyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmUKICAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbFVuc2ln
bmVkTG9uZ0xvbmdJc1plcm8iKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gbnVtYmVyID0gdG9VSW50NjQoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PHVp
bnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxVbnNpZ25lZExvbmdMb25nSXNaZXJvKFdURk1vdmUobnVtYmVyKSk7CkBAIC00OTcwLDcgKzQ5
NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG5vbkNhbGxiYWNrID0gdG9JbnQzMihz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5v
bkNhbGxiYWNrID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3Jt
YWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAo
VU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSkKQEAgLTUwMjUsNyArNTAy
NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSB0b0ludDMyKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbm9u
Q2FsbGJhY2sgPSBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChV
TkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24oKSkpCkBAIC01MTUwLDcgKzUx
NTAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDIoRXhlY1N0YQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmcg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGF1dG8gbG9u
Z0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50Pigp
IDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252
ZXJzaW9uKTsKKyAgICBhdXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmlu
ZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUob2JqQXJnKSwg
V1RGTW92ZShsb25nQXJnKSk7CkBAIC01MTg0LDcgKzUxODQsNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQo
RXhlY1N0YQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
LSAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50Pigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUobG9uZ0Fy
ZykpOwpAQCAtNTM4OSw3ICs1Mzg5LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW8KICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50
KDApKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQo
KSA/IE9wdGlvbmFsPGludD4oKSA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBsb25nQXJnID0gc3RhdGUtPmFy
Z3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBjb252ZXJ0PGludD4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhv
ZFdpdGhPcHRpb25hbFBhcmFtZXRlcihXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUobG9uZ0FyZykp
OwpAQCAtNTQxOCw3ICs1NDE4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2QoRXhlY1N0YXRlKgogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhPcHRpb25hbChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIGF1dG8gYXJnID0gc3Rh
dGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMy
KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGF1dG8gYXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25h
bDxpbnQ+KCkgOiBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0
aW9uYWwoV1RGTW92ZShhcmcpKSk7CkBAIC01NDM3LDcgKzU0MzcsNyBAQCBzdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTEoRXhlYwogewogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBhcmcgPSB0b0ludDMyKHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gYXJnID0gY29udmVy
dDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0
aG9kMShXVEZNb3ZlKGFyZykpOwpAQCAtNTQ4OSwxMCArNTQ4OSwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRo
Q2xhbXAoRXhlYwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKLSAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IHRvVUludDE2KHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIENsYW1wKTsKKyAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZlcnQ8dWludDE2X3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgYXV0byBvYmpBcmdzTG9uZyA9IHRvVUludDMyKHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMSksIENsYW1wKTsKKyAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDx1
bnNpZ25lZD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIENsYW1wKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aENsYW1wKFdURk1v
dmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpBcmdzTG9uZykpOwpAQCAtNTUwOSwxMCArNTUw
OSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IHRvVUludDE2
KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIEVuZm9yY2VSYW5nZSk7CisgICAgYXV0byBvYmpB
cmdzU2hvcnQgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
RW5mb3JjZVJhbmdlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRv
IG9iakFyZ3NMb25nID0gdG9VSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgRW5mb3Jj
ZVJhbmdlKTsKKyAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDx1bnNpZ25lZD4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMSksIEVuZm9yY2VSYW5nZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5jbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2UoV1RGTW92
ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7CkBAIC01NzU0LDcgKzU3NTQs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU3RyaWN0RnVuY3Rpb24oRXhlY1N0YXRlKgogICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIGIgPSB0b0ludDMyKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gYiA9
IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgyKSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc0Jvb2xlYW4oaW1wbC5zdHJpY3RGdW5jdGlvbihXVEZNb3ZlKHN0ciksIFdURk1vdmUoYSks
IFdURk1vdmUoYiksIGVjKSk7CkBAIC01ODg5LDcgKzU4ODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KEV4ZWNTdGF0ZSogc3Rh
dGUpCiAgICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGF1dG8gYiA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBiID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLmFueShXVEZNb3ZlKGEpLCBXVEZNb3ZlKGIpKTsKQEAgLTU5
NzEsNyArNTk3MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wCiAgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9u
V2l0aE9wdGlvbmFsSW50QXJndW1lbnQiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGEgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IGNvbnZlcnQ8aW50Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0
aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFwcGVyKHN0
YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFR5cGVkZWZzLmNwcAppbmRleCBhMTA4NzRhMzcxYmRhNTlkZWU2ZjYxMjQ4NTY4Y2JlYTM3ZGMy
ZDU1Li5kNGFmMzNjMWQyMWQ0MTY3ODJjOTZjZDQ5ZGQxNjUyZDlmOGI2Yzc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RU
eXBlZGVmcy5jcHAKQEAgLTM1NCw3ICszNTQsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5z
aWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwog
ICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZz
IiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvVUludDY0KHN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBA
IC0zODgsNyArMzg4LDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHQKICAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtNDA2LDcgKzQwNiw3
IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwpAQCAtNTQ0LDEwICs1NDQsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dp
dGhDbGFtcChFeGVjU3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgYXV0byBhcmcxID0gdG9VSW50NjQoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgQ2xhbXApOworICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgYXV0byBhcmcyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRp
b25hbDx1bnNpZ25lZCBsb25nIGxvbmc+KCkgOiB0b1VJbnQ2NChzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBDbGFtcCk7CisgICAgYXV0byBhcmcyID0gc3RhdGUtPmFyZ3VtZW50
KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDx1aW50NjRfdD4oKSA6IGNvbnZlcnQ8dWludDY0
X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBDbGFtcCk7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5mdW5jV2l0aENsYW1wKFdURk1vdmUo
YXJnMSksIFdURk1vdmUoYXJnMikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278359</attachid>
            <date>2016-05-08 00:22:36 -0700</date>
            <delta_ts>2016-05-08 10:50:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157458-20160508002320.patch</filename>
            <type>text/plain</type>
            <size>76273</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUyMjY5ZTJlYWVlZjIx
YmMyMDI5MGNjNmJjNzc1M2IwZTI0MWRhYy4uZDFkOTdmZjI1N2M2YmEyMjE0OTNkMzQzODdjYzE5
NjQ1ODkzZjk3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc5IEBACiAyMDE2LTA1LTA3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgW0JpbmRpbmdzXSBBZGQgY29u
dmVydDw+KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY29udmVydDw+
KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzIGFuZCB1c2UgdGhl
bQorICAgICAgICBpbiB0aGUgSlMgYmluZGluZ3MuIEFsc28sIHRyZWF0IG5vbi0zMmJpdCB0eXBl
cyB0aGUgc2FtZSB3YXkgYXMgdGhlCisgICAgICAgIDMyYml0IG9uZXMsIGFsbG93aW5nIHRoZSBj
b21waWxlciB0byBvcHRpbWl6ZSBvdXQgYnJhbmNoaW5nIGJhc2VkIG9uCisgICAgICAgIHRoZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwOgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuZm9yY2VSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1NtYWxsZXJJbnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9TbWFsbGVy
VUludCk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDhFbmZvcmNlUmFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6dG9VSW50OEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDhD
bGFtcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1VJbnQ4Q2xhbXApOgorICAgICAgICAoV2ViQ29y
ZTo6dG9JbnQ4KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVUludDgpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9JbnQxNkVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VJbnQxNkVuZm9y
Y2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDE2Q2xhbXApOgorICAgICAgICAoV2Vi
Q29yZTo6dG9VSW50MTZDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDE2KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVUludDE2KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MzJFbmZvcmNl
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQzMkNsYW1wKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvVUludDMyQ2xhbXApOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50MzJFbmZvcmNlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ2NEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1VJbnQ2NEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDY0
Q2xhbXApOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50NjRDbGFtcCk6CisgICAgICAgIChXZWJD
b3JlOjp0b0ludDY0KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVUludDY0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgLSBTcGx0IHNvbWUgaW50ZWdlciBj
b252ZXJzaW9uIGZ1bmN0aW9ucyBpbnRvIDMgTm9ybWFsIC8gQ2xhbXAgLworICAgICAgICAgIEVu
Zm9yY2UgdmVyc2lvbnMsIHNpbWlsYXJseSB0byB3aGF0IHdhcyBkb25lIGZvciAzMmJpdCB0eXBl
cyBhbHJlYWR5LgorICAgICAgICAgIFRoaXMgaXMgc28gdGhhdCB0aGVzZSBjYW4gYmUgY2FsbGVk
IGZyb20gdGhlIGlubGluZSBmdW5jdGlvbnMgaW4KKyAgICAgICAgICBKU0RPTUNvbnZlcnQuaCwg
YWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGUgYnJhbmNoZXMuCisgICAg
ICAgIC0gR2V0IHJpZCBvZiBzb21lIHVubmVjZXNzYXJ5IHN0YXRlLmhhZEV4Y2VwdGlvbigpIGNo
ZWNrcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOgorICAgICAgICBB
ZGQgY29udmVydDw+IHNwZWNpYWxpemF0aW9ucyBmb3IgaW50ZWdlciB0eXBlcy4KKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtOgorICAgICAgICAtIEFkZCB1dGlsaXR5IGZ1bmN0aW9uIHRvIGRp
c3Rpbmd1aXNoIGludGVnZXIgdHlwZXMuCisgICAgICAgIC0gSGF2ZSBJc051bWVyaWNUeXBlKCkg
dXNpbmcgdGhlIGludGVnZXJUeXBlIC8gZmxvYXRpbmdQb2ludFR5cGUKKyAgICAgICAgICBoYXNo
ZXMgdG8gYXZvaWQgZHVwbGljYXRpb24uCisgICAgICAgIC0gU3RvcCBpbnQgLyB1bnNpZ25lZCBp
bnQgZnJvbSBpbnRlZ2VyIHR5cGVzIGFzIHRob3NlIGFyZSBub3QKKyAgICAgICAgICBpbiBXZWIg
SURMIGFuZCB0aGV5IGFyZSBub3QgdXNlZC4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2V0SW50ZWdlckNvbnZlcnNpb25UeXBlKToK
KyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIFVzZSBjb252ZXJ0PD4oKSBmb3Ig
Y29udmVydGluZyBKU1ZhbHVlIHRvIGludGVnZXIgdHlwZXMuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0lETFBhcnNlci5wbToKKyAgICAgICAgU3RvcCBhbGxvd2luZyBpbnQgLyB1bnNp
Z25lZCBpbnQgdHlwZXMgYXMgdGhvc2UgYXJlIG5vdCBpbiBXZWIgSURMLgorCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICBSZWJh
c2VsaW5lIGJpbmRpbmdzIHRlc3RzLgorCisyMDE2LTA1LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKICAgICAgICAgUmVkdWNlIHNwZWNpYWwgaGFuZGxpbmcgb2YgWFBhdGhO
U1Jlc29sdmVyIHR5cGUgaW4gdGhlIGJpbmRpbmdzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NTQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKaW5kZXgg
OTdmODE1ZmY1NDk2NDI1NTM1MTExZmMyNmQxYmZiMGVhZDc0ZjEyNy4uNzFkYTVjYjlhZGM5ZmU3
YjdiOWYwZTcyMjFlZWI1YWQ3ZDRiZTBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTQ3J5cHRv
T3BlcmF0aW9uRGF0YS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwpAQCAtMTU0LDIwICsxNTUsMjAgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXNDYmNQYXJhbXMoRXhlY1N0YXRlKgogICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlQWVzS2V5R2VuUGFyYW1zKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtUGFyYW1ldGVycz4gY3JlYXRlQWVzS2V5R2VuUGFyYW1zKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtl
X3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXM+KCk7CiAKLSAgICBKU1ZhbHVl
IGxlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJsZW5n
dGgiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSBsZW5ndGhW
YWx1ZSA9IGdldFByb3BlcnR5KHN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIpOwor
ICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmVzdWx0LT5sZW5ndGggPSB0b1VJbnQxNihleGVjLCBsZW5ndGhWYWx1ZSwgRW5mb3Jj
ZVJhbmdlKTsKKyAgICByZXN1bHQtPmxlbmd0aCA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwg
bGVuZ3RoVmFsdWUsIEVuZm9yY2VSYW5nZSk7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQp
OwogfQpAQCAtMjEyLDMyICsyMTMsMzIgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVIbWFjS2V5UGFyYW1zKEV4ZWNTdGF0ZSoKICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZVJzYUtleUdlblBhcmFtcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+IGNyZWF0ZVJzYUtleUdlblBhcmFtcyhFeGVjU3RhdGUqIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBKU0RpY3Rpb25hcnkganNEaWN0aW9uYXJ5
KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgpKTsKKyAgICBKU0RpY3Rpb25hcnkganNEaWN0aW9uYXJ5
KHN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcz4oKTsKIAotICAgIEpTVmFsdWUg
bW9kdWx1c0xlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCks
ICJtb2R1bHVzTGVuZ3RoIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIEpT
VmFsdWUgbW9kdWx1c0xlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoc3RhdGUsIHZhbHVlLmdldE9i
amVjdCgpLCAibW9kdWx1c0xlbmd0aCIpOworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IFdoeSBubyBFbmZvcmNl
UmFuZ2U/IEZpbGVkIGFzIDxodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcu
Y2dpP2lkPTIzNzc5Pi4KLSAgICByZXN1bHQtPm1vZHVsdXNMZW5ndGggPSB0b1VJbnQzMihleGVj
LCBtb2R1bHVzTGVuZ3RoVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICByZXN1bHQtPm1vZHVsdXNMZW5ndGggPSBjb252ZXJ0PHVpbnQz
Ml90Pigqc3RhdGUsIG1vZHVsdXNMZW5ndGhWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
aWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBKU1ZhbHVlIHB1YmxpY0V4cG9uZW50VmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB2YWx1ZS5n
ZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50Iik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIEpTVmFsdWUgcHVibGljRXhwb25lbnRWYWx1ZSA9IGdldFByb3BlcnR5KHN0YXRl
LCB2YWx1ZS5nZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50Iik7CisgICAgaWYgKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8VWlu
dDhBcnJheT4gcHVibGljRXhwb25lbnRBcnJheSA9IHRvVWludDhBcnJheShwdWJsaWNFeHBvbmVu
dFZhbHVlKTsKICAgICBpZiAoIXB1YmxpY0V4cG9uZW50QXJyYXkpIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGEgVWludDhBcnJheSBpbiBwdWJsaWNFeHBvbmVudCIp
OworICAgICAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgIkV4cGVjdGVkIGEgVWludDhBcnJheSBp
biBwdWJsaWNFeHBvbmVudCIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
cmVzdWx0LT5wdWJsaWNFeHBvbmVudC5hcHBlbmQocHVibGljRXhwb25lbnRBcnJheS0+ZGF0YSgp
LCBwdWJsaWNFeHBvbmVudEFycmF5LT5ieXRlTGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKaW5kZXggMjc0MjBiY2U1YzJmZGVkOWU0OGY4NWI5
MDc5MjAxMDY3MDA1YjQ3Yy4uNWUyMDU2ZTA1YzM2NmQwZTQ0MzY4OWFmOWIyMWNlOGY4ODdmZjFi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCkBAIC0z
NjYsMTUgKzM2NiwxNSBAQCBzdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZh
bHVlLCBkb3VibGUgbWluLCBkb3VibGUgbWF4KQogICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1
ZSAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lk
ZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIs
ICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7CiB9CiAKLXN0
YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHgsIGRvdWJs
ZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3N0YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11bSwgZG91YmxlIG1heGltdW0p
CiB7CiAgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgewotICAgICAgICBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCByYW5n
ZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKSk7CisgICAgICAgIHN0YXRlLnZtKCku
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCByYW5nZUVycm9y
U3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
ICAgICB4ID0gdHJ1bmMoeCk7CiAgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7
Ci0gICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpKTsKKyAgICAgICAg
c3RhdGUudm0oKS50aHJvd0V4Y2VwdGlvbigmc3RhdGUsIGNyZWF0ZVR5cGVFcnJvcigmc3RhdGUs
IHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogICAgIHJldHVybiB4OwpAQCAtNDExLDggKzQxMSwxMCBAQCBzdHJ1Y3QgSW50
VHlwZUxpbWl0czx1aW50MTZfdD4gewogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0
aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCitzdGF0aWMgaW5s
aW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQogeworICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZh
bHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisK
ICAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7CiAgICAgLy8gRmFzdCBw
YXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRo
ZSByaWdodCByYW5nZS4KICAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7CkBAIC00MjMsNyArNDI1
LDcgQEAgc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ28KICAgICAgICAgY2FzZSBOb3JtYWxDb252ZXJz
aW9uOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgQ2xhbXA6CiAg
ICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0
OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKQEAgLTQzMiwxNSArNDM0LDE1IEBA
IHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihk
ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVl
cyA6IGQpOwogICAgIH0KIAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
ICAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRW5m
b3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKGV4ZWMsIHgsIExpbWl0c1Ry
YWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6
bWF4VmFsdWUpOwogICAgIGNhc2UgQ2xhbXA6CiAgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IGNsYW1wVG88VD4oeCk7CiAgICAgfQpAQCAtNDU1LDggKzQ1NywxMCBAQCBzdGF0aWMg
aW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25DbwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxp
bmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCitzdGF0aWMgaW5saW5lIFQg
dG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKIHsKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVl
LCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKwog
ICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKICAgICAvLyBGYXN0IHBh
dGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0
aGUgcmlnaHQgcmFuZ2UuCiAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpIHsKQEAgLTQ2NywyMiAr
NDcxLDIyIEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25DCiAgICAgICAgIGNhc2UgTm9ybWFsQ29u
dmVyc2lvbjoKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKICAgICAgICAg
Y2FzZSBFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgY2FzZSBDbGFtcDoKICAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4
VmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7CiAgICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShleGVjLCB4
LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwogICAgIGNhc2UgQ2xhbXA6CiAg
ICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CiAgICAgfQpA
QCAtNDk0LDk0ICs0OTgsMTQ0IEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25DCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7CiB9
CiAKK2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFs
dWUsIEVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxl
clVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpOworfQorCitpbnQ4X3Qg
dG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIENsYW1wKTsKK30KKwor
dWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgQ2xh
bXApOworfQorCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKLWludDhf
dCB0b0ludDgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK2ludDhfdCB0b0ludDgoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4o
ZXhlYywgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50
OF90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogfQogCiAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Ci11aW50OF90IHRvVUludDgoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKK3VpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7Cit9CisKK2ludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50
MTZfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQx
NkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJl
dHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7
Cit9CisKK2ludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oZXhlYywgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZh
bHVlLCBDbGFtcCk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4o
c3RhdGUsIHZhbHVlLCBDbGFtcCk7CiB9CiAKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtc2hvcnQKLWludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoraW50MTZf
dCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IHRvU21hbGxlckludDxpbnQxNl90PihleGVjLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAg
cmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwogfQogCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNo
b3J0Ci11aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQordWludDE2X3QgdG9V
SW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdG9T
bWFsbGVyVUludDx1aW50MTZfdD4oZXhlYywgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIHJl
dHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwogfQogCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKLWludDMy
X3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitp
bnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNJ
bnQzMigpOwogCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKGV4ZWMsIHgsIGtNaW5J
bnQzMiwga01heEludDMyKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWlu
SW50MzIsIGtNYXhJbnQzMik7CiB9CiAKLWludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK2ludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAg
cmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKIAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwogICAgIHJl
dHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7CiB9CiAKLXVpbnQz
Ml90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQordWludDMy
X3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS5pc1VJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsK
IAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwogICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6
IGNsYW1wVG88dWludDMyX3Q+KHgpOwogfQogCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJ
REwvI2VzLXVuc2lnbmVkLWxvbmcKLXVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3VpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzVUlu
dDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwogCi0gICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKGV4ZWMsIHgsIDAsIGtNYXhVSW50MzIpOworICAgIHJldHVybiBl
bmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwogfQogCi0vLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9uZwotaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCitpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAg
ICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJ
bnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKK30KIAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKK3VpbnQ2
NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4SW50ZWdlcik7Cit9CiAKLSAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5m
b3JjZVJhbmdlKGV4ZWMsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKLSAgICBj
YXNlIENsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtKU01heElu
dGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Ci0gICAgfQoraW50NjRfdCB0b0ludDY0Q2xhbXAoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0
aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtK
U01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0Q2xh
bXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAg
OiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+
KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dl
YklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CiAK
ICAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFs
dWVzIG1vZHVsbyAyXjY0LgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwpAQCAtNTkwLDIzICs2
NDQsOSBAQCBpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gYwogfQogCiAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwotdWludDY0X3QgdG9VSW50NjQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKK3VpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgIHJldHVy
biB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNhc2UgTm9ybWFsQ29u
dmVyc2lvbjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFbmZvcmNlUmFuZ2U6Ci0gICAgICAg
IHJldHVybiBlbmZvcmNlUmFuZ2UoZXhlYywgeCwgMCwga0pTTWF4SW50ZWdlcik7Ci0gICAgY2Fz
ZSBDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4
SW50ZWdlcikpOwotICAgIH0KKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CiAKICAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUg
dmFsdWVzIG1vZHVsbyAyXjY0LgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAppbmRleCAzMzliNmE1NmNiY2VjYTRiMDRk
ZGNhNTM2ZGU2ZDhmOTkyMGMyNmZmLi41MjA4NTE4ODUxODZlNzEzNzYyNDY0MmM4N2I2NWFiNjZj
ODczMGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApAQCAt
MjExLDIzICsyMTEsMzAgQEAgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSwg
SlNDOjpFeGVjU3RhdGUqLCBib29sJiBva2F5KTsKIAogZW51bSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24geyBOb3JtYWxDb252ZXJzaW9uLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CiAK
LVdFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9y
Y2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JU
IGludDMyX3QgdG9JbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKLVdF
QkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotV0VCQ09S
RV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQxNl90
IHRvSW50MTYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbik7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsK
LQotaW50MzJfdCB0b0ludDMyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdWludDMyX3QgdG9VSW50MzIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci0KLVdF
QkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2
NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OEVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50
OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2RW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGlu
dDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRFbmZv
cmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
dWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0lu
dDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
dWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkNsYW1wKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NENs
YW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2
NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitXRUJD
T1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTYoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRv
VUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIAogLy8gUmV0dXJucyBhIERh
dGUgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgdmFsdWUsIG9yIE5hTiBpZiB0aGUgZGF0ZSBp
cyBub3QgYSBudW1iZXIuCiBKU0M6OkpTVmFsdWUganNEYXRlT3JOYU4oSlNDOjpFeGVjU3RhdGUq
LCBkb3VibGUpOwpAQCAtNDgzLDM4ICs0OTAsNiBAQCBpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQz
MlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmCiAg
ICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwogfQogCi0vKgotICAgIENvbnZlcnQgYSB2
YWx1ZSB0byBhbiBpbnRlZ2VyIGFzIHBlciA8aHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLz4u
Ci0gICAgVGhlIGNvbnZlcnNpb24gZmFpbHMgaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0
ZWQgdG8gYSBudW1iZXIgb3IsCi0gICAgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwgdGhl
IHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZQotICAgIGRlc3RpbmF0aW9uIGludGVn
ZXIgdHlwZS4KLSovCi1pbmxpbmUgaW50MzJfdCB0b0ludDMyKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQotewotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNhc2UgTm9y
bWFsQ29udmVyc2lvbjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFbmZvcmNlUmFuZ2U6Ci0g
ICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKGV4ZWMsIHZhbHVlKTsKLSAgICBjYXNl
IENsYW1wOgotICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKGV4ZWMsIHZhbHVlKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoZXhlYyk7Ci19Ci0KLWlubGluZSB1aW50MzJfdCB0
b1VJbnQzMihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNl
UmFuZ2UoZXhlYywgdmFsdWUpOwotICAgIGNhc2UgQ2xhbXA6Ci0gICAgICAgIHJldHVybiB0b1VJ
bnQzMkNsYW1wKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlLnRvVUludDMy
KGV4ZWMpOwotfQotCiAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNl
cXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KIGlubGlu
ZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0LmgKaW5kZXggYjhjZTM0NWMzNTI3MjI5ZjZlYjhkNDhlYzlmYTEx
Zjk4NmJjMTNjZS4uNzEyN2U2OTg4MzhjNzU4NGE4NjgyNjI4OTYxYmRjYzUxMDk4OWI4YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmgKQEAgLTM0LDYgKzM0LDcg
QEAgZW51bSBjbGFzcyBTaG91bGRBbGxvd05vbkZpbml0ZSB7IE5vLCBZZXMgfTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgU2hvdWxkQWxsb3dOb25GaW5pdGUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24pOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBPcHRpb25hbDxUPiBjb252ZXJ0T3B0
aW9uYWwoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gVCBjb252ZXJ0T3B0aW9uYWwoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIFUmJiBkZWZhdWx0VmFsdWUpOwpAQCAtNjIsNCArNjMsMTE0IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG51bWJlcik7CiB9CiAKK3Rl
bXBsYXRlPD4gaW5saW5lIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIE5vcm1hbENv
bnZlcnNpb246CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW5mb3JjZVJhbmdlOgorICAgICAg
ICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgY2FzZSBDbGFt
cDoKKyAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAg
IHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgdWlu
dDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gdG9VSW50OEVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgIGNhc2UgQ2xhbXA6CisgICAgICAgIHJldHVy
biB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRvVUludDgo
c3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgaW50MTZfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKKyAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgIGNhc2UgQ2xhbXA6CisgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsK
K30KKwordGVtcGxhdGU8PiBpbmxpbmUgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2Fz
ZSBOb3JtYWxDb252ZXJzaW9uOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVuZm9yY2VSYW5n
ZToKKyAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgY2FzZSBDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKKyAgICB9CisgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBs
YXRlPD4gaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBOb3JtYWxDb252
ZXJzaW9uOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAg
cmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXNlIENsYW1w
OgorICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAg
IHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIHVp
bnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiB0b1VJbnQz
MkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgIGNhc2UgQ2xhbXA6CisgICAgICAgIHJl
dHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiB2YWx1
ZS50b1VJbnQzMigmc3RhdGUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBpbnQ2NF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOworICAgIGNhc2UgQ2xhbXA6CisgICAgICAgIHJldHVybiB0b0lu
dDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUs
IHZhbHVlKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgdWludDY0X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7CisgICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1
ZSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9j
a0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCmluZGV4IGRlYWJjNTQx
ZGIwNmYxMDllNGQwYmZjNmM3MTk0MDliNTE4OWI5ZmQuLmE1NDViZjExOTE2YmY4NzE3Zjc1YzVj
M2M3NjJmNzQzZWRmMjRjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcApAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykKIAogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIk1v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTU3
LDcgKzU4LDcgQEAgSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OmRlY2lzaW9u
UG9pbnQoRXhlY1N0YXRlJikgY29uc3QKIAogdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGlu
Z3M6OnNldERlY2lzaW9uUG9pbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
LSAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OCgmc3RhdGUsIHZhbHVlLCBFbmZvcmNl
UmFuZ2UpIH07CisgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3Rh
dGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTkwLDcgKzkxLDcgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIHRvSlNWYWx1ZShEZWNpc2lvbiBkZWNpc2lvbikKIAogc3RhdGljIGlubGluZSBEZWNpc2lv
biB0b0RlY2lzaW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgdWlu
dDhfdCBuYXRpdmVWYWx1ZSB7IHRvVUludDgoJnN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKSB9
OworICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgeyBjb252ZXJ0PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1
ZSwgRW5mb3JjZVJhbmdlKSB9OwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIERlY2lzaW9uOjpBbGxvdzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKaW5kZXggYmY1Mzk2Mzc2ZjhmMjVkZDZhZTgy
NWI5YTAwMjE4Zjg2YmNkYTVlZS4uMDFiNTM2M2YxNTBjZWVhZjU0NDU2Y2MxYWM4ZTIyMDg2Njgy
MmI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVy
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
dXN0b20uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSlNOb2RlRmlsdGVyLmgiCiAK
ICNpbmNsdWRlICJKU0NhbGxiYWNrRGF0YS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgog
I2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIApAQCAtNDMsMjMg
KzQ0LDIzIEBAIHVpbnQxNl90IEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShOb2RlKiBub2RlKQog
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7CisgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgIGFyZ3MuYXBwZW5k
KHRvSlMoZXhlYywgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgbm9kZSkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBhcmdzLmFwcGVuZCh0b0pTKHN0YXRlLCBtX2RhdGEtPmds
b2JhbE9iamVjdCgpLCBub2RlKSk7CisgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAgICBOYWtlZFB0cjxF
eGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwotICAgIEpTVmFsdWUgdmFsdWUgPSBtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6OkZ1bmN0
aW9uT3JPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImFjY2VwdE5vZGUiKSwg
cmV0dXJuZWRFeGNlcHRpb24pOworICAgIEpTVmFsdWUgdmFsdWUgPSBtX2RhdGEtPmludm9rZUNh
bGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6OkZ1bmN0aW9uT3JPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJhY2NlcHROb2RlIiksIHJldHVybmVk
RXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAgICAgICAgLy8gUmV0
aHJvdyBleGNlcHRpb24uCi0gICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
cmV0dXJuZWRFeGNlcHRpb24pOworICAgICAgICBzdGF0ZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihz
dGF0ZSwgcmV0dXJuZWRFeGNlcHRpb24pOwogCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpG
SUxURVJfUkVKRUNUOwogICAgIH0KIAotICAgIHVpbnQxNl90IHJlc3VsdCA9IHRvVUludDE2KGV4
ZWMsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgdWludDE2X3QgcmVzdWx0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAgICByZXR1cm4gcmVz
dWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCmluZGV4IDBkNWE5ZmEyOTJlYmJjMGVkMzhkNDZmY2JhYjgzY2MzMThjYWRhNzcuLjEyOTJj
MTdhY2U2ZjY2YzZlZjM1NjVhMWEzNDk0YjBhZjIwZTE4NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KQEAgLTQ0LDE4ICs0NCwxMiBA
QCBteSAkY29kZUdlbmVyYXRvciA9IDA7CiAKIG15ICR2ZXJib3NlID0gMDsKIAotbXkgJW51bWVy
aWNUeXBlSGFzaCA9ICgKK215ICVpbnRlZ2VyVHlwZUhhc2ggPSAoCiAgICAgImJ5dGUiID0+IDEs
Ci0gICAgImRvdWJsZSIgPT4gMSwKLSAgICAiZmxvYXQiID0+IDEsCi0gICAgImludCIgPT4gMSwK
ICAgICAibG9uZyBsb25nIiA9PiAxLAogICAgICJsb25nIiA9PiAxLAogICAgICJvY3RldCIgPT4g
MSwKICAgICAic2hvcnQiID0+IDEsCi0gICAgInVucmVzdHJpY3RlZCBkb3VibGUiID0+IDEsCi0g
ICAgInVucmVzdHJpY3RlZCBmbG9hdCIgPT4gMSwKLSAgICAidW5zaWduZWQgaW50IiA9PiAxLAog
ICAgICJ1bnNpZ25lZCBsb25nIGxvbmciID0+IDEsCiAgICAgInVuc2lnbmVkIGxvbmciID0+IDEs
CiAgICAgInVuc2lnbmVkIHNob3J0IiA9PiAxLApAQCAtMzU3LDI3ICszNTEsMzUgQEAgc3ViIElz
Q29uc3RydWN0b3JUZW1wbGF0ZQogCiBzdWIgSXNOdW1lcmljVHlwZQogewotICAgIG15ICRvYmpl
Y3QgPSBzaGlmdDsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG15ICgkb2JqZWN0LCAkdHlw
ZSkgPSBAXzsKKworICAgIHJldHVybiAxIGlmICRpbnRlZ2VyVHlwZUhhc2h7JHR5cGV9OworICAg
IHJldHVybiAxIGlmICRmbG9hdGluZ1BvaW50VHlwZUhhc2h7JHR5cGV9OworICAgIHJldHVybiAw
OworfQogCi0gICAgcmV0dXJuIDEgaWYgJG51bWVyaWNUeXBlSGFzaHskdHlwZX07CitzdWIgSXNJ
bnRlZ2VyVHlwZQoreworICAgIG15ICgkb2JqZWN0LCAkdHlwZSkgPSBAXzsKKworICAgIHJldHVy
biAxIGlmICRpbnRlZ2VyVHlwZUhhc2h7JHR5cGV9OwogICAgIHJldHVybiAwOwogfQogCiBzdWIg
SXNGbG9hdGluZ1BvaW50VHlwZQogewogICAgIG15ICgkb2JqZWN0LCAkdHlwZSkgPSBAXzsKKwog
ICAgIHJldHVybiAxIGlmICRmbG9hdGluZ1BvaW50VHlwZUhhc2h7JHR5cGV9OwogICAgIHJldHVy
biAwOwogfQogCiBzdWIgSXNQcmltaXRpdmVUeXBlCiB7Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0
OwotICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgKCRvYmplY3QsICR0eXBlKSA9IEBfOwog
CiAgICAgcmV0dXJuIDEgaWYgJHByaW1pdGl2ZVR5cGVIYXNoeyR0eXBlfTsKLSAgICByZXR1cm4g
MSBpZiAkbnVtZXJpY1R5cGVIYXNoeyR0eXBlfTsKKyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5J
c051bWVyaWNUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDE3LDEwICs0MTks
MTAgQEAgc3ViIElzRGljdGlvbmFyeVR5cGUKIAogc3ViIElzTm9uUG9pbnRlclR5cGUKIHsKLSAg
ICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAoJG9i
amVjdCwgJHR5cGUpID0gQF87CiAKLSAgICByZXR1cm4gMSBpZiAkbm9uUG9pbnRlclR5cGVIYXNo
eyR0eXBlfSBvciAkcHJpbWl0aXZlVHlwZUhhc2h7JHR5cGV9IG9yICRudW1lcmljVHlwZUhhc2h7
JHR5cGV9OworICAgIHJldHVybiAxIGlmICRub25Qb2ludGVyVHlwZUhhc2h7JHR5cGV9OworICAg
IHJldHVybiAxIGlmICRvYmplY3QtPklzUHJpbWl0aXZlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KaW5kZXggNGE5NGM4YjQxNDg1YTU3NGJhYzM4NmUyMmJkMTA3MmJiZjdhODk3
Yi4uNWM0MjExNzAyYjY0MmIxMjM0ODc5YjYxYjMyMDBjZDJlNzkzNmVlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTQy
MzYsMTMgKzQyMzYsMTMgQEAgbXkgJW5hdGl2ZVR5cGUgPSAoCiAgICAgImJ5dGUiID0+ICJpbnQ4
X3QiLAogICAgICJkb3VibGUiID0+ICJkb3VibGUiLAogICAgICJmbG9hdCIgPT4gImZsb2F0IiwK
LSAgICAibG9uZyBsb25nIiA9PiAibG9uZyBsb25nIiwKKyAgICAibG9uZyBsb25nIiA9PiAiaW50
NjRfdCIsCiAgICAgImxvbmciID0+ICJpbnQiLAogICAgICJvY3RldCIgPT4gInVpbnQ4X3QiLAog
ICAgICJzaG9ydCIgPT4gImludDE2X3QiLAogICAgICJ1bnJlc3RyaWN0ZWQgZG91YmxlIiA9PiAi
ZG91YmxlIiwKICAgICAidW5yZXN0cmljdGVkIGZsb2F0IiA9PiAiZmxvYXQiLAotICAgICJ1bnNp
Z25lZCBsb25nIGxvbmciID0+ICJ1bnNpZ25lZCBsb25nIGxvbmciLAorICAgICJ1bnNpZ25lZCBs
b25nIGxvbmciID0+ICJ1aW50NjRfdCIsCiAgICAgInVuc2lnbmVkIGxvbmciID0+ICJ1bnNpZ25l
ZCIsCiAgICAgInVuc2lnbmVkIHNob3J0IiA9PiAidWludDE2X3QiLAogKTsKQEAgLTQzNDQsMTYg
KzQzNDQsMTQgQEAgc3ViIElzTmF0aXZlVHlwZQogICAgIHJldHVybiBleGlzdHMgJG5hdGl2ZVR5
cGV7JHR5cGV9OwogfQogCi1teSAlaW50ZWdlckNvbnZlcnNpb25GdW5jdGlvbiA9ICgKLSAgICAi
Ynl0ZSIgPT4gInRvSW50OCIsCi0gICAgImxvbmcgbG9uZyIgPT4gInRvSW50NjQiLAotICAgICJs
b25nIiA9PiAidG9JbnQzMiIsCi0gICAgIm9jdGV0IiA9PiAidG9VSW50OCIsCi0gICAgInNob3J0
IiA9PiAidG9JbnQxNiIsCi0gICAgInVuc2lnbmVkIGxvbmcgbG9uZyIgPT4gInRvVUludDY0IiwK
LSAgICAidW5zaWduZWQgbG9uZyIgPT4gInRvVUludDMyIiwKLSAgICAidW5zaWduZWQgc2hvcnQi
ID0+ICJ0b1VJbnQxNiIsCi0pOworc3ViIEdldEludGVnZXJDb252ZXJzaW9uVHlwZQoreworICAg
IG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKworICAgIHJldHVybiAiRW5mb3JjZVJhbmdlIiBpZiAk
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRW5mb3JjZVJhbmdlIn07CisgICAgcmV0
dXJuICJDbGFtcCIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNsYW1wIn07
CisgICAgcmV0dXJuICJOb3JtYWxDb252ZXJzaW9uIjsKK30KIAogIyBSZXR1cm5zIChjb252ZXJ0
U3RyaW5nLCBtYXlUaHJvd0V4Y2VwdGlvbikuCiBzdWIgSlNWYWx1ZVRvTmF0aXZlCkBAIC00MzYy
LDEyICs0MzYwLDExIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAgIG15ICR0eXBlID0gJHNp
Z25hdHVyZS0+dHlwZTsKIAotICAgIG15ICRmdW5jdGlvbiA9ICRpbnRlZ2VyQ29udmVyc2lvbkZ1
bmN0aW9ueyR0eXBlfTsKLSAgICBpZiAoJGZ1bmN0aW9uKSB7Ci0gICAgICAgIG15ICRjb252ZXJz
aW9uVHlwZSA9ICJOb3JtYWxDb252ZXJzaW9uIjsKLSAgICAgICAgJGNvbnZlcnNpb25UeXBlID0g
IkVuZm9yY2VSYW5nZSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkVuZm9y
Y2VSYW5nZSJ9OwotICAgICAgICAkY29udmVyc2lvblR5cGUgPSAiQ2xhbXAiIGlmICRzaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDbGFtcCJ9OwotICAgICAgICByZXR1cm4gKCIkZnVu
Y3Rpb24oc3RhdGUsICR2YWx1ZSwgJGNvbnZlcnNpb25UeXBlKSIsIDEpOworICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNJbnRlZ2VyVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgbXkgJG5hdGl2ZVR5
cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZhY2UsICR0eXBlKTsKKyAgICAgICAgbXkgJGNvbnZl
cnNpb25UeXBlID0gR2V0SW50ZWdlckNvbnZlcnNpb25UeXBlKCRzaWduYXR1cmUpOworICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0LmgiKTsKKyAgICAgICAgcmV0dXJuICgi
Y29udmVydDwkbmF0aXZlVHlwZT4oKnN0YXRlLCAkdmFsdWUsICRjb252ZXJzaW9uVHlwZSkiLCAx
KTsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIkRPTVN0cmluZyIpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggNTU3MGZmYzAyZmJiZWVh
MTMzNzk5ZDA4NjJiNTYzNmYyYjBiMWQ2Yi4uMjU0N2Q4YjBjZWJkMjMwZjNiNDZkZmJlMmMzMjI3
N2Q1MmM2ZmY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9J
RExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJz
ZXIucG0KQEAgLTM0MiwyNyArMzQyLDI3IEBAIHN1YiBpZGVudGlmaWVyUmVtb3ZlTnVsbGFibGVQ
cmVmaXgKIG15ICRuZXh0QXR0cmlidXRlXzEgPSAnXihhdHRyaWJ1dGV8aW5oZXJpdHxyZWFkb25s
eSkkJzsKIG15ICRuZXh0UHJpbWl0aXZlVHlwZV8xID0gJ14oaW50fGxvbmd8c2hvcnR8dW5zaWdu
ZWQpJCc7CiBteSAkbmV4dFByaW1pdGl2ZVR5cGVfMiA9ICdeKGRvdWJsZXxmbG9hdHx1bnJlc3Ry
aWN0ZWQpJCc7Ci1teSAkbmV4dEFyZ3VtZW50TGlzdF8xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xE
T01TdHJpbmd8RGF0ZXxcW3xhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxpbnxpbnR8bG9u
Z3xvYmplY3R8b2N0ZXR8b3B0aW9uYWx8c2VxdWVuY2V8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2ln
bmVkKSQnOwotbXkgJG5leHROb25BbnlUeXBlXzEgPSAnXihib29sZWFufGJ5dGV8ZG91YmxlfGZs
b2F0fGludHxsb25nfG9jdGV0fHNob3J0fHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKLW15ICRu
ZXh0SW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHw6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRl
fGFueXxhdHRyaWJ1dGV8Ym9vbGVhbnxieXRlfGNyZWF0b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8
Z2V0dGVyfGluaGVyaXR8aW50fGxlZ2FjeWNhbGxlcnxsb25nfG9iamVjdHxvY3RldHxyZWFkb25s
eXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8dW5y
ZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7CitteSAkbmV4dEFyZ3VtZW50TGlzdF8xID0gJ14o
XCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxcW3xhbnl8Ym9vbGVhbnxieXRlfGRvdWJs
ZXxmbG9hdHxpbnxsb25nfG9iamVjdHxvY3RldHxvcHRpb25hbHxzZXF1ZW5jZXxzaG9ydHx1bnJl
c3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dE5vbkFueVR5cGVfMSA9ICdeKGJvb2xlYW58
Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvY3RldHxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQp
JCc7CitteSAkbmV4dEludGVyZmFjZU1lbWJlcl8xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01T
dHJpbmd8RGF0ZXxhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjcmVhdG9yfGRlbGV0ZXJ8ZG91
YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGxlZ2FjeWNhbGxlcnxsb25nfG9iamVjdHxvY3RldHxy
ZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5naWZp
ZXJ8dW5yZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7CiBteSAkbmV4dEF0dHJpYnV0ZU9yT3Bl
cmF0aW9uXzEgPSAnXihzdGF0aWN8c3RyaW5naWZpZXIpJCc7Ci1teSAkbmV4dEF0dHJpYnV0ZU9y
T3BlcmF0aW9uXzIgPSAnXihcKHw6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFueXxib29s
ZWFufGJ5dGV8Y3JlYXRvcnxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8aW50fGxlZ2FjeWNh
bGxlcnxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzZXR0ZXJ8c2hvcnR8dW5yZXN0cmljdGVk
fHVuc2lnbmVkfHZvaWQpJCc7CitteSAkbmV4dEF0dHJpYnV0ZU9yT3BlcmF0aW9uXzIgPSAnXihc
KHw6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFueXxib29sZWFufGJ5dGV8Y3JlYXRvcnxk
ZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8bGVnYWN5Y2FsbGVyfGxvbmd8b2JqZWN0fG9jdGV0
fHNlcXVlbmNlfHNldHRlcnxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWR8dm9pZCkkJzsKIG15
ICRuZXh0VW5yZXN0cmljdGVkRmxvYXRUeXBlXzEgPSAnXihkb3VibGV8ZmxvYXQpJCc7CiBteSAk
bmV4dEV4dGVuZGVkQXR0cmlidXRlUmVzdDNfMSA9ICdeKFwsfDo6fFxdKSQnOwotbXkgJG5leHRF
eGNlcHRpb25GaWVsZF8xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8
Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxpbnR8bG9uZ3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8
c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHRUeXBlXzEgPSAnXig6OnxC
eXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGlu
dHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQp
JCc7CitteSAkbmV4dEV4Y2VwdGlvbkZpZWxkXzEgPSAnXihcKHw6OnxCeXRlU3RyaW5nfERPTVN0
cmluZ3xEYXRlfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0
fHNlcXVlbmNlfHNob3J0fHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKK215ICRuZXh0VHlwZV8x
ID0gJ14oOjp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8Ym9vbGVhbnxieXRlfGRvdWJs
ZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5z
aWduZWQpJCc7CiBteSAkbmV4dFNwZWNpYWxzXzEgPSAnXihjcmVhdG9yfGRlbGV0ZXJ8Z2V0dGVy
fGxlZ2FjeWNhbGxlcnxzZXR0ZXIpJCc7CiBteSAkbmV4dERlZmluaXRpb25zXzEgPSAnXig6Onxj
YWxsYmFja3xkaWN0aW9uYXJ5fGVudW18ZXhjZXB0aW9ufGludGVyZmFjZXxwYXJ0aWFsfHR5cGVk
ZWYpJCc7Ci1teSAkbmV4dEV4Y2VwdGlvbk1lbWJlcnNfMSA9ICdeKFwofDo6fEJ5dGVTdHJpbmd8
RE9NU3RyaW5nfERhdGV8XFt8YW55fGJvb2xlYW58Ynl0ZXxjb25zdHxkb3VibGV8ZmxvYXR8aW50
fGxvbmd8b2JqZWN0fG9jdGV0fG9wdGlvbmFsfHNlcXVlbmNlfHNob3J0fHVucmVzdHJpY3RlZHx1
bnNpZ25lZCkkJzsKK215ICRuZXh0RXhjZXB0aW9uTWVtYmVyc18xID0gJ14oXCh8Ojp8Qnl0ZVN0
cmluZ3xET01TdHJpbmd8RGF0ZXxcW3xhbnl8Ym9vbGVhbnxieXRlfGNvbnN0fGRvdWJsZXxmbG9h
dHxsb25nfG9iamVjdHxvY3RldHxvcHRpb25hbHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8
dW5zaWduZWQpJCc7CiBteSAkbmV4dEF0dHJpYnV0ZVJlc3RfMSA9ICdeKGF0dHJpYnV0ZXxyZWFk
b25seSkkJzsKLW15ICRuZXh0SW50ZXJmYWNlTWVtYmVyc18xID0gJ14oXCh8Ojp8Qnl0ZVN0cmlu
Z3xET01TdHJpbmd8RGF0ZXxhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxjcmVhdG9y
fGRlbGV0ZXJ8ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGludHxsZWdhY3ljYWxsZXJ8bG9u
Z3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8
c3RhdGljfHN0cmluZ2lmaWVyfHVucmVzdHJpY3RlZHx1bnNpZ25lZHx2b2lkKSQnOwotbXkgJG5l
eHRTaW5nbGVUeXBlXzEgPSAnXig6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGJvb2xlYW58
Ynl0ZXxkb3VibGV8ZmxvYXR8aW50fGxvbmd8b2JqZWN0fG9jdGV0fHNlcXVlbmNlfHNob3J0fHVu
cmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKK215ICRuZXh0SW50ZXJmYWNlTWVtYmVyc18xID0gJ14o
XCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0
ZXxjb25zdHxjcmVhdG9yfGRlbGV0ZXJ8ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGxlZ2Fj
eWNhbGxlcnxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNl
dHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8dW5yZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQp
JCc7CitteSAkbmV4dFNpbmdsZVR5cGVfMSA9ICdeKDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERh
dGV8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxz
aG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dEFyZ3VtZW50TmFtZV8xID0g
J14oYXR0cmlidXRlfGNhbGxiYWNrfGNvbnN0fGNyZWF0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5fGVu
dW18ZXhjZXB0aW9ufGdldHRlcnxpbXBsZW1lbnRzfGluaGVyaXR8aW50ZXJmYWNlfGxlZ2FjeWNh
bGxlcnxwYXJ0aWFsfHNlcmlhbGl6ZXJ8c2V0dGVyfHN0YXRpY3xzdHJpbmdpZmllcnx0eXBlZGVm
fHVucmVzdHJpY3RlZCkkJzsKIG15ICRuZXh0Q29uc3RWYWx1ZV8xID0gJ14oZmFsc2V8dHJ1ZSkk
JzsKIG15ICRuZXh0Q29uc3RWYWx1ZV8yID0gJ14oLXxJbmZpbml0eXxOYU4pJCc7CiBteSAkbmV4
dERlZmluaXRpb25fMSA9ICdeKGNhbGxiYWNrfGludGVyZmFjZSkkJzsKLW15ICRuZXh0QXR0cmli
dXRlT3JPcGVyYXRpb25SZXN0XzEgPSAnXihcKHw6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRl
fGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGludHxsb25nfG9iamVjdHxvY3RldHxzZXF1
ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWR8dm9pZCkkJzsKLW15ICRuZXh0VW5zaWdu
ZWRJbnRlZ2VyVHlwZV8xID0gJ14oaW50fGxvbmd8c2hvcnQpJCc7CitteSAkbmV4dEF0dHJpYnV0
ZU9yT3BlcmF0aW9uUmVzdF8xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxh
bnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxz
aG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWR8dm9pZCkkJzsKK215ICRuZXh0VW5zaWduZWRJbnRl
Z2VyVHlwZV8xID0gJ14obG9uZ3xzaG9ydCkkJzsKIG15ICRuZXh0RGVmYXVsdFZhbHVlXzEgPSAn
XigtfEluZmluaXR5fE5hTnxmYWxzZXxudWxsfHRydWUpJCc7CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRh
cmdldC5jcHAKaW5kZXggNzY0NmQ1NzlhMmE3NTZhOWM4M2JkNGJkZDczZGRjMTA1NWRmZmMxNy4u
M2Q5YmExNzQ3OWY1OWY3Nzg4ODA3MWRkOTMyNDk2NWVhZDQ4NDk5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRUYXJnZXQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNs
dWRlICJOb2RlLmgiCiAjaW5jbHVkZSAid3RmL3RleHQvQXRvbWljU3RyaW5nLmgiCkBAIC0yMDUs
NyArMjA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdl
dFByb3RvdHlwZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIHMKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBpbmRleCA9IHRvVUludDMyKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gaW5k
ZXggPSBjb252ZXJ0PHVuc2lnbmVkPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoaW1wbC5pdGVtKFdURk1vdmUoaW5kZXgpKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcAppbmRleCA4YTQ2ZTZiN2VkYTcxNjE0N2M2NDFhMDUxMzhmZTg0MjY4Njc4NTQ2Li5hYzI2
Y2MzZGY0YWM4M2FmNGRmOGZhODFhOWM5M2VhNzYxMDQ4ZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFs
T2JqZWN0LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KQEAg
LTI5NCw3ICsyOTUsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lTwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IHRv
SW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
YXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAppbmRleCBmMDI2MGM1ZGMzNjg3ZmU4ZWI4OTNlM2UzNGQwMzQ5OWQ4NmY0MTdkLi5hMDgx
MzA1OTM5Yzc2YjU2M2QyOTgzYjdhMjkzZWU0MzViMGFlZThmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMjY3
MSw3ICsyNjcxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1YKICAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdG9JbnQ4KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qnl0ZUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwpAQCAtMjY4OCw3ICsyNjg4LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlMKICAgICAg
ICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib2N0ZXRB
dHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvVUludDgoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0T2N0ZXRBdHRyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTI3MDUsNyArMjcwNSw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgInNob3J0QXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDE2KHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0yNzIyLDcgKzI3MjIsNyBA
QCBib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjbGFtcGVkU2hvcnRBdHRyIik7CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHRvSW50MTYoc3RhdGUsIHZhbHVlLCBDbGFtcCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRDbGFtcGVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTI3MzksNyAr
MjczOSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1CiAgICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB0b0ludDE2KHN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBFbmZv
cmNlUmFuZ2UpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMjc1Niw3ICsyNzU2LDcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9VSW50MTYoc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDx1aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAg
LTI3NzMsNyArMjc3Myw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWCiAgICAgICAgIHJldHVy
biB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImxvbmdBdHRyIik7CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CkBAIC0yNzkwLDcgKzI3OTAsNyBAQCBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZQogICAg
ICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJsb25n
TG9uZ0F0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQ2NChzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDY0X3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRMb25nTG9u
Z0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMjgwNyw3ICsyODA3LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dG9VSW50NjQoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKQEAgLTI5NjQsNyArMjk2NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
CiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwu
c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3Jh
bGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0yOTgxLDcgKzI5ODEsNyBAQCBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHRvVUludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Cisg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dW5zaWduZWQ+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVbnNpZ25lZEludGVncmFsQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJB
dHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zMDQ5LDcgKzMwNDksNyBAQCBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aAogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKQEAgLTMxNDAsNyArMzE0MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgICAg
IHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zMTU3LDcgKzMx
NTcsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3Nh
Z2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbldp
dGhNZXNzYWdlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTMxNzUs
NyArMzE3NSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwpAQCAtMzE5NCw3ICszMTk0LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CkBAIC0zMzA5LDcgKzMzMDks
NyBAQCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZSgqc3RhdGUsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTMzMjYsNyArMzMyNiw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmli
dXRlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRXaXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgqc3RhdGUsIGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSksIGZp
cnN0RE9NV2luZG93KHN0YXRlKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzQ5Miw3ICsz
NDkyLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KICAgICAgICAgcmV0dXJuIHRocm93U2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CkBAIC0zNTExLDcgKzM1MTEsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bgogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJjb25kaXRpb25hbEF0dHIyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+
KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRD
b25kaXRpb25hbEF0dHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTM1MzAsNyArMzUzMCw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjMiKTsKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjMoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwpAQCAtMzYzOCw3ICszNjM4LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEoKICAg
ICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3Ry
YXdiZXJyeSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qmx1ZWJlcnJ5KFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTM2NzIsNyArMzY3Miw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImlkIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJZChXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zNzAyLDcgKzM3MDIsNyBAQCBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRv
SW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CkBAIC0zNzM2LDcgKzM3MzYsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxh
YmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LAogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxp
bnQ+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXROdWxsYWJsZVN0cmluZ1ZhbHVlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTM4NDYsNyAr
Mzg0Niw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gdGVzdFBhcmFtID0gdG9JbnQzMihz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5l
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CkBAIC0zODk1LDcg
KzM4OTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKEV4ZWNTdAogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbG9u
Z0FyZyA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29u
dmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtMzkzMCw3ICsz
OTMwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyhFeGVjU3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBieXRlQXJnID0gdG9JbnQ4KHN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gYnl0ZUFy
ZyA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29u
dmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtMzk2NSw3ICsz
OTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MoRXhlY1MKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBvY3RldEFyZyA9IHRvVUludDgoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBvY3Rl
dEFyZyA9IGNvbnZlcnQ8dWludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8g
c3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKQEAgLTQwMDAs
NyArNDAwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IHRvSW50MzIo
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBs
b25nQXJnID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0
ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7CkBAIC00MDM1LDcg
KzQwMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MoRXhlY1N0YQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGxvbmdBcmcgPSB0b0ludDMyKHN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbG9u
Z0FyZyA9IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29u
dmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtNDEyNCw3ICs0
MTI0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGgKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBpbmRleCA9IHRvVUludDMyKHN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gaW5kZXgg
PSBjb252ZXJ0PHVuc2lnbmVkPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29u
dmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ1NwZWNpYWxN
ZXRob2QoV1RGTW92ZShpbmRleCkpKTsKQEAgLTQxNTgsNyArNDE1OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RSZXR1cm5p
bmdTZXF1ZW5jZShFCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQ+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhvZFJldHVybmluZ1NlcXVlbmNl
KFdURk1vdmUobG9uZ0FyZykpKTsKQEAgLTQ1MjQsNyArNDUyNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBcmcoRXhlCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxBcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gb3B0ID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBjb252
ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsQXJnKFdURk1vdmUob3B0KSk7CkBAIC00NTM5LDcgKzQ1MzksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXJnQW5kRAogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
IG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogdG9JbnQzMihz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29u
dmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKG9wdCkpOwpAQCAtNDU1Niwx
MCArNDU1NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG5vbk9wdCA9IHRvSW50MzIo
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBu
b25PcHQgPSBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb3B0
ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0
b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBP
cHRpb25hbDxpbnQ+KCkgOiBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoV1RG
TW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwpAQCAtNDU3NiwxMyArNDU3NiwxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKLSAgICBhdXRvIG5vbk9wdCA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PGlu
dD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb3B0MSA9IHN0YXRlLT5hcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG9w
dDEgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6
IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBv
cHQyID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkg
OiB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENvbnZl
cnNpb24pOworICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8aW50PigpIDogY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFs
QXJncyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0MSksIFdURk1vdmUob3B0MikpOwpAQCAt
NDc3Nyw3ICs0Nzc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb24KICAgICAgICAgcmV0dXJu
IHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25h
bExvbmdMb25nIik7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8bG9uZyBsb25nPigpIDogdG9JbnQ2NChzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50NjRfdD4oKSA6IGNvbnZlcnQ8
aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIpKTsKQEAgLTQ3OTIsNyArNDc5Miw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVy
byIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBudW1iZXIgPSB0b0ludDY0KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyhX
VEZNb3ZlKG51bWJlcikpOwpAQCAtNDgwNyw3ICs0ODA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVu
c2lnbmUKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgIm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmciKTsKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbnVtYmVyID0gc3RhdGUt
PmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDx1bnNpZ25lZCBsb25nIGxvbmc+
KCkgOiB0b1VJbnQ2NChzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNp
Z25lZExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CkBAIC00ODIyLDcgKzQ4MjIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsVW5zaWduZQogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVy
byIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBudW1iZXIgPSB0b1VJbnQ2NChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xv
bmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKQEAgLTQ5NzAsNyArNDk3MCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Tm9uQ2FsbGJhY2tBcmdBCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252
ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUt
PmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQpAQCAtNTAyNSw3ICs1MDI1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0EKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7Ci0gICAgYXV0byBub25DYWxsYmFjayA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZl
cnQ8aW50Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+
YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkKQEAgLTUxNTAsNyArNTE1MCw3IEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMihFeGVjU3RhCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9X
cmFwcGVkKHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgYXV0byBsb25nQXJnID0gc3RhdGUtPmFy
Z3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1
dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8
aW50PigpIDogY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcp
KTsKQEAgLTUxODQsNyArNTE4NCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNChFeGVjU3RhCiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbG9uZ0Fy
ZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShsb25nQXJnKSk7CkBAIC01Mzg5LDcg
KzUzODksNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpbwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpB
cmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGF1dG8g
bG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50
PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IGNvbnZlcnQ8aW50Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFy
YW1ldGVyKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShsb25nQXJnKSk7CkBAIC01NDE4LDcgKzU0
MTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25DbGFzc01ldGhvZChFeGVjU3RhdGUqCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0byBhcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBhcmcgPSBz
dGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IGNvbnZl
cnQ8aW50Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZNb3ZlKGFy
ZykpKTsKQEAgLTU0MzcsNyArNTQzNyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMShFeGVjCiB7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKLSAgICBhdXRvIGFyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBhcmcgPSBjb252ZXJ0PGludD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUoYXJn
KSk7CkBAIC01NDg5LDEwICs1NDg5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVjCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gb2Jq
QXJnc1Nob3J0ID0gdG9VSW50MTYoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgQ2xhbXApOwor
ICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIENsYW1wKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBhdXRvIG9iakFyZ3NMb25nID0gdG9VSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwg
Q2xhbXApOworICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVuc2lnbmVkPigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgxKSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRoQ2xhbXAoV1RGTW92ZShvYmpBcmdzU2hvcnQp
LCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7CkBAIC01NTA5LDEwICs1NTA5LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhv
ZFdpdGhFbmZvcmNlUmFuCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gdG9VSW50MTYoc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgRW5mb3JjZVJhbmdlKTsKKyAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZl
cnQ8dWludDE2X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBFbmZvcmNlUmFuZ2UpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb2JqQXJnc0xvbmcgPSB0
b1VJbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBFbmZvcmNlUmFuZ2UpOworICAgIGF1
dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVuc2lnbmVkPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgxKSwgRW5mb3JjZVJhbmdlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFyZ3NTaG9ydCks
IFdURk1vdmUob2JqQXJnc0xvbmcpKTsKQEAgLTU3NTQsNyArNTc1NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlv
bihFeGVjU3RhdGUqCiAgICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gYiA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgyKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBiID0gY29udmVydDxpbnQ+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBs
LnN0cmljdEZ1bmN0aW9uKFdURk1vdmUoc3RyKSwgV1RGTW92ZShhKSwgV1RGTW92ZShiKSwgZWMp
KTsKQEAgLTU4ODksNyArNTg4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkoRXhlY1N0YXRlKiBzdGF0ZSkKICAgICBhdXRvIGEg
PSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dO
b25GaW5pdGU6Olllcyk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0
byBiID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIGIgPSBjb252ZXJ0PGludD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSks
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwuYW55KFdURk1vdmUoYSksIFdURk1vdmUoYikpOwpAQCAtNTk3MSw3ICs1OTcxLDcgQEAg
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRl
c3RQcm9taXNlRnVuY3Rpb25XaXRoT3AKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRB
cmd1bWVudCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25h
bDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogY29udmVydDxpbnQ+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJ
bnRBcmd1bWVudChXVEZNb3ZlKGEpLCBEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCmlu
ZGV4IGExMDg3NGEzNzFiZGE1OWRlZTZmNjEyNDg1NjhjYmVhMzdkYzJkNTUuLmQ0YWYzM2MxZDIx
ZDQxNjc4MmM5NmNkNDlkZDE2NTJkOWY4YjZjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcApAQCAt
MzU0LDcgKzM1NCw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAidW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9VSW50NjQoc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50NjRfdD4oKnN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2ln
bmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTM4OCw3ICszODgsNyBA
QCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC00MDYsNyArNDA2LDcgQEAgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHQKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9J
bnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFs
dWUpLCBlYyk7CkBAIC01NDQsMTAgKzU0NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKEV4ZWNTdAog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRv
IGFyZzEgPSB0b1VJbnQ2NChzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7CisgICAg
YXV0byBhcmcxID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCks
IENsYW1wKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIGFyZzIg
PSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVuc2lnbmVkIGxv
bmcgbG9uZz4oKSA6IHRvVUludDY0KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSks
IENsYW1wKTsKKyAgICBhdXRvIGFyZzIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQo
KSA/IE9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIENsYW1wKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShhcmcxKSwgV1RGTW92ZShh
cmcyKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278364</attachid>
            <date>2016-05-08 10:50:17 -0700</date>
            <delta_ts>2016-05-08 11:28:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157458-20160508105102.patch</filename>
            <type>text/plain</type>
            <size>96225</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAwNTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE3MmY1YTZjZDFlNjNh
NjAyMDUxOTcyODc0ZWM5YmZiYmVkMTVjZC4uNWI4NmZhMjE3NDQ1ZTRkOGIwZTc0NTE4MzMxYzFk
MmUwOTE3NDI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE2LTA1LTA3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW0JpbmRpbmdzXSBBZGQgY29u
dmVydDw+KCkgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0NTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGQgY29udmVydDw+KCkg
dGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGZvciBpbnRlZ2VyIHR5cGVzIGFuZCB1c2UgdGhlbQor
ICAgICAgICBpbiB0aGUgSlMgYmluZGluZ3MuIEFsc28sIHRyZWF0IG5vbi0zMmJpdCB0eXBlcyB0
aGUgc2FtZSB3YXkgYXMgdGhlCisgICAgICAgIDMyYml0IG9uZXMsIGFsbG93aW5nIHRoZSBjb21w
aWxlciB0byBvcHRpbWl6ZSBvdXQgYnJhbmNoaW5nIGJhc2VkIG9uCisgICAgICAgIHRoZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwOgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuZm9yY2VSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjp0b1NtYWxsZXJJbnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9TbWFsbGVyVUlu
dCk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDhFbmZvcmNlUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9VSW50OEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDhDbGFt
cCk6CisgICAgICAgIChXZWJDb3JlOjp0b1VJbnQ4Q2xhbXApOgorICAgICAgICAoV2ViQ29yZTo6
dG9JbnQ4KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVUludDgpOgorICAgICAgICAoV2ViQ29yZTo6
dG9JbnQxNkVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VJbnQxNkVuZm9yY2VS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDE2Q2xhbXApOgorICAgICAgICAoV2ViQ29y
ZTo6dG9VSW50MTZDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDE2KToKKyAgICAgICAg
KFdlYkNvcmU6OnRvVUludDE2KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MzJFbmZvcmNlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQzMkNsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvVUludDMyQ2xhbXApOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50MzJFbmZvcmNlUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ2NEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b1VJbnQ2NEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDY0Q2xh
bXApOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50NjRDbGFtcCk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0ludDY0KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVUludDY0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgLSBTcGx0IHNvbWUgaW50ZWdlciBjb252
ZXJzaW9uIGZ1bmN0aW9ucyBpbnRvIDMgTm9ybWFsIC8gQ2xhbXAgLworICAgICAgICAgIEVuZm9y
Y2UgdmVyc2lvbnMsIHNpbWlsYXJseSB0byB3aGF0IHdhcyBkb25lIGZvciAzMmJpdCB0eXBlcyBh
bHJlYWR5LgorICAgICAgICAgIFRoaXMgaXMgc28gdGhhdCB0aGVzZSBjYW4gYmUgY2FsbGVkIGZy
b20gdGhlIGlubGluZSBmdW5jdGlvbnMgaW4KKyAgICAgICAgICBKU0RPTUNvbnZlcnQuaCwgYWxs
b3dpbmcgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIG91dCB0aGUgYnJhbmNoZXMuCisgICAgICAg
IC0gR2V0IHJpZCBvZiBzb21lIHVubmVjZXNzYXJ5IHN0YXRlLmhhZEV4Y2VwdGlvbigpIGNoZWNr
cy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOgorICAgICAgICBBZGQg
Y29udmVydDw+IHNwZWNpYWxpemF0aW9ucyBmb3IgaW50ZWdlciB0eXBlcy4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yLnBtOgorICAgICAgICAtIEFkZCB1dGlsaXR5IGZ1bmN0aW9uIHRvIGRpc3Rp
bmd1aXNoIGludGVnZXIgdHlwZXMuCisgICAgICAgIC0gSGF2ZSBJc051bWVyaWNUeXBlKCkgdXNp
bmcgdGhlIGludGVnZXJUeXBlIC8gZmxvYXRpbmdQb2ludFR5cGUKKyAgICAgICAgICBoYXNoZXMg
dG8gYXZvaWQgZHVwbGljYXRpb24uCisgICAgICAgIC0gU3RvcCBpbnQgLyB1bnNpZ25lZCBpbnQg
ZnJvbSBpbnRlZ2VyIHR5cGVzIGFzIHRob3NlIGFyZSBub3QKKyAgICAgICAgICBpbiBXZWIgSURM
IGFuZCB0aGV5IGFyZSBub3QgdXNlZC4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2V0SW50ZWdlckNvbnZlcnNpb25UeXBlKToKKyAg
ICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIFVzZSBjb252ZXJ0PD4oKSBmb3IgY29u
dmVydGluZyBKU1ZhbHVlIHRvIGludGVnZXIgdHlwZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0lETFBhcnNlci5wbToKKyAgICAgICAgU3RvcCBhbGxvd2luZyBpbnQgLyB1bnNpZ25l
ZCBpbnQgdHlwZXMgYXMgdGhvc2UgYXJlIG5vdCBpbiBXZWIgSURMLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICBSZWJhc2Vs
aW5lIGJpbmRpbmdzIHRlc3RzLgorCiAyMDE2LTA1LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBDb3JyZWN0IGRpY3Rpb25hcnkgYmluZGluZ3MgaGFuZGxpbmcg
b2Ygb3B0aW9uYWwsIG51bGwsIGFuZCB1bmRlZmluZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggYmU4ZjliNGMyMmUyNjJmOGE4MWIz
NjVmMzFhODJmODZkZDk0NTk5NS4uMTZiNmI3NmViMGI1ZWMzNTcwYjc3YTkzYjYwMzgxMjhjMTkx
NGRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eS5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgSURCRmFjdG9yeTo6fklEQkZhY3RvcnkoKQogewogfQog
Ci1SZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIE9wdGlvbmFsPHVuc2lnbmVk
IGxvbmcgbG9uZz4gdmVyc2lvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK1JlZlB0
cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgT3B0aW9uYWw8dWludDY0X3Q+IHZlcnNp
b24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQkZhY3Rvcnk6Om9wZW4iKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuaAppbmRleCA4Mzg2MjcxNzAwY2RjYjAzMjAwZGI4MTA4YzI5ZDEw
ODg2OGRhMDAzLi41OTgwMjBhNTkzNDFhYTU3ODMwNDNiMjhhMzdlNDgzZjVmOTE0MTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCkBAIC01Niw3
ICs1Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJD
bGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eSYpOwogICAgIH5JREJGYWN0b3J5KCk7CiAKLSAgICBS
ZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBPcHRpb25hbDx1bnNpZ25lZCBsb25nIGxvbmc+IHZlcnNpb24sIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBv
cGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIE9wdGlvbmFs
PHVpbnQ2NF90PiB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKICAgICBSZWZQ
dHI8SURCT3BlbkRCUmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CiAKICAg
ICBzaG9ydCBjbXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEpTQzo6SlNWYWx1ZSBmaXJzdCwg
SlNDOjpKU1ZhbHVlIHNlY29uZCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5LmNwcAppbmRleCA5N2Y4MTVmZjU0OTY0MjU1MzUxMTFmYzI2ZDFiZmIwZWFkNzRmMTI3
Li5kZmYzZGZmZjc5ODg0ZjAwN2NhNjk2NWY0NTA0MzIxYzRjNzNlNDU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiSlNDcnlwdG9PcGVyYXRpb25EYXRhLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5Lmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0xNTQsOTAgKzE1NSw5MCBAQCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZUFlc0NiY1BhcmFt
cyhFeGVjU3RhdGUqCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXNLZXlHZW5Q
YXJhbXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVBZXNLZXlHZW5QYXJhbXMoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGF1dG8g
cmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5QYXJhbXM+
KCk7CiAKLSAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUu
Z2V0T2JqZWN0KCksICJsZW5ndGgiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IGdldFByb3BlcnR5KCZzdGF0ZSwgdmFsdWUuZ2V0T2Jq
ZWN0KCksICJsZW5ndGgiKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmVzdWx0LT5sZW5ndGggPSB0b1VJbnQxNihleGVjLCBs
ZW5ndGhWYWx1ZSwgRW5mb3JjZVJhbmdlKTsKKyAgICByZXN1bHQtPmxlbmd0aCA9IGNvbnZlcnQ8
dWludDE2X3Q+KHN0YXRlLCBsZW5ndGhWYWx1ZSwgRW5mb3JjZVJhbmdlKTsKIAogICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlSG1hY1BhcmFtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnM+IGNyZWF0ZUhtYWNQYXJhbXMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoZXhlYywgdmFsdWUu
Z2V0T2JqZWN0KCkpOworICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1
ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0
b0FsZ29yaXRobUhtYWNQYXJhbXM+KCk7CiAKICAgICBpZiAoIWdldEhhc2hBbGdvcml0aG0oanNE
aWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpKSB7Ci0g
ICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlSG1hY0tleVBhcmFtcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+IGNyZWF0ZUhtYWNLZXlQYXJhbXMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnko
ZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCkpOworICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnko
JnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXM+KCk7CiAKICAgICBpZiAoIWdldEhh
c2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6
UmVxdWlyZWQpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAogICAgIHJlc3VsdC0+aGFzTGVuZ3RoID0ganNEaWN0aW9uYXJ5LmdldCgibGVu
Z3RoIiwgcmVzdWx0LT5sZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPiBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rp
b25hcnkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCkpOworICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rp
b25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBzdGQ6
Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcz4oKTsKIAotICAgIEpT
VmFsdWUgbW9kdWx1c0xlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2Jq
ZWN0KCksICJtb2R1bHVzTGVuZ3RoIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIEpTVmFsdWUgbW9kdWx1c0xlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1
ZS5nZXRPYmplY3QoKSwgIm1vZHVsdXNMZW5ndGgiKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IFdoeSBubyBF
bmZvcmNlUmFuZ2U/IEZpbGVkIGFzIDxodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hv
d19idWcuY2dpP2lkPTIzNzc5Pi4KLSAgICByZXN1bHQtPm1vZHVsdXNMZW5ndGggPSB0b1VJbnQz
MihleGVjLCBtb2R1bHVzTGVuZ3RoVmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICByZXN1bHQtPm1vZHVsdXNMZW5ndGggPSBjb252ZXJ0
PHVpbnQzMl90PihzdGF0ZSwgbW9kdWx1c0xlbmd0aFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdmFs
dWUuZ2V0T2JqZWN0KCksICJwdWJsaWNFeHBvbmVudCIpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBKU1ZhbHVlIHB1YmxpY0V4cG9uZW50VmFsdWUgPSBnZXRQcm9wZXJ0eSgm
c3RhdGUsIHZhbHVlLmdldE9iamVjdCgpLCAicHVibGljRXhwb25lbnQiKTsKKyAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRy
PFVpbnQ4QXJyYXk+IHB1YmxpY0V4cG9uZW50QXJyYXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhw
b25lbnRWYWx1ZSk7CiAgICAgaWYgKCFwdWJsaWNFeHBvbmVudEFycmF5KSB7Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBhIFVpbnQ4QXJyYXkgaW4gcHVibGljRXhwb25l
bnQiKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCAiRXhwZWN0ZWQgYSBVaW50OEFy
cmF5IGluIHB1YmxpY0V4cG9uZW50Iik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICByZXN1bHQtPnB1YmxpY0V4cG9uZW50LmFwcGVuZChwdWJsaWNFeHBvbmVudEFycmF5LT5k
YXRhKCksIHB1YmxpY0V4cG9uZW50QXJyYXktPmJ5dGVMZW5ndGgoKSk7CkBAIC0yNDcsNyArMjQ4
LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBj
cmVhdGVSc2FLZXlHZW5QYXJhbXMoRXhlY1N0YXQKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQp
OwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
IGNyZWF0ZVJzYUtleVBhcmFtc1dpdGhIYXNoKEV4ZWNTdGF0ZSosIEpTVmFsdWUpCitzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZVJzYUtleVBh
cmFtc1dpdGhIYXNoKEV4ZWNTdGF0ZSYsIEpTVmFsdWUpCiB7CiAgICAgLy8gV2ViQ3J5cHRvIFJT
QSBhbGdvcml0aG1zIGN1cnJlbnRseSBkbyBub3QgdGFrZSBhbnkgcGFyYW1ldGVycyB0byBpbXBv
cnRLZXkuCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUnNhS2V5
UGFyYW1zV2l0aEhhc2g+KCk7CkBAIC0yODcsMTggKzI4OCwxOCBAQCBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IGNyZWF0ZVJzYU9hZXBQYXJhbXMoRXhl
Y1N0YXRlKgogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLXN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlUnNhU3NhUGFyYW1zKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gY3JlYXRlUnNhU3NhUGFyYW1zKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBKU0RpY3Rpb25hcnkganNE
aWN0aW9uYXJ5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgpKTsKKyAgICBKU0RpY3Rpb25hcnkganNE
aWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0ID0g
c3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJhbXM+KCk7CiAKICAgICBp
ZiAoIWdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1
aXJlbWVudDo6UmVxdWlyZWQpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIApAQCAtMzk2LDcgKzM5Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNy
ZWF0ZVBhCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VSUik7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6UlNBU1NBX1BLQ1MxX3YxXzU6Ci0gICAgICAgIHJldHVybiBjcmVhdGVSc2FTc2FQYXJh
bXMoZXhlYywgdmFsdWUpOworICAgICAgICByZXR1cm4gY3JlYXRlUnNhU3NhUGFyYW1zKCpleGVj
LCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfUFNTOgog
ICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX09BRVA6CiAgICAgY2FzZSBD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RTQToKQEAgLTQxMCw3ICs0MTEsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1E
aWN0aW9uYXJ5OjpjcmVhdGVQYQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NV
UFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkhNQUM6Ci0gICAgICAgIHJldHVybiBjcmVhdGVIbWFjUGFyYW1z
KGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUhtYWNQYXJhbXMoKmV4ZWMsIHZh
bHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkRIOgogICAgIGNhc2Ug
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpTSEFfMjI0OgpAQCAtNDM0LDcgKzQzNSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBOT1RfU1VQUE9SVEVEX0VS
Uik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzU6Ci0gICAgICAgIHJldHVybiBjcmVhdGVSc2FTc2FQ
YXJhbXMoZXhlYywgdmFsdWUpOworICAgICAgICByZXR1cm4gY3JlYXRlUnNhU3NhUGFyYW1zKCpl
eGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfUFNT
OgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX09BRVA6CiAgICAgY2Fz
ZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RTQToKQEAgLTQ0OCw3ICs0NDksNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9U
X1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBjYXNlIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUM6Ci0gICAgICAgIHJldHVybiBjcmVhdGVIbWFjUGFy
YW1zKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUhtYWNQYXJhbXMoKmV4ZWMs
IHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkRIOgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzE6CiAgICAgY2FzZSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpTSEFfMjI0OgpAQCAtNTA3LDcgKzUwOCw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhCiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0Ff
UEtDUzFfdjFfNToKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQV9QU1M6
CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfT0FFUDoKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZVJzYUtleUdlblBhcmFtcyhleGVjLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biBjcmVhdGVSc2FLZXlHZW5QYXJhbXMoKmV4ZWMsIHZhbHVlKTsKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkVDRFNBOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6RUNESDoKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURf
RVJSKTsKQEAgLTUxOCw5ICs1MTksOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYQogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0dDTToKICAgICBjYXNlIENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkFFU19DRkI6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyOjpBRVNfS1c6Ci0gICAgICAgIHJldHVybiBjcmVhdGVBZXNLZXlHZW5QYXJhbXMoZXhl
YywgdmFsdWUpOworICAgICAgICByZXR1cm4gY3JlYXRlQWVzS2V5R2VuUGFyYW1zKCpleGVjLCB2
YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDOgotICAgICAg
ICByZXR1cm4gY3JlYXRlSG1hY0tleVBhcmFtcyhleGVjLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biBjcmVhdGVIbWFjS2V5UGFyYW1zKCpleGVjLCB2YWx1ZSk7CiAgICAgY2FzZSBDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpESDoKICAgICBjYXNlIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlNIQV8xOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzIyNDoKQEAg
LTYwOCw3ICs2MDksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYQogICAgIGNhc2UgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzU6CiAgICAgY2FzZSBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpSU0FfUFNTOgogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6UlNBX09BRVA6Ci0gICAgICAgIHJldHVybiBjcmVhdGVSc2FLZXlQYXJhbXNXaXRo
SGFzaChleGVjLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVSc2FLZXlQYXJhbXNXaXRo
SGFzaCgqZXhlYywgdmFsdWUpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
RUNEU0E6CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpFQ0RIOgogICAgIGNh
c2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NUUjoKQEAgLTYxOSw3ICs2MjAsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYQogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6QUVTX0tXOgogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPigpOwogICAgIGNhc2UgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
SE1BQzoKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUhtYWNQYXJhbXMoZXhlYywgdmFsdWUpOworICAg
ICAgICByZXR1cm4gY3JlYXRlSG1hY1BhcmFtcygqZXhlYywgdmFsdWUpOwogICAgIGNhc2UgQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6REg6CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgY2FzZSBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpTSEFfMToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCmluZGV4IDQ3ZWM0M2IzMjhlODIyM2E5ZWFiZDkwMTI3MDM2ZWU0YzkyODkyZGYu
LjQ5ZTgxMjg5ZWM2NmY4YjdkZmI1MzIwNDAyYjVmNGM1MzhhMTY0OTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApAQCAtMzY2LDE1ICszNjYsMTUgQEAg
c3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwg
ZG91YmxlIG1heCkKICAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1i
ZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBT
dHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJl
clRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOwogfQogCi1zdGF0aWMgZG91YmxlIGVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11bSwgZG91Ymxl
IG1heGltdW0pCitzdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBk
b3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQogewogICAgIGlmIChzdGQ6
OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgcmFuZ2VFcnJvclN0cmluZyh4LCBt
aW5pbXVtLCBtYXhpbXVtKSkpOworICAgICAgICBzdGF0ZS52bSgpLnRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgY3JlYXRlVHlwZUVycm9yKCZzdGF0ZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVt
LCBtYXhpbXVtKSkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgeCA9IHRydW5jKHgp
OwogICAgIGlmICh4IDwgbWluaW11bSB8fCB4ID4gbWF4aW11bSkgewotICAgICAgICBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCByYW5nZUVycm9y
U3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKSk7CisgICAgICAgIHN0YXRlLnZtKCkudGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBjcmVhdGVUeXBlRXJyb3IoJnN0YXRlLCByYW5nZUVycm9yU3RyaW5n
KHgsIG1pbmltdW0sIG1heGltdW0pKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBy
ZXR1cm4geDsKQEAgLTQxMSw4ICs0MTEsMTAgQEAgc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2
X3Q+IHsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUIHRvU21h
bGxlckludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorc3RhdGljIGlubGluZSBUIHRvU21hbGxlcklu
dChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2ln
bmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5
IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCiAgICAgdHlwZWRlZiBJbnRU
eXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwogICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUg
aXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCiAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewpAQCAtNDIzLDcgKzQyNSw3IEBAIHN0YXRpYyBpbmxp
bmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvCiAgICAgICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlKTsKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIENsYW1wOgogICAgICAgICAgICAgcmV0dXJu
IGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWluVmFsdWUgOiBMaW1p
dHNUcmFpdDo6bWF4VmFsdWU7CkBAIC00MzIsMTUgKzQzNCwxNSBAQCBzdGF0aWMgaW5saW5lIFQg
dG9TbWFsbGVySW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25DbwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0Ojpt
YXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKICAgICB9CiAK
LSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CiAgICAgY2FzZSBOb3JtYWxD
b252ZXJzaW9uOgogICAgICAgICBicmVhazsKICAgICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAg
ICAgcmV0dXJuIGVuZm9yY2VSYW5nZShleGVjLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExp
bWl0c1RyYWl0OjptYXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKICAgICBj
YXNlIENsYW1wOgogICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+
KHgpOwogICAgIH0KQEAgLTQ1NSw4ICs0NTcsMTAgQEAgc3RhdGljIGlubGluZSBUIHRvU21hbGxl
ckludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ28K
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUlu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQorc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCiB7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVk
PFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJl
IHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKICAgICB0eXBlZGVmIEludFR5
cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7CiAgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBp
cyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgog
ICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7CkBAIC00NjcsMjIgKzQ3MSwyMiBAQCBzdGF0aWMg
aW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQwogICAgICAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CiAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CiAgICAgICAgIGNhc2UgRW5mb3JjZVJhbmdl
OgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgQ2xh
bXA6CiAgICAgICAgICAgICByZXR1cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewogICAgIGNh
c2UgTm9ybWFsQ29udmVyc2lvbjoKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2UoZXhlYywgeCwgMCwgTGltaXRzVHJhaXQ6
Om1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGlt
aXRzVHJhaXQ6Om1heFZhbHVlKTsKICAgICBjYXNlIENsYW1wOgogICAgICAgICByZXR1cm4gc3Rk
Ojppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwogICAgIH0KQEAgLTQ5NCw5NCArNDk4LDE0
NCBAQCBzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihm
bW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOwogfQogCitpbnQ4X3QgdG9JbnQ4
RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2Up
OworfQorCit1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0
YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKTsKK30KKworaW50OF90IHRvSW50OENsYW1wKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVy
SW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBDbGFtcCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENs
YW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIENsYW1wKTsKK30KKwogLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1ieXRlCi1pbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCitpbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KGV4ZWMsIHZhbHVlLCBjb25m
aWd1cmF0aW9uKTsKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKIH0KIAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1vY3RldAotdWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit1aW50OF90
IHRvVUludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwor
fQorCitpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1
ZSwgRW5mb3JjZVJhbmdlKTsKK30KKwordWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUlu
dDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpOworfQorCitpbnQxNl90IHRv
SW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KGV4ZWMsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAg
ICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgQ2xhbXApOworfQor
Cit1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgQ2xh
bXApOwogfQogCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQx
Nl90IHRvSW50MTYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK2ludDE2X3QgdG9JbnQxNihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50
MTZfdD4oZXhlYywgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIHJldHVybiB0b1NtYWxsZXJJ
bnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKIH0KIAogLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAotdWludDE2X3QgdG9V
SW50MTYoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3VpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2
X3Q+KGV4ZWMsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICByZXR1cm4gdG9TbWFsbGVyVUlu
dDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKIH0KIAogLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNl
UmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoraW50MzJfdCB0b0ludDMyRW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKIAotICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShleGVjLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7
CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIp
OwogfQogCi1pbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCitpbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc0lu
dDMyKCk7CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKICAgICByZXR1cm4gc3RkOjppc25hbih4
KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOwogfQogCi11aW50MzJfdCB0b1VJbnQzMkNsYW1w
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNVSW50
MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CiAKLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCi0gICAgICAgIHJldHVybiAwOworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90
Pih4KTsKIH0KIAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1s
b25nCi11aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCit1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQogICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKIAotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5n
ZShleGVjLCB4LCAwLCBrTWF4VUludDMyKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCAwLCBrTWF4VUludDMyKTsKIH0KIAotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoraW50
NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUu
YXNJbnQzMigpOworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50
ZWdlcik7Cit9CiAKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOworfQogCi0gICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShleGVjLCB4
LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpt
aW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50
ZWdlcikpOwotICAgIH0KK2ludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4o
c3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pT
TWF4SW50ZWdlcikpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50
ZWdlcikpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9u
ZworaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwogCiAgICAgLy8gTWFwIE5hTnMg
YW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4K
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKQEAgLTU5MCwyMyArNjQ0LDkgQEAgaW50NjRfdCB0
b0ludDY0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGMKIH0KIAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11
bnNpZ25lZC1sb25nLWxvbmcKLXVpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Cit1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIo
KTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJh
bmdlKGV4ZWMsIHgsIDAsIGtKU01heEludGVnZXIpOwotICAgIGNhc2UgQ2xhbXA6Ci0gICAgICAg
IHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1p
bjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLSAgICB9
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwogCiAgICAgLy8gTWFwIE5h
TnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42
NC4KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgKaW5kZXggZDIyZmFjYjg3Nzc5ZmZhNThiYmM4NjBiNjJkNzVlNGRjYzUw
ZGYyZi4uZjg3NjU0YjE1ZTljMzMzYTA1YjdmNjJlNzMwNmY2NWVjNTI2NGNmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKQEAgLTIxMSwyMyArMjExLDMwIEBA
IGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwg
Ym9vbCYgb2theSk7CiAKIGVudW0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9y
bWFsQ29udmVyc2lvbiwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OwogCi1XRUJDT1JFX0VYUE9SVCBp
bnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJD
bGFtcChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50
MzJfdCB0b1VJbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKLQotV0VC
Q09SRV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3Qg
dG9VSW50OChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uKTsKLQotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwot
V0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTYoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci0KLWludDMyX3QgdG9JbnQz
MihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uKTsKLXVpbnQzMl90IHRvVUludDMyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ2
NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbik7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
KTsKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4RW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGlu
dDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZv
cmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
dWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0
RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9F
WFBPUlQgaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1wKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2
Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50
MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09S
RV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NENsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90
IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1
aW50OF90IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dF
QkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAKIC8vIFJldHVybnMgYSBEYXRlIGluc3RhbmNlIGZvciB0
aGUgc3BlY2lmaWVkIHZhbHVlLCBvciBOYU4gaWYgdGhlIGRhdGUgaXMgbm90IGEgbnVtYmVyLgog
SlNDOjpKU1ZhbHVlIGpzRGF0ZU9yTmFOKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlKTsKQEAgLTQ4
MSwzOCArNDg4LDYgQEAgaW5saW5lIGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29sJgogICAgIHJldHVybiBKU0M6OnRv
SW50MzIobnVtYmVyKTsKIH0KIAotLyoKLSAgICBDb252ZXJ0IGEgdmFsdWUgdG8gYW4gaW50ZWdl
ciBhcyBwZXIgPGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8+LgotICAgIFRoZSBjb252ZXJz
aW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9y
LAotICAgIGlmIEVuZm9yY2VSYW5nZSBpcyBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBpcyBvdXRzaWRl
IHRoZSByYW5nZSBvZiB0aGUKLSAgICBkZXN0aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCi0qLwotaW5s
aW5lIGludDMyX3QgdG9JbnQzMihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gdG9J
bnQzMkVuZm9yY2VSYW5nZShleGVjLCB2YWx1ZSk7Ci0gICAgY2FzZSBDbGFtcDoKLSAgICAgICAg
cmV0dXJuIHRvSW50MzJDbGFtcChleGVjLCB2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1
ZS50b0ludDMyKGV4ZWMpOwotfQotCi1pbmxpbmUgdWludDMyX3QgdG9VSW50MzIoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVuZm9y
Y2VSYW5nZToKLSAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKGV4ZWMsIHZhbHVl
KTsKLSAgICBjYXNlIENsYW1wOgotICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChleGVjLCB2
YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMihleGVjKTsKLX0KLQogLy8g
VmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBz
ZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCiBpbmxpbmUgSlNDOjpKU09iamVjdCog
dG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkJiBsZW5ndGgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dC5oCmluZGV4IGNiNzYyZDY5NTdiYTNiZmE5OWYwNDA5ZTVkZDBhNTU3YWRhZTVkOGQuLjI0OWI0
NjI5ZTFlZTE5Nzg3ODgwMGNiN2Y2MzljNzEwYTkwMDRjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCkBAIC0zNCw2ICszNCw3IEBAIGVudW0gY2xhc3MgU2hv
dWxkQWxsb3dOb25GaW5pdGUgeyBObywgWWVzIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFNob3VsZEFsbG93
Tm9uRmluaXRlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gT3B0aW9uYWw8VD4gY29udmVydE9wdGlvbmFsKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IFQg
Y29udmVydE9wdGlvbmFsKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBVJiYgZGVmYXVs
dFZhbHVlKTsKQEAgLTczLDQgKzc0LDExNCBAQCB0ZW1wbGF0ZTw+IGlubGluZSBWZWN0b3I8U3Ry
aW5nPiBjb252ZXJ0PFZlY3RvcjxTdHJpbmc+PihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsCiAgICAg
cmV0dXJuIHRvTmF0aXZlQXJyYXk8U3RyaW5nPigmc3RhdGUsIHZhbHVlKTsKIH0KIAordGVtcGxh
dGU8PiBpbmxpbmUgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgTm9ybWFsQ29udmVy
c2lvbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJl
dHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICBjYXNlIENsYW1wOgor
ICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0
dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB1aW50OF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRv
VUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gdG9VSW50OChzdGF0
ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
eworICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBF
bmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworfQor
Cit0ZW1wbGF0ZTw+IGlubGluZSB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIE5v
cm1hbENvbnZlcnNpb246CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW5mb3JjZVJhbmdlOgor
ICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICBj
YXNlIENsYW1wOgorICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KKyAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKIH0KKwordGVtcGxhdGU8
PiBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikK
K3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIE5vcm1hbENvbnZlcnNp
b246CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1
cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgIGNhc2UgQ2xhbXA6Cisg
ICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0
dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgdWludDMy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBOb3JtYWxDb252ZXJzaW9uOgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJuIHRvVUludDMyRW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgcmV0dXJu
IHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlLnRv
VUludDMyKCZzdGF0ZSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGludDY0X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgIGNhc2UgTm9ybWFsQ29udmVyc2lvbjoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7CisgICAgY2FzZSBDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRvSW50NjRD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFs
dWUpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICBjYXNlIE5vcm1hbENvbnZlcnNpb246CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICBjYXNlIENsYW1wOgorICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChz
dGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5j
cHAKaW5kZXggZGVhYmM1NDFkYjA2ZjEwOWU0ZDBiZmM2YzcxOTQwOWI1MTg5YjlmZC4uYTU0NWJm
MTE5MTZiZjg3MTdmNzVjNWMzYzc2MmY3NDNlZGYyNGM1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGlu
Z3NDdXN0b20uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKENPTlRFTlRfRklMVEVS
SU5HKQogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
LmgiCiAjaW5jbHVkZSAiTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncy5oIgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwpAQCAtNTcsNyArNTgsNyBAQCBKU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJT
ZXR0aW5nczo6ZGVjaXNpb25Qb2ludChFeGVjU3RhdGUmKSBjb25zdAogCiB2b2lkIEpTTW9ja0Nv
bnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb25Qb2ludChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewotICAgIHVpbnQ4X3QgbmF0aXZlVmFsdWUgeyB0b1VJbnQ4KCZzdGF0
ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKKyAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29u
dmVydDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTAsNyArOTEsNyBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUgdG9KU1ZhbHVlKERlY2lzaW9uIGRlY2lzaW9uKQogCiBzdGF0
aWMgaW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgdG9VSW50OCgmc3RhdGUsIHZhbHVl
LCBFbmZvcmNlUmFuZ2UpIH07CisgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWlu
dDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07CiAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gRGVjaXNpb246OkFsbG93OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAppbmRleCBiZjUz
OTYzNzZmOGYyNWRkNmFlODI1YjlhMDAyMThmODZiY2RhNWVlLi4wMWI1MzYzZjE1MGNlZWFmNTQ0
NTZjYzFhYzhlMjIwODY2ODIyYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJK
U05vZGVGaWx0ZXIuaCIKIAogI2luY2x1ZGUgIkpTQ2FsbGJhY2tEYXRhLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRl
ci5oIgogCkBAIC00MywyMyArNDQsMjMgQEAgdWludDE2X3QgSlNOb2RlRmlsdGVyOjphY2NlcHRO
b2RlKE5vZGUqIG5vZGUpCiAKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9i
amVjdCgpLT52bSgpKTsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
Ci0gICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBub2Rl
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGFyZ3MuYXBwZW5kKHRvSlMo
c3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKKyAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsK
IAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0dXJuZWRFeGNlcHRpb247Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNh
bGxiYWNrVHlwZTo6RnVuY3Rpb25Pck9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAiYWNjZXB0Tm9kZSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlw
ZTo6RnVuY3Rpb25Pck9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImFjY2Vw
dE5vZGUiKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikg
ewogICAgICAgICAvLyBSZXRocm93IGV4Y2VwdGlvbi4KLSAgICAgICAgZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgICAgIHN0YXRlLT52bSgp
LnRocm93RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAKICAgICAgICAgcmV0
dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAgICAgfQogCi0gICAgdWludDE2X3QgcmVz
dWx0ID0gdG9VSW50MTYoZXhlYywgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB1aW50MTZfdCByZXN1bHQgPSBjb252ZXJ0PHVpbnQx
Nl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsK
IAogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3IucG0KaW5kZXggMGQ1YTlmYTI5MmViYmMwZWQzOGQ0NmZjYmFiODNj
YzMxOGNhZGE3Ny4uMTI5MmMxN2FjZTZmNjZjNmVmMzU2NWExYTM0OTRiMGFmMjBlMTg3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQpA
QCAtNDQsMTggKzQ0LDEyIEBAIG15ICRjb2RlR2VuZXJhdG9yID0gMDsKIAogbXkgJHZlcmJvc2Ug
PSAwOwogCi1teSAlbnVtZXJpY1R5cGVIYXNoID0gKAorbXkgJWludGVnZXJUeXBlSGFzaCA9ICgK
ICAgICAiYnl0ZSIgPT4gMSwKLSAgICAiZG91YmxlIiA9PiAxLAotICAgICJmbG9hdCIgPT4gMSwK
LSAgICAiaW50IiA9PiAxLAogICAgICJsb25nIGxvbmciID0+IDEsCiAgICAgImxvbmciID0+IDEs
CiAgICAgIm9jdGV0IiA9PiAxLAogICAgICJzaG9ydCIgPT4gMSwKLSAgICAidW5yZXN0cmljdGVk
IGRvdWJsZSIgPT4gMSwKLSAgICAidW5yZXN0cmljdGVkIGZsb2F0IiA9PiAxLAotICAgICJ1bnNp
Z25lZCBpbnQiID0+IDEsCiAgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIgPT4gMSwKICAgICAidW5z
aWduZWQgbG9uZyIgPT4gMSwKICAgICAidW5zaWduZWQgc2hvcnQiID0+IDEsCkBAIC0zNTcsMjcg
KzM1MSwzNSBAQCBzdWIgSXNDb25zdHJ1Y3RvclRlbXBsYXRlCiAKIHN1YiBJc051bWVyaWNUeXBl
CiB7Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAg
bXkgKCRvYmplY3QsICR0eXBlKSA9IEBfOworCisgICAgcmV0dXJuIDEgaWYgJGludGVnZXJUeXBl
SGFzaHskdHlwZX07CisgICAgcmV0dXJuIDEgaWYgJGZsb2F0aW5nUG9pbnRUeXBlSGFzaHskdHlw
ZX07CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICByZXR1cm4gMSBpZiAkbnVtZXJpY1R5cGVIYXNo
eyR0eXBlfTsKK3N1YiBJc0ludGVnZXJUeXBlCit7CisgICAgbXkgKCRvYmplY3QsICR0eXBlKSA9
IEBfOworCisgICAgcmV0dXJuIDEgaWYgJGludGVnZXJUeXBlSGFzaHskdHlwZX07CiAgICAgcmV0
dXJuIDA7CiB9CiAKIHN1YiBJc0Zsb2F0aW5nUG9pbnRUeXBlCiB7CiAgICAgbXkgKCRvYmplY3Qs
ICR0eXBlKSA9IEBfOworCiAgICAgcmV0dXJuIDEgaWYgJGZsb2F0aW5nUG9pbnRUeXBlSGFzaHsk
dHlwZX07CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN1YiBJc1ByaW1pdGl2ZVR5cGUKIHsKLSAgICBt
eSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAoJG9iamVj
dCwgJHR5cGUpID0gQF87CiAKICAgICByZXR1cm4gMSBpZiAkcHJpbWl0aXZlVHlwZUhhc2h7JHR5
cGV9OwotICAgIHJldHVybiAxIGlmICRudW1lcmljVHlwZUhhc2h7JHR5cGV9OworICAgIHJldHVy
biAxIGlmICRvYmplY3QtPklzTnVtZXJpY1R5cGUoJHR5cGUpOwogICAgIHJldHVybiAwOwogfQog
CkBAIC00MTcsMTAgKzQxOSwxMCBAQCBzdWIgSXNEaWN0aW9uYXJ5VHlwZQogCiBzdWIgSXNOb25Q
b2ludGVyVHlwZQogewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkdHlwZSA9IHNo
aWZ0OworICAgIG15ICgkb2JqZWN0LCAkdHlwZSkgPSBAXzsKIAotICAgIHJldHVybiAxIGlmICRu
b25Qb2ludGVyVHlwZUhhc2h7JHR5cGV9IG9yICRwcmltaXRpdmVUeXBlSGFzaHskdHlwZX0gb3Ig
JG51bWVyaWNUeXBlSGFzaHskdHlwZX07CisgICAgcmV0dXJuIDEgaWYgJG5vblBvaW50ZXJUeXBl
SGFzaHskdHlwZX07CisgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNQcmltaXRpdmVUeXBlKCR0
eXBlKTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBkMGEzNTI1MTEyOWE2N2FjYWNiZmQ0
YTAxNDhkZGQ0MmE1YTAyZDFhLi5lZDkzYjdlNzgxYjk0NTE2MmJjNTVjMWFlODViM2Q5OTY0ZjZm
N2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQpAQCAtNDI1NiwxNCArNDI1NiwxNCBAQCBteSAlbmF0aXZlVHlwZSA9ICgKICAg
ICAiYnl0ZSIgPT4gImludDhfdCIsCiAgICAgImRvdWJsZSIgPT4gImRvdWJsZSIsCiAgICAgImZs
b2F0IiA9PiAiZmxvYXQiLAotICAgICJsb25nIGxvbmciID0+ICJsb25nIGxvbmciLAotICAgICJs
b25nIiA9PiAiaW50IiwKKyAgICAibG9uZyBsb25nIiA9PiAiaW50NjRfdCIsCisgICAgImxvbmci
ID0+ICJpbnQzMl90IiwKICAgICAib2N0ZXQiID0+ICJ1aW50OF90IiwKICAgICAic2hvcnQiID0+
ICJpbnQxNl90IiwKICAgICAidW5yZXN0cmljdGVkIGRvdWJsZSIgPT4gImRvdWJsZSIsCiAgICAg
InVucmVzdHJpY3RlZCBmbG9hdCIgPT4gImZsb2F0IiwKLSAgICAidW5zaWduZWQgbG9uZyBsb25n
IiA9PiAidW5zaWduZWQgbG9uZyBsb25nIiwKLSAgICAidW5zaWduZWQgbG9uZyIgPT4gInVuc2ln
bmVkIiwKKyAgICAidW5zaWduZWQgbG9uZyBsb25nIiA9PiAidWludDY0X3QiLAorICAgICJ1bnNp
Z25lZCBsb25nIiA9PiAidWludDMyX3QiLAogICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gInVpbnQx
Nl90IiwKICk7CiAKQEAgLTQzNjQsMTYgKzQzNjQsMTQgQEAgc3ViIElzTmF0aXZlVHlwZQogICAg
IHJldHVybiBleGlzdHMgJG5hdGl2ZVR5cGV7JHR5cGV9OwogfQogCi1teSAlaW50ZWdlckNvbnZl
cnNpb25GdW5jdGlvbiA9ICgKLSAgICAiYnl0ZSIgPT4gInRvSW50OCIsCi0gICAgImxvbmcgbG9u
ZyIgPT4gInRvSW50NjQiLAotICAgICJsb25nIiA9PiAidG9JbnQzMiIsCi0gICAgIm9jdGV0IiA9
PiAidG9VSW50OCIsCi0gICAgInNob3J0IiA9PiAidG9JbnQxNiIsCi0gICAgInVuc2lnbmVkIGxv
bmcgbG9uZyIgPT4gInRvVUludDY0IiwKLSAgICAidW5zaWduZWQgbG9uZyIgPT4gInRvVUludDMy
IiwKLSAgICAidW5zaWduZWQgc2hvcnQiID0+ICJ0b1VJbnQxNiIsCi0pOworc3ViIEdldEludGVn
ZXJDb252ZXJzaW9uVHlwZQoreworICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKworICAgIHJl
dHVybiAiRW5mb3JjZVJhbmdlIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
RW5mb3JjZVJhbmdlIn07CisgICAgcmV0dXJuICJDbGFtcCIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNsYW1wIn07CisgICAgcmV0dXJuICJOb3JtYWxDb252ZXJzaW9uIjsK
K30KIAogIyBSZXR1cm5zIChjb252ZXJ0U3RyaW5nLCBtYXlUaHJvd0V4Y2VwdGlvbikuCiBzdWIg
SlNWYWx1ZVRvTmF0aXZlCkBAIC00MzgyLDEyICs0MzgwLDExIEBAIHN1YiBKU1ZhbHVlVG9OYXRp
dmUKIAogICAgIG15ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKIAotICAgIG15ICRmdW5jdGlv
biA9ICRpbnRlZ2VyQ29udmVyc2lvbkZ1bmN0aW9ueyR0eXBlfTsKLSAgICBpZiAoJGZ1bmN0aW9u
KSB7Ci0gICAgICAgIG15ICRjb252ZXJzaW9uVHlwZSA9ICJOb3JtYWxDb252ZXJzaW9uIjsKLSAg
ICAgICAgJGNvbnZlcnNpb25UeXBlID0gIkVuZm9yY2VSYW5nZSIgaWYgJHNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkVuZm9yY2VSYW5nZSJ9OwotICAgICAgICAkY29udmVyc2lvblR5
cGUgPSAiQ2xhbXAiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDbGFtcCJ9
OwotICAgICAgICByZXR1cm4gKCIkZnVuY3Rpb24oc3RhdGUsICR2YWx1ZSwgJGNvbnZlcnNpb25U
eXBlKSIsIDEpOworICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNJbnRlZ2VyVHlwZSgkdHlwZSkp
IHsKKyAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZhY2UsICR0
eXBlKTsKKyAgICAgICAgbXkgJGNvbnZlcnNpb25UeXBlID0gR2V0SW50ZWdlckNvbnZlcnNpb25U
eXBlKCRzaWduYXR1cmUpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0
LmgiKTsKKyAgICAgICAgcmV0dXJuICgiY29udmVydDwkbmF0aXZlVHlwZT4oKnN0YXRlLCAkdmFs
dWUsICRjb252ZXJzaW9uVHlwZSkiLCAxKTsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIkRP
TVN0cmluZyIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
SURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIu
cG0KaW5kZXggNTU3MGZmYzAyZmJiZWVhMTMzNzk5ZDA4NjJiNTYzNmYyYjBiMWQ2Yi4uMjU0N2Q4
YjBjZWJkMjMwZjNiNDZkZmJlMmMzMjI3N2Q1MmM2ZmY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTM0MiwyNyArMzQyLDI3IEBAIHN1YiBp
ZGVudGlmaWVyUmVtb3ZlTnVsbGFibGVQcmVmaXgKIG15ICRuZXh0QXR0cmlidXRlXzEgPSAnXihh
dHRyaWJ1dGV8aW5oZXJpdHxyZWFkb25seSkkJzsKIG15ICRuZXh0UHJpbWl0aXZlVHlwZV8xID0g
J14oaW50fGxvbmd8c2hvcnR8dW5zaWduZWQpJCc7CiBteSAkbmV4dFByaW1pdGl2ZVR5cGVfMiA9
ICdeKGRvdWJsZXxmbG9hdHx1bnJlc3RyaWN0ZWQpJCc7Ci1teSAkbmV4dEFyZ3VtZW50TGlzdF8x
ID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxcW3xhbnl8Ym9vbGVhbnxieXRl
fGRvdWJsZXxmbG9hdHxpbnxpbnR8bG9uZ3xvYmplY3R8b2N0ZXR8b3B0aW9uYWx8c2VxdWVuY2V8
c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwotbXkgJG5leHROb25BbnlUeXBlXzEgPSAn
Xihib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGludHxsb25nfG9jdGV0fHNob3J0fHVucmVzdHJp
Y3RlZHx1bnNpZ25lZCkkJzsKLW15ICRuZXh0SW50ZXJmYWNlTWVtYmVyXzEgPSAnXihcKHw6OnxC
eXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFueXxhdHRyaWJ1dGV8Ym9vbGVhbnxieXRlfGNyZWF0
b3J8ZGVsZXRlcnxkb3VibGV8ZmxvYXR8Z2V0dGVyfGluaGVyaXR8aW50fGxlZ2FjeWNhbGxlcnxs
b25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9y
dHxzdGF0aWN8c3RyaW5naWZpZXJ8dW5yZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7CitteSAk
bmV4dEFyZ3VtZW50TGlzdF8xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxc
W3xhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxpbnxsb25nfG9iamVjdHxvY3RldHxvcHRp
b25hbHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dE5v
bkFueVR5cGVfMSA9ICdeKGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8bG9uZ3xvY3RldHxzaG9y
dHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dEludGVyZmFjZU1lbWJlcl8xID0g
J14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8YXR0cmlidXRlfGJvb2xlYW58
Ynl0ZXxjcmVhdG9yfGRlbGV0ZXJ8ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhlcml0fGxlZ2FjeWNh
bGxlcnxsb25nfG9iamVjdHxvY3RldHxyZWFkb25seXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRl
cnxzaG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8dW5yZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7
CiBteSAkbmV4dEF0dHJpYnV0ZU9yT3BlcmF0aW9uXzEgPSAnXihzdGF0aWN8c3RyaW5naWZpZXIp
JCc7Ci1teSAkbmV4dEF0dHJpYnV0ZU9yT3BlcmF0aW9uXzIgPSAnXihcKHw6OnxCeXRlU3RyaW5n
fERPTVN0cmluZ3xEYXRlfGFueXxib29sZWFufGJ5dGV8Y3JlYXRvcnxkZWxldGVyfGRvdWJsZXxm
bG9hdHxnZXR0ZXJ8aW50fGxlZ2FjeWNhbGxlcnxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxz
ZXR0ZXJ8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7CitteSAkbmV4dEF0dHJp
YnV0ZU9yT3BlcmF0aW9uXzIgPSAnXihcKHw6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFu
eXxib29sZWFufGJ5dGV8Y3JlYXRvcnxkZWxldGVyfGRvdWJsZXxmbG9hdHxnZXR0ZXJ8bGVnYWN5
Y2FsbGVyfGxvbmd8b2JqZWN0fG9jdGV0fHNlcXVlbmNlfHNldHRlcnxzaG9ydHx1bnJlc3RyaWN0
ZWR8dW5zaWduZWR8dm9pZCkkJzsKIG15ICRuZXh0VW5yZXN0cmljdGVkRmxvYXRUeXBlXzEgPSAn
Xihkb3VibGV8ZmxvYXQpJCc7CiBteSAkbmV4dEV4dGVuZGVkQXR0cmlidXRlUmVzdDNfMSA9ICde
KFwsfDo6fFxdKSQnOwotbXkgJG5leHRFeGNlcHRpb25GaWVsZF8xID0gJ14oXCh8Ojp8Qnl0ZVN0
cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxpbnR8bG9u
Z3xvYmplY3R8b2N0ZXR8c2VxdWVuY2V8c2hvcnR8dW5yZXN0cmljdGVkfHVuc2lnbmVkKSQnOwot
bXkgJG5leHRUeXBlXzEgPSAnXig6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFueXxib29s
ZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGludHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9y
dHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CitteSAkbmV4dEV4Y2VwdGlvbkZpZWxkXzEgPSAn
XihcKHw6OnxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFueXxib29sZWFufGJ5dGV8ZG91Ymxl
fGZsb2F0fGxvbmd8b2JqZWN0fG9jdGV0fHNlcXVlbmNlfHNob3J0fHVucmVzdHJpY3RlZHx1bnNp
Z25lZCkkJzsKK215ICRuZXh0VHlwZV8xID0gJ14oOjp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0
ZXxhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5j
ZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dFNwZWNpYWxzXzEgPSAn
XihjcmVhdG9yfGRlbGV0ZXJ8Z2V0dGVyfGxlZ2FjeWNhbGxlcnxzZXR0ZXIpJCc7CiBteSAkbmV4
dERlZmluaXRpb25zXzEgPSAnXig6OnxjYWxsYmFja3xkaWN0aW9uYXJ5fGVudW18ZXhjZXB0aW9u
fGludGVyZmFjZXxwYXJ0aWFsfHR5cGVkZWYpJCc7Ci1teSAkbmV4dEV4Y2VwdGlvbk1lbWJlcnNf
MSA9ICdeKFwofDo6fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8XFt8YW55fGJvb2xlYW58Ynl0
ZXxjb25zdHxkb3VibGV8ZmxvYXR8aW50fGxvbmd8b2JqZWN0fG9jdGV0fG9wdGlvbmFsfHNlcXVl
bmNlfHNob3J0fHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKK215ICRuZXh0RXhjZXB0aW9uTWVt
YmVyc18xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxcW3xhbnl8Ym9vbGVh
bnxieXRlfGNvbnN0fGRvdWJsZXxmbG9hdHxsb25nfG9iamVjdHxvY3RldHxvcHRpb25hbHxzZXF1
ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBteSAkbmV4dEF0dHJpYnV0ZVJl
c3RfMSA9ICdeKGF0dHJpYnV0ZXxyZWFkb25seSkkJzsKLW15ICRuZXh0SW50ZXJmYWNlTWVtYmVy
c18xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8YXR0cmlidXRlfGJv
b2xlYW58Ynl0ZXxjb25zdHxjcmVhdG9yfGRlbGV0ZXJ8ZG91YmxlfGZsb2F0fGdldHRlcnxpbmhl
cml0fGludHxsZWdhY3ljYWxsZXJ8bG9uZ3xvYmplY3R8b2N0ZXR8cmVhZG9ubHl8c2VxdWVuY2V8
c2VyaWFsaXplcnxzZXR0ZXJ8c2hvcnR8c3RhdGljfHN0cmluZ2lmaWVyfHVucmVzdHJpY3RlZHx1
bnNpZ25lZHx2b2lkKSQnOwotbXkgJG5leHRTaW5nbGVUeXBlXzEgPSAnXig6OnxCeXRlU3RyaW5n
fERPTVN0cmluZ3xEYXRlfGJvb2xlYW58Ynl0ZXxkb3VibGV8ZmxvYXR8aW50fGxvbmd8b2JqZWN0
fG9jdGV0fHNlcXVlbmNlfHNob3J0fHVucmVzdHJpY3RlZHx1bnNpZ25lZCkkJzsKK215ICRuZXh0
SW50ZXJmYWNlTWVtYmVyc18xID0gJ14oXCh8Ojp8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxh
bnl8YXR0cmlidXRlfGJvb2xlYW58Ynl0ZXxjb25zdHxjcmVhdG9yfGRlbGV0ZXJ8ZG91YmxlfGZs
b2F0fGdldHRlcnxpbmhlcml0fGxlZ2FjeWNhbGxlcnxsb25nfG9iamVjdHxvY3RldHxyZWFkb25s
eXxzZXF1ZW5jZXxzZXJpYWxpemVyfHNldHRlcnxzaG9ydHxzdGF0aWN8c3RyaW5naWZpZXJ8dW5y
ZXN0cmljdGVkfHVuc2lnbmVkfHZvaWQpJCc7CitteSAkbmV4dFNpbmdsZVR5cGVfMSA9ICdeKDo6
fEJ5dGVTdHJpbmd8RE9NU3RyaW5nfERhdGV8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25n
fG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWQpJCc7CiBt
eSAkbmV4dEFyZ3VtZW50TmFtZV8xID0gJ14oYXR0cmlidXRlfGNhbGxiYWNrfGNvbnN0fGNyZWF0
b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5fGVudW18ZXhjZXB0aW9ufGdldHRlcnxpbXBsZW1lbnRzfGlu
aGVyaXR8aW50ZXJmYWNlfGxlZ2FjeWNhbGxlcnxwYXJ0aWFsfHNlcmlhbGl6ZXJ8c2V0dGVyfHN0
YXRpY3xzdHJpbmdpZmllcnx0eXBlZGVmfHVucmVzdHJpY3RlZCkkJzsKIG15ICRuZXh0Q29uc3RW
YWx1ZV8xID0gJ14oZmFsc2V8dHJ1ZSkkJzsKIG15ICRuZXh0Q29uc3RWYWx1ZV8yID0gJ14oLXxJ
bmZpbml0eXxOYU4pJCc7CiBteSAkbmV4dERlZmluaXRpb25fMSA9ICdeKGNhbGxiYWNrfGludGVy
ZmFjZSkkJzsKLW15ICRuZXh0QXR0cmlidXRlT3JPcGVyYXRpb25SZXN0XzEgPSAnXihcKHw6OnxC
eXRlU3RyaW5nfERPTVN0cmluZ3xEYXRlfGFueXxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGlu
dHxsb25nfG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWR8
dm9pZCkkJzsKLW15ICRuZXh0VW5zaWduZWRJbnRlZ2VyVHlwZV8xID0gJ14oaW50fGxvbmd8c2hv
cnQpJCc7CitteSAkbmV4dEF0dHJpYnV0ZU9yT3BlcmF0aW9uUmVzdF8xID0gJ14oXCh8Ojp8Qnl0
ZVN0cmluZ3xET01TdHJpbmd8RGF0ZXxhbnl8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxsb25n
fG9iamVjdHxvY3RldHxzZXF1ZW5jZXxzaG9ydHx1bnJlc3RyaWN0ZWR8dW5zaWduZWR8dm9pZCkk
JzsKK215ICRuZXh0VW5zaWduZWRJbnRlZ2VyVHlwZV8xID0gJ14obG9uZ3xzaG9ydCkkJzsKIG15
ICRuZXh0RGVmYXVsdFZhbHVlXzEgPSAnXigtfEluZmluaXR5fE5hTnxmYWxzZXxudWxsfHRydWUp
JCc7CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAKaW5kZXggMGMwMWE3NGE2MzE5MDI2MDA3M2I4MGZm
MTY0ODMxNjQwZTcyMTMzNC4uMmZjNWNlNmZkMWI5ZDI2ZjYwOGRkNWI2ZDM0ZjE5YmNlMTgzNzNm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBKU1Rlc3RD
YWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vbGVhbihib29sIGJvb2xQYXJhbSkKICAgICByZXR1cm4g
IXJldHVybmVkRXhjZXB0aW9uOwogfQogCi1ib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1Jl
cXVpcmVzVGhpc1RvUGFzcyhpbnQgbG9uZ1BhcmFtLCBUZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSkK
K2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGludDMyX3Qg
bG9uZ1BhcmFtLCBUZXN0Tm9kZSogdGVzdE5vZGVQYXJhbSkKIHsKICAgICBpZiAoIWNhbkludm9r
ZUNhbGxiYWNrKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAppbmRleCBh
NzU3YzVjNTdmYWY3N2ZmMWIzNzkxMTM4ZmE4YzMxYWU2ZTFjNTIzLi4xZjI0Mzg1YmU2ZTI5MjU5
ZDQwYmJkMDM1NmU3Mzc3MmM4YjFiZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suaApAQCAtNDYsMTEgKzQ2
LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoTm9QYXJhbSgpOwog
ICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhBcnJheVBhcmFtKFJlZlB0cjxGbG9hdDMyQXJy
YXk+IGFycmF5UGFyYW0pOwogICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhTZXJpYWxpemVk
U2NyaXB0VmFsdWVQYXJhbShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3J6UGFy
YW0sIGNvbnN0IFN0cmluZyYgc3RyQXJnKTsKLSAgICB2aXJ0dWFsIGludCBjYWxsYmFja1dpdGhO
b25Cb29sUmV0dXJuVHlwZShjb25zdCBTdHJpbmcmIHN0ckFyZyk7Ci0gICAgdmlydHVhbCBpbnQg
Y3VzdG9tQ2FsbGJhY2soQ2xhc3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7
CisgICAgdmlydHVhbCBpbnQzMl90IGNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKGNvbnN0
IFN0cmluZyYgc3RyQXJnKTsKKyAgICB2aXJ0dWFsIGludDMyX3QgY3VzdG9tQ2FsbGJhY2soQ2xh
c3M1KiBjbGFzczVQYXJhbSwgQ2xhc3M2KiBjbGFzczZQYXJhbSk7CiAgICAgdmlydHVhbCBib29s
IGNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBsaXN0UGFy
YW0pOwogICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhCb29sZWFuKGJvb2wgYm9vbFBhcmFt
KTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoaW50IGxvbmdQ
YXJhbSwgVGVzdE5vZGUqIHRlc3ROb2RlUGFyYW0pOworICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFj
a1JlcXVpcmVzVGhpc1RvUGFzcyhpbnQzMl90IGxvbmdQYXJhbSwgVGVzdE5vZGUqIHRlc3ROb2Rl
UGFyYW0pOwogCiBwcml2YXRlOgogICAgIEpTVGVzdENhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNh
bGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rp
b24uY3BwCmluZGV4IGZlOWE5MDUwZDg2MjcxYzYwZmNlM2Y4YzYwMzJiOGFmYzg1NDI0YzMuLjg2
MDlhMTliOWMxNzJhYWZiZjAwYWNhNzFhMzhjZWJkNDBjNjM5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2tGdW5jdGlvbi5jcHAKQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIEpTVGVzdENhbGxi
YWNrRnVuY3Rpb246OmNhbGxiYWNrV2l0aEJvb2xlYW4oYm9vbCBib29sUGFyYW0pCiAgICAgcmV0
dXJuICFyZXR1cm5lZEV4Y2VwdGlvbjsKIH0KIAotYm9vbCBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9u
OjpjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhpbnQgbG9uZ1BhcmFtLCBUZXN0Tm9kZSogdGVz
dE5vZGVQYXJhbSkKK2Jvb2wgSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbjo6Y2FsbGJhY2tSZXF1aXJl
c1RoaXNUb1Bhc3MoaW50MzJfdCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKQog
ewogICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKICAgICAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2tGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uaAppbmRleCA0ZDczOGIzNTNkZDhkYTFjMWQ1ZWI0
OTU0YjZmYWMxNWE5NzM4MjEwLi40ODk5NjhhZTgyYTA5Y2RmODkzNWI3YzYzYThlOTI2Mzg0YTM2
ZTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmgKQEAgLTQ1LDExICs0NSwxMSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhbGxiYWNrV2l0aE5vUGFyYW0oKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQXJyYXlQYXJhbShSZWZQdHI8RmxvYXQzMkFycmF5PiBh
cnJheVBhcmFtKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoU2VyaWFsaXplZFNjcmlw
dFZhbHVlUGFyYW0oUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNyelBhcmFtLCBj
b25zdCBTdHJpbmcmIHN0ckFyZyk7Ci0gICAgdmlydHVhbCBpbnQgY2FsbGJhY2tXaXRoTm9uQm9v
bFJldHVyblR5cGUoY29uc3QgU3RyaW5nJiBzdHJBcmcpOwotICAgIHZpcnR1YWwgaW50IGN1c3Rv
bUNhbGxiYWNrKENsYXNzNSogY2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOworICAg
IHZpcnR1YWwgaW50MzJfdCBjYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShjb25zdCBTdHJp
bmcmIHN0ckFyZyk7CisgICAgdmlydHVhbCBpbnQzMl90IGN1c3RvbUNhbGxiYWNrKENsYXNzNSog
Y2xhc3M1UGFyYW0sIENsYXNzNiogY2xhc3M2UGFyYW0pOwogICAgIHZpcnR1YWwgYm9vbCBjYWxs
YmFja1dpdGhTdHJpbmdMaXN0KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbGlzdFBhcmFtKTsK
ICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQm9vbGVhbihib29sIGJvb2xQYXJhbSk7Ci0g
ICAgdmlydHVhbCBib29sIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGludCBsb25nUGFyYW0s
IFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tSZXF1
aXJlc1RoaXNUb1Bhc3MoaW50MzJfdCBsb25nUGFyYW0sIFRlc3ROb2RlKiB0ZXN0Tm9kZVBhcmFt
KTsKIAogcHJpdmF0ZToKICAgICBKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uKEpTQzo6SlNPYmplY3Qq
IGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAK
aW5kZXggNzY0NmQ1NzlhMmE3NTZhOWM4M2JkNGJkZDczZGRjMTA1NWRmZmMxNy4uZDUxNmE4YzBl
OTFiZmNhY2U5NzNjMjc3YzgzMGJlZTFmZjYzNGRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQu
Y3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAid3RmL3RleHQvQXRvbWljU3RyaW5nLmgiCkBAIC0yMDUsNyArMjA2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudFRhcmdldFByb3RvdHlw
ZUZ1bmN0aW9uSXRlbShFeGVjU3RhdGUqIHMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBpbmRleCA9IHRvVUludDMyKHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gaW5kZXggPSBjb252
ZXJ0PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1w
bC5pdGVtKFdURk1vdmUoaW5kZXgpKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRl
eCA4YTQ2ZTZiN2VkYTcxNjE0N2M2NDFhMDUxMzhmZTg0MjY4Njc4NTQ2Li5hYzQxZGRmYjBkOThm
YmYzM2QxYjM1ZjkxMzc0OTk2NzM5NjBlOTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNw
cApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVk
ZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KQEAgLTI5NCw3ICsy
OTUsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdElu
c3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lTwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IHRvSW50MzIoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byB0ZXN0
UGFyYW0gPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3Jt
YWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRl
cm1pbmlzdGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAppbmRleCAxNWIyMzQ0NDg4ZjIzYWEwNWI3MzMwNTU1
NmFjY2JmZmZjMjVhMGY1Li5lYmQ0ZWE4MGY2MGQ0YmE3OTRjNTdkZWZkZjdkNTllOWQ1OWI2MjNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCkBAIC0xNTgsMTYgKzE1OCwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y1JlYWRvbmx5QXR0cihFeGVjU3RhdGUqIHN0YQogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBn
bG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRl
dGVybWluaXN0aWNSZWFkb25seUF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgaW50IG1lbW9p
emVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNSZWFkb25s
eUF0dHIoKTsKLSAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PGlu
dD4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CisgICAg
ICAgIGludDMyX3QgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkubm9uZGV0
ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpOworICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVt
b2l6ZWRET01SZXN1bHQ8aW50MzJfdD4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1v
aXplZFJlc3VsdCwgMCk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobWVtb2l6
ZWRSZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAg
fQogCiAgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7Ci0gICAgICAgIGludCBtZW1vaXpl
ZFJlc3VsdDsKKyAgICAgICAgaW50MzJfdCBtZW1vaXplZFJlc3VsdDsKICAgICAgICAgTWVtb2l6
ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVz
dWx0QmFzZT4oKTsKLSAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88aW50Piht
ZW1vaXplZFJlc3VsdCkpIHsKKyAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88
aW50MzJfdD4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBkMjk2OGNkMDg4ZGI2M2Q0
NDE1Yjg0MTg3N2M3YjBiNTBiZjIxYjg1Li5iZmMxNjI1NThjZDlhYWJjODFkNzUzMGJmMWQxODY1
MTFlYzg3ODZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMjY5MCw3ICsyNjkwLDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1YKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQ4KHN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwu
c2V0Qnl0ZUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMjcwNyw3ICsyNzA3LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlMKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib2N0ZXRBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvVUlu
dDgoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0T2N0ZXRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTI3
MjQsNyArMjcyNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTCiAgICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInNob3J0QXR0ciIpOwogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB0b0ludDE2KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CkBAIC0yNzQxLDcgKzI3NDEsNyBAQCBib29sIHNldEpTVGVzdE9iakNsYW1wZWRT
aG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbgog
ICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJj
bGFtcGVkU2hvcnRBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MTYoc3RhdGUsIHZhbHVlLCBD
bGFtcCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2
YWx1ZSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDbGFtcGVkU2hvcnRBdHRyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKQEAgLTI3NTgsNyArMjc1OCw3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
RW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1CiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgImVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDE2KHN0
YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMjc3
NSw3ICsyNzc1LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEUKICAgICAgICAgcmV0dXJuIHRo
cm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIi
KTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdG9VSW50MTYoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRB
dHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTI3OTIsNyArMjc5Miw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgImxvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0TG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMjgwOSw3ICsyODA5
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0xvbmdBdHRyIik7CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHRvSW50NjQoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKQEAgLTI4MjYsNyArMjgyNiw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlCiAgICAg
ICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2ln
bmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvVUludDY0KHN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0
X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXRVbnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0yOTgzLDcg
KzI5ODMsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgICAgICByZXR1cm4gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIi
KTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKQEAgLTMwMDAsNyArMzAwMCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAicmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9VSW50
MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKQEAgLTMwNjgsNyArMzA2OCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAg
ICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJl
ZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudEludGVncmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTMxNTksNyAr
MzE1OSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgICAgIHJldHVybiB0aHJvd1Nl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
Iik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzE3Niw3ICszMTc2LDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSIp
OwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uV2l0aE1lc3NhZ2UoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzE5NCw3ICszMTk0
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwpAQCAtMzIxMyw3ICszMjEzLDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7Ci0gICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRp
b25XaXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwpAQCAtMzMyOCw3ICszMzI4
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKCpzdGF0ZSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzM0NSw3ICszMzQ1LDcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhB
dHRyaWJ1dGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRXaXRoQ2Fs
bFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgqc3RhdGUsIGFjdGl2ZURPTVdpbmRvdyhz
dGF0ZSksIGZpcnN0RE9NV2luZG93KHN0YXRlKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAt
MzUxMSw3ICszNTExLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KICAgICAgICAgcmV0dXJu
IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRy
MSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0
cjEoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzUzMCw3ICszNTMwLDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgRW4KICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMy
KHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpA
QCAtMzU0OSw3ICszNTQ5LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW4KICAgICAgICAgcmV0
dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxB
dHRyMyIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFs
QXR0cjMoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtMzY1Nyw3ICszNjU3LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEoKICAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAic3RyYXdiZXJyeSIpOwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0b0ludDMyKHN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zNjkxLDcg
KzM2OTEsNyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZQogICAgICAgICByZXR1cm4gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpZCIpOwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB0
b0ludDMyKHN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldElkKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTM3MjEs
NyArMzcyMSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAgICAgICAgcmV0dXJuIHRocm93
U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nU2V0dGFibGVB
dHRyaWJ1dGUiKTsKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9JbnQzMihzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOworICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zNzU1LDcg
KzM3NTUsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgICAgICByZXR1cm4gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
KyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TnVsbGFibGVTdHJpbmdWYWx1
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CkBAIC0zODY1LDcgKzM4NjUsNyBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvbgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKLSAgICBhdXRvIHRlc3RQYXJhbSA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGlu
dDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKQEAgLTM5MTQsNyArMzkxNCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0
aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtMzk0OSw3ICszOTQ5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVN
ZXRob2RXaXRoQXJncyhFeGVjU3QKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byBieXRlQXJnID0gdG9JbnQ4KHN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gYnl0ZUFyZyA9IGNvbnZlcnQ8
aW50OF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtMzk4NCw3ICszOTg0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0
TWV0aG9kV2l0aEFyZ3MoRXhlY1MKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7Ci0gICAgYXV0byBvY3RldEFyZyA9IHRvVUludDgoc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBvY3RldEFyZyA9IGNvbnZl
cnQ8dWludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyQXJnID0gc3Rh
dGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKQEAgLTQwMTksNyArNDAxOSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25M
b25nTWV0aG9kV2l0aEFyZ3MoRXhlY1N0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBsb25nQXJnID0gY29u
dmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBz
dGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwpAQCAtNDA1NCw3ICs0MDU0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk9iak1ldGhvZFdpdGhBcmdzKEV4ZWNTdGEKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBsb25nQXJnID0gdG9JbnQzMihzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGxvbmdBcmcgPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9
IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7CkBAIC00MTQzLDcgKzQxNDMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGluZGV4ID0gdG9VSW50MzIoc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBpbmRleCA9IGNv
bnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhv
ZChXVEZNb3ZlKGluZGV4KSkpOwpAQCAtNDE3Nyw3ICs0MTc3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFJldHVybmluZ1Nl
cXVlbmNlKEUKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
Ci0gICAgYXV0byBsb25nQXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBO
b3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm1ldGhvZFJldHVybmluZ1NlcXVlbmNl
KFdURk1vdmUobG9uZ0FyZykpKTsKQEAgLTQ1NDMsNyArNDU0Myw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBcmcoRXhlCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxBcmciKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gb3B0ID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDog
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxBcmcoV1RGTW92ZShvcHQpKTsKQEAgLTQ1NTgsNyArNDU1OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmRECiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJtZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0
VmFsdWUiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiB0
b0ludDMyKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNp
b24pOworICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyA2
NjYgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKG9wdCkp
OwpAQCAtNDU3NSwxMCArNDU3NSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG5vbk9w
dCA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
CisgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0
aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kT3B0aW9uYWxBcmcoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwpAQCAt
NDU5NSwxMyArNDU5NSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIG5vbk9wdCA9IHRv
SW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAg
YXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAg
ICBhdXRvIG9wdDEgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFs
PGludD4oKSA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgYXV0byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBvcHQyID0gc3RhdGUtPmFyZ3VtZW50
KDIpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiB0b0ludDMyKHN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gb3B0
MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4o
KSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiks
IE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKFdURk1vdmUo
bm9uT3B0KSwgV1RGTW92ZShvcHQxKSwgV1RGTW92ZShvcHQyKSk7CkBAIC00Nzk2LDcgKzQ3OTYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbgogICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmciKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
bnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxsb25n
IGxvbmc+KCkgOiB0b0ludDY0KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOworICAgIGF1dG8gbnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ2NF90PigpIDogY29udmVydDxpbnQ2NF90Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxM
b25nTG9uZyhXVEZNb3ZlKG51bWJlcikpOwpAQCAtNDgxMSw3ICs0ODExLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbExvbmdMb24KICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgIm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvIik7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG51bWJlciA9
IHRvSW50NjQoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Cisg
ICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PGludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvKFdURk1vdmUobnVtYmVy
KSk7CkBAIC00ODI2LDcgKzQ4MjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZQogICAgICAg
ICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibWV0aG9kV2l0
aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVuc2lnbmVkIGxvbmcgbG9uZz4oKSA6IHRvVUludDY0
KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGF1dG8gbnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRp
b25hbDx1aW50NjRfdD4oKSA6IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmco
V1RGTW92ZShudW1iZXIpKTsKQEAgLTQ4NDEsNyArNDg0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxV
bnNpZ25lCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJtZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvIik7CiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG51bWJlciA9
IHRvVUludDY0KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwor
ICAgIGF1dG8gbnVtYmVyID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhXVEZN
b3ZlKG51bWJlcikpOwpAQCAtNDk4OSw3ICs0OTg5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0EKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAg
YXV0byBub25DYWxsYmFjayA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7CisgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50
KDEpLmlzT2JqZWN0KCkpKQpAQCAtNTA0NCw3ICs1MDQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0EKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0g
ICAgYXV0byBub25DYWxsYmFjayA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8aW50MzJf
dD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3Vt
ZW50KDEpLmlzRnVuY3Rpb24oKSkpCkBAIC01MTY5LDcgKzUxNjksNyBAQCBzdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDIoRXhlY1N0YQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBl
ZChzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDogdG9JbnQzMihzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGxv
bmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMy
X3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdB
cmcpKTsKQEAgLTUyMDMsNyArNTIwMyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNChFeGVjU3RhCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1dG8gbG9u
Z0FyZyA9IHRvSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7CisgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUobG9uZ0FyZykpOwpAQCAt
NTMwNSw3ICs1MzA1LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMChFeGVjU3QKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBhcnJheUFyZyA9IHRv
TmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGF1
dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90PihzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwpAQCAtNTQwOCw3ICs1NDA4LDcgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoT3B0aW8KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBhdXRvIGxvbmdBcmcgPSBzdGF0
ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IHRvSW50MzIo
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Cisg
ICAgYXV0byBsb25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRp
b25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVy
KFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShsb25nQXJnKSk7CkBAIC01NDM3LDcgKzU0MzcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rp
b25DbGFzc01ldGhvZChFeGVjU3RhdGUqCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKEV4ZWNT
dGF0ZSogc3RhdGUpCiB7Ci0gICAgYXV0byBhcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IE9wdGlvbmFsPGludD4oKSA6IHRvSW50MzIoc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgYXV0byBhcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdURk1vdmUo
YXJnKSkpOwpAQCAtNTQ1Niw3ICs1NDU2LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExKEV4ZWMKIHsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwotICAgIGF1dG8gYXJnID0gdG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGFyZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1v
dmUoYXJnKSk7CkBAIC01NTA4LDEwICs1NTA4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVj
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1
dG8gb2JqQXJnc1Nob3J0ID0gdG9VSW50MTYoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgQ2xh
bXApOworICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBhdXRvIG9iakFyZ3NMb25nID0gdG9VSW50MzIoc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgxKSwgQ2xhbXApOworICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRoQ2xhbXAoV1RGTW92ZShvYmpBcmdz
U2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7CkBAIC01NTI4LDEwICs1NTI4LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFz
c01ldGhvZFdpdGhFbmZvcmNlUmFuCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwotICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gdG9VSW50MTYoc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgRW5mb3JjZVJhbmdlKTsKKyAgICBhdXRvIG9iakFyZ3NTaG9ydCA9
IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBFbmZvcmNlUmFu
Z2UpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gb2JqQXJnc0xv
bmcgPSB0b1VJbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBFbmZvcmNlUmFuZ2UpOwor
ICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgxKSwgRW5mb3JjZVJhbmdlKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFyZ3NT
aG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsKQEAgLTU1NDgsNyArNTU0OCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoVW5zaWduZWRMb25nU2VxCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwotICAgIGF1dG8gdW5zaWduZWRMb25nU2VxdWVuY2UgPSB0b05hdGl2ZUFycmF5
PHVuc2lnbmVkPihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKKyAgICBhdXRvIHVuc2lnbmVk
TG9uZ1NlcXVlbmNlID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UoV1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkp
OwpAQCAtNTYwNywxMCArNTYwNywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKLSAgICBhdXRvIGFycmF5
QXJnID0gdG9OYXRpdmVBcnJheTx1bnNpZ25lZD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7
CisgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1
dG8gbnVsbGFibGVBcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMSkpOworICAgIGF1dG8gbnVsbGFibGVBcnJheUFyZyA9IHRvTmF0aXZlQXJy
YXk8dWludDMyX3Q+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNl
cXVlbmNlKFdURk1vdmUoYXJyYXlBcmcpLCBXVEZNb3ZlKG51bGxhYmxlQXJyYXlBcmcpKTsKQEAg
LTU2MjcsMTAgKzU2MjcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGEKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7Ci0gICAgYXV0byBhcnJheUFyZyA9
IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAg
IGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90PihzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvIG51
bGxhYmxlQXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkPihzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDEpKTsKKyAgICBhdXRvIG51bGxhYmxlQXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVp
bnQzMl90PihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5j
ZTIoV1RGTW92ZShhcnJheUFyZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFyZykpOwpAQCAtNTc3
Myw3ICs1NzczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblN0cmljdEZ1bmN0aW9uKEV4ZWNTdGF0ZSoKICAgICBhdXRvIGEgPSBjb252
ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgU2hvdWxkQWxsb3dOb25GaW5p
dGU6Olllcyk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBiID0g
dG9JbnQzMihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIGIgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpLCBO
b3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLnN0cmljdEZ1bmN0aW9uKFdURk1vdmUoc3Ry
KSwgV1RGTW92ZShhKSwgV1RGTW92ZShiKSwgZWMpKTsKQEAgLTU3OTgsNyArNTc5OCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJp
Y3RGdW5jdGlvbldpdGhTZXF1ZW5jCiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3Jh
cHBlZChzdGF0ZS0+YXJndW1lbnQoMCkpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOwotICAgIGF1dG8gYSA9IHRvTmF0
aXZlQXJyYXk8dW5zaWduZWQ+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkpOworICAgIGF1dG8g
YSA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNC
b29sZWFuKGltcGwuc3RyaWN0RnVuY3Rpb25XaXRoU2VxdWVuY2UoKm9iakFyZywgV1RGTW92ZShh
KSwgZWMpKTsKQEAgLTU4MjMsNyArNTgyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpY3RGdW5jdGlvbldpdGhBcnJheShFCiAg
ICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMCkp
OwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUpOwotICAgIGF1dG8gYXJyYXkgPSB0b05hdGl2ZUFycmF5PGludD4oc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgxKSk7CisgICAgYXV0byBhcnJheSA9IHRvTmF0aXZlQXJyYXk8aW50
MzJfdD4oc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5zdHJpY3RGdW5j
dGlvbldpdGhBcnJheSgqb2JqQXJnLCBXVEZNb3ZlKGFycmF5KSwgZWMpKTsKQEAgLTU5MDgsNyAr
NTkwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25BbnkoRXhlY1N0YXRlKiBzdGF0ZSkKICAgICBhdXRvIGEgPSBjb252ZXJ0PGZsb2F0
Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byBiID0gdG9JbnQzMihz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIGIg
PSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252
ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmFueShX
VEZNb3ZlKGEpLCBXVEZNb3ZlKGIpKTsKQEAgLTU5OTAsNyArNTk5MCw3IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1
bmN0aW9uV2l0aE9wCiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJ0ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQiKTsK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1dG8g
YSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50PigpIDog
dG9JbnQzMihzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKKyAgICBhdXRvIGEgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9w
dGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRB
cmd1bWVudChXVEZNb3ZlKGEpLCBEZWZlcnJlZFdyYXBwZXIoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmNwcAppbmRleCA4NjI4MTU4OGExMDEyNzJlNDA0Yzk2OTVkM2Mw
M2NjYTU4YWMyN2Q1Li4wODc2Zjg1ODZiOTk1YzUyNjZhNzE3MTRhNDU2ZDI1ZDNiZTgzYTMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCkBAIC0xMjAs
NyArMTIwLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzNChFeGVjU3RhdGUqIHMKIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUoRXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7Ci0gICAgVmVjdG9y
PGludD4gbG9uZ0FyZ3MgPSB0b05hdGl2ZUFyZ3VtZW50czxpbnQ+KHN0YXRlLCAwKTsKKyAgICBW
ZWN0b3I8aW50MzJfdD4gbG9uZ0FyZ3MgPSB0b05hdGl2ZUFyZ3VtZW50czxpbnQzMl90PihzdGF0
ZSwgMCk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgUmVmUHRyPFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzPiBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6Y3JlYXRlKGxvbmdBcmdzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCmluZGV4IGExMDg3NGEzNzFi
ZGE1OWRlZTZmNjEyNDg1NjhjYmVhMzdkYzJkNTUuLjhhOTYzNWEwNTY1ZDUxM2M1NzEzYzgzNmUw
ZjExZjNiM2JjZjJhMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcApAQCAtMzU0LDcgKzM1NCw3IEBA
IGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdG9VSW50NjQoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTM4OCw3ICszODgsNyBAQCBib29sIHNldEpTVGVz
dFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdAogICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHRvSW50MzIoc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwpAQCAtNDA2LDcgKzQwNiw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvSW50MzIoc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVj
KTsKQEAgLTQ2NCw3ICs0NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKEV4ZWNTdGF0ZSogc3RhdAogICAgICAgICBy
ZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJmdW5jIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVm
czo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8geCA9IHRvTmF0aXZlQXJyYXk8aW50PihzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsK
KyAgICBhdXRvIHggPSB0b05hdGl2ZUFycmF5PGludDMyX3Q+KHN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZnVuYyhX
VEZNb3ZlKHgpKTsKQEAgLTU0NCwxMCArNTQ0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXAoRXhlY1N0
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwotICAgIGF1
dG8gYXJnMSA9IHRvVUludDY0KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKKyAg
ICBhdXRvIGFyZzEgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8gYXJn
MiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dW5zaWduZWQg
bG9uZyBsb25nPigpIDogdG9VSW50NjQoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KSwgQ2xhbXApOworICAgIGF1dG8gYXJnMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgQ2xhbXApOwogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwuZnVuY1dpdGhDbGFtcChXVEZNb3ZlKGFyZzEpLCBXVEZNb3Zl
KGFyZzIpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>